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 5f8e94ac36b35e1a6a6da06082760d7b82e10413..a135756833ffea7d43c49a09d1c33abcd724d83f 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
@@ -107,12 +107,12 @@ public abstract class CastDoubleNode extends CastDoubleBaseNode {
         return (RAbstractDoubleVector) castWithReuse(RType.Double, operand, naProfile.getConditionProfile());
     }
 
-    @Specialization
+    @Specialization(guards = "!isReusable(operand)")
     protected RDoubleVector doIntVector(RAbstractIntVector operand) {
         return createResultVector(operand, index -> naCheck.convertIntToDouble(operand.getDataAt(index)));
     }
 
-    @Specialization
+    @Specialization(guards = "!isReusable(operand)")
     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
+    @Specialization(guards = "!isReusable(operand)")
     protected RDoubleVector doRawVector(RRawVector operand) {
         return createResultVector(operand, index -> RRuntime.raw2double(operand.getDataAt(index)));
     }