diff --git a/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/builtin/base/BasePackage.java b/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/builtin/base/BasePackage.java
index 568a837e407f11b28d3c0e5df95060ddc33e37e5..5f695cded947ce4a5346201257ddf9536927a3d5 100644
--- a/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/builtin/base/BasePackage.java
+++ b/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/builtin/base/BasePackage.java
@@ -85,6 +85,7 @@ public class BasePackage extends RPackage {
         load(CumSum.class);
         load(Diag.class);
         load(Dim.class);
+        load(DimNames.class);
         load(DoubleBuiltin.class);
         load(EmptyEnv.class);
         load(Exists.class);
@@ -167,6 +168,7 @@ public class BasePackage extends RPackage {
         load(UpdateAttributes.class);
         load(UpdateDiag.class);
         load(UpdateDim.class);
+        load(UpdateDimNames.class);
         load(UpdateLength.class);
         load(UpdateNames.class);
         load(UpperTri.class);
diff --git a/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/builtin/base/DimNames.java b/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/builtin/base/DimNames.java
new file mode 100644
index 0000000000000000000000000000000000000000..2b81dd39e7a5db5c797e83ed73f44385b4006486
--- /dev/null
+++ b/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/builtin/base/DimNames.java
@@ -0,0 +1,52 @@
+/*
+ * Copyright (c) 2013, 2014, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+package com.oracle.truffle.r.nodes.builtin.base;
+
+import com.oracle.truffle.api.dsl.*;
+import com.oracle.truffle.r.nodes.builtin.*;
+import com.oracle.truffle.r.runtime.data.*;
+import com.oracle.truffle.r.runtime.data.model.*;
+
+@RBuiltin("dimnames")
+public abstract class DimNames extends RBuiltinNode {
+
+    @Specialization
+    public RNull getDimNames(RNull operand) {
+        return operand;
+    }
+
+    @Specialization(guards = "!isNull")
+    public RList getDimNames(RAbstractVector vector) {
+        return vector.getDimNames();
+    }
+
+    @Specialization(guards = "isNull")
+    public RNull getDimNamesNull(@SuppressWarnings("unused") RAbstractVector vector) {
+        return RNull.instance;
+    }
+
+    protected boolean isNull(RAbstractVector vector) {
+        return vector.getDimNames() == null;
+    }
+
+}
diff --git a/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/builtin/base/UpdateDimNames.java b/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/builtin/base/UpdateDimNames.java
index abeb341174cb88b39ece6208c64fec0cedd8ad5a..e58d4689d0194d5fb1d96cd4d0a1cef55ba36bd0 100644
--- a/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/builtin/base/UpdateDimNames.java
+++ b/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/builtin/base/UpdateDimNames.java
@@ -33,7 +33,7 @@ import com.oracle.truffle.r.runtime.*;
 import com.oracle.truffle.r.runtime.data.*;
 import com.oracle.truffle.r.runtime.data.model.*;
 
-@RBuiltin("dimnnames<-")
+@RBuiltin("dimnames<-")
 @SuppressWarnings("unused")
 public abstract class UpdateDimNames extends RBuiltinNode {
 
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 7883a6d0927cfc26f013d7996f7cf0bf06b83a96..20a60666f09f59c22f185612dc0602b91e70154e 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
@@ -3328,6 +3328,14 @@ NULL
 #{ dim(1:3) }
 NULL
 
+##com.oracle.truffle.r.test.simple.TestSimpleBuiltins.testDimensions
+#{ dimnames(1) }
+NULL
+
+##com.oracle.truffle.r.test.simple.TestSimpleBuiltins.testDimensions
+#{ dimnames(NULL) }
+NULL
+
 ##com.oracle.truffle.r.test.simple.TestSimpleBuiltins.testDimensions
 #{ m <- matrix(1:6, nrow=3) ; dim(m) }
 [1] 3 2
@@ -3457,6 +3465,24 @@ attr(,"foo")
 #{ x<-1:4; y<-c(2, 2); dim(x)<-y; y[1]=4; dim(x) }
 [1] 2 2
 
+##com.oracle.truffle.r.test.simple.TestSimpleBuiltins.testDimensions
+#{ x<-1; dim(x)<-1; attr(x, "dimnames")<-1 }
+Error in attr(x, "dimnames") <- 1 : 'dimnames' must be a list
+
+##com.oracle.truffle.r.test.simple.TestSimpleBuiltins.testDimensions
+#{ x<-1; dim(x)<-1; dimnames(x)<-1; dimnames(x) }
+Error in dimnames(x) <- 1 : 'dimnames' must be a list
+
+##com.oracle.truffle.r.test.simple.TestSimpleBuiltins.testDimensions
+#{ x<-1; dim(x)<-1; dimnames(x)<-list("a"); dimnames(x); dimnames(x)<-list(); dimnames(x) }
+NULL
+
+##com.oracle.truffle.r.test.simple.TestSimpleBuiltins.testDimensions
+#{ x<-1; dim(x)<-1; dimnames(x)<-list() }
+
+##com.oracle.truffle.r.test.simple.TestSimpleBuiltins.testDimensions
+#{ x<-1; dim(x)<-1; dimnames(x)<-list(0) }
+
 ##com.oracle.truffle.r.test.simple.TestSimpleBuiltins.testDimensions
 #{ x<-1; dim(x)=1; attr(x, "foo")<-"foo"; dim(x)<-NULL; attributes(x) }
 $foo
@@ -3471,6 +3497,10 @@ NULL
 #{ x<-1; dim(x)=1; names(x)<-"a"; dim(x)<-NULL; attributes(x) }
 NULL
 
+##com.oracle.truffle.r.test.simple.TestSimpleBuiltins.testDimensions
+#{ x<-1; dimnames(x) }
+NULL
+
 ##com.oracle.truffle.r.test.simple.TestSimpleBuiltins.testDimensions
 #{ x<-42; y<-(dim(x)<-1); y }
 [1] 1
diff --git a/com.oracle.truffle.r.test/src/com/oracle/truffle/r/test/all/AllTests.java b/com.oracle.truffle.r.test/src/com/oracle/truffle/r/test/all/AllTests.java
index 3bd952a47a9c9921048de9e3559a7a335e50a31c..a9ea3c4f649312c34c5c74ee6c1518ac1ae5b5e7 100644
--- a/com.oracle.truffle.r.test/src/com/oracle/truffle/r/test/all/AllTests.java
+++ b/com.oracle.truffle.r.test/src/com/oracle/truffle/r/test/all/AllTests.java
@@ -5868,6 +5868,36 @@ public class AllTests extends TestBase {
         assertEval("{ x<-list(1,2,3); names(x)<-c(21:23); attr(x, \"dim\")<-c(3); attr(x, \"foo\")<-\"foo\"; x }");
     }
 
+    @Test
+    public void TestSimpleBuiltins_testDimensions_23b7e792972c66f8f798088f2e2db517() {
+        assertEval("{ x<-1; dimnames(x) }");
+    }
+
+    @Test
+    public void TestSimpleBuiltins_testDimensions_25559c72545218e5904f029d31043341() {
+        assertEval("{ dimnames(1) }");
+    }
+
+    @Test
+    public void TestSimpleBuiltins_testDimensions_94c1f6362cb75ccb566992ddbb86b57f() {
+        assertEval("{ dimnames(NULL) }");
+    }
+
+    @Test
+    public void TestSimpleBuiltins_testDimensions_fa944f6fbbd53435e7ee6de00c6e156d() {
+        assertEval("{ x<-1; dim(x)<-1; dimnames(x)<-list() }");
+    }
+
+    @Test
+    public void TestSimpleBuiltins_testDimensions_2979e5a89355ac34e701f6b1d6910468() {
+        assertEval("{ x<-1; dim(x)<-1; dimnames(x)<-list(0) }");
+    }
+
+    @Test
+    public void TestSimpleBuiltins_testDimensions_2dc914e1fb3582f18a062c4d58f30902() {
+        assertEval("{ x<-1; dim(x)<-1; dimnames(x)<-list(\"a\"); dimnames(x); dimnames(x)<-list(); dimnames(x) }");
+    }
+
     @Test
     public void TestSimpleBuiltins_testDimensions_d23f468ff3aa03426d65d05b9ae6bd9b() {
         assertEvalError("{ x <- 1:2 ; dim(x) <- c(1,3) ; x }");
@@ -5903,6 +5933,16 @@ public class AllTests extends TestBase {
         assertEvalError("{ x<-1:4; attr(x, \"dimnames\")<-list(101, 102, 103, 104) }");
     }
 
+    @Test
+    public void TestSimpleBuiltins_testDimensions_b89fca3316a99a6fae82c3f731c89989() {
+        assertEvalError("{ x<-1; dim(x)<-1; dimnames(x)<-1; dimnames(x) }");
+    }
+
+    @Test
+    public void TestSimpleBuiltins_testDimensions_741ea80b0aaaf4ab255749f44075a2f7() {
+        assertEvalError("{ x<-1; dim(x)<-1; attr(x, \"dimnames\")<-1 }");
+    }
+
     @Test
     public void TestSimpleBuiltins_testDimensions_b5baee88565f3b36d5026bad6cc5e60a() {
         assertEvalWarning("{ x<-1:12; dim(x)<-c(12+10i); x }");
diff --git a/com.oracle.truffle.r.test/src/com/oracle/truffle/r/test/simple/TestSimpleBuiltins.java b/com.oracle.truffle.r.test/src/com/oracle/truffle/r/test/simple/TestSimpleBuiltins.java
index 478fc06236836cb9c3c3b7650a9ea420ecf9e18a..6871746a8706b234676a3400284e6b7d1f9cc94a 100644
--- a/com.oracle.truffle.r.test/src/com/oracle/truffle/r/test/simple/TestSimpleBuiltins.java
+++ b/com.oracle.truffle.r.test/src/com/oracle/truffle/r/test/simple/TestSimpleBuiltins.java
@@ -793,7 +793,7 @@ public class TestSimpleBuiltins extends TestBase {
         assertEval("{ x<-c(42); names(x)<-\"a\"; attr(x, \"dim\")<-1; names(x)<-\"z\"; names(x)<-NULL; attr(x, \"dimnames\")<-NULL; attributes(x) }");
         assertEvalError("{ x<-1:4; attr(x, \"dimnames\")<-list(101, 102, 103, 104) }");
         // assigning an "invisible" list returned by "attr(y, dimnames)<-" as dimnames attribute for
-// x
+        // x
         assertEval("{ x<-c(1); y<-c(1); dim(x)<-1; dim(y)<-1; attr(x, \"dimnames\")<-(attr(y, \"dimnames\")<-list(\"b\")); attributes(x) }");
 
         // there should be no output
@@ -807,6 +807,15 @@ public class TestSimpleBuiltins extends TestBase {
         assertEval("{ x<-1:2; dim(x)=c(1,2); names(x)<-c(\"a\", \"b\"); attr(x, \"foo\")<-\"foo\"; dim(x)<-NULL; attributes(x) }");
         assertEval("{ x<-1:4; names(x)<-c(21:24); attr(x, \"dim\")<-c(4); attr(x, \"foo\")<-\"foo\"; x }");
         assertEval("{ x<-list(1,2,3); names(x)<-c(21:23); attr(x, \"dim\")<-c(3); attr(x, \"foo\")<-\"foo\"; x }");
+
+        assertEval("{ x<-1; dimnames(x) }");
+        assertEval("{ dimnames(1) }");
+        assertEval("{ dimnames(NULL) }");
+        assertEvalError("{ x<-1; dim(x)<-1; dimnames(x)<-1; dimnames(x) }");
+        assertEvalError("{ x<-1; dim(x)<-1; attr(x, \"dimnames\")<-1 }");
+        assertEval("{ x<-1; dim(x)<-1; dimnames(x)<-list() }");
+        assertEval("{ x<-1; dim(x)<-1; dimnames(x)<-list(0) }");
+        assertEval("{ x<-1; dim(x)<-1; dimnames(x)<-list(\"a\"); dimnames(x); dimnames(x)<-list(); dimnames(x) }");
     }
 
     @Test