diff --git a/src/backend/rewrite/rewriteHandler.c b/src/backend/rewrite/rewriteHandler.c
index 42e87244e1813a4b5b33374ebed67dced644842e..4ad87f16ba4d6512af20b52db977044f03f8f711 100644
--- a/src/backend/rewrite/rewriteHandler.c
+++ b/src/backend/rewrite/rewriteHandler.c
@@ -6,7 +6,7 @@
  *
  *
  * IDENTIFICATION
- *	  $Header: /cvsroot/pgsql/src/backend/rewrite/rewriteHandler.c,v 1.58 1999/10/01 04:08:24 tgl Exp $
+ *	  $Header: /cvsroot/pgsql/src/backend/rewrite/rewriteHandler.c,v 1.59 1999/10/02 04:42:04 tgl Exp $
  *
  *-------------------------------------------------------------------------
  */
@@ -530,6 +530,13 @@ modifyAggrefMakeSublink(Expr *origexp, Query *parsetree)
 	subquery->targetList = lcons(tle, NIL);
 	subquery->qual = modifyAggrefDropQual((Node *) parsetree->qual,
 										  (Node *) origexp);
+	/*
+	 * If there are still aggs in the subselect's qual, give up.
+	 * Recursing would be a bad idea --- we'd likely produce an
+	 * infinite recursion.  This whole technique is a crock, really...
+	 */
+	if (checkQueryHasAggs(subquery->qual))
+		elog(ERROR, "Cannot handle aggregate function inserted at this place in WHERE clause");
 	subquery->groupClause = NIL;
 	subquery->havingQual = NULL;
 	subquery->hasAggs = TRUE;
@@ -576,10 +583,18 @@ modifyAggrefQual(Node *node, Query *parsetree)
 			SubLink    *sub = modifyAggrefMakeSublink(expr,
 													  parsetree);
 			parsetree->hasSubLinks = true;
+			/* check for aggs in resulting lefthand... */
+			sub->lefthand = (List *) modifyAggrefQual((Node *) sub->lefthand,
+													  parsetree);
 			return (Node *) sub;
 		}
 		/* otherwise, fall through and copy the expr normally */
 	}
+	if (IsA(node, Aggref))
+	{
+		/* Oops, found one that's not inside an Expr we can rearrange... */
+		elog(ERROR, "Cannot handle aggregate function inserted at this place in WHERE clause");
+	}
 	/* We do NOT recurse into subselects in this routine.  It's sufficient
 	 * to get rid of aggregates that are in the qual expression proper.
 	 */