diff --git a/com.oracle.truffle.r.engine/src/com/oracle/truffle/r/engine/interop/RAbstractVectorAccessFactory.java b/com.oracle.truffle.r.engine/src/com/oracle/truffle/r/engine/interop/RAbstractVectorAccessFactory.java
index 349586e1f3c1f4bdf195499d046e9b8243905e2c..8e2968305d60949dbf080ded29480f75161d31bb 100644
--- a/com.oracle.truffle.r.engine/src/com/oracle/truffle/r/engine/interop/RAbstractVectorAccessFactory.java
+++ b/com.oracle.truffle.r.engine/src/com/oracle/truffle/r/engine/interop/RAbstractVectorAccessFactory.java
@@ -56,6 +56,9 @@ import com.oracle.truffle.r.runtime.RRuntime;
 import com.oracle.truffle.r.runtime.data.RLogical;
 import com.oracle.truffle.r.runtime.data.RObject;
 import com.oracle.truffle.r.runtime.data.RRaw;
+import com.oracle.truffle.r.runtime.data.RScalar;
+import com.oracle.truffle.r.runtime.data.RString;
+import com.oracle.truffle.r.runtime.data.model.RAbstractAtomicVector;
 import com.oracle.truffle.r.runtime.data.model.RAbstractLogicalVector;
 import com.oracle.truffle.r.runtime.data.model.RAbstractRawVector;
 import com.oracle.truffle.r.runtime.data.model.RAbstractVector;
@@ -452,4 +455,23 @@ public final class RAbstractVectorAccessFactory implements StandardFactory {
             }
         });
     }
+
+    static class Check extends RootNode {
+
+        Check() {
+            super(null);
+        }
+
+        @Override
+        public Object execute(VirtualFrame frame) {
+            final Object receiver = ForeignAccess.getReceiver(frame);
+            // TODO: RLogical has no ForeignAccess, issue: GR-9536, use RAbstractVectorAccessFactory
+            // for compatibility.
+            final boolean logical = receiver.getClass() == RLogical.class;
+            // TODO: RString has no ForeignAccess, issue: GR-9536, use RAbstractVectorAccessFactory
+            // for compatibility.
+            final boolean string = receiver.getClass() == RString.class;
+            return receiver instanceof RAbstractAtomicVector && (!(receiver instanceof RScalar) || logical || string);
+        }
+    }
 }
diff --git a/com.oracle.truffle.r.engine/src/com/oracle/truffle/r/engine/interop/RForeignAccessFactoryImpl.java b/com.oracle.truffle.r.engine/src/com/oracle/truffle/r/engine/interop/RForeignAccessFactoryImpl.java
index 6e356c9b25bc4135b603ca2df2bc0e83fc52f5de..4e33037a5790d8df826524fdc62533ba41703da0 100644
--- a/com.oracle.truffle.r.engine/src/com/oracle/truffle/r/engine/interop/RForeignAccessFactoryImpl.java
+++ b/com.oracle.truffle.r.engine/src/com/oracle/truffle/r/engine/interop/RForeignAccessFactoryImpl.java
@@ -113,7 +113,7 @@ public final class RForeignAccessFactoryImpl implements RForeignAccessFactory {
         } else if (obj instanceof REmpty) {
             return REmptyMRForeign.ACCESS;
         } else if (obj instanceof RAbstractAtomicVector) {
-            return ForeignAccess.create(RAbstractAtomicVector.class, new RAbstractVectorAccessFactory());
+            return ForeignAccess.create(new RAbstractVectorAccessFactory(), new RAbstractVectorAccessFactory.Check());
         } else {
             ForeignAccess access = FFI_RForeignAccessFactoryImpl.getForeignAccess(obj);
             if (access != null) {