diff --git a/com.oracle.truffle.r.nodes.builtin/src/com/oracle/truffle/r/nodes/builtin/base/Bind.java b/com.oracle.truffle.r.nodes.builtin/src/com/oracle/truffle/r/nodes/builtin/base/Bind.java
index 14584bfb602fe33c6aaf0ebe0e2016955e4e92c9..4f6dba39bcf6f755e02e3d4248270f4fedd84b60 100644
--- a/com.oracle.truffle.r.nodes.builtin/src/com/oracle/truffle/r/nodes/builtin/base/Bind.java
+++ b/com.oracle.truffle.r.nodes.builtin/src/com/oracle/truffle/r/nodes/builtin/base/Bind.java
@@ -111,6 +111,7 @@ public abstract class Bind extends RBaseNode {
     private final ConditionProfile emptyVectorProfile = ConditionProfile.createBinaryProfile();
     private final ConditionProfile allEmptyVectorProfile = ConditionProfile.createBinaryProfile();
     private final BranchProfile nonNullNames = BranchProfile.create();
+    private final ConditionProfile dimNamesInComplete = ConditionProfile.createBinaryProfile();
     private final NACheck naCheck = NACheck.create();
     protected final ValueProfile resultProfile = ValueProfile.createClassProfile();
     protected final ValueProfile vectorProfile = ValueProfile.createClassProfile();
@@ -200,11 +201,11 @@ public abstract class Bind extends RBaseNode {
         }
 
         if (type == BindType.cbind) {
-            return genericCBind(promiseArgs, vectors, resultVec, resultDimensions, bindDims, rowsAndColumnsNotEqual, allEmpty, vecNames, naCheck.neverSeenNA(), deparseLevel, setDimNode,
-                            getDimNamesNode, getNamesNode);
+            return genericCBind(promiseArgs, vectors, resultVec, resultDimensions, bindDims, rowsAndColumnsNotEqual, allEmpty, vecNames, deparseLevel, setDimNode, getDimNamesNode,
+                            getNamesNode);
         } else {
-            return genericRBind(promiseArgs, vectors, resultVec, resultDimensions, bindDims, rowsAndColumnsNotEqual, allEmpty, vecNames, naCheck.neverSeenNA(), deparseLevel, setDimNode,
-                            getDimNamesNode, getNamesNode);
+            return genericRBind(promiseArgs, vectors, resultVec, resultDimensions, bindDims, rowsAndColumnsNotEqual, allEmpty, vecNames, deparseLevel, setDimNode, getDimNamesNode,
+                            getNamesNode);
         }
     }
 
@@ -472,8 +473,8 @@ public abstract class Bind extends RBaseNode {
     }
 
     public RVector<?> genericCBind(RArgsValuesAndNames promiseArgs, RAbstractVector[] vectors, RVector<?> result, int[] resultDimensions, int[] secondDims, boolean rowsAndColumnsNotEqual,
-                    boolean allEmpty, String[] vecNames, boolean vecNamesComplete, int deparseLevel,
-                    SetDimAttributeNode setDimNode, GetDimNamesAttributeNode getDimNamesNode, GetNamesAttributeNode getNamesNode) {
+                    boolean allEmpty, String[] vecNames, int deparseLevel, SetDimAttributeNode setDimNode,
+                    GetDimNamesAttributeNode getDimNamesNode, GetNamesAttributeNode getNamesNode) {
 
         int ind = 0;
         Object rowDimResultNames = RNull.instance;
@@ -516,7 +517,7 @@ public abstract class Bind extends RBaseNode {
                 }
             }
         }
