diff --git a/src/backend/optimizer/path/allpaths.c b/src/backend/optimizer/path/allpaths.c
index 373d982c497825a705595b5c63a205bb04caab81..6e59451e558a101d7c3f55378caa2ca823dd2b3a 100644
--- a/src/backend/optimizer/path/allpaths.c
+++ b/src/backend/optimizer/path/allpaths.c
@@ -7,7 +7,7 @@
  *
  *
  * IDENTIFICATION
- *	  $Header: /cvsroot/pgsql/src/backend/optimizer/path/allpaths.c,v 1.51 1999/07/24 23:21:08 tgl Exp $
+ *	  $Header: /cvsroot/pgsql/src/backend/optimizer/path/allpaths.c,v 1.52 1999/07/30 22:34:17 tgl Exp $
  *
  *-------------------------------------------------------------------------
  */
@@ -59,6 +59,9 @@ make_one_rel(Query *root, List *rels)
 	if (levels_needed <= 0)
 		return NULL;
 
+	/*
+	 * Generate access paths for the base rels.
+	 */
 	set_base_rel_pathlist(root, rels);
 
 	if (levels_needed <= 1)
@@ -73,8 +76,10 @@ make_one_rel(Query *root, List *rels)
 	{
 
 		/*
-		 * This means that joins or sorts are required. set selectivities
-		 * of clauses that have not been set by an index.
+		 * This means that joins or sorts are required. Set selectivities
+		 * of any clauses not yet set.  (I think that this is redundant;
+		 * set_base_rel_pathlist should have set them all already.  But
+		 * a scan to check that they are all set doesn't cost much...)
 		 */
 		set_rest_relselec(root, rels);
 
@@ -131,11 +136,15 @@ set_base_rel_pathlist(Query *root, List *rels)
 
 		set_cheapest(rel, rel->pathlist);
 
-		/*
-		 * if there is a qualification of sequential scan the selec. value
-		 * is not set -- so set it explicitly -- Sunita
+		/* Set the selectivity estimates for any restriction clauses that
+		 * didn't get set as a byproduct of index-path selectivity estimation
+		 * (see create_index_path()).
 		 */
 		set_rest_selec(root, rel->restrictinfo);
+
+		/* Calculate the estimated size (post-restrictions) and tuple width
+		 * for this base rel.  This uses the restriction clause selectivities.
+		 */
 		rel->size = compute_rel_size(rel);
 		rel->width = compute_rel_width(rel);
 	}
diff --git a/src/backend/optimizer/util/pathnode.c b/src/backend/optimizer/util/pathnode.c
index 0edb1801498f6a992acbb56a6fdf0f76b299a12b..5a548d2a462d202781c0e3071c9ef5aaa14f3e72 100644
--- a/src/backend/optimizer/util/pathnode.c
+++ b/src/backend/optimizer/util/pathnode.c
@@ -7,7 +7,7 @@
  *
  *
  * IDENTIFICATION
- *	  $Header: /cvsroot/pgsql/src/backend/optimizer/util/pathnode.c,v 1.51 1999/07/30 04:07:25 tgl Exp $
+ *	  $Header: /cvsroot/pgsql/src/backend/optimizer/util/pathnode.c,v 1.52 1999/07/30 22:34:19 tgl Exp $
  *
  *-------------------------------------------------------------------------
  */
@@ -412,14 +412,18 @@ create_index_path(Query *root,
 		/*
 		 * Set selectivities of clauses used with index to the selectivity
 		 * of this index, subdividing the selectivity equally over each of
-		 * the clauses.
+		 * the clauses.  To the extent that index_selectivity() can make a
+		 * better estimate of the joint selectivity of these clauses than
+		 * the product of individual estimates from compute_clause_selec()
+		 * would be, this should give us a more accurate estimate of the
+		 * total selectivity of all the clauses.
 		 *
-		 * XXX Can this divide the selectivities in a better way?
-		 *
-		 * XXX In fact, why the heck are we doing this at all?  We already
-		 * set the cost for the indexpath, and it's far from obvious that
-		 * the selectivity of the path should have any effect on estimates
-		 * made for other contexts...
+		 * XXX If there is more than one useful index for this rel, and the
+		 * indexes can be used with different but overlapping groups of
+		 * restriction clauses, we may end up with too optimistic an estimate,
+		 * since set_clause_selectivities() will save the minimum of the
+		 * per-clause selectivity estimated with each index.  But that should
+		 * be fairly unlikely for typical index usage.
 		 */
 		clausesel = pow(selec, 1.0 / (double) length(restriction_clauses));
 		set_clause_selectivities(restriction_clauses, clausesel);