diff --git a/src/backend/bootstrap/bootstrap.c b/src/backend/bootstrap/bootstrap.c
index 13ca093f746b9f5aeab64333f4c18236af7f1ee2..6bcf57404b67dd608995c6a0a6b45af34f882796 100644
--- a/src/backend/bootstrap/bootstrap.c
+++ b/src/backend/bootstrap/bootstrap.c
@@ -8,7 +8,7 @@
  * Portions Copyright (c) 1994, Regents of the University of California
  *
  * IDENTIFICATION
- *	  $Header: /cvsroot/pgsql/src/backend/bootstrap/bootstrap.c,v 1.160 2003/05/28 18:19:09 tgl Exp $
+ *	  $Header: /cvsroot/pgsql/src/backend/bootstrap/bootstrap.c,v 1.161 2003/07/15 00:11:13 tgl Exp $
  *
  *-------------------------------------------------------------------------
  */
@@ -187,15 +187,16 @@ err_out(void)
 }
 
 /* usage:
-   usage help for the bootstrap backen
-*/
+ *		usage help for the bootstrap backend
+ */
 static void
 usage(void)
 {
 	fprintf(stderr,
 			gettext("Usage:\n"
-					"  postgres -boot [-d level] [-D datadir] [-F] [-o file] [-x num] dbname\n"
-					"  -d 1-5           debug mode\n"
+					"  postgres -boot [OPTION]... DBNAME\n"
+					"  -c NAME=VALUE    set run-time parameter\n"
+					"  -d 1-5           debug level\n"
 					"  -D datadir       data directory\n"
 					"  -F               turn off fsync\n"
 					"  -o file          send debug output to file\n"
@@ -253,7 +254,7 @@ BootstrapMain(int argc, char *argv[])
 												 * variable */
 	}
 
-	while ((flag = getopt(argc, argv, "B:d:D:Fo:p:x:")) != -1)
+	while ((flag = getopt(argc, argv, "B:c:d:D:Fo:p:x:-:")) != -1)
 	{
 		switch (flag)
 		{
@@ -303,6 +304,27 @@ BootstrapMain(int argc, char *argv[])
 			case 'B':
 				SetConfigOption("shared_buffers", optarg, PGC_POSTMASTER, PGC_S_ARGV);
 				break;
+			case 'c':
+			case '-':
+				{
+					char	   *name,
+							   *value;
+
+					ParseLongOption(optarg, &name, &value);
+					if (!value)
+					{
+						if (flag == '-')
+							elog(ERROR, "--%s requires argument", optarg);
+						else
+							elog(ERROR, "-c %s requires argument", optarg);
+					}
+
+					SetConfigOption(name, value, PGC_POSTMASTER, PGC_S_ARGV);
+					free(name);
+					if (value)
+						free(value);
+					break;
+				}
 			default:
 				usage();
 				break;
@@ -408,7 +430,6 @@ BootstrapMain(int argc, char *argv[])
 	switch (xlogop)
 	{
 		case BS_XLOG_NOP:
-			StartupXLOG();
 			break;
 
 		case BS_XLOG_BOOTSTRAP:
@@ -445,6 +466,15 @@ BootstrapMain(int argc, char *argv[])
 	 */
 	InitPostgres(dbname, NULL);
 
+	/*
+	 * In NOP mode, all we really want to do is create shared memory and
+	 * semaphores (just to prove we can do it with the current GUC settings).
+	 * So, quit now.
+	 */
+	if (xlogop == BS_XLOG_NOP)
+		proc_exit(0);
+
+	/* Initialize stuff for bootstrap-file processing */
 	for (i = 0; i < MAXATTR; i++)
 	{
 		attrtypes[i] = (Form_pg_attribute) NULL;
@@ -456,7 +486,7 @@ BootstrapMain(int argc, char *argv[])
 		hashtable[i] = NULL;
 
 	/*
-	 * abort processing resumes here
+	 * abort processing resumes here (this is probably dead code?)
 	 */
 	if (sigsetjmp(Warn_restart, 1) != 0)
 	{
@@ -465,20 +495,19 @@ BootstrapMain(int argc, char *argv[])
 	}
 
 	/*
-	 * process input.
-	 */
-
-	/*
+	 * Process bootstrap input.
+	 *
 	 * the sed script boot.sed renamed yyparse to Int_yyparse for the
 	 * bootstrap parser to avoid conflicts with the normal SQL parser
 	 */
 	Int_yyparse();
 
+	/* Perform a checkpoint to ensure everything's down to disk */
 	SetProcessingMode(NormalProcessing);
 	CreateCheckPoint(true, true);
 	SetProcessingMode(BootstrapProcessing);
 
-	/* clean up processing */
+	/* Clean up and exit */
 	StartTransactionCommand();
 	cleanup();
 
diff --git a/src/bin/initdb/initdb.sh b/src/bin/initdb/initdb.sh
index 0c22560ffef4ea5d90833fccad3a353949c9a8a9..38b5a810de3e771dfbeec18acaea8066d8e9867a 100644
--- a/src/bin/initdb/initdb.sh
+++ b/src/bin/initdb/initdb.sh
@@ -27,7 +27,7 @@
 # Portions Copyright (c) 1996-2002, PostgreSQL Global Development Group
 # Portions Copyright (c) 1994, Regents of the University of California
 #
-# $Header: /cvsroot/pgsql/src/bin/initdb/Attic/initdb.sh,v 1.194 2003/07/14 20:00:23 tgl Exp $
+# $Header: /cvsroot/pgsql/src/bin/initdb/Attic/initdb.sh,v 1.195 2003/07/15 00:11:14 tgl Exp $
 #
 #-------------------------------------------------------------------------
 
@@ -536,46 +536,9 @@ else
     fi
 fi
 
-
-##########################################################################
-#
-# RUN BKI SCRIPT IN BOOTSTRAP MODE TO CREATE TEMPLATE1
-
-# common backend options
-PGSQL_OPT="-F -D$PGDATA"
-
-if [ "$debug" = yes ]
-then
-    BOOTSTRAP_TALK_ARG="-d 5"
-fi
-
-
-$ECHO_N "creating template1 database in $PGDATA/base/1... "$ECHO_C
-
-rm -rf "$PGDATA"/base/1 || exit_nicely
-mkdir "$PGDATA"/base/1 || exit_nicely
-
 # Top level PG_VERSION is checked by bootstrapper, so make it first
-echo "$short_version" > "$PGDATA/PG_VERSION" || exit_nicely
+echo "$short_version" > "$PGDATA/PG_VERSION"         || exit_nicely
 
-cat "$POSTGRES_BKI" \
-| sed -e "s/POSTGRES/$POSTGRES_SUPERUSERNAME/g" \
-      -e "s/ENCODING/$ENCODINGID/g" \
-| 
-(
-  LC_COLLATE=`pg_getlocale COLLATE`
-  LC_CTYPE=`pg_getlocale CTYPE`
-  export LC_COLLATE
-  export LC_CTYPE
-  unset LC_ALL
-  "$PGPATH"/postgres -boot -x1 $PGSQL_OPT $BOOTSTRAP_TALK_ARG template1
-) \
-|| exit_nicely
-
-# Make the per-database PGVERSION for template1 only after init'ing it
-echo "$short_version" > "$PGDATA/base/1/PG_VERSION" || exit_nicely
-
-echo "ok"
 
 ##########################################################################
 #
@@ -583,6 +546,9 @@ echo "ok"
 #
 # Use reasonable values if kernel will let us, else scale back
 
+# common backend options
+PGSQL_OPT="-F -D$PGDATA"
+
 cp /dev/null "$PGDATA"/postgresql.conf               || exit_nicely
 
 $ECHO_N "selecting default shared_buffers... "$ECHO_C
@@ -590,7 +556,7 @@ $ECHO_N "selecting default shared_buffers... "$ECHO_C
 for nbuffers in 1000 900 800 700 600 500 400 300 200 100 50
 do
     TEST_OPT="$PGSQL_OPT -c shared_buffers=$nbuffers -c max_connections=5"
-    if "$PGPATH"/postgres $TEST_OPT template1 </dev/null >/dev/null 2>&1
+    if "$PGPATH"/postgres -boot -x0 $TEST_OPT template1 </dev/null >/dev/null 2>&1
     then
 	break
     fi
@@ -603,7 +569,7 @@ $ECHO_N "selecting default max_connections... "$ECHO_C
 for nconns in 100 50 40 30 20 10
 do
     TEST_OPT="$PGSQL_OPT -c shared_buffers=$nbuffers -c max_connections=$nconns"
-    if "$PGPATH"/postgres $TEST_OPT template1 </dev/null >/dev/null 2>&1
+    if "$PGPATH"/postgres -boot -x0 $TEST_OPT template1 </dev/null >/dev/null 2>&1
     then
 	break
     fi
@@ -632,6 +598,39 @@ chmod 0600 "$PGDATA"/pg_hba.conf "$PGDATA"/pg_ident.conf \
 
 echo "ok"
 
+##########################################################################
+#
+# RUN BKI SCRIPT IN BOOTSTRAP MODE TO CREATE TEMPLATE1
+
+if [ "$debug" = yes ]
+then
+    BOOTSTRAP_TALK_ARG="-d 5"
+fi
+
+$ECHO_N "creating template1 database in $PGDATA/base/1... "$ECHO_C
+
+rm -rf "$PGDATA"/base/1 || exit_nicely
+mkdir "$PGDATA"/base/1 || exit_nicely
+
+cat "$POSTGRES_BKI" \
+| sed -e "s/POSTGRES/$POSTGRES_SUPERUSERNAME/g" \
+      -e "s/ENCODING/$ENCODINGID/g" \
+| 
+(
+  LC_COLLATE=`pg_getlocale COLLATE`
+  LC_CTYPE=`pg_getlocale CTYPE`
+  export LC_COLLATE
+  export LC_CTYPE
+  unset LC_ALL
+  "$PGPATH"/postgres -boot -x1 $PGSQL_OPT $BOOTSTRAP_TALK_ARG template1
+) \
+|| exit_nicely
+
+# Make the per-database PGVERSION for template1 only after init'ing it
+echo "$short_version" > "$PGDATA/base/1/PG_VERSION" || exit_nicely
+
+echo "ok"
+
 ##########################################################################
 #
 # CREATE VIEWS and other things