diff --git a/com.oracle.truffle.r.nodes.builtin/src/com/oracle/truffle/r/nodes/builtin/base/NChar.java b/com.oracle.truffle.r.nodes.builtin/src/com/oracle/truffle/r/nodes/builtin/base/NChar.java
index 8278cc60981a9f8cf7b03093de861ca479e18696..1f0a0a0deb44b0cb65f736923ed39858c624ab8f 100644
--- a/com.oracle.truffle.r.nodes.builtin/src/com/oracle/truffle/r/nodes/builtin/base/NChar.java
+++ b/com.oracle.truffle.r.nodes.builtin/src/com/oracle/truffle/r/nodes/builtin/base/NChar.java
@@ -31,6 +31,7 @@ import static com.oracle.truffle.r.runtime.builtins.RBuiltinKind.INTERNAL;
 
 import com.oracle.truffle.api.dsl.Cached;
 import com.oracle.truffle.api.dsl.Specialization;
+import com.oracle.truffle.api.profiles.ConditionProfile;
 import com.oracle.truffle.api.profiles.LoopConditionProfile;
 import com.oracle.truffle.r.nodes.builtin.CastBuilder;
 import com.oracle.truffle.r.nodes.builtin.RBuiltinNode;
@@ -39,6 +40,7 @@ import com.oracle.truffle.r.runtime.builtins.RBuiltin;
 import com.oracle.truffle.r.runtime.data.RAttributeProfiles;
 import com.oracle.truffle.r.runtime.data.RDataFactory;
 import com.oracle.truffle.r.runtime.data.RIntVector;
+import com.oracle.truffle.r.runtime.data.RList;
 import com.oracle.truffle.r.runtime.data.RNull;
 import com.oracle.truffle.r.runtime.data.model.RAbstractIntVector;
 import com.oracle.truffle.r.runtime.data.model.RAbstractStringVector;
@@ -65,7 +67,8 @@ public abstract class NChar extends RBuiltinNode {
     @Specialization
     protected RIntVector ncharInt(RAbstractIntVector vector, String type, boolean allowNA, boolean keepNA,
                     @Cached("createCountingProfile()") LoopConditionProfile loopProfile,
-                    @Cached("create()") RAttributeProfiles attrProfiles) {
+                    @Cached("create()") RAttributeProfiles attrProfiles,
+                    @Cached("createBinaryProfile()") ConditionProfile nullDimNamesProfile) {
         int len = vector.getLength();
         int[] result = new int[len];
         loopProfile.profileCounted(len);
@@ -77,20 +80,31 @@ public abstract class NChar extends RBuiltinNode {
                 result[i] = (int) (Math.log10(x) + 1); // not the fastest one
             }
         }
-        return RDataFactory.createIntVector(result, true, vector.getNames(attrProfiles));
+        RIntVector resultVector = RDataFactory.createIntVector(result, true, vector.getDimensions(), vector.getNames(attrProfiles));
+        RList dimNames = vector.getDimNames(attrProfiles);
+        if (nullDimNamesProfile.profile(dimNames != null)) {
+            resultVector.setDimNames(dimNames);
+        }
+        return resultVector;
     }
 
     @SuppressWarnings("unused")
     @Specialization
     protected RIntVector nchar(RAbstractStringVector vector, String type, boolean allowNA, boolean keepNA,
                     @Cached("createCountingProfile()") LoopConditionProfile loopProfile,
-                    @Cached("create()") RAttributeProfiles attrProfiles) {
+                    @Cached("create()") RAttributeProfiles attrProfiles,
+                    @Cached("createBinaryProfile()") ConditionProfile nullDimNamesProfile) {
         int len = vector.getLength();
         int[] result = new int[len];
         loopProfile.profileCounted(len);
         for (int i = 0; loopProfile.inject(i < len); i++) {
             result[i] = vector.getDataAt(i).length();
         }
-        return RDataFactory.createIntVector(result, true, vector.getNames(attrProfiles));
+        RIntVector resultVector = RDataFactory.createIntVector(result, true, vector.getDimensions(), vector.getNames(attrProfiles));
+        RList dimNames = vector.getDimNames(attrProfiles);
+        if (nullDimNamesProfile.profile(dimNames != null)) {
+            resultVector.setDimNames(dimNames);
+        }
+        return resultVector;
     }
 }
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 23155f5972230c49d5b3b2f5f98f9ae11a719610..bc39543b242e537fe5ae0ce8f5e67d3ffb8bb08e 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
@@ -24612,6 +24612,13 @@ Warning message:
 In is.na(quote(x())) :
   is.na() applied to non-(list or vector) of type 'language'
 
