diff --git a/com.oracle.truffle.r.library/src/com/oracle/truffle/r/library/fastrGrid/LConvert.java b/com.oracle.truffle.r.library/src/com/oracle/truffle/r/library/fastrGrid/LConvert.java
index 134def4c4e4395475982a20b3d7069f3a79e9522..ce0d219dcebae5d76b10c51eb442a6eb1fd2c28a 100644
--- a/com.oracle.truffle.r.library/src/com/oracle/truffle/r/library/fastrGrid/LConvert.java
+++ b/com.oracle.truffle.r.library/src/com/oracle/truffle/r/library/fastrGrid/LConvert.java
@@ -15,6 +15,7 @@ import static com.oracle.truffle.r.library.fastrGrid.Unit.NATIVE;
 import static com.oracle.truffle.r.library.fastrGrid.Unit.NPC;
 import static com.oracle.truffle.r.library.fastrGrid.Unit.isArithmeticUnit;
 import static com.oracle.truffle.r.library.fastrGrid.Unit.isListUnit;
+import static com.oracle.truffle.r.library.fastrGrid.Unit.isSimpleUnit;
 import static com.oracle.truffle.r.nodes.builtin.CastBuilder.Predef.abstractVectorValue;
 import static com.oracle.truffle.r.nodes.builtin.CastBuilder.Predef.numericValue;
 
@@ -64,7 +65,10 @@ public abstract class LConvert extends RExternalBuiltinNode.Arg4 {
         int length = unitLength.execute(units);
         double[] result = new double[length];
 
-        RAbstractIntVector unitIds = GridUtils.asIntVector(units.getAttr(Unit.VALID_UNIT_ATTR));
+        RAbstractIntVector unitIds = null;
+        if (isSimpleUnit(units)) {
+            unitIds = GridUtils.asIntVector(units.getAttr(Unit.VALID_UNIT_ATTR));
+        }
         boolean fromUnitIsSimple = !isArithmeticUnit(units) && !isListUnit(units);
 
         for (int i = 0; i < length; i++) {
@@ -75,7 +79,10 @@ public abstract class LConvert extends RExternalBuiltinNode.Arg4 {
             double vpToSize = axisTo.isHorizontal() ? vpTransform.size.getWidth() : vpTransform.size.getHeight();
             double vpFromSize = axisFrom.isHorizontal() ? vpTransform.size.getWidth() : vpTransform.size.getHeight();
             int unitTo = unitToVec.getDataAt(i % unitToVec.getLength());
-            int fromUnitId = unitIds.getDataAt(i % unitIds.getLength());
+            int fromUnitId = -1;    // invalid, and definitely not relative unit
+            if (unitIds != null) {
+                fromUnitId = unitIds.getDataAt(i % unitIds.getLength());
+            }
 
             // actual conversion:
             // if the units are both relative, we are converting compatible axes and the vpSize for
diff --git a/com.oracle.truffle.r.library/src/com/oracle/truffle/r/library/fastrGrid/LValidUnit.java b/com.oracle.truffle.r.library/src/com/oracle/truffle/r/library/fastrGrid/LValidUnit.java
index e7d405b43ff27c58fa212e8d6ebcfb783e51280d..a4080e1ae7d1e2d94707fb7da562bade0c778e64 100644
--- a/com.oracle.truffle.r.library/src/com/oracle/truffle/r/library/fastrGrid/LValidUnit.java
+++ b/com.oracle.truffle.r.library/src/com/oracle/truffle/r/library/fastrGrid/LValidUnit.java
@@ -59,7 +59,7 @@ public abstract class LValidUnit extends RExternalBuiltinNode.Arg1 {
     private int convertSingleSlowPath(String name) {
         Integer result = NamesHolder.NAMES.get(name);
         if (result == null) {
-            error(Message.GENERIC, "invalid unit");
+            throw error(Message.GENERIC, "invalid unit");
         }
         return result;
     }