diff --git a/com.oracle.truffle.r.nodes.builtin/src/com/oracle/truffle/r/nodes/builtin/base/UpdateDiag.java b/com.oracle.truffle.r.nodes.builtin/src/com/oracle/truffle/r/nodes/builtin/base/UpdateDiag.java
index 1eaa5b17eff11588dc2b2b99bc81272719d85b50..9db416a6efd4a91baaae1971763b4fd6ab7f01a3 100644
--- a/com.oracle.truffle.r.nodes.builtin/src/com/oracle/truffle/r/nodes/builtin/base/UpdateDiag.java
+++ b/com.oracle.truffle.r.nodes.builtin/src/com/oracle/truffle/r/nodes/builtin/base/UpdateDiag.java
@@ -90,7 +90,7 @@ public abstract class UpdateDiag extends RInvisibleBuiltinNode {
         int nrow = resultVector.getDimensions()[0];
         int size = Math.min(nrow, resultVector.getDimensions()[1]);
         int pos = 0;
-        naCheck.enable(!resultVector.isComplete());
+        naCheck.enable(resultVector);
         for (int i = 0; i < size; i++) {
             resultVector.updateDataAt(pos, valueVector.getDataAt(i % valueVector.getLength()), naCheck);
             pos += nrow + 1;
@@ -110,7 +110,7 @@ public abstract class UpdateDiag extends RInvisibleBuiltinNode {
         int size = Math.min(resultVector.getDimensions()[0], resultVector.getDimensions()[1]);
         int nrow = resultVector.getDimensions()[0];
         int pos = 0;
-        naCheck.enable(!resultVector.isComplete());
+        naCheck.enable(resultVector);
         for (int i = 0; i < size; i++) {
             resultVector.updateDataAt(pos, valueVector.getDataAt(i % valueVector.getLength()), naCheck);
             pos += nrow + 1;
diff --git a/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/access/array/ArrayPositionCast.java b/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/access/array/ArrayPositionCast.java
index 6904958bc30fe97849d25f79d2d0768fdd266bd2..a9a70f2a664cbdb82df2582c83a0129092096996 100644
--- a/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/access/array/ArrayPositionCast.java
+++ b/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/access/array/ArrayPositionCast.java
@@ -659,7 +659,7 @@ public abstract class ArrayPositionCast extends ArrayPositionsCastBase {
             int logicalVectorLength = operand.getLength();
             int logicalVectorInd = 0;
             int[] data = new int[resultLength];
-            naCheck.enable(!operand.isComplete());
+            naCheck.enable(operand);
             int timesSeenFalse = 0;
             int timesSeenNA = 0;
             int i = 0;
diff --git a/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/access/array/read/AccessArrayNode.java b/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/access/array/read/AccessArrayNode.java
index 42cc3f0d73727ff0f766e5231a30dc66ca76f5c1..c39914478c57d7c429408e0d5dd6b0ac2215f5e8 100644
--- a/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/access/array/read/AccessArrayNode.java
+++ b/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/access/array/read/AccessArrayNode.java
@@ -368,7 +368,7 @@ public abstract class AccessArrayNode extends RNode {
             int accSrcDimensions = vector.getLength() / srcDimSize;
             int accDstDimensions = resLength / p.getLength();
 
-            elementNACheck.enable(!p.isComplete());
+            elementNACheck.enable(p);
             for (int i = 0; i < p.getLength(); i++) {
                 int dstArrayBase = accDstDimensions * i;
                 int pos = p.getDataAt(i);
@@ -1352,7 +1352,7 @@ public abstract class AccessArrayNode extends RNode {
             int accSrcDimensions = vector.getLength() / srcDimSize;
             int accDstDimensions = resLength / p.getLength();
 
-            elementNACheck.enable(!p.isComplete());
+            elementNACheck.enable(p);
             for (int i = 0; i < p.getLength(); i++) {
                 int dstArrayBase = accDstDimensions * i;
                 int pos = p.getDataAt(i);
diff --git a/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/binary/BinaryArithmeticNode.java b/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/binary/BinaryArithmeticNode.java
index ca31defef717cb4c7268e3c49f94a3b39e86a222..67602fb83ed29fc39cf02ccea30d332485c790b4 100644
--- a/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/binary/BinaryArithmeticNode.java
+++ b/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/binary/BinaryArithmeticNode.java
@@ -750,8 +750,8 @@ public abstract class BinaryArithmeticNode extends RBuiltinNode {
         if (emptyVector.profile(length == 0)) {
             return RDataFactory.createEmptyDoubleVector();
         }
-        leftNACheck.enable(!left.isComplete());
-        rightNACheck.enable(!right.isComplete());
+        leftNACheck.enable(left);
+        rightNACheck.enable(right);
         double[] result = new double[length];
         for (int i = 0; i < length; ++i) {
             double leftValue = left.getDataAt(i);
diff --git a/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/binary/BinaryBooleanNode.java b/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/binary/BinaryBooleanNode.java
index 40bec6926fa771ed92988b51ca2b2782a1a1ffd0..cd90c95aa52a8089b6d3e0b197ba2bf6abe24d64 100644
--- a/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/binary/BinaryBooleanNode.java
+++ b/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/binary/BinaryBooleanNode.java
@@ -1486,7 +1486,7 @@ public abstract class BinaryBooleanNode extends RBuiltinNode {
     private RLogicalVector performIntVectorOp(RAbstractIntVector left, double rightValue, boolean reverse) {
         int length = left.getLength();
         byte[] result = new byte[length];
-        leftNACheck.enable(!left.isComplete());
+        leftNACheck.enable(left);
         rightNACheck.enable(rightValue);
         for (int i = 0; i < length; ++i) {
             int leftValue = left.getDataAt(i);
@@ -1501,7 +1501,7 @@ public abstract class BinaryBooleanNode extends RBuiltinNode {
     private RLogicalVector performIntVectorOp(RAbstractIntVector left, String rightValue, boolean reverse) {
         int length = left.getLength();
         byte[] result = new byte[length];
-        leftNACheck.enable(!left.isComplete());
+        leftNACheck.enable(left);
         rightNACheck.enable(rightValue);
         for (int i = 0; i < length; ++i) {
             String leftValue = RRuntime.intToString(left.getDataAt(i), false);
@@ -1516,7 +1516,7 @@ public abstract class BinaryBooleanNode extends RBuiltinNode {
     private RLogicalVector performIntVectorOp(RAbstractIntVector left, RComplex rightValue, boolean reverse) {
         int length = left.getLength();
         byte[] result = new byte[length];
-        leftNACheck.enable(!left.isComplete());
+        leftNACheck.enable(left);
         rightNACheck.enable(rightValue);
         for (int i = 0; i < length; ++i) {
             RComplex leftValue = RRuntime.int2complex(left.getDataAt(i));
@@ -1533,7 +1533,7 @@ public abstract class BinaryBooleanNode extends RBuiltinNode {
     private RLogicalVector performDoubleVectorOp(RAbstractDoubleVector left, double rightValue, boolean reverse) {
         int length = left.getLength();
         byte[] result = new byte[length];
-        leftNACheck.enable(!left.isComplete());
+        leftNACheck.enable(left);
         rightNACheck.enable(rightValue);
         for (int i = 0; i < length; ++i) {
             double leftValue = left.getDataAt(i);
@@ -1548,7 +1548,7 @@ public abstract class BinaryBooleanNode extends RBuiltinNode {
     private RLogicalVector performDoubleVectorOp(RAbstractDoubleVector left, String rightValue, boolean reverse) {
         int length = left.getLength();
         byte[] result = new byte[length];
-        leftNACheck.enable(!left.isComplete());
+        leftNACheck.enable(left);
         rightNACheck.enable(rightValue);
         for (int i = 0; i < length; ++i) {
             String leftValue = RRuntime.doubleToString(left.getDataAt(i));
@@ -1563,7 +1563,7 @@ public abstract class BinaryBooleanNode extends RBuiltinNode {
     private RLogicalVector performDoubleVectorOp(RAbstractDoubleVector left, RComplex rightValue, boolean reverse) {
         int length = left.getLength();
         byte[] result = new byte[length];
-        leftNACheck.enable(!left.isComplete());
+        leftNACheck.enable(left);
         rightNACheck.enable(rightValue);
         for (int i = 0; i < length; ++i) {
             RComplex leftValue = RRuntime.double2complex(left.getDataAt(i));
@@ -1580,7 +1580,7 @@ public abstract class BinaryBooleanNode extends RBuiltinNode {
     private RLogicalVector performLogicalVectorOp(RAbstractLogicalVector left, double rightValue, boolean reverse) {
         int length = left.getLength();
         byte[] result = new byte[length];
-        leftNACheck.enable(!left.isComplete());
+        leftNACheck.enable(left);
         rightNACheck.enable(rightValue);
         for (int i = 0; i < length; ++i) {
             byte leftValue = left.getDataAt(i);
@@ -1595,7 +1595,7 @@ public abstract class BinaryBooleanNode extends RBuiltinNode {
     private RLogicalVector performLogicalVectorOp(RAbstractLogicalVector left, String rightValue, boolean reverse) {
         int length = left.getLength();
         byte[] result = new byte[length];
-        leftNACheck.enable(!left.isComplete());
+        leftNACheck.enable(left);
         rightNACheck.enable(rightValue);
         for (int i = 0; i < length; ++i) {
             String leftValue = RRuntime.logicalToString(left.getDataAt(i));
@@ -1610,7 +1610,7 @@ public abstract class BinaryBooleanNode extends RBuiltinNode {
     private RLogicalVector performLogicalVectorOp(RAbstractLogicalVector left, RComplex rightValue, boolean reverse) {
         int length = left.getLength();
         byte[] result = new byte[length];
-        leftNACheck.enable(!left.isComplete());
+        leftNACheck.enable(left);
         rightNACheck.enable(rightValue);
         for (int i = 0; i < length; ++i) {
             RComplex leftValue = RRuntime.logical2complex(left.getDataAt(i));
@@ -1627,7 +1627,7 @@ public abstract class BinaryBooleanNode extends RBuiltinNode {
     private RLogicalVector performStringVectorOp(RAbstractStringVector left, String rightValue, boolean reverse) {
         int length = left.getLength();
         byte[] result = new byte[length];
-        leftNACheck.enable(!left.isComplete());
+        leftNACheck.enable(left);
         rightNACheck.enable(rightValue);
         for (int i = 0; i < length; ++i) {
             String leftValue = left.getDataAt(i);
@@ -1644,7 +1644,7 @@ public abstract class BinaryBooleanNode extends RBuiltinNode {
     private RLogicalVector performComplexVectorOp(RAbstractComplexVector left, RComplex rightValue, boolean reverse) {
         int length = left.getLength();
         byte[] result = new byte[length];
-        leftNACheck.enable(!left.isComplete());
+        leftNACheck.enable(left);
         rightNACheck.enable(rightValue);
         for (int i = 0; i < length; ++i) {
             RComplex leftValue = left.getDataAt(i);
@@ -1659,7 +1659,7 @@ public abstract class BinaryBooleanNode extends RBuiltinNode {
     private RLogicalVector performComplexVectorOp(RAbstractComplexVector left, String rightValue, boolean reverse) {
         int length = left.getLength();
         byte[] result = new byte[length];
-        leftNACheck.enable(!left.isComplete());
+        leftNACheck.enable(left);
         rightNACheck.enable(rightValue);
         for (int i = 0; i < length; ++i) {
             String leftValue = RRuntime.complexToString(left.getDataAt(i));
@@ -1674,7 +1674,7 @@ public abstract class BinaryBooleanNode extends RBuiltinNode {
     private RLogicalVector performRawVectorOp(RAbstractRawVector left, double rightValue, boolean reverse) {
         int length = left.getLength();
         byte[] result = new byte[length];
-        leftNACheck.enable(!left.isComplete());
+        leftNACheck.enable(left);
         rightNACheck.enable(rightValue);
         for (int i = 0; i < length; ++i) {
             double leftValue = RRuntime.raw2double(left.getDataAt(i));
@@ -1689,7 +1689,7 @@ public abstract class BinaryBooleanNode extends RBuiltinNode {
     private RLogicalVector performRawVectorOp(RAbstractRawVector left, String rightValue, boolean reverse) {
         int length = left.getLength();
         byte[] result = new byte[length];
-        leftNACheck.enable(!left.isComplete());
+        leftNACheck.enable(left);
         rightNACheck.enable(rightValue);
         for (int i = 0; i < length; ++i) {
             String leftValue = RRuntime.rawToString(left.getDataAt(i));
@@ -1704,7 +1704,7 @@ public abstract class BinaryBooleanNode extends RBuiltinNode {
     private RLogicalVector performRawVectorOp(RAbstractRawVector left, RComplex rightValue, boolean reverse) {
         int length = left.getLength();
         byte[] result = new byte[length];
-        leftNACheck.enable(!left.isComplete());
+        leftNACheck.enable(left);
         rightNACheck.enable(rightValue);
         for (int i = 0; i < length; ++i) {
             RComplex leftValue = RRuntime.raw2complex(left.getDataAt(i));
@@ -1735,8 +1735,8 @@ public abstract class BinaryBooleanNode extends RBuiltinNode {
         assert areSameLength(left, right);
         int length = left.getLength();
         byte[] result = new byte[length];
-        leftNACheck.enable(!left.isComplete());
-        rightNACheck.enable(!right.isComplete());
+        leftNACheck.enable(left);
+        rightNACheck.enable(right);
         for (int i = 0; i < length; ++i) {
             int leftValue = left.getDataAt(i);
             int rightValue = right.getDataAt(i);
@@ -1754,8 +1754,8 @@ public abstract class BinaryBooleanNode extends RBuiltinNode {
         int rightLength = right.getLength();
         int resultLength = Math.max(leftLength, rightLength);
         byte[] result = new byte[resultLength];
-        leftNACheck.enable(!left.isComplete());
-        rightNACheck.enable(!right.isComplete());
+        leftNACheck.enable(left);
+        rightNACheck.enable(right);
         int l = 0;
         int r = 0;
         for (int i = 0; i < resultLength; ++i, l = Utils.incMod(l, leftLength), r = Utils.incMod(r, rightLength)) {
@@ -1780,8 +1780,8 @@ public abstract class BinaryBooleanNode extends RBuiltinNode {
         assert areSameLength(left, right);
         int length = left.getLength();
         byte[] result = new byte[length];
-        leftNACheck.enable(!left.isComplete());
-        rightNACheck.enable(!right.isComplete());
+        leftNACheck.enable(left);
+        rightNACheck.enable(right);
         for (int i = 0; i < length; ++i) {
             double leftValue = left.getDataAt(i);
             double rightValue = right.getDataAt(i);
@@ -1799,8 +1799,8 @@ public abstract class BinaryBooleanNode extends RBuiltinNode {
         int rightLength = right.getLength();
         int resultLength = Math.max(leftLength, rightLength);
         byte[] result = new byte[resultLength];
-        leftNACheck.enable(!left.isComplete());
-        rightNACheck.enable(!right.isComplete());
+        leftNACheck.enable(left);
+        rightNACheck.enable(right);
         int l = 0;
         int r = 0;
         for (int i = 0; i < resultLength; ++i, l = Utils.incMod(l, leftLength), r = Utils.incMod(r, rightLength)) {
@@ -1825,8 +1825,8 @@ public abstract class BinaryBooleanNode extends RBuiltinNode {
         assert areSameLength(left, right);
         int length = left.getLength();
         byte[] result = new byte[length];
-        leftNACheck.enable(!left.isComplete());
-        rightNACheck.enable(!right.isComplete());
+        leftNACheck.enable(left);
+        rightNACheck.enable(right);
         for (int i = 0; i < length; ++i) {
             String leftValue = left.getDataAt(i);
             String rightValue = right.getDataAt(i);
@@ -1844,8 +1844,8 @@ public abstract class BinaryBooleanNode extends RBuiltinNode {
         int rightLength = right.getLength();
         int resultLength = Math.max(leftLength, rightLength);
         byte[] result = new byte[resultLength];
-        leftNACheck.enable(!left.isComplete());
-        rightNACheck.enable(!right.isComplete());
+        leftNACheck.enable(left);
+        rightNACheck.enable(right);
         int l = 0;
         int r = 0;
         for (int i = 0; i < resultLength; ++i, l = Utils.incMod(l, leftLength), r = Utils.incMod(r, rightLength)) {
@@ -1870,8 +1870,8 @@ public abstract class BinaryBooleanNode extends RBuiltinNode {
         assert areSameLength(left, right);
         int length = left.getLength();
         byte[] result = new byte[length];
-        leftNACheck.enable(!left.isComplete());
-        rightNACheck.enable(!right.isComplete());
+        leftNACheck.enable(left);
+        rightNACheck.enable(right);
         for (int i = 0; i < length; ++i) {
             RComplex leftValue = left.getDataAt(i);
             RComplex rightValue = right.getDataAt(i);
@@ -1889,8 +1889,8 @@ public abstract class BinaryBooleanNode extends RBuiltinNode {
         int rightLength = right.getLength();
         int resultLength = Math.max(leftLength, rightLength);
         byte[] result = new byte[resultLength];
-        leftNACheck.enable(!left.isComplete());
-        rightNACheck.enable(!right.isComplete());
+        leftNACheck.enable(left);
+        rightNACheck.enable(right);
         int l = 0;
         int r = 0;
         for (int i = 0; i < resultLength; ++i, l = Utils.incMod(l, leftLength), r = Utils.incMod(r, rightLength)) {
diff --git a/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/binary/CombineBinaryNode.java b/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/binary/CombineBinaryNode.java
index 9f6f63829b619000eb2bbfb0628951d4529ec63d..cb95bbc879f74aa6fc59ae700e01c2d25f24502b 100644
--- a/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/binary/CombineBinaryNode.java
+++ b/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/binary/CombineBinaryNode.java
@@ -47,7 +47,7 @@ public abstract class CombineBinaryNode extends BinaryNode {
             namesData[i++] = RRuntime.NAMES_ATTR_EMPTY_VALUE;
             to++;
         }
-        naCheck.enable(!orgNames.isComplete());
+        naCheck.enable(orgNames);
         for (int j = 0; i < to; i++, j++) {
             namesData[i] = orgNames.getDataAt(j);
             naCheck.check(namesData[i]);