+##com.oracle.truffle.r.test.builtins.TestBuiltin_isna.testIsNA
+#v <- c(a=1,b=1234,c='ff',d='gg'); dim(v) <- c(foo=2,bar=2); dimnames(v) <- list(a=c('foo', 'bar'), n=c('f','g')); is.na(v)
+     n
+a         f     g
+  foo FALSE FALSE
+  bar FALSE FALSE
+
 ##com.oracle.truffle.r.test.builtins.TestBuiltin_isna.testIsNA
 #{ is.na(1[10]) }
 [1] TRUE
@@ -32514,6 +32521,13 @@ Wyoming         97203          West
 #nargs( );
 [1] NA
 
+##com.oracle.truffle.r.test.builtins.TestBuiltin_nchar.testNChar
+#v <- c(a=1,b=1234,c='ff',d='gg'); dim(v) <- c(foo=2,bar=2); dimnames(v) <- list(a=c('foo', 'bar'), n=c('f','g')); nchar(v)
+     n
+a     f g
+  foo 1 2
+  bar 4 2
+
 ##com.oracle.truffle.r.test.builtins.TestBuiltin_nchar.testNChar
 #{ .Internal(nchar('ff', 'chars', FALSE)) }
 [1] 2
diff --git a/com.oracle.truffle.r.test/src/com/oracle/truffle/r/test/builtins/TestBuiltin_isna.java b/com.oracle.truffle.r.test/src/com/oracle/truffle/r/test/builtins/TestBuiltin_isna.java
index e7290d237c5fb23470405701ad86070938ec2687..62579fa7e73d6e5798f23895b5bd37c3fe736e55 100644
--- a/com.oracle.truffle.r.test/src/com/oracle/truffle/r/test/builtins/TestBuiltin_isna.java
+++ b/com.oracle.truffle.r.test/src/com/oracle/truffle/r/test/builtins/TestBuiltin_isna.java
@@ -254,5 +254,8 @@ public class TestBuiltin_isna extends TestBase {
         // Note: is.na.data.frame calls do.call("cbind", lapply(x, "is.na")) - there is the error
         // Probably the same error as in testisna13
         assertEval(Ignored.Unimplemented, "is.na(data.frame(col1=1:5, col2=c(NA, 1, NA, 2, NA)))");
+
+        assertEval("v <- c(a=1,b=1234,c='ff',d='gg'); dim(v) <- c(foo=2,bar=2); dimnames(v) <- list(a=c('foo', 'bar'), n=c('f','g')); is.na(v)");
+
     }
 }
diff --git a/com.oracle.truffle.r.test/src/com/oracle/truffle/r/test/builtins/TestBuiltin_nchar.java b/com.oracle.truffle.r.test/src/com/oracle/truffle/r/test/builtins/TestBuiltin_nchar.java
index eb57d88caea23c253cce644a916e49e6d435029f..232fe1a6a324287bbc63a5b50dc842a2c459bc65 100644
--- a/com.oracle.truffle.r.test/src/com/oracle/truffle/r/test/builtins/TestBuiltin_nchar.java
+++ b/com.oracle.truffle.r.test/src/com/oracle/truffle/r/test/builtins/TestBuiltin_nchar.java
@@ -84,5 +84,7 @@ public class TestBuiltin_nchar extends TestBase {
         assertEval("{ nchar(c(10,130)) }");
         assertEval("{ .Internal(nchar(c(10,130), 'chars', FALSE)) }");
         assertEval("{ .Internal(nchar('ff', 'chars', FALSE)) }");
+
+        assertEval("v <- c(a=1,b=1234,c='ff',d='gg'); dim(v) <- c(foo=2,bar=2); dimnames(v) <- list(a=c('foo', 'bar'), n=c('f','g')); nchar(v)");
     }
 }