diff --git a/com.oracle.truffle.r.nodes.builtin/src/com/oracle/truffle/r/nodes/builtin/base/APerm.java b/com.oracle.truffle.r.nodes.builtin/src/com/oracle/truffle/r/nodes/builtin/base/APerm.java
index a4f4376e81f3e66bcf3cb7b7ff17eae0670faeb9..39146e8235b4014f1139a75ad00cb489a2347732 100644
--- a/com.oracle.truffle.r.nodes.builtin/src/com/oracle/truffle/r/nodes/builtin/base/APerm.java
+++ b/com.oracle.truffle.r.nodes.builtin/src/com/oracle/truffle/r/nodes/builtin/base/APerm.java
@@ -10,7 +10,7 @@
  */
 package com.oracle.truffle.r.nodes.builtin.base;
 
-import static com.oracle.truffle.r.nodes.builtin.CastBuilder.Predef.asIntegerVector;
+import static com.oracle.truffle.r.nodes.builtin.CastBuilder.Predef.asIntegerVectorClosure;
 import static com.oracle.truffle.r.nodes.builtin.CastBuilder.Predef.complexValue;
 import static com.oracle.truffle.r.nodes.builtin.CastBuilder.Predef.logicalValue;
 import static com.oracle.truffle.r.nodes.builtin.CastBuilder.Predef.numericValue;