-        Object colDimResultNames = allColDimNamesNull ? RNull.instance : RDataFactory.createStringVector(colDimNamesArray, vecNamesComplete);
+        Object colDimResultNames = allColDimNamesNull ? RNull.instance : RDataFactory.createStringVector(colDimNamesArray, dimResultNamesComplete(colDimNamesArray));
         setDimNode.setDimensions(result, resultDimensions);
         if (needsDimNames.profile(allEmpty || rowDimResultNames != RNull.instance || colDimResultNames != RNull.instance)) {
             setDimNames(result, RDataFactory.createList(new Object[]{rowDimResultNames, colDimResultNames}));
@@ -626,8 +627,8 @@ public abstract class Bind extends RBaseNode {
     }
 
     public RVector<?> genericRBind(RArgsValuesAndNames promiseArgs, RAbstractVector[] vectors, RVector<?> result, int[] resultDimensions, int[] firstDims, boolean rowsAndColumnsNotEqual,
-                    boolean allEmpty, String[] vecNames, boolean vecNamesComplete, int deparseLevel,
-                    SetDimAttributeNode setDimNode, GetDimNamesAttributeNode getDimNamesNode, GetNamesAttributeNode getNamesNode) {
+                    boolean allEmpty, String[] vecNames, int deparseLevel, SetDimAttributeNode setDimNode,
+                    GetDimNamesAttributeNode getDimNamesNode, GetNamesAttributeNode getNamesNode) {
 
         Object colDimResultNames = RNull.instance;
         String[] rowDimNamesArray = new String[resultDimensions[0]];
@@ -676,7 +677,7 @@ public abstract class Bind extends RBaseNode {
             dstRowInd += firstDims[i];
 
         }
-        Object rowDimResultNames = allRowDimNamesNull ? RNull.instance : RDataFactory.createStringVector(rowDimNamesArray, vecNamesComplete);
+        Object rowDimResultNames = allRowDimNamesNull ? RNull.instance : RDataFactory.createStringVector(rowDimNamesArray, dimResultNamesComplete(rowDimNamesArray));
         setDimNode.setDimensions(result, resultDimensions);
         if (needsDimNames.profile(allEmpty || rowDimResultNames != RNull.instance || colDimResultNames != RNull.instance)) {
             setDimNames(result, RDataFactory.createList(new Object[]{rowDimResultNames, colDimResultNames}));
@@ -684,6 +685,15 @@ public abstract class Bind extends RBaseNode {
         return result;
     }
 
+    private boolean dimResultNamesComplete(String[] rowDimNamesArray) {
+        for (String s : rowDimNamesArray) {
+            if (dimNamesInComplete.profile(s == RRuntime.STRING_NA)) {
+                return RDataFactory.INCOMPLETE_VECTOR;
+            }
+        }
+        return RDataFactory.COMPLETE_VECTOR;
+    }
+
     private void setDimNames(RVector<?> result, RList dimNames) {
         if (setDimNamesNode == null) {
             CompilerDirectives.transferToInterpreterAndInvalidate();
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 905c96ba42c7e43f7ead96859f002c13a22f7891..518a18ac1c3f29444059210faea554c43686e327 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
@@ -11984,6 +11984,12 @@ c 2
   a  c
 1 7 42
 
+##com.oracle.truffle.r.test.builtins.TestBuiltin_cbind.testCbind#
+#{x <- numeric(); y <- matrix(2,2); dimnames(y) <- list(c(NA_character_,NA_character_), c(NA_character_)); rbind(x, y) }
+     <NA>
+<NA>    2
+<NA>    2
+
 ##com.oracle.truffle.r.test.builtins.TestBuiltin_cbind.testDimnames#
 #{ attributes(cbind(1L)) }
 $dim
diff --git a/com.oracle.truffle.r.test/src/com/oracle/truffle/r/test/builtins/TestBuiltin_cbind.java b/com.oracle.truffle.r.test/src/com/oracle/truffle/r/test/builtins/TestBuiltin_cbind.java
index d39f463f15a32fc012ce216b0797e9f95b6d16e2..cccb74db2a90c019cccf53a714362371e920a6e4 100644
--- a/com.oracle.truffle.r.test/src/com/oracle/truffle/r/test/builtins/TestBuiltin_cbind.java
+++ b/com.oracle.truffle.r.test/src/com/oracle/truffle/r/test/builtins/TestBuiltin_cbind.java
@@ -62,6 +62,7 @@ public class TestBuiltin_cbind extends TestBase {
         assertEval("{ cbind(c(1,c=2)) }");
         assertEval("{ v<-c(b=1, c=2); cbind(v) }");
         assertEval("{ cbind(matrix(1:4, nrow=2, dimnames=list(c('a', 'b'), c('x', 'y')))) }");
+        assertEval("{x <- numeric(); y <- matrix(2,2); dimnames(y) <- list(c(NA_character_,NA_character_), c(NA_character_)); rbind(x, y) }");
 
         assertEval("{ cbind(a=c(1,2), b=c(3,4)) }");
         assertEval("{ cbind(a=c(x=1,y=2), b=c(3,4)) }");