diff --git a/com.oracle.truffle.r.nodes.test/src/com/oracle/truffle/r/nodes/access/vector/ExtractVectorNodeTest.java b/com.oracle.truffle.r.nodes.test/src/com/oracle/truffle/r/nodes/access/vector/ExtractVectorNodeTest.java
index 7461c2db64119fac2900b7d4a75528f9bd83a4af..493c99a19620accd491332e806e1461c84abca13 100644
--- a/com.oracle.truffle.r.nodes.test/src/com/oracle/truffle/r/nodes/access/vector/ExtractVectorNodeTest.java
+++ b/com.oracle.truffle.r.nodes.test/src/com/oracle/truffle/r/nodes/access/vector/ExtractVectorNodeTest.java
@@ -217,15 +217,29 @@ public class ExtractVectorNodeTest extends TestBase {
     }
 
     @Theory
-    public void testCompletenessAfterExtraction(RType targetType) {
+    public void testCompletenessAfterScalarExtraction(RType targetType) {
         RAbstractVector vector = generateVector(targetType, 4, false);
 
+        assumeTrue(targetType != RType.List);
         assumeThat(vector.isComplete(), is(false));
         RAbstractVector result = executeExtract(ElementAccessMode.SUBSET, vector, RInteger.valueOf(1));
 
         assertThat(result.isComplete(), is(true));
     }
 
+    @Theory
+    public void testCompletenessAfterExtraction(RType targetType) {
+        RAbstractVector vector = generateVector(targetType, 4, false);
+
+        assumeTrue(targetType != RType.List);
+        assumeThat(vector.isComplete(), is(false));
+        // extract some non NA elements
+        int[] positions = targetType == RType.Complex ? new int[]{1, 3} : new int[]{1, 2};
+        RAbstractVector result = executeExtract(ElementAccessMode.SUBSET, vector, RDataFactory.createIntVector(positions, true));
+
+        assertThat(result.isComplete(), is(true));
+    }
+
     @Theory
     public void testCompletenessAfterSelectAll(RType targetType) {
         RAbstractVector vector = generateVector(targetType, 4, false);
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 24672b60829f63b8fb5df40c2f7e5c3d7aa16526..79066816d08601c10f17f593d7f11fa4c6226eac 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
@@ -120,11 +120,12 @@ public abstract class BinaryBooleanScalarNode extends RBuiltinNode.Arg2 {
         }
 
         private byte castImpl(RAbstractVector vector) {
-            this.check.enable(!vector.isComplete());
             if (vector.getLength() == 0) {
                 seenEmpty.enter();
+                this.check.enable(true);
                 return RRuntime.LOGICAL_NA;
             }
+            this.check.enable(!vector.isComplete());
             RType type = vector.getRType();
             CompilerAsserts.compilationConstant(type);
             switch (type) {
diff --git a/com.oracle.truffle.r.runtime/src/com/oracle/truffle/r/runtime/data/RDataFactory.java b/com.oracle.truffle.r.runtime/src/com/oracle/truffle/r/runtime/data/RDataFactory.java
index 2587193a855ef1fc6a9fd79822a15f1459f97366..4d2214df1c02417d30f4c278add801cdc54dd65d 100644
--- a/com.oracle.truffle.r.runtime/src/com/oracle/truffle/r/runtime/data/RDataFactory.java
+++ b/com.oracle.truffle.r.runtime/src/com/oracle/truffle/r/runtime/data/RDataFactory.java
@@ -967,7 +967,7 @@ public final class RDataFactory {
         if (fillNA) {
             Arrays.fill(data, RRuntime.LOGICAL_NA);
         }
-        return createLogicalVector(data, false);
+        return createLogicalVector(data, !fillNA);
     }
 
     public static RLogicalVector createLogicalVector(byte[] data, boolean complete) {
diff --git a/com.oracle.truffle.r.runtime/src/com/oracle/truffle/r/runtime/data/RList.java b/com.oracle.truffle.r.runtime/src/com/oracle/truffle/r/runtime/data/RList.java
index ee3847e78bdd6e922630eb9882c3f90b42138ccd..c886692fd1f02b6cd248f2b8199660c55aa03e93 100644
--- a/com.oracle.truffle.r.runtime/src/com/oracle/truffle/r/runtime/data/RList.java
+++ b/com.oracle.truffle.r.runtime/src/com/oracle/truffle/r/runtime/data/RList.java
@@ -28,10 +28,16 @@ import com.oracle.truffle.api.CompilerDirectives.TruffleBoundary;
 import com.oracle.truffle.r.runtime.RType;
 import com.oracle.truffle.r.runtime.data.model.RAbstractContainer;
 import com.oracle.truffle.r.runtime.data.model.RAbstractListVector;
+import com.oracle.truffle.r.runtime.data.model.RAbstractVector;
 import com.oracle.truffle.r.runtime.data.nodes.FastPathVectorAccess.FastPathFromListAccess;
 import com.oracle.truffle.r.runtime.data.nodes.SlowPathVectorAccess.SlowPathFromListAccess;
 import com.oracle.truffle.r.runtime.data.nodes.VectorAccess;
 
+/**
+ * A note on the RList complete flag {@link RAbstractVector#isComplete() } - it is always
+ * initialized with <code>false</code> in {@link RListBase#RListBase(java.lang.Object[])} and never
+ * expected to change.
+ */
 public final class RList extends RListBase implements RAbstractListVector {
 
     public String elementNamePrefix;
diff --git a/com.oracle.truffle.r.runtime/src/com/oracle/truffle/r/runtime/data/model/RAbstractVector.java b/com.oracle.truffle.r.runtime/src/com/oracle/truffle/r/runtime/data/model/RAbstractVector.java
index 43039d80a1facd3c392b8cf758a7f46f97081d96..73637118f3f030410565aacc9f338eb1d4733b31 100644
--- a/com.oracle.truffle.r.runtime/src/com/oracle/truffle/r/runtime/data/model/RAbstractVector.java
+++ b/com.oracle.truffle.r.runtime/src/com/oracle/truffle/r/runtime/data/model/RAbstractVector.java
@@ -116,6 +116,8 @@ public interface RAbstractVector extends RAbstractContainer {
                     assert access.getListElement(iter) != null : "element " + iter.getIndex() + " of vector " + vector + " is null";
                 }
             }
+        } else if (access.getType() == RType.List) {
+            assert !vector.isComplete();
         }
         if (vector.isComplete()) {
             // check all vectors for completeness