diff --git a/dev/core/src/com/google/gwt/dev/js/JsToStringGenerationVisitor.java b/dev/core/src/com/google/gwt/dev/js/JsToStringGenerationVisitor.java
index 1f18c16..92ca587 100644
--- a/dev/core/src/com/google/gwt/dev/js/JsToStringGenerationVisitor.java
+++ b/dev/core/src/com/google/gwt/dev/js/JsToStringGenerationVisitor.java
@@ -706,24 +706,11 @@
   public boolean visit(JsObjectLiteral x, JsContext ctx) {
     _lbrace();
     boolean sep = false;
-    for (Object element : x.getPropertyInitializers()) {
+    for (JsPropertyInitializer element : x.getPropertyInitializers()) {
       sep = _sepCommaOptSpace(sep);
-      JsPropertyInitializer propInit = (JsPropertyInitializer) element;
-      printLabel : {
-        JsExpression labelExpr = propInit.getLabelExpr();
-        // labels can be either string, integral, or decimal literals
-        if (labelExpr instanceof JsStringLiteral) {
-          String propName = ((JsStringLiteral) labelExpr).getValue();
-          if (JsUtils.isValidJsIdentifier(propName) && !JsProtectedNames.isKeyword(propName)) {
-            // Print unquoted if the property name is a valid identifier.
-            p.print(propName);
-            break printLabel;
-          }
-        }
-        accept(labelExpr);
-      }
+      accept(element.getLabelExpr());
       _colon();
-      JsExpression valueExpr = propInit.getValueExpr();
+      JsExpression valueExpr = element.getValueExpr();
       _parenPushIfCommaExpr(valueExpr);
       accept(valueExpr);
       _parenPopIfCommaExpr(valueExpr);
diff --git a/dev/core/test/com/google/gwt/dev/js/JsLiteralInternerTest.java b/dev/core/test/com/google/gwt/dev/js/JsLiteralInternerTest.java
index c6e631e..649246e 100644
--- a/dev/core/test/com/google/gwt/dev/js/JsLiteralInternerTest.java
+++ b/dev/core/test/com/google/gwt/dev/js/JsLiteralInternerTest.java
@@ -67,14 +67,14 @@
     checkTranslation(
         String.format("var x={a:%1$s,b:%2$s}, y={a:%1$s,b:%2$s}, z={a:%1$s,b:%3$s};",
             ONES, TWOS, THREES),
-        String.format("var $intern_0={a:%1$s,b:%2$s};var x=$intern_0,y=$intern_0,z={a:%1$s,b:%3$s};",
+        String.format("var $intern_0={'a':%1$s,'b':%2$s};var x=$intern_0,y=$intern_0,z={'a':%1$s,'b':%3$s};",
             ONES, TWOS, THREES));
 
     checkTranslation(
         String.format("var x={a:%1$s,b:%2$s}, y={a:%1$s,b:%2$s}, z={a:%1$s,b:%3$s};",
             ONES, TWOS, THREES),
-        String.format("var $intern_0=%1$s,$intern_1=%2$s;var x={a:$intern_0,b:$intern_1}," +
-        "y={a:$intern_0,b:$intern_1},z={a:$intern_0,b:%3$s};", ONES, TWOS, THREES), false);
+        String.format("var $intern_0=%1$s,$intern_1=%2$s;var x={'a':$intern_0,'b':$intern_1}," +
+        "y={'a':$intern_0,'b':$intern_1},z={'a':$intern_0,'b':%3$s};", ONES, TWOS, THREES), false);
 
     // Strings
     checkTranslation(
diff --git a/dev/core/test/com/google/gwt/dev/js/JsToStringGenerationVisitorConcisenessTest.java b/dev/core/test/com/google/gwt/dev/js/JsToStringGenerationVisitorConcisenessTest.java
index 7bd9cd5..f37d7f0 100644
--- a/dev/core/test/com/google/gwt/dev/js/JsToStringGenerationVisitorConcisenessTest.java
+++ b/dev/core/test/com/google/gwt/dev/js/JsToStringGenerationVisitorConcisenessTest.java
@@ -53,12 +53,12 @@
   }
 
   public void testObjectLiteralAssignment() throws Exception {
-    assertEquals("var x={a:b=2,c:d}", parse("var x = {a : (b = 2), c : d}"));
+    assertEquals("var x={'a':b=2,'c':d}", parse("var x = {a : (b = 2), c : d}"));
   }
 
   public void testObjectLiteralConditional() throws Exception {
     // the parentheses are not required around the conditional
-    assertEquals("var x={a:b?c:d,e:f}",
+    assertEquals("var x={'a':b?c:d,'e':f}",
         parse("var x = {a : (b ? c : d), e : f}"));
   }
 
@@ -66,7 +66,7 @@
     // quotes are not necessary around many property variables in object
     // literals
     assertEquals("var x={1:'b'}", parse("var x = {1 : 'b'}"));
-    assertEquals("var x={$a_:'b'}", parse("var x = {'$a_' : 'b'}"));
+    assertEquals("var x={'$a_':'b'}", parse("var x = {'$a_' : 'b'}"));
     assertEquals("var x={1.2:'b'}", parse("var x = {1.2 : 'b'}"));
   }
 
