diff --git a/src/backend/optimizer/prep/prepjointree.c b/src/backend/optimizer/prep/prepjointree.c
index f916d54602d9b9aff14f8df78e006b415d18cc51..37c6e967cf1b54ad9d1ca4ec13009b1564e7380f 100644
--- a/src/backend/optimizer/prep/prepjointree.c
+++ b/src/backend/optimizer/prep/prepjointree.c
@@ -16,7 +16,7 @@
  *
  *
  * IDENTIFICATION
- *	  $PostgreSQL: pgsql/src/backend/optimizer/prep/prepjointree.c,v 1.18 2004/05/26 04:41:26 neilc Exp $
+ *	  $PostgreSQL: pgsql/src/backend/optimizer/prep/prepjointree.c,v 1.19 2004/05/26 18:35:41 tgl Exp $
  *
  *-------------------------------------------------------------------------
  */
@@ -897,12 +897,15 @@ simplify_jointree(Query *parse, Node *jtnode)
 	{
 		FromExpr   *f = (FromExpr *) jtnode;
 		List	   *newlist = NIL;
+		int			children_remaining;
 		ListCell   *l;
 
+		children_remaining = list_length(f->fromlist);
 		foreach(l, f->fromlist)
 		{
 			Node	   *child = (Node *) lfirst(l);
 
+			children_remaining--;
 			/* Recursively simplify this child... */
 			child = simplify_jointree(parse, child);
 			/* Now, is it a FromExpr? */
@@ -917,16 +920,7 @@ simplify_jointree(Query *parse, Node *jtnode)
 				 */
 				FromExpr   *subf = (FromExpr *) child;
 				int			childlen = length(subf->fromlist);
-				int			myothers;
-				ListCell   *l2;
-
-				/*
-				 * XXX: This is a quick hack, not sure of the proper
-				 * fix.
-				 */
-				myothers = length(newlist);
-				for_each_cell(l2, lnext(l))
-					myothers++;
+				int			myothers = length(newlist) + children_remaining;
 
 				if (childlen <= 1 ||
 					(childlen + myothers) <= from_collapse_limit)