diff --git a/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/binary/BinaryBooleanScalarNode.java b/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/binary/BinaryBooleanScalarNode.java
index 444696a3f70eddfded9e68f72af65a821195e2c9..00ca1de4b2fd47b3fb02d295656e62d46701a4d6 100644
--- a/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/binary/BinaryBooleanScalarNode.java
+++ b/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/binary/BinaryBooleanScalarNode.java
@@ -26,8 +26,12 @@ import com.oracle.truffle.api.CompilerAsserts;
 import com.oracle.truffle.api.CompilerDirectives.TruffleBoundary;
 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.frame.VirtualFrame;
+import com.oracle.truffle.api.interop.Message;
+import com.oracle.truffle.api.interop.TruffleObject;
+import com.oracle.truffle.api.nodes.Node;
 import com.oracle.truffle.api.profiles.BranchProfile;
 import com.oracle.truffle.api.profiles.ConditionProfile;
 import com.oracle.truffle.r.nodes.binary.BinaryBooleanScalarNodeGen.LogicalScalarCastNodeGen;
@@ -39,6 +43,7 @@ import com.oracle.truffle.r.runtime.RRuntime;
 import com.oracle.truffle.r.runtime.RType;
 import com.oracle.truffle.r.runtime.data.RComplex;
 import com.oracle.truffle.r.runtime.data.model.RAbstractVector;
+import com.oracle.truffle.r.runtime.interop.ForeignArray2R;
 import com.oracle.truffle.r.runtime.nodes.RBaseNode;
 import com.oracle.truffle.r.runtime.ops.BooleanOperation;
 import com.oracle.truffle.r.runtime.ops.BooleanOperationFactory;
@@ -85,6 +90,7 @@ public abstract class BinaryBooleanScalarNode extends RBuiltinNode.Arg2 {
         return left;
     }
 
+    @ImportStatic({ForeignArray2R.class, Message.class})
     protected abstract static class LogicalScalarCastNode extends RBaseNode {
 
         protected static final int CACHE_LIMIT = 3;
@@ -147,6 +153,19 @@ public abstract class BinaryBooleanScalarNode extends RBuiltinNode.Arg2 {
             return null;
         }
 
+        @Specialization(guards = {"isForeignVector(operand, hasSize)"})
+        protected byte doForeignVector(TruffleObject operand,
+                        @Cached("HAS_SIZE.createNode()") Node hasSize,
+                        @Cached("createForeignArray2R()") ForeignArray2R foreignArray2R,
+                        @Cached("createRecursive()") LogicalScalarCastNode recursive) {
+            Object o = foreignArray2R.execute(operand, true);
+            return recursive.executeCast(o);
+        }
+
+        protected LogicalScalarCastNode createRecursive() {
+            return LogicalScalarCastNodeGen.create(opName, argumentName, check);
+        }
+
         @Fallback
         protected byte doFallback(@SuppressWarnings("unused") Object operand) {
             throw RError.error(this, RError.Message.INVALID_TYPE_IN, argumentName, opName);