diff --git a/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/ffi/AsCharNode.java b/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/ffi/AsCharNode.java
index 95b124519c139f21b75544d9bd0ed43123c65a5b..8f60448bc218234d188e7b2b0b017e328c04e7e0 100644
--- a/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/ffi/AsCharNode.java
+++ b/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/ffi/AsCharNode.java
@@ -31,6 +31,7 @@ import com.oracle.truffle.r.runtime.RInternalError;
 import com.oracle.truffle.r.runtime.RRuntime;
 import com.oracle.truffle.r.runtime.data.RSymbol;
 import com.oracle.truffle.r.runtime.data.RTypesFlatLayout;
+import com.oracle.truffle.r.runtime.data.model.RAbstractAtomicVector;
 import com.oracle.truffle.r.runtime.data.model.RAbstractStringVector;
 import com.oracle.truffle.r.runtime.ffi.CharSXPWrapper;
 
@@ -38,6 +39,8 @@ import com.oracle.truffle.r.runtime.ffi.CharSXPWrapper;
 public abstract class AsCharNode extends FFIUpCallNode.Arg1 {
     private static final CharSXPWrapper CharSXPWrapper_NA = CharSXPWrapper.create(RRuntime.STRING_NA);
 
+    public abstract CharSXPWrapper execute(Object obj);
+
     @Specialization
     protected CharSXPWrapper asChar(CharSXPWrapper obj) {
         return obj;
@@ -57,10 +60,9 @@ public abstract class AsCharNode extends FFIUpCallNode.Arg1 {
         return CharSXPWrapper.create(obj.getName());
     }
 
-    @Specialization(guards = "isVectorAtomicNodeLG0.execute(obj)")
-    protected CharSXPWrapper asChar(Object obj,
-                    @Cached("createNonPreserving()") CastStringNode castStringNode,
-                    @SuppressWarnings("unused") @Cached("create()") IsVectorAtomicNodeLG0 isVectorAtomicNodeLG0) {
+    @Specialization(guards = "obj.getLength() > 0")
+    protected CharSXPWrapper asChar(RAbstractAtomicVector obj, //
+                    @Cached("createNonPreserving()") CastStringNode castStringNode) {
         Object castObj = castStringNode.executeString(obj);
         if (castObj instanceof String) {
             return CharSXPWrapper.create((String) castObj);
@@ -76,4 +78,7 @@ public abstract class AsCharNode extends FFIUpCallNode.Arg1 {
         return CharSXPWrapper_NA;
     }
 
+    public static AsCharNode create() {
+        return AsCharNodeGen.create();
+    }
 }
diff --git a/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/ffi/AsIntegerNode.java b/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/ffi/AsIntegerNode.java
index b2cb77d981e2e68b5664679817b3c804eac5cd43..a9cc0ef6bb481f6ea2e3e56148f86b71b03f123c 100644
--- a/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/ffi/AsIntegerNode.java
+++ b/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/ffi/AsIntegerNode.java
@@ -30,6 +30,7 @@ import com.oracle.truffle.r.nodes.unary.CastIntegerNode;
 import com.oracle.truffle.r.runtime.RInternalError;
 import com.oracle.truffle.r.runtime.RRuntime;
 import com.oracle.truffle.r.runtime.data.RTypesFlatLayout;
+import com.oracle.truffle.r.runtime.data.model.RAbstractAtomicVector;
 import com.oracle.truffle.r.runtime.data.model.RAbstractDoubleVector;
 import com.oracle.truffle.r.runtime.data.model.RAbstractIntVector;
 
@@ -40,6 +41,8 @@ import com.oracle.truffle.r.runtime.data.model.RAbstractIntVector;
 @TypeSystemReference(RTypesFlatLayout.class)
 public abstract class AsIntegerNode extends FFIUpCallNode.Arg1 {
 
+    public abstract int execute(Object obj);
+
     @Specialization
     protected int asInteger(int obj) {
         return obj;
@@ -66,10 +69,9 @@ public abstract class AsIntegerNode extends FFIUpCallNode.Arg1 {
         return obj.getDataAt(0);
     }
 
-    @Specialization(guards = "isVectorAtomicNodeLG0.execute(obj)")
-    protected int asReal(Object obj,
-                    @Cached("createNonPreserving()") CastIntegerNode castIntegerNode,
-                    @SuppressWarnings("unused") @Cached("create()") IsVectorAtomicNodeLG0 isVectorAtomicNodeLG0) {
+    @Specialization(guards = "obj.getLength() > 0")
+    protected int asReal(RAbstractAtomicVector obj,
+                    @Cached("createNonPreserving()") CastIntegerNode castIntegerNode) {
         Object castObj = castIntegerNode.executeInt(obj);
         if (castObj instanceof Integer) {
             return (Integer) castObj;
@@ -85,4 +87,8 @@ public abstract class AsIntegerNode extends FFIUpCallNode.Arg1 {
         return RRuntime.INT_NA;
     }
 
+    public static AsIntegerNode create() {
+        return AsIntegerNodeGen.create();
+    }
+
 }
diff --git a/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/ffi/AsLogicalNode.java b/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/ffi/AsLogicalNode.java
index bb67a13e0314bfc8957312e46778c31d9d2f2ffd..b56d55b6e4a4d86cd99ffd88bdb5d93f003aad76 100644
--- a/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/ffi/AsLogicalNode.java
+++ b/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/ffi/AsLogicalNode.java
@@ -24,19 +24,20 @@ package com.oracle.truffle.r.nodes.ffi;
 
 import com.oracle.truffle.api.dsl.Cached;
 import com.oracle.truffle.api.dsl.Fallback;
-import com.oracle.truffle.api.dsl.ImportStatic;
 import com.oracle.truffle.api.dsl.Specialization;
 import com.oracle.truffle.api.dsl.TypeSystemReference;
 import com.oracle.truffle.r.nodes.unary.CastLogicalNode;
 import com.oracle.truffle.r.runtime.RInternalError;
 import com.oracle.truffle.r.runtime.RRuntime;
 import com.oracle.truffle.r.runtime.data.RTypesFlatLayout;
+import com.oracle.truffle.r.runtime.data.model.RAbstractAtomicVector;
 import com.oracle.truffle.r.runtime.data.model.RAbstractLogicalVector;
 
 @TypeSystemReference(RTypesFlatLayout.class)
-@ImportStatic(IsVectorAtomicNodeLG0.class)
 public abstract class AsLogicalNode extends FFIUpCallNode.Arg1 {
 
+    public abstract int execute(Object obj);
+
     @Specialization
     protected int asLogical(byte b) {
         return b;
@@ -50,10 +51,9 @@ public abstract class AsLogicalNode extends FFIUpCallNode.Arg1 {
         return obj.getDataAt(0);
     }
 
-    @Specialization(guards = "isVectorAtomicNodeLG0.execute(obj)")
-    protected int asLogical(Object obj,
-                    @Cached("createNonPreserving()") CastLogicalNode castLogicalNode,
-                    @SuppressWarnings("unused") @Cached("create()") IsVectorAtomicNodeLG0 isVectorAtomicNodeLG0) {
+    @Specialization(guards = "obj.getLength() > 0")
+    protected int asLogical(RAbstractAtomicVector obj,
+                    @Cached("createNonPreserving()") CastLogicalNode castLogicalNode) {
         Object castObj = castLogicalNode.execute(obj);
         if (castObj instanceof Byte) {
             return (byte) castObj;
@@ -69,4 +69,8 @@ public abstract class AsLogicalNode extends FFIUpCallNode.Arg1 {
         return RRuntime.INT_NA;
     }
 
+    public static AsLogicalNode create() {
+        return AsLogicalNodeGen.create();
+    }
+
 }
diff --git a/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/ffi/AsRealNode.java b/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/ffi/AsRealNode.java
index 27502aea2ca1bb55f6840e94bb4fec5604f4ca46..0f977902306076282c0a669aa56fdbe7ee609505 100644
--- a/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/ffi/AsRealNode.java
+++ b/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/ffi/AsRealNode.java
@@ -14,13 +14,13 @@ package com.oracle.truffle.r.nodes.ffi;
 
 import com.oracle.truffle.api.dsl.Cached;
 import com.oracle.truffle.api.dsl.Fallback;
-import com.oracle.truffle.api.dsl.ImportStatic;
 import com.oracle.truffle.api.dsl.Specialization;
 import com.oracle.truffle.api.dsl.TypeSystemReference;
 import com.oracle.truffle.r.nodes.unary.CastDoubleNode;
 import com.oracle.truffle.r.runtime.RInternalError;
 import com.oracle.truffle.r.runtime.RRuntime;
 import com.oracle.truffle.r.runtime.data.RTypesFlatLayout;
+import com.oracle.truffle.r.runtime.data.model.RAbstractAtomicVector;
 import com.oracle.truffle.r.runtime.data.model.RAbstractDoubleVector;
 import com.oracle.truffle.r.runtime.data.model.RAbstractIntVector;
 
@@ -30,7 +30,6 @@ import com.oracle.truffle.r.runtime.data.model.RAbstractIntVector;
  * return {@code NA}.
  */
 @TypeSystemReference(RTypesFlatLayout.class)
-@ImportStatic(IsVectorAtomicNodeLG0.class)
 public abstract class AsRealNode extends FFIUpCallNode.Arg1 {
 
     public abstract double execute(Object obj);
@@ -61,10 +60,9 @@ public abstract class AsRealNode extends FFIUpCallNode.Arg1 {
         return obj.getDataAt(0);
     }
 
-    @Specialization(guards = "isVectorAtomicNodeLG0.execute(obj)")
-    protected double asReal(Object obj,
-                    @Cached("createNonPreserving()") CastDoubleNode castDoubleNode,
-                    @SuppressWarnings("unused") @Cached("create()") IsVectorAtomicNodeLG0 isVectorAtomicNodeLG0) {
+    @Specialization(guards = "obj.getLength() > 0")
+    protected double asReal(RAbstractAtomicVector obj,
+                    @Cached("createNonPreserving()") CastDoubleNode castDoubleNode) {
         Object castObj = castDoubleNode.executeDouble(obj);
         if (castObj instanceof Double) {
             return (double) castObj;
@@ -80,4 +78,7 @@ public abstract class AsRealNode extends FFIUpCallNode.Arg1 {
         return RRuntime.DOUBLE_NA;
     }
 
+    public static AsRealNode create() {
+        return AsRealNodeGen.create();
+    }
 }
diff --git a/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/ffi/IsVectorAtomicNodeLG0.java b/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/ffi/IsVectorAtomicNodeLG0.java
deleted file mode 100644
index 337982d1e8c35e832edda26f419bd53d31cf03d6..0000000000000000000000000000000000000000
--- a/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/ffi/IsVectorAtomicNodeLG0.java
+++ /dev/null
@@ -1,87 +0,0 @@
-/*
- * Copyright (c) 2014, 2017, Oracle and/or its affiliates. All rights reserved.
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * This code is free software; you can redistribute it and/or modify it
- * under the terms of the GNU General Public License version 2 only, as
- * published by the Free Software Foundation.
- *
- * This code is distributed in the hope that it will be useful, but WITHOUT
- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
- * version 2 for more details (a copy is included in the LICENSE file that
- * accompanied this code).
- *
- * You should have received a copy of the GNU General Public License version
- * 2 along with this work; if not, write to the Free Software Foundation,
- * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
- *
- * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
- * or visit www.oracle.com if you need additional information or have any
- * questions.
- */
-package com.oracle.truffle.r.nodes.ffi;
-
-import com.oracle.truffle.api.dsl.Fallback;
-import com.oracle.truffle.api.dsl.Specialization;
-import com.oracle.truffle.api.dsl.TypeSystemReference;
-import com.oracle.truffle.api.nodes.Node;
-import com.oracle.truffle.r.runtime.data.RTypesFlatLayout;
-import com.oracle.truffle.r.runtime.data.model.RAbstractComplexVector;
-import com.oracle.truffle.r.runtime.data.model.RAbstractDoubleVector;
-import com.oracle.truffle.r.runtime.data.model.RAbstractIntVector;
-import com.oracle.truffle.r.runtime.data.model.RAbstractLogicalVector;
-import com.oracle.truffle.r.runtime.data.model.RAbstractStringVector;
-
-/**
- * Implements the GNU R function {@code isVectorAtomic} and checks whether length is > 0.
- */
-@TypeSystemReference(RTypesFlatLayout.class)
-public abstract class IsVectorAtomicNodeLG0 extends Node {
-    public abstract boolean execute(Object obj);
-
-    @Specialization
-    protected boolean isVectorAtomicNode(@SuppressWarnings("unused") Byte obj) {
-        return true;
-    }
-
-    @Specialization
-    protected boolean isVectorAtomicNode(@SuppressWarnings("unused") String obj) {
-        return true;
-    }
-
-    @Specialization
-    protected boolean isVectorAtomicNode(RAbstractLogicalVector obj) {
-        return obj.getLength() > 0;
-    }
-
-    @Specialization
-    protected boolean isVectorAtomicNode(RAbstractIntVector obj) {
-        return obj.getLength() > 0;
-    }
-
-    @Specialization
-    protected boolean isVectorAtomicNode(RAbstractDoubleVector obj) {
-        return obj.getLength() > 0;
-    }
-
-    @Specialization
-    protected boolean isVectorAtomicNode(RAbstractStringVector obj) {
-        return obj.getLength() > 0;
-    }
-
-    @Specialization
-    protected boolean isVectorAtomicNode(RAbstractComplexVector obj) {
-        return obj.getLength() > 0;
-    }
-
-    @Fallback
-    protected boolean isVectorAtomicNode(@SuppressWarnings("unused") Object obj) {
-        return false;
-    }
-
-    public static IsVectorAtomicNodeLG0 create() {
-        return IsVectorAtomicNodeLG0NodeGen.create();
-    }
-
-}
diff --git a/com.oracle.truffle.r.runtime/src/com/oracle/truffle/r/runtime/data/RTypesFlatLayout.java b/com.oracle.truffle.r.runtime/src/com/oracle/truffle/r/runtime/data/RTypesFlatLayout.java
index ed769f7b79bb5da49e260d32d43b057406d81318..b0c6f4bbb0b8657cf152bd2be46dd695523c0903 100644
--- a/com.oracle.truffle.r.runtime/src/com/oracle/truffle/r/runtime/data/RTypesFlatLayout.java
+++ b/com.oracle.truffle.r.runtime/src/com/oracle/truffle/r/runtime/data/RTypesFlatLayout.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2013, 2016, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2013, 2017, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -28,6 +28,7 @@ import com.oracle.truffle.api.dsl.TypeCheck;
 import com.oracle.truffle.api.dsl.TypeSystem;
 import com.oracle.truffle.api.dsl.internal.DSLOptions;
 import com.oracle.truffle.api.dsl.internal.DSLOptions.DSLGenerator;
+import com.oracle.truffle.r.runtime.data.model.RAbstractAtomicVector;
 import com.oracle.truffle.r.runtime.data.model.RAbstractComplexVector;
 import com.oracle.truffle.r.runtime.data.model.RAbstractContainer;
 import com.oracle.truffle.r.runtime.data.model.RAbstractDoubleVector;
@@ -300,4 +301,77 @@ public class RTypesFlatLayout {
     public static RMissing toRMissing(@SuppressWarnings("unused") REmpty empty) {
         return RMissing.instance;
     }
+
+    // RAbstractAtomicVector
+
+    @ImplicitCast
+    public static RAbstractAtomicVector toAbstractAtomicVector(int value) {
+        return RDataFactory.createIntVectorFromScalar(value);
+    }
+
+    @ImplicitCast
+    public static RAbstractAtomicVector toAbstractAtomicVector(double value) {
+        return RDataFactory.createDoubleVectorFromScalar(value);
+    }
+
+    @ImplicitCast
+    public static RAbstractAtomicVector toAbstractAtomicVector(RRaw value) {
+        return RDataFactory.createRawVectorFromScalar(value);
+    }
+
+    @ImplicitCast
+    public static RAbstractAtomicVector toAbstractAtomicVector(byte value) {
+        return RDataFactory.createLogicalVectorFromScalar(value);
+    }
+
+    @ImplicitCast
+    public static RAbstractAtomicVector toAbstractAtomicVector(RComplex value) {
+        return RDataFactory.createComplexVectorFromScalar(value);
+    }
+
+    @ImplicitCast
+    public static RAbstractAtomicVector toAbstractAtomicVector(String value) {
+        return RDataFactory.createStringVectorFromScalar(value);
+    }
+
+    @ImplicitCast
+    public static RAbstractAtomicVector toAbstractAtomicVector(RIntVector vector) {
+        return vector;
+    }
+
+    @ImplicitCast
+    public static RAbstractAtomicVector toAbstractAtomicVector(RDoubleVector vector) {
+        return vector;
+    }
+
+    @ImplicitCast
+    public static RAbstractAtomicVector toAbstractAtomicVector(RLogicalVector vector) {
+        return vector;
+    }
+
+    @ImplicitCast
+    public static RAbstractAtomicVector toAbstractAtomicVector(RComplexVector vector) {
+        return vector;
+    }
+
+    @ImplicitCast
+    public static RAbstractAtomicVector toAbstractAtomicVector(RRawVector vector) {
+        return vector;
+    }
+
+    @ImplicitCast
+    public static RAbstractAtomicVector toAbstractAtomicVector(RStringVector vector) {
+        return vector;
+    }
+
+    @ImplicitCast
+    public static RAbstractAtomicVector toAbstractAtomicVector(RIntSequence vector) {
+        return vector;
+    }
+
+    @ImplicitCast
+    public static RAbstractVector toAbstractAtomicVector(RDoubleSequence vector) {
+        return vector;
+    }
+
 }
diff --git a/com.oracle.truffle.r.runtime/src/com/oracle/truffle/r/runtime/data/model/RAbstractAtomicVector.java b/com.oracle.truffle.r.runtime/src/com/oracle/truffle/r/runtime/data/model/RAbstractAtomicVector.java
new file mode 100644
index 0000000000000000000000000000000000000000..839804eb00977d5f6b0de425e5a232f2b5e428cc
--- /dev/null
+++ b/com.oracle.truffle.r.runtime/src/com/oracle/truffle/r/runtime/data/model/RAbstractAtomicVector.java
@@ -0,0 +1,44 @@
+/*
+ * Copyright (c) 2017, 2017, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+package com.oracle.truffle.r.runtime.data.model;
+
+import com.oracle.truffle.api.dsl.Specialization;
+import com.oracle.truffle.r.runtime.data.RTypesFlatLayout;
+
+/**
+ * Distinguishes what R considers an "atomic" vector, e.g. {@code integer()} from other "vectors",
+ * e.g., {@code list()}. Specifically these are the FastR atomic vector types:
+ * <ul>
+ * <li>{@link RAbstractIntVector}</li>
+ * <li>{@link RAbstractLogicalVector}</li>
+ * <li>{@link RAbstractDoubleVector}</li>
+ * <li>{@link RAbstractComplexVector}</li>
+ * <li>{@link RAbstractStringVector}</li>
+ * <li>{@link RAbstractRawVector}</li>
+ * </ul>
+ *
+ * N.B. To use this in a {@link Specialization} you must use {@link RTypesFlatLayout}.
+ */
+public interface RAbstractAtomicVector extends RAbstractVector {
+
+}
diff --git a/com.oracle.truffle.r.runtime/src/com/oracle/truffle/r/runtime/data/model/RAbstractComplexVector.java b/com.oracle.truffle.r.runtime/src/com/oracle/truffle/r/runtime/data/model/RAbstractComplexVector.java
index e3a04b41338a8e0160adcbfc3824a758109c82ba..3ad93d63f6978b9cc587d5fbd5573e5f34cc991d 100644
--- a/com.oracle.truffle.r.runtime/src/com/oracle/truffle/r/runtime/data/model/RAbstractComplexVector.java
+++ b/com.oracle.truffle.r.runtime/src/com/oracle/truffle/r/runtime/data/model/RAbstractComplexVector.java
@@ -27,7 +27,7 @@ import com.oracle.truffle.r.runtime.RType;
 import com.oracle.truffle.r.runtime.data.RComplex;
 import com.oracle.truffle.r.runtime.data.RComplexVector;
 
-public interface RAbstractComplexVector extends RAbstractVector {
+public interface RAbstractComplexVector extends RAbstractAtomicVector {
 
     @Override
     default Object getDataAtAsObject(int index) {
diff --git a/com.oracle.truffle.r.runtime/src/com/oracle/truffle/r/runtime/data/model/RAbstractDoubleVector.java b/com.oracle.truffle.r.runtime/src/com/oracle/truffle/r/runtime/data/model/RAbstractDoubleVector.java
index b8f4e98d3bdf472e95fe2c151483ba897b57194b..8bfd1573077131338384384b95014682a898dc7a 100644
--- a/com.oracle.truffle.r.runtime/src/com/oracle/truffle/r/runtime/data/model/RAbstractDoubleVector.java
+++ b/com.oracle.truffle.r.runtime/src/com/oracle/truffle/r/runtime/data/model/RAbstractDoubleVector.java
@@ -27,7 +27,7 @@ import com.oracle.truffle.r.runtime.RType;
 import com.oracle.truffle.r.runtime.data.RDouble;
 import com.oracle.truffle.r.runtime.data.RDoubleVector;
 
-public interface RAbstractDoubleVector extends RAbstractVector {
+public interface RAbstractDoubleVector extends RAbstractAtomicVector {
 
     @Override
     default Object getDataAtAsObject(int index) {
diff --git a/com.oracle.truffle.r.runtime/src/com/oracle/truffle/r/runtime/data/model/RAbstractIntVector.java b/com.oracle.truffle.r.runtime/src/com/oracle/truffle/r/runtime/data/model/RAbstractIntVector.java
index 739bbaad05205f33da7686e7159c9448d482334d..bc64990d6114804f91779463a367bd057c302b27 100644
--- a/com.oracle.truffle.r.runtime/src/com/oracle/truffle/r/runtime/data/model/RAbstractIntVector.java
+++ b/com.oracle.truffle.r.runtime/src/com/oracle/truffle/r/runtime/data/model/RAbstractIntVector.java
@@ -27,7 +27,7 @@ import com.oracle.truffle.r.runtime.RType;
 import com.oracle.truffle.r.runtime.data.RIntVector;
 import com.oracle.truffle.r.runtime.data.RInteger;
 
-public interface RAbstractIntVector extends RAbstractVector {
+public interface RAbstractIntVector extends RAbstractAtomicVector {
 
     @Override
     default Object getDataAtAsObject(int index) {
diff --git a/com.oracle.truffle.r.runtime/src/com/oracle/truffle/r/runtime/data/model/RAbstractLogicalVector.java b/com.oracle.truffle.r.runtime/src/com/oracle/truffle/r/runtime/data/model/RAbstractLogicalVector.java
index 2203663c5e96c7578bb36ce11196477a6828ef52..abb58b0adb2308d62398abacb6137218b404d86e 100644
--- a/com.oracle.truffle.r.runtime/src/com/oracle/truffle/r/runtime/data/model/RAbstractLogicalVector.java
+++ b/com.oracle.truffle.r.runtime/src/com/oracle/truffle/r/runtime/data/model/RAbstractLogicalVector.java
@@ -27,7 +27,7 @@ import com.oracle.truffle.r.runtime.RType;
 import com.oracle.truffle.r.runtime.data.RLogical;
 import com.oracle.truffle.r.runtime.data.RLogicalVector;
 
-public interface RAbstractLogicalVector extends RAbstractVector {
+public interface RAbstractLogicalVector extends RAbstractAtomicVector {
 
     @Override
     default Object getDataAtAsObject(int index) {
diff --git a/com.oracle.truffle.r.runtime/src/com/oracle/truffle/r/runtime/data/model/RAbstractRawVector.java b/com.oracle.truffle.r.runtime/src/com/oracle/truffle/r/runtime/data/model/RAbstractRawVector.java
index c1a8873d8d2d1c767db50689d0f256255339dbd5..38441f5fb118b2c322746bf2f024ff842c49dec8 100644
--- a/com.oracle.truffle.r.runtime/src/com/oracle/truffle/r/runtime/data/model/RAbstractRawVector.java
+++ b/com.oracle.truffle.r.runtime/src/com/oracle/truffle/r/runtime/data/model/RAbstractRawVector.java
@@ -26,7 +26,7 @@ import com.oracle.truffle.r.runtime.RType;
 import com.oracle.truffle.r.runtime.data.RRaw;
 import com.oracle.truffle.r.runtime.data.RRawVector;
 
-public interface RAbstractRawVector extends RAbstractVector {
+public interface RAbstractRawVector extends RAbstractAtomicVector {
 
     @Override
     default Object getDataAtAsObject(int index) {
diff --git a/com.oracle.truffle.r.runtime/src/com/oracle/truffle/r/runtime/data/model/RAbstractStringVector.java b/com.oracle.truffle.r.runtime/src/com/oracle/truffle/r/runtime/data/model/RAbstractStringVector.java
index c21728a8c03691497d98b912e40ab6b08feee290..032c8bed11216dd37a72c1670fc29b547e421436 100644
--- a/com.oracle.truffle.r.runtime/src/com/oracle/truffle/r/runtime/data/model/RAbstractStringVector.java
+++ b/com.oracle.truffle.r.runtime/src/com/oracle/truffle/r/runtime/data/model/RAbstractStringVector.java
@@ -27,7 +27,7 @@ import com.oracle.truffle.r.runtime.RType;
 import com.oracle.truffle.r.runtime.data.RString;
 import com.oracle.truffle.r.runtime.data.RStringVector;
 
-public interface RAbstractStringVector extends RAbstractVector {
+public interface RAbstractStringVector extends RAbstractAtomicVector {
 
     @Override
     default Object getDataAtAsObject(int index) {