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 92ca587..1f18c16 100644
--- a/dev/core/src/com/google/gwt/dev/js/JsToStringGenerationVisitor.java
+++ b/dev/core/src/com/google/gwt/dev/js/JsToStringGenerationVisitor.java
@@ -706,11 +706,24 @@
   public boolean visit(JsObjectLiteral x, JsContext ctx) {
     _lbrace();
     boolean sep = false;
-    for (JsPropertyInitializer element : x.getPropertyInitializers()) {
+    for (Object element : x.getPropertyInitializers()) {
       sep = _sepCommaOptSpace(sep);
-      accept(element.getLabelExpr());
+      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);
+      }
       _colon();
-      JsExpression valueExpr = element.getValueExpr();
+      JsExpression valueExpr = propInit.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 649246e..c6e631e 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 f37d7f0..7bd9cd5 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'}"));
   }
 
