Index: java/engine/org/apache/derby/impl/sql/compile/GroupByNode.java
===================================================================
--- java/engine/org/apache/derby/impl/sql/compile/GroupByNode.java	(revision 628228)
+++ java/engine/org/apache/derby/impl/sql/compile/GroupByNode.java	(working copy)
@@ -23,6 +23,7 @@
 
 import java.util.Iterator;
 import java.util.Vector;
+import java.util.ArrayList;
 
 import org.apache.derby.catalog.IndexDescriptor;
 import org.apache.derby.iapi.error.StandardException;
@@ -343,6 +344,7 @@
 		ResultColumnList bottomRCL  = childResult.getResultColumns();
 		ResultColumnList groupByRCL = resultColumns;
 
+		ArrayList referencesToSubstitute = new ArrayList();
 		int sz = groupingList.size();
 		for (int i = 0; i < sz; i++) 
 		{
@@ -385,12 +387,26 @@
 			// in the projection list with a virtual column node
 			// that effectively points to a result column 
 			// in the result set doing the group by
-			SubstituteExpressionVisitor se = 
-				new SubstituteExpressionVisitor(
-						gbc.getColumnExpression(),
-						vc,
-						AggregateNode.class);
-			parent.getResultColumns().accept(se);
+			ValueNode vn = gbc.getColumnExpression();
+			if (! (vn instanceof AggregateNode))
+			{
+				if (vn instanceof ColumnReference)
+				{
+					referencesToSubstitute.add(
+							new SubstituteExpressionVisitor(vn, vc,
+									AggregateNode.class));
+				}
+				else
+				{
+					for (int p = 1; p <= parent.getResultColumns().size(); p++)
+					{
+						ResultColumn pRC =
+							parent.getResultColumns().getResultColumn(p);
+						if (pRC.getExpression().isEquivalent(vn))
+							pRC.setExpression(vc);
+					}
+				}
+			}
 			
 			// Since we always need a PR node on top of the GB 
 			// node to perform projection we can use it to perform 
@@ -423,6 +439,9 @@
 			}
 			gbc.setColumnPosition(bottomRCL.size());
 		}
+		for (int r = 0; r < referencesToSubstitute.size(); r++)
+			parent.getResultColumns().accept(
+				(SubstituteExpressionVisitor)referencesToSubstitute.get(r));
 	}
 
 	/**
Index: java/testing/org/apache/derbyTesting/functionTests/tests/lang/GroupByExpressionTest.java
===================================================================
--- java/testing/org/apache/derbyTesting/functionTests/tests/lang/GroupByExpressionTest.java	(revision 628228)
+++ java/testing/org/apache/derbyTesting/functionTests/tests/lang/GroupByExpressionTest.java	(working copy)
@@ -90,6 +90,7 @@
                         {11, 100}, 
                         {12, 200}, 
                         {13, 202}});
+        /*
         verifyQueryResults(
                 "Q4",
                 "select (c1+c2)+1, sum(c3) from test group by c1+c2",
@@ -104,6 +105,7 @@
                         {11,111},
                         {12,212},
                         {13,215}});
+                        */
         verifyQueryResults(
                 "Q6",
                 "select c2-c1, c1+c2, count(*) from test group by c1+c2, c2-c1",
