diff --git a/src/backend/optimizer/path/allpaths.c b/src/backend/optimizer/path/allpaths.c
index 6dea338ff1cd5f8b9b5d103aec9119351fd43905..dc428abdab931a364b0e2f55e27c44822b1b7244 100644
--- a/src/backend/optimizer/path/allpaths.c
+++ b/src/backend/optimizer/path/allpaths.c
@@ -8,7 +8,7 @@
  *
  *
  * IDENTIFICATION
- *	  $PostgreSQL: pgsql/src/backend/optimizer/path/allpaths.c,v 1.116 2004/05/30 23:40:28 neilc Exp $
+ *	  $PostgreSQL: pgsql/src/backend/optimizer/path/allpaths.c,v 1.117 2004/06/01 03:02:51 tgl Exp $
  *
  *-------------------------------------------------------------------------
  */
@@ -246,7 +246,6 @@ set_inherited_rel_pathlist(Query *root, RelOptInfo *rel,
 		RangeTblEntry *childrte;
 		Oid			childOID;
 		RelOptInfo *childrel;
-		List	   *reltlist;
 		ListCell   *parentvars;
 		ListCell   *childvars;
 
@@ -268,14 +267,12 @@ set_inherited_rel_pathlist(Query *root, RelOptInfo *rel,
 		 * the individual tables.  Also, we just zap attr_needed rather
 		 * than trying to adjust it; it won't be looked at in the child.
 		 */
-		reltlist = FastListValue(&rel->reltargetlist);
-		reltlist = (List *)
-			adjust_inherited_attrs((Node *) reltlist,
+		childrel->reltargetlist = (List *)
+			adjust_inherited_attrs((Node *) rel->reltargetlist,
 								   parentRTindex,
 								   parentOID,
 								   childRTindex,
 								   childOID);
-		FastListFromList(&childrel->reltargetlist, reltlist);
 		childrel->attr_needed = NULL;
 		childrel->baserestrictinfo = (List *)
 			adjust_inherited_attrs((Node *) rel->baserestrictinfo,
@@ -300,8 +297,8 @@ set_inherited_rel_pathlist(Query *root, RelOptInfo *rel,
 		if (childrel->width > rel->width)
 			rel->width = childrel->width;
 
-		childvars = list_head(FastListValue(&childrel->reltargetlist));
-		foreach(parentvars, FastListValue(&rel->reltargetlist))
+		forboth(parentvars, rel->reltargetlist,
+				childvars, childrel->reltargetlist)
 		{
 			Var		   *parentvar = (Var *) lfirst(parentvars);
 			Var		   *childvar = (Var *) lfirst(childvars);
@@ -310,7 +307,6 @@ set_inherited_rel_pathlist(Query *root, RelOptInfo *rel,
 
 			if (childrel->attr_widths[childndx] > rel->attr_widths[parentndx])
 				rel->attr_widths[parentndx] = childrel->attr_widths[childndx];
-			childvars = lnext(childvars);
 		}
 	}
 
diff --git a/src/backend/optimizer/path/costsize.c b/src/backend/optimizer/path/costsize.c
index 96d0e213cc1f51584a3d2df1d1a0f8864280e14c..46a323fade4609eaa5cc26e7558003ff3ea1fdea 100644
--- a/src/backend/optimizer/path/costsize.c
+++ b/src/backend/optimizer/path/costsize.c
@@ -49,7 +49,7 @@
  * Portions Copyright (c) 1994, Regents of the University of California
  *
  * IDENTIFICATION
- *	  $PostgreSQL: pgsql/src/backend/optimizer/path/costsize.c,v 1.128 2004/05/30 23:40:28 neilc Exp $
+ *	  $PostgreSQL: pgsql/src/backend/optimizer/path/costsize.c,v 1.129 2004/06/01 03:02:52 tgl Exp $
  *
  *-------------------------------------------------------------------------
  */
@@ -1701,7 +1701,7 @@ set_rel_width(Query *root, RelOptInfo *rel)
 	int32		tuple_width = 0;
 	ListCell   *tllist;
 
-	foreach(tllist, FastListValue(&rel->reltargetlist))
+	foreach(tllist, rel->reltargetlist)
 	{
 		Var		   *var = (Var *) lfirst(tllist);
 		int			ndx = var->varattno - rel->min_attr;
diff --git a/src/backend/optimizer/path/pathkeys.c b/src/backend/optimizer/path/pathkeys.c
index 2fd3a9927486661ea38bd8c9daf44056d1a1ed1e..363fe54450d0ca2757ec63c7774d883ef21c3ae1 100644
--- a/src/backend/optimizer/path/pathkeys.c
+++ b/src/backend/optimizer/path/pathkeys.c
@@ -11,7 +11,7 @@
  * Portions Copyright (c) 1994, Regents of the University of California
  *
  * IDENTIFICATION
- *	  $PostgreSQL: pgsql/src/backend/optimizer/path/pathkeys.c,v 1.58 2004/05/30 23:40:28 neilc Exp $
+ *	  $PostgreSQL: pgsql/src/backend/optimizer/path/pathkeys.c,v 1.59 2004/06/01 03:02:52 tgl Exp $
  *
  *-------------------------------------------------------------------------
  */
@@ -721,12 +721,11 @@ find_indexkey_var(Query *root, RelOptInfo *rel, AttrNumber varattno)
 				vartypeid;
 	int32		type_mod;
 
-	foreach(temp, FastListValue(&rel->reltargetlist))
+	foreach(temp, rel->reltargetlist)
 	{
 		Var		   *var = (Var *) lfirst(temp);
 
-		if (IsA(var, Var) &&
-			var->varattno == varattno)
+		if (var->varattno == varattno)
 			return var;
 	}
 
diff --git a/src/backend/optimizer/plan/createplan.c b/src/backend/optimizer/plan/createplan.c
index 719ca63321a5faffe7de72987415e13be4c1ef5b..357144f6c40844c0be680c0c5dbc9b657b441fdc 100644
--- a/src/backend/optimizer/plan/createplan.c
+++ b/src/backend/optimizer/plan/createplan.c
@@ -10,7 +10,7 @@
  *
  *
  * IDENTIFICATION
- *	  $PostgreSQL: pgsql/src/backend/optimizer/plan/createplan.c,v 1.171 2004/05/30 23:40:28 neilc Exp $
+ *	  $PostgreSQL: pgsql/src/backend/optimizer/plan/createplan.c,v 1.172 2004/06/01 03:02:57 tgl Exp $
  *
  *-------------------------------------------------------------------------
  */
@@ -261,20 +261,19 @@ create_scan_plan(Query *root, Path *best_path)
 static List *
 build_relation_tlist(RelOptInfo *rel)
 {
-	FastList	tlist;
+	List	   *tlist = NIL;
 	int			resdomno = 1;
 	ListCell   *v;
 
-	FastListInit(&tlist);
-	foreach(v, FastListValue(&rel->reltargetlist))
+	foreach(v, rel->reltargetlist)
 	{
 		/* Do we really need to copy here?	Not sure */
 		Var		   *var = (Var *) copyObject(lfirst(v));
 
-		FastAppend(&tlist, create_tl_element(var, resdomno));
+		tlist = lappend(tlist, create_tl_element(var, resdomno));
 		resdomno++;
 	}
-	return FastListValue(&tlist);
+	return tlist;
 }
 
 /*
@@ -701,7 +700,7 @@ create_indexscan_plan(Query *root,
 	List	   *indxstrategy;
 	List	   *indxsubtype;
 	List	   *indxlossy;
-	FastList	indexids;
+	List	   *indexids;
 	ListCell   *l;
 	IndexScan  *scan_plan;
 
@@ -737,12 +736,12 @@ create_indexscan_plan(Query *root,
 	scan_clauses = order_qual_clauses(root, scan_clauses);
 
 	/* Build list of index OIDs */
-	FastListInit(&indexids);
+	indexids = NIL;
 	foreach(l, best_path->indexinfo)
 	{
 		IndexOptInfo *index = (IndexOptInfo *) lfirst(l);
 
-		FastAppendo(&indexids, index->indexoid);
+		indexids = lappend_oid(indexids, index->indexoid);
 	}
 
 	/*
@@ -801,7 +800,7 @@ create_indexscan_plan(Query *root,
 	scan_plan = make_indexscan(tlist,
 							   qpqual,
 							   baserelid,
-							   FastListValue(&indexids),
+							   indexids,
 							   fixed_indxquals,
 							   stripped_indxquals,
 							   indxstrategy,
@@ -1427,28 +1426,27 @@ get_switched_clauses(List *clauses, Relids outerrelids)
 static List *
 order_qual_clauses(Query *root, List *clauses)
 {
-	FastList	nosubplans;
-	FastList	withsubplans;
+	List	   *nosubplans;
+	List	   *withsubplans;
 	ListCell   *l;
 
 	/* No need to work hard if the query is subselect-free */
 	if (!root->hasSubLinks)
 		return clauses;
 
-	FastListInit(&nosubplans);
-	FastListInit(&withsubplans);
+	nosubplans = NIL;
+	withsubplans = NIL;
 	foreach(l, clauses)
 	{
 		Node	   *clause = (Node *) lfirst(l);
 
 		if (contain_subplans(clause))
-			FastAppend(&withsubplans, clause);
+			withsubplans = lappend(withsubplans, clause);
 		else
-			FastAppend(&nosubplans, clause);
+			nosubplans = lappend(nosubplans, clause);
 	}
 
-	FastConcFast(&nosubplans, &withsubplans);
-	return FastListValue(&nosubplans);
+	return list_concat(nosubplans, withsubplans);
 }
 
 /*
diff --git a/src/backend/optimizer/plan/initsplan.c b/src/backend/optimizer/plan/initsplan.c
index d245f3d156802274b22f0fd09db843c35ed9045c..aef27d9de8a6e95d93cdc437e6c6ce5a64d9b602 100644
--- a/src/backend/optimizer/plan/initsplan.c
+++ b/src/backend/optimizer/plan/initsplan.c
@@ -8,7 +8,7 @@
  *
  *
  * IDENTIFICATION
- *	  $PostgreSQL: pgsql/src/backend/optimizer/plan/initsplan.c,v 1.100 2004/05/30 23:40:29 neilc Exp $
+ *	  $PostgreSQL: pgsql/src/backend/optimizer/plan/initsplan.c,v 1.101 2004/06/01 03:02:58 tgl Exp $
  *
  *-------------------------------------------------------------------------
  */
@@ -151,7 +151,7 @@ add_vars_to_targetlist(Query *root, List *vars, Relids where_needed)
 		{
 			/* Variable not yet requested, so add to reltargetlist */
 			/* XXX is copyObject necessary here? */
-			FastAppend(&rel->reltargetlist, copyObject(var));
+			rel->reltargetlist = lappend(rel->reltargetlist, copyObject(var));
 		}
 		rel->attr_needed[attrno] = bms_add_members(rel->attr_needed[attrno],
 												   where_needed);
diff --git a/src/backend/optimizer/util/pathnode.c b/src/backend/optimizer/util/pathnode.c
index 91be3e2b4842609ab5eb4a5feceafaf394868ca6..3090045026730ab87ff7c8f53822d214596302f2 100644
--- a/src/backend/optimizer/util/pathnode.c
+++ b/src/backend/optimizer/util/pathnode.c
@@ -8,7 +8,7 @@
  *
  *
  * IDENTIFICATION
- *	  $PostgreSQL: pgsql/src/backend/optimizer/util/pathnode.c,v 1.106 2004/05/30 23:40:31 neilc Exp $
+ *	  $PostgreSQL: pgsql/src/backend/optimizer/util/pathnode.c,v 1.107 2004/06/01 03:03:02 tgl Exp $
  *
  *-------------------------------------------------------------------------
  */
@@ -691,7 +691,7 @@ create_unique_path(Query *root, RelOptInfo *rel, Path *subpath)
 	else
 	{
 		pathnode->rows = rel->rows;
-		numCols = list_length(FastListValue(&rel->reltargetlist));
+		numCols = list_length(rel->reltargetlist);
 	}
 
 	/*
diff --git a/src/backend/optimizer/util/relnode.c b/src/backend/optimizer/util/relnode.c
index ba1e7e69320d3e839fc89d957b0f3bb9ba2f6982..36e688135a8cb9c1ea1c5f2b3ce1c7e96eacd414 100644
--- a/src/backend/optimizer/util/relnode.c
+++ b/src/backend/optimizer/util/relnode.c
@@ -8,7 +8,7 @@
  *
  *
  * IDENTIFICATION
- *	  $PostgreSQL: pgsql/src/backend/optimizer/util/relnode.c,v 1.58 2004/05/30 23:40:31 neilc Exp $
+ *	  $PostgreSQL: pgsql/src/backend/optimizer/util/relnode.c,v 1.59 2004/06/01 03:03:02 tgl Exp $
  *
  *-------------------------------------------------------------------------
  */
@@ -130,7 +130,7 @@ make_base_rel(Query *root, int relid)
 	rel->relids = bms_make_singleton(relid);
 	rel->rows = 0;
 	rel->width = 0;
-	FastListInit(&rel->reltargetlist);
+	rel->reltargetlist = NIL;
 	rel->pathlist = NIL;
 	rel->cheapest_startup_path = NULL;
 	rel->cheapest_total_path = NULL;
@@ -285,7 +285,7 @@ build_join_rel(Query *root,
 	joinrel->relids = bms_copy(joinrelids);
 	joinrel->rows = 0;
 	joinrel->width = 0;
-	FastListInit(&joinrel->reltargetlist);
+	joinrel->reltargetlist = NIL;
 	joinrel->pathlist = NIL;
 	joinrel->cheapest_startup_path = NULL;
 	joinrel->cheapest_total_path = NULL;
@@ -365,7 +365,7 @@ build_joinrel_tlist(Query *root, RelOptInfo *joinrel)
 	Relids		relids = joinrel->relids;
 	ListCell   *rels;
 
-	FastListInit(&joinrel->reltargetlist);
+	joinrel->reltargetlist = NIL;
 	joinrel->width = 0;
 
 	foreach(rels, root->base_rel_list)
@@ -376,14 +376,14 @@ build_joinrel_tlist(Query *root, RelOptInfo *joinrel)
 		if (!bms_is_member(baserel->relid, relids))
 			continue;
 
-		foreach(vars, FastListValue(&baserel->reltargetlist))
+		foreach(vars, baserel->reltargetlist)
 		{
 			Var		   *var = (Var *) lfirst(vars);
 			int			ndx = var->varattno - baserel->min_attr;
 
 			if (bms_nonempty_difference(baserel->attr_needed[ndx], relids))
 			{
-				FastAppend(&joinrel->reltargetlist, var);
+				joinrel->reltargetlist = lappend(joinrel->reltargetlist, var);
 				Assert(baserel->attr_widths[ndx] > 0);
 				joinrel->width += baserel->attr_widths[ndx];
 			}
diff --git a/src/include/nodes/relation.h b/src/include/nodes/relation.h
index 87d9f5964e27e54c49b5b8aadd9e4cce5f9d0f3e..91114fb03b76d54eaee381b1d5de8998fa5afad8 100644
--- a/src/include/nodes/relation.h
+++ b/src/include/nodes/relation.h
@@ -7,7 +7,7 @@
  * Portions Copyright (c) 1996-2003, PostgreSQL Global Development Group
  * Portions Copyright (c) 1994, Regents of the University of California
  *
- * $PostgreSQL: pgsql/src/include/nodes/relation.h,v 1.94 2004/04/25 18:23:57 neilc Exp $
+ * $PostgreSQL: pgsql/src/include/nodes/relation.h,v 1.95 2004/06/01 03:03:05 tgl Exp $
  *
  *-------------------------------------------------------------------------
  */
@@ -186,7 +186,7 @@ typedef struct RelOptInfo
 	int			width;			/* estimated avg width of result tuples */
 
 	/* materialization information */
-	FastList	reltargetlist;
+	List	   *reltargetlist;	/* needed Vars */
 	List	   *pathlist;		/* Path structures */
 	struct Path *cheapest_startup_path;
 	struct Path *cheapest_total_path;