@@ -55,7 +55,7 @@ public abstract class APerm extends RBuiltinNode.Arg3 {
     static {
         Casts casts = new Casts(APerm.class);
         casts.arg("a").mustNotBeNull(RError.Message.FIRST_ARG_MUST_BE_ARRAY);
-        casts.arg("perm").allowNull().mustBe(numericValue().or(stringValue()).or(complexValue())).mapIf(numericValue().or(complexValue()), asIntegerVector(true));
+        casts.arg("perm").allowNull().mustBe(numericValue().or(stringValue()).or(complexValue())).mapIf(numericValue().or(complexValue()), asIntegerVectorClosure());
         casts.arg("resize").mustBe(numericValue().or(logicalValue()), Message.INVALID_LOGICAL, "resize").asLogicalVector().findFirst();
     }
 
diff --git a/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/builtin/CastBuilder.java b/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/builtin/CastBuilder.java
index 85c0769241a35b602183128d8678d083897131b7..d22c10086a9be1b3f9388fb1bce0ac9bc72c2122 100644
--- a/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/builtin/CastBuilder.java
+++ b/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/builtin/CastBuilder.java
@@ -332,16 +332,16 @@ public final class CastBuilder {
             return new CoercionStep<>(RType.Integer, true);
         }
 
-        public static <T> PipelineStep<T, RAbstractIntVector> asIntegerVector(boolean reuseNonShared) {
-            return new CoercionStep<>(RType.Integer, true, false, false, false, true, reuseNonShared);
+        public static <T> PipelineStep<T, RAbstractIntVector> asIntegerVectorClosure() {
+            return new CoercionStep<>(RType.Integer, true, false, false, false, true, true);
         }
 
         public static <T> PipelineStep<T, RAbstractIntVector> asIntegerVector(boolean preserveNames, boolean preserveDimensions, boolean preserveAttributes) {
             return new CoercionStep<>(RType.Integer, true, preserveNames, preserveDimensions, preserveAttributes, true, false);
         }
 
-        public static <T> PipelineStep<T, RAbstractIntVector> asIntegerVector(boolean preserveNames, boolean preserveDimensions, boolean preserveAttributes, boolean reuseNonShared) {
-            return new CoercionStep<>(RType.Integer, true, preserveNames, preserveDimensions, preserveAttributes, true, reuseNonShared);
+        public static <T> PipelineStep<T, RAbstractIntVector> asIntegerVectorClosure(boolean preserveNames, boolean preserveDimensions, boolean preserveAttributes) {
+            return new CoercionStep<>(RType.Integer, true, preserveNames, preserveDimensions, preserveAttributes, true, true);
         }
 
         public static <T> PipelineStep<T, Double> asDouble() {
@@ -352,10 +352,18 @@ public final class CastBuilder {
             return new CoercionStep<>(RType.Double, true);
         }
 
+        public static <T> PipelineStep<T, RAbstractDoubleVector> asDoubleVectorClosure() {
+            return new CoercionStep<>(RType.Double, true, false, false, false, true, true);
+        }
+
         public static <T> PipelineStep<T, RAbstractDoubleVector> asDoubleVector(boolean preserveNames, boolean preserveDimensions, boolean preserveAttributes) {
             return new CoercionStep<>(RType.Double, true, preserveNames, preserveDimensions, preserveAttributes);
         }
 
+        public static <T> PipelineStep<T, RAbstractDoubleVector> asDoubleVectorClosure(boolean preserveNames, boolean preserveDimensions, boolean preserveAttributes) {
+            return new CoercionStep<>(RType.Double, true, preserveNames, preserveDimensions, preserveAttributes, true, true);
+        }
+
         public static <T> PipelineStep<T, String> asString() {
             return new CoercionStep<>(RType.Character, false);
         }
diff --git a/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/builtin/casts/PipelineStep.java b/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/builtin/casts/PipelineStep.java
index 474168dc902036a5048faa506fbe0044b73cda1b..4e9bdc24d38dd198fe16a92a601791aa425af6d8 100644
--- a/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/builtin/casts/PipelineStep.java
+++ b/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/builtin/casts/PipelineStep.java
@@ -177,11 +177,10 @@ public abstract class PipelineStep<T, R> {
         public final boolean vectorCoercion;
 
         /**
-         * Allows the cast node to create and use wrappers for non-shared vectors. Only use if you
-         * know the vector to be casted won't escape and preferably if the vector is just used
-         * read-only.
+         * Allows the cast node to create and use wrappers for vectors. Only use if you know the
+         * vector to be casted won't escape and preferably if the vector is just used read-only.
          */
-        public final boolean reuseNonShared;
+        public final boolean useClosure;
 
         public CoercionStep(RType type, boolean vectorCoercion) {
             this(type, vectorCoercion, false, false, false, true, false);
@@ -191,14 +190,14 @@ public abstract class PipelineStep<T, R> {
             this(type, vectorCoercion, preserveNames, preserveDimensions, preserveAttributes, true, false);
         }
 
-        public CoercionStep(RType type, boolean vectorCoercion, boolean preserveNames, boolean preserveDimensions, boolean preserveAttributes, boolean preserveNonVector, boolean reuseNonShared) {
+        public CoercionStep(RType type, boolean vectorCoercion, boolean preserveNames, boolean preserveDimensions, boolean preserveAttributes, boolean preserveNonVector, boolean useClosure) {
             this.type = type;
             this.vectorCoercion = vectorCoercion;
             this.preserveNames = preserveNames;
             this.preserveAttributes = preserveAttributes;
             this.preserveDimensions = preserveDimensions;
             this.preserveNonVector = preserveNonVector;
-            this.reuseNonShared = reuseNonShared;
+            this.useClosure = useClosure;
         }
 
         public RType getType() {
diff --git a/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/builtin/casts/PipelineToCastNode.java b/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/builtin/casts/PipelineToCastNode.java
index f9f7dde80c9c629b08eb5f684d7a35608535093a..e0c252dfd5387ebc560c2f338682add035352804 100644
--- a/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/builtin/casts/PipelineToCastNode.java
+++ b/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/builtin/casts/PipelineToCastNode.java
@@ -226,11 +226,11 @@ public final class PipelineToCastNode {
             RType type = step.getType();
             switch (type) {
                 case Integer:
-                    return step.vectorCoercion ? CastIntegerNodeGen.create(step.preserveNames, step.preserveDimensions, step.preserveAttributes, false, step.reuseNonShared)
-                                    : CastIntegerBaseNodeGen.create(step.preserveNames, step.preserveDimensions, step.preserveAttributes, false, step.reuseNonShared);
+                    return step.vectorCoercion ? CastIntegerNodeGen.create(step.preserveNames, step.preserveDimensions, step.preserveAttributes, false, step.useClosure)
+                                    : CastIntegerBaseNodeGen.create(step.preserveNames, step.preserveDimensions, step.preserveAttributes, false, step.useClosure);
                 case Double:
-                    return step.vectorCoercion ? CastDoubleNodeGen.create(step.preserveNames, step.preserveDimensions, step.preserveAttributes, false, step.reuseNonShared)
-                                    : CastDoubleBaseNodeGen.create(step.preserveNames, step.preserveDimensions, step.preserveAttributes, false, step.reuseNonShared);
+                    return step.vectorCoercion ? CastDoubleNodeGen.create(step.preserveNames, step.preserveDimensions, step.preserveAttributes, false, step.useClosure)
+                                    : CastDoubleBaseNodeGen.create(step.preserveNames, step.preserveDimensions, step.preserveAttributes, false, step.useClosure);
                 case Character:
                     return step.vectorCoercion ? CastStringNodeGen.create(step.preserveNames, step.preserveDimensions, step.preserveAttributes)
                                     : CastStringBaseNodeGen.create(step.preserveNames, step.preserveDimensions, step.preserveAttributes);
diff --git a/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/builtin/casts/fluent/InitialPhaseBuilder.java b/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/builtin/casts/fluent/InitialPhaseBuilder.java
index bd4a64d4495fafce14268ffefce2f12595c60e04..0773eb292340d60d60a681cadc752f56aeca219a 100644
--- a/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/builtin/casts/fluent/InitialPhaseBuilder.java
+++ b/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/builtin/casts/fluent/InitialPhaseBuilder.java
@@ -150,30 +150,32 @@ public class InitialPhaseBuilder<T> extends ArgCastBuilder<T, InitialPhaseBuilde
         return this;
     }
 
-    public CoercedPhaseBuilder<RAbstractIntVector, Integer> asIntegerVector(boolean preserveNames, boolean preserveDimensions, boolean preserveAttributes, boolean reuseNonShared) {
-        pipelineBuilder().appendAsVector(RType.Integer, preserveNames, preserveDimensions, preserveAttributes, reuseNonShared);
+    public CoercedPhaseBuilder<RAbstractIntVector, Integer> asIntegerVector(boolean preserveNames, boolean preserveDimensions, boolean preserveAttributes) {
+        pipelineBuilder().appendAsVector(RType.Integer, preserveNames, preserveDimensions, preserveAttributes);
         return new CoercedPhaseBuilder<>(pipelineBuilder(), Integer.class);
     }
 
-    public CoercedPhaseBuilder<RAbstractIntVector, Integer> asIntegerVector(boolean preserveNames, boolean preserveDimensions, boolean preserveAttributes) {
-        return asIntegerVector(preserveNames, preserveDimensions, preserveAttributes, false);
+    public CoercedPhaseBuilder<RAbstractIntVector, Integer> asIntegerVector() {
+        return asIntegerVector(false, false, false);
     }
 
-    public CoercedPhaseBuilder<RAbstractIntVector, Integer> asIntegerVector() {
-        return asIntegerVector(false, false, false, false);
+    public CoercedPhaseBuilder<RAbstractIntVector, Integer> asIntegerVectorClosure(boolean preserveNames, boolean preserveDimensions, boolean preserveAttributes) {
+        pipelineBuilder().appendAsVectorClosure(RType.Integer, preserveNames, preserveDimensions, preserveAttributes);
+        return new CoercedPhaseBuilder<>(pipelineBuilder(), Integer.class);
     }
 
-    public CoercedPhaseBuilder<RAbstractIntVector, Integer> asIntegerVector(boolean reuseNonShared) {
-        return asIntegerVector(false, false, false, reuseNonShared);
+    public CoercedPhaseBuilder<RAbstractIntVector, Integer> asIntegerVectorClosure() {
+        return asIntegerVectorClosure(false, false, false);
     }
 
-    public CoercedPhaseBuilder<RAbstractDoubleVector, Double> asDoubleVector(boolean preserveNames, boolean preserveDimensions, boolean preserveAttributes, boolean reuseNonShared) {
-        pipelineBuilder().appendAsVector(RType.Double, preserveNames, preserveDimensions, preserveAttributes, reuseNonShared);
+    public CoercedPhaseBuilder<RAbstractDoubleVector, Double> asDoubleVectorClosure(boolean preserveNames, boolean preserveDimensions, boolean preserveAttributes) {
+        pipelineBuilder().appendAsVectorClosure(RType.Double, preserveNames, preserveDimensions, preserveAttributes);
         return new CoercedPhaseBuilder<>(pipelineBuilder(), Double.class);
     }
 
     public CoercedPhaseBuilder<RAbstractDoubleVector, Double> asDoubleVector(boolean preserveNames, boolean preserveDimensions, boolean preserveAttributes) {
-        return asDoubleVector(preserveNames, preserveDimensions, preserveAttributes, false);
+        pipelineBuilder().appendAsVector(RType.Double, preserveNames, preserveDimensions, preserveAttributes);
+        return new CoercedPhaseBuilder<>(pipelineBuilder(), Double.class);
     }
 
     public CoercedPhaseBuilder<RAbstractDoubleVector, Double> asDoubleVector() {
diff --git a/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/builtin/casts/fluent/PipelineBuilder.java b/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/builtin/casts/fluent/PipelineBuilder.java
index bc3596e0b7faebc9e59ce4739bb16883a28503f5..c40a4f293f33174ced113f85aa4b89a345390bc3 100644
--- a/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/builtin/casts/fluent/PipelineBuilder.java
+++ b/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/builtin/casts/fluent/PipelineBuilder.java
@@ -84,9 +84,9 @@ public final class PipelineBuilder {
         append(new CoercionStep<>(type, true, preserveNames, preserveDimensions, preserveAttributes, true, false));
     }
 
-    public void appendAsVector(RType type, boolean preserveNames, boolean preserveDimensions, boolean preserveAttributes, boolean reuseNonShared) {
+    public void appendAsVectorClosure(RType type, boolean preserveNames, boolean preserveDimensions, boolean preserveAttributes) {
         assert type == RType.Integer || type == RType.Double || type == RType.Complex || type == RType.Character || type == RType.Logical || type == RType.Raw;
-        append(new CoercionStep<>(type, true, preserveNames, preserveDimensions, preserveAttributes, true, reuseNonShared));
+        append(new CoercionStep<>(type, true, preserveNames, preserveDimensions, preserveAttributes, true, true));
     }
 
     public void appendNotNA(Object naReplacement, Message message, Object[] messageArgs) {
diff --git a/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/unary/CastBaseNode.java b/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/unary/CastBaseNode.java
index 46d1c12b92bce59399c1a4f98da2bc332002b5df..8216976903f773de772b3b7bea546ad3d34e26cd 100644
--- a/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/unary/CastBaseNode.java
+++ b/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/unary/CastBaseNode.java
@@ -41,7 +41,6 @@ import com.oracle.truffle.r.runtime.RRuntime;
 import com.oracle.truffle.r.runtime.RType;
 import com.oracle.truffle.r.runtime.data.RList;
 import com.oracle.truffle.r.runtime.data.RNull;
-import com.oracle.truffle.r.runtime.data.RSharingAttributeStorage;
 import com.oracle.truffle.r.runtime.data.RStringVector;
 import com.oracle.truffle.r.runtime.data.RTypedValue;
 import com.oracle.truffle.r.runtime.data.model.RAbstractContainer;
@@ -65,8 +64,8 @@ public abstract class CastBaseNode extends CastNode {
     private final boolean preserveDimensions;
     private final boolean preserveAttributes;
 
-    /** {@code true} if a cast should try to reuse a non-shared vector. */
-    private final boolean reuseNonShared;
+    /** {@code true} if a cast should wrap the input in a closure. */
+    private final boolean useClosure;
 
     /**
      * GnuR provides several, sometimes incompatible, ways to coerce given value to given type. This
@@ -83,7 +82,7 @@ public abstract class CastBaseNode extends CastNode {
         this(preserveNames, preserveDimensions, preserveAttributes, forRFFI, false);
     }
 
-    protected CastBaseNode(boolean preserveNames, boolean preserveDimensions, boolean preserveAttributes, boolean forRFFI, boolean reuseNonShared) {
+    protected CastBaseNode(boolean preserveNames, boolean preserveDimensions, boolean preserveAttributes, boolean forRFFI, boolean useClosure) {
         this.preserveNames = preserveNames;
         this.preserveDimensions = preserveDimensions;
         this.preserveAttributes = preserveAttributes;
@@ -91,8 +90,8 @@ public abstract class CastBaseNode extends CastNode {
         if (preserveDimensions) {
             getDimNamesNode = GetDimNamesAttributeNode.create();
         }
-        this.reuseNonShared = reuseNonShared;
-        reuseClassProfile = reuseNonShared ? ValueProfile.createClassProfile() : null;
+        this.useClosure = useClosure;
+        reuseClassProfile = useClosure ? ValueProfile.createClassProfile() : null;
     }
 
     public final boolean preserveNames() {
@@ -112,7 +111,7 @@ public abstract class CastBaseNode extends CastNode {
     }
 
     public final boolean reuseNonShared() {
-        return reuseNonShared;
+        return useClosure;
     }
 
     protected abstract RType getTargetType();
@@ -183,12 +182,12 @@ public abstract class CastBaseNode extends CastNode {
         return RNull.instance;
     }
 
-    protected boolean isReusable(RAbstractVector v) {
-        return reuseNonShared;
+    protected boolean useClosure() {
+        return useClosure;
     }
 
     protected RAbstractVector castWithReuse(RType targetType, RAbstractVector v, ConditionProfile naProfile) {
-        assert isReusable(v);
+        assert useClosure();
         return reuseClassProfile.profile(v.castSafe(targetType, naProfile, preserveAttributes()));
     }
 }
diff --git a/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/unary/CastDoubleBaseNode.java b/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/unary/CastDoubleBaseNode.java
index 6fee221df0e9d383b8dad2318ddb419e0d958928..15a9514d39ce31cb0f683a2a18472e2e6b626c5b 100644
--- a/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/unary/CastDoubleBaseNode.java
+++ b/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/unary/CastDoubleBaseNode.java
@@ -44,8 +44,8 @@ public abstract class CastDoubleBaseNode extends CastBaseNode {
         super(preserveNames, preserveDimensions, preserveAttributes);
     }
 
-    protected CastDoubleBaseNode(boolean preserveNames, boolean preserveDimensions, boolean preserveAttributes, boolean forRFFI, boolean withReuse) {
-        super(preserveNames, preserveDimensions, preserveAttributes, forRFFI, withReuse);
+    protected CastDoubleBaseNode(boolean preserveNames, boolean preserveDimensions, boolean preserveAttributes, boolean forRFFI, boolean useClosure) {
+        super(preserveNames, preserveDimensions, preserveAttributes, forRFFI, useClosure);
     }
 
     @Override
diff --git a/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/unary/CastDoubleNode.java b/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/unary/CastDoubleNode.java
index a135756833ffea7d43c49a09d1c33abcd724d83f..67ee125a0dec3d022d9f92eaae74a3f13ca67253 100644
--- a/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/unary/CastDoubleNode.java
+++ b/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/unary/CastDoubleNode.java
@@ -92,27 +92,27 @@ public abstract class CastDoubleNode extends CastDoubleBaseNode {
         return vectorCopy(operand, ddata, !seenNA);
     }
 
-    @Specialization(guards = "isReusable(operand)")
+    @Specialization(guards = "useClosure()")
     protected RAbstractDoubleVector doIntVectorReuse(RAbstractIntVector operand) {
         return (RAbstractDoubleVector) castWithReuse(RType.Double, operand, naProfile.getConditionProfile());
     }
 
-    @Specialization(guards = "isReusable(operand)")
+    @Specialization(guards = "useClosure()")
     protected RAbstractDoubleVector doLogicalVectorDimsReuse(RAbstractLogicalVector operand) {
         return (RAbstractDoubleVector) castWithReuse(RType.Double, operand, naProfile.getConditionProfile());
     }
 
-    @Specialization(guards = "isReusable(operand)")
+    @Specialization(guards = "useClosure()")
     protected RAbstractDoubleVector doRawVectorReuse(RRawVector operand) {
         return (RAbstractDoubleVector) castWithReuse(RType.Double, operand, naProfile.getConditionProfile());
     }
 
-    @Specialization(guards = "!isReusable(operand)")
+    @Specialization(guards = "!useClosure()")
     protected RDoubleVector doIntVector(RAbstractIntVector operand) {
         return createResultVector(operand, index -> naCheck.convertIntToDouble(operand.getDataAt(index)));
     }
 
-    @Specialization(guards = "!isReusable(operand)")
+    @Specialization(guards = "!useClosure()")
     protected RDoubleVector doLogicalVectorDims(RAbstractLogicalVector operand) {
         return createResultVector(operand, index -> naCheck.convertLogicalToDouble(operand.getDataAt(index)));
     }
@@ -172,7 +172,7 @@ public abstract class CastDoubleNode extends CastDoubleBaseNode {
         return vectorCopy(operand, ddata, naCheck.neverSeenNA());
     }
 
-    @Specialization(guards = "!isReusable(operand)")
+    @Specialization(guards = "!useClosure()")
     protected RDoubleVector doRawVector(RRawVector operand) {
         return createResultVector(operand, index -> RRuntime.raw2double(operand.getDataAt(index)));
     }
diff --git a/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/unary/CastIntegerBaseNode.java b/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/unary/CastIntegerBaseNode.java
index 10e420d5b12078a830e6c6190c09a515eecfc7f2..f2239927848c6102bf34bd31802ae2bd9f7656e6 100644
--- a/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/unary/CastIntegerBaseNode.java
+++ b/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/unary/CastIntegerBaseNode.java
@@ -41,8 +41,8 @@ public abstract class CastIntegerBaseNode extends CastBaseNode {
 
     @Child private CastIntegerNode recursiveCastInteger;
 
-    protected CastIntegerBaseNode(boolean preserveNames, boolean preserveDimensions, boolean preserveAttributes, boolean forRFFI, boolean withReuse) {
-        super(preserveNames, preserveDimensions, preserveAttributes, forRFFI, withReuse);
+    protected CastIntegerBaseNode(boolean preserveNames, boolean preserveDimensions, boolean preserveAttributes, boolean forRFFI, boolean useClosure) {
+        super(preserveNames, preserveDimensions, preserveAttributes, forRFFI, useClosure);
     }
 
     protected CastIntegerBaseNode(boolean preserveNames, boolean preserveDimensions, boolean preserveAttributes) {
diff --git a/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/unary/CastIntegerNode.java b/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/unary/CastIntegerNode.java
index 79df7b5d660b38c82f2451c5729d45e3ff0a5f91..636037c3cf469d5c28c220d53131410507d39f7d 100644
--- a/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/unary/CastIntegerNode.java
+++ b/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/unary/CastIntegerNode.java
@@ -57,8 +57,8 @@ public abstract class CastIntegerNode extends CastIntegerBaseNode {
 
     private final BranchProfile warningBranch = BranchProfile.create();
 
-    protected CastIntegerNode(boolean preserveNames, boolean preserveDimensions, boolean preserveAttributes, boolean forRFFI, boolean withReuse) {
-        super(preserveNames, preserveDimensions, preserveAttributes, forRFFI, withReuse);
+    protected CastIntegerNode(boolean preserveNames, boolean preserveDimensions, boolean preserveAttributes, boolean forRFFI, boolean useClosure) {
+        super(preserveNames, preserveDimensions, preserveAttributes, forRFFI, useClosure);
     }
 
     protected CastIntegerNode(boolean preserveNames, boolean preserveDimensions, boolean preserveAttributes) {
@@ -160,32 +160,32 @@ public abstract class CastIntegerNode extends CastIntegerBaseNode {
         return vectorCopy(operand, idata, !seenNA);
     }
 
-    @Specialization(guards = "isReusable(operand)")
+    @Specialization(guards = "useClosure()")
     public RAbstractIntVector doLogicalVectorReuse(RAbstractLogicalVector operand) {
         return (RAbstractIntVector) castWithReuse(RType.Integer, operand, naProfile.getConditionProfile());
     }
 
-    @Specialization(guards = "isReusable(operand)")
+    @Specialization(guards = "useClosure()")
     protected RAbstractIntVector doDoubleVectorReuse(RAbstractDoubleVector operand) {
         return (RAbstractIntVector) castWithReuse(RType.Integer, operand, naProfile.getConditionProfile());
     }
 
-    @Specialization(guards = "isReusable(operand)")
+    @Specialization(guards = "useClosure()")
     protected RAbstractIntVector doRawVectorReuse(RAbstractRawVector operand) {
         return (RAbstractIntVector) castWithReuse(RType.Integer, operand, naProfile.getConditionProfile());
     }
 
-    @Specialization(guards = "!isReusable(operand)")
+    @Specialization(guards = "!useClosure()")
     public RIntVector doLogicalVector(RAbstractLogicalVector operand) {
         return createResultVector(operand, index -> naCheck.convertLogicalToInt(operand.getDataAt(index)));
     }
 
-    @Specialization(guards = "!isReusable(operand)")
+    @Specialization(guards = "!useClosure()")
     protected RIntVector doDoubleVector(RAbstractDoubleVector operand) {
         return vectorCopy(operand, naCheck.convertDoubleVectorToIntData(operand), naCheck.neverSeenNA());
     }
 
-    @Specialization(guards = "!isReusable(operand)")
+    @Specialization(guards = "!useClosure()")
     protected RIntVector doRawVector(RAbstractRawVector operand) {
         return createResultVector(operand, index -> RRuntime.raw2int(operand.getDataAt(index)));
     }
diff --git a/com.oracle.truffle.r.test/src/com/oracle/truffle/r/test/ExpectedTestOutput.test b/com.oracle.truffle.r.test/src/com/oracle/truffle/r/test/ExpectedTestOutput.test
index 0ce65d24bf23991d78283fc76837e4c42ee96134..d02c501de9217e54eb28ae905d53e38f2c4e19bf 100644
--- a/com.oracle.truffle.r.test/src/com/oracle/truffle/r/test/ExpectedTestOutput.test
+++ b/com.oracle.truffle.r.test/src/com/oracle/truffle/r/test/ExpectedTestOutput.test
@@ -69573,7 +69573,7 @@ Error in t.default(new.env()) : argument is not a matrix
 b 1
 c 2
 
-##com.oracle.truffle.r.test.builtins.TestBuiltin_t.testTransposeNotSquare#
+##com.oracle.truffle.r.test.builtins.TestBuiltin_t.testTransposeNonSquare#
 #{ m <- matrix(1:8, 2, 4) ; t(m) }
      [,1] [,2]
 [1,]    1    2
@@ -69581,7 +69581,7 @@ c 2
 [3,]    5    6
 [4,]    7    8
 
-##com.oracle.truffle.r.test.builtins.TestBuiltin_t.testTransposeNotSquare#
+##com.oracle.truffle.r.test.builtins.TestBuiltin_t.testTransposeNonSquare#
 #{ m <- matrix(as.raw(c(1:8)), 2, 4); t(m) }
      [,1] [,2]
 [1,]   01   02
@@ -69589,7 +69589,7 @@ c 2
 [3,]   05   06
 [4,]   07   08
 
-##com.oracle.truffle.r.test.builtins.TestBuiltin_t.testTransposeNotSquare#
+##com.oracle.truffle.r.test.builtins.TestBuiltin_t.testTransposeNonSquare#
 #{ m <- matrix(c('1', '2', '3', '4', '5', '6', '7', '8'), 2, 4); t(m) }
      [,1] [,2]
 [1,] "1"  "2"
@@ -69597,7 +69597,7 @@ c 2
 [3,] "5"  "6"
 [4,] "7"  "8"
 
-##com.oracle.truffle.r.test.builtins.TestBuiltin_t.testTransposeNotSquare#
+##com.oracle.truffle.r.test.builtins.TestBuiltin_t.testTransposeNonSquare#
 #{ m <- matrix(c(T, F, F, F, T, F, F, T), 2, 4); t(m) }
       [,1]  [,2]
 [1,]  TRUE FALSE
@@ -69605,7 +69605,7 @@ c 2
 [3,]  TRUE FALSE
 [4,] FALSE  TRUE
 
-##com.oracle.truffle.r.test.builtins.TestBuiltin_t.testTransposeNotSquare#
+##com.oracle.truffle.r.test.builtins.TestBuiltin_t.testTransposeNonSquare#
 #{ m <- matrix(list(a=1,b=2,c=3,d=4,e=5,f=6,g=7,h=8), 2, 4); t(m) }
      [,1] [,2]
 [1,] 1    2
@@ -69613,7 +69613,7 @@ c 2
 [3,] 5    6
 [4,] 7    8
 
-##com.oracle.truffle.r.test.builtins.TestBuiltin_t.testTransposeNotSquare#
+##com.oracle.truffle.r.test.builtins.TestBuiltin_t.testTransposeNonSquare#
 #{ m <- matrix(seq(0.1,0.8,0.1), 2, 4) ; t(m) }
      [,1] [,2]
 [1,]  0.1  0.2