diff --git a/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/builtin/base/PrettyPrinterNode.java b/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/builtin/base/PrettyPrinterNode.java
index 7e4c08e8987950f98ac0338d6cb7c380367d16f7..817cad328887958e71db555b93fb3ebf9222920a 100644
--- a/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/builtin/base/PrettyPrinterNode.java
+++ b/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/builtin/base/PrettyPrinterNode.java
@@ -351,33 +351,11 @@ public abstract class PrettyPrinterNode extends RNode {
     @SlowPath
     @Specialization(order = 1000, guards = "!isMatrix")
     public String prettyPrint(VirtualFrame frame, RList operand) {
-        int length = operand.getLength();
-        if (length == 0) {
-            return "list()";
-        } else {
-            StringBuilder sb = new StringBuilder();
-            for (int i = 0; i < length; i++) {
-                if (isPrintingAttributes() && operand.elementNamePrefix != null) {
-                    sb.append(operand.elementNamePrefix);
-                }
-                Object name = operand.getNameAt(i);
-                sb.append(name).append('\n');
-                Object value = operand.getDataAt(i);
-                sb.append(printSingleListValue(frame, value, name)).append("\n\n");
-            }
-            String result = sb.deleteCharAt(sb.length() - 1).toString();
-            Map<String, Object> attributes = operand.getAttributes();
-            if (attributes != null) {
-                result = result + printAttributes(frame, operand, attributes);
-            }
-            return result;
-
-        }
+        return prettyPrintList0(frame, operand, null);
     }
 
-    // TODO refactor: too much code reuse
     // FIXME support nesting levels >1
-    public String prettyPrintNestedList(VirtualFrame frame, RList operand, Object listName) {
+    private String prettyPrintList0(VirtualFrame frame, RList operand, Object listName) {
         int length = operand.getLength();
         if (length == 0) {
             return "list()";
@@ -386,10 +364,11 @@ public abstract class PrettyPrinterNode extends RNode {
             for (int i = 0; i < length; i++) {
                 if (isPrintingAttributes() && operand.elementNamePrefix != null) {
                     sb.append(operand.elementNamePrefix);
-                } else {
-                    sb.append(listName);
                 }
                 Object name = operand.getNameAt(i);
+                if (listName != null) {
+                    name = new StringBuilder(listName.toString()).append(name).toString();
+                }
                 sb.append(name).append('\n');
                 Object value = operand.getDataAt(i);
                 sb.append(printSingleListValue(frame, value, name)).append("\n\n");
@@ -400,7 +379,6 @@ public abstract class PrettyPrinterNode extends RNode {
                 result = result + printAttributes(frame, operand, attributes);
             }
             return result;
-
         }
     }
 
@@ -486,7 +464,7 @@ public abstract class PrettyPrinterNode extends RNode {
         }
         if (RTYPES.isRList(argumentsValue0)) {
             RList argumentsValue0Cast = RTYPES.asRList(argumentsValue0);
-            return prettyPrintNestedList(frame, argumentsValue0Cast, listElementName);
+            return prettyPrintList0(frame, argumentsValue0Cast, listElementName);
         }
         if (RTYPES.isRInvisible(argumentsValue0)) {
             RInvisible argumentsValue0Cast = RTYPES.asRInvisible(argumentsValue0);
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 042844220da13efd18daedd7950abf81ec3e02fd..1e5f2f623ff0ec2f0ef79a6b63b50cd151226e39 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
@@ -4926,6 +4926,39 @@ character(0)
 [1] 3
 
 
+##com.oracle.truffle.r.test.simple.TestSimpleBuiltins.testPrint
+#{ print(list(list(list(1,2),list(3)),list(list(4),list(5,6)))) }
+[[1]]
+[[1]][[1]]
+[[1]][[1]][[1]]
+[1] 1
+
+[[1]][[1]][[2]]
+[1] 2
+
+
+[[1]][[2]]
+[[1]][[2]][[1]]
+[1] 3
+
+
+
+[[2]]
+[[2]][[1]]
+[[2]][[1]][[1]]
+[1] 4
+
+
+[[2]][[2]]
+[[2]][[2]][[1]]
+[1] 5
+
+[[2]][[2]][[2]]
+[1] 6
+
+
+
+
 ##com.oracle.truffle.r.test.simple.TestSimpleBuiltins.testPrint
 #{ x<-c("11", "7", "2222", "7", "33"); names(x)<-1:5; print(x) }
      1      2      3      4      5
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 6871746a8706b234676a3400284e6b7d1f9cc94a..1d2cfa5d93acd874979f13471e6ed9dceefe8196 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
@@ -2267,6 +2267,7 @@ public class TestSimpleBuiltins extends TestBase {
         assertEval("{  x<-c(11, 7, 2222, 7, 33); print(x) }");
         assertEval("{ x<-c(\"11\", \"7\", \"2222\", \"7\", \"33\"); names(x)<-1:5; print(x) }");
         assertEval("{ x<-c(11, 7, 2222, 7, 33); names(x)<-1:5; print(x) }");
+        assertEval("{ print(list(list(list(1,2),list(3)),list(list(4),list(5,6)))) }");
     }
 
     @Test