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 bf07541..0bba5c0 100644
--- a/dev/core/src/com/google/gwt/dev/js/JsToStringGenerationVisitor.java
+++ b/dev/core/src/com/google/gwt/dev/js/JsToStringGenerationVisitor.java
@@ -618,9 +618,9 @@
       }
       _colon();
       JsExpression valueExpr = propInit.getValueExpr();
-      _parenPushIfConditional(valueExpr);
+      _parenPushIfCommaExpr(valueExpr);
       accept(valueExpr);
-      _parenPopIfConditional(valueExpr);
+      _parenPopIfCommaExpr(valueExpr);
     }
     _rbrace();
     return false;
@@ -1003,14 +1003,6 @@
     return doPop;
   }
 
-  private boolean _parenPopIfConditional(JsExpression x) {
-    boolean doPop = x instanceof JsConditional;
-    if (doPop) {
-      _rparen();
-    }
-    return doPop;
-  }
-
   private boolean _parenPopOrSpace(JsExpression parent, JsExpression child,
       boolean wrongAssoc) {
     boolean doPop = _parenCalc(parent, child, wrongAssoc);
@@ -1040,14 +1032,6 @@
     return doPush;
   }
 
-  private boolean _parenPushIfConditional(JsExpression x) {
-    boolean doPush = x instanceof JsConditional;
-    if (doPush) {
-      _lparen();
-    }
-    return doPush;
-  }
-
   private boolean _parenPushOrSpace(JsExpression parent, JsExpression child,
       boolean wrongAssoc) {
     boolean doPush = _parenCalc(parent, child, wrongAssoc);
diff --git a/dev/core/test/com/google/gwt/dev/js/JsToStringGenerationVisitorAccuracyTest.java b/dev/core/test/com/google/gwt/dev/js/JsToStringGenerationVisitorAccuracyTest.java
index 6c05c22..3e63efb 100644
--- a/dev/core/test/com/google/gwt/dev/js/JsToStringGenerationVisitorAccuracyTest.java
+++ b/dev/core/test/com/google/gwt/dev/js/JsToStringGenerationVisitorAccuracyTest.java
@@ -43,6 +43,10 @@
     doTest("[1,2,3,4][2]");
   }
 
+  public void testArrayLiteralParentheses() throws Exception {
+    doTest("var x = [a, (b, c), d]");
+  }
+
   public void testComplexConstruction() throws Exception {
     doTest("(new (new (a(({a : 'b', c : 'd'}),[1,2,3,x,y,z]))())())()");
   }
@@ -80,6 +84,10 @@
     doTest("({ 'property' : 'value'})");
   }
 
+  public void testObjectLiteralConditional() throws Exception {
+    doTest("var x = {a : ((b(), c) ? d : e)}");
+  }
+
   public void testObjectLiteralDeclaration() throws Exception {
     // quotes are necessary around some property variables
     doTest("var x = {'abc\\'' : 'value'}");
@@ -87,6 +95,10 @@
     doTest("var x = {\"\\'\\\"\" : 'value'}");
   }
 
+  public void testObjectLiteralParentheses() throws Exception {
+    doTest("var x = {a : (c, d), b : 3}");
+  }
+
   public void testUnaryOperations() throws Exception {
     // spaces or parentheses are necessary to separate negation and decrement
     doTest("var x = -(-(--y))");
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 e77f01b..a0943a7 100644
--- a/dev/core/test/com/google/gwt/dev/js/JsToStringGenerationVisitorConcisenessTest.java
+++ b/dev/core/test/com/google/gwt/dev/js/JsToStringGenerationVisitorConcisenessTest.java
@@ -50,6 +50,16 @@
     assertEquals("var x=y++-z", parse("var x = (y++) - z"));
   }
 
+  public void testObjectLiteralAssignment() throws Exception {
+    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}",
+        parse("var x = {a : (b ? c : d), e : f}"));
+  }
+
   public void testObjectLiteralDeclarationConcise() throws Exception {
     // quotes are not necessary around many property variables in object
     // literals
