diff --git a/src/code/commandline.lisp b/src/code/commandline.lisp
index 36f037a015512ffd1c874e8a94ff16c648f9f677..be67ddcd718d3a6da468d234898a81e7145c669b 100644
--- a/src/code/commandline.lisp
+++ b/src/code/commandline.lisp
@@ -72,7 +72,7 @@
 
 ;;;; Processing the command strings.
 
-(defun process-command-strings ()
+(defun process-command-strings (init-command-switches-p)
   (setq *command-line-words* nil)
   (setq *command-line-switches* nil)
   (let ((cmd-strings lisp::lisp-command-line-list)
@@ -103,7 +103,7 @@
       (return-from process-command-strings nil))
     
     ;; Set command line switches.
-    ;; 
+    ;;
     (loop
       (unless str
 	(return (setf *command-line-switches*
@@ -119,14 +119,16 @@
 	(let (word-list)
 	  (loop
 	    (unless str
-	      (push (make-cmd-switch switch value (nreverse word-list))
-		    *command-line-switches*)
+	      (when init-command-switches-p
+		(push (make-cmd-switch switch value (nreverse word-list))
+		      *command-line-switches*))
 	      (return nil))
 	    
 	    (unless (zerop (length (the simple-string str)))
 	      (when (char= #\- (schar str 0))
-		(push (make-cmd-switch switch value (nreverse word-list))
-		      *command-line-switches*)
+		(when init-command-switches-p
+		  (push (make-cmd-switch switch value (nreverse word-list))
+			*command-line-switches*))
 		(when (and (= (length str) 2)
 			   (char= #\- (schar str 1)))
 		  ;; Gather up everything after --, and exit.
@@ -134,7 +136,7 @@
 		  (setf str nil))
 		(return nil))
 	      (push str word-list))
-	    (setq str (pop cmd-strings))))))))
+	    (setq str (pop cmd-strings)))))))))
 
 (defun get-command-line-switch (sname)
   "Accepts the name of a switch as a string and returns the value of
diff --git a/src/code/save.lisp b/src/code/save.lisp
index 11450d0bb0e8216718a288e382ed000080f5fe8b..696d79e7a3d4bc88006d3c98bc730a4539032e86 100644
--- a/src/code/save.lisp
+++ b/src/code/save.lisp
@@ -153,7 +153,8 @@
 				 (process-command-line t)
 		                  #+:executable
 		                 (executable nil)
-				 (batch-mode nil))
+				 (batch-mode nil)
+				 (quiet nil))
   "Saves a CMU Common Lisp core image in the file of the specified name.  The
   following keywords are defined:
   
@@ -191,8 +192,10 @@
 
   :process-command-line
       If true (the default), process command-line switches via the normal
-  mechanisms, otherwise ignore all switches (except those processed by the
-  C startup code).
+  mechanisms, otherwise ignore all switches (except those processed by
+  the C startup code).  In either case, the command line switches are
+  saved in *COMMAND-LINE-STRINGS* and
+  *COMMAND-LINE-APPLICATION-ARGUMENTS*.
 
   :executable
       If nil (the default), save-lisp will save using the traditional
@@ -203,7 +206,14 @@
   :batch-mode
       If nil (the default), then the presence of the -batch command-line
   switch will invoke batch-mode processing.  If true, the produced core
-  will always be in batch-mode, regardless of any command-line switches."
+  will always be in batch-mode, regardless of any command-line switches.
+
+  :quiet
+     If non-NIL, loading, compiling, and GC messages are suppressed.
+     This is equivalent to setting *load-verbose*, *compile-verbose*,
+     *compile-print*, *compile-progress*, *require-verbose*, and
+     *gc-verbose* all to NIL.  If NIL (the default), the default
+     values of these variables are used."
 
   (unless (probe-file (directory-namestring core-file-name))
     (error 'simple-file-error
@@ -240,8 +250,7 @@
 	     (environment-init)
 	     (dolist (f *after-save-initializations*) (funcall f))
 	     (intl::setlocale)
-	     (when process-command-line
-	       (ext::process-command-strings))
+	     (ext::process-command-strings process-command-line)
 	     (setf *editor-lisp-p* nil)
 	     (macrolet ((find-switch (name)
 			  `(find ,name *command-line-switches*
@@ -249,7 +258,8 @@
 				 :test #'(lambda (x y)
 					   (declare (simple-string x y))
 					   (string-equal x y)))))
-               (when (and process-command-line (find-switch "quiet"))
+               (when (or quiet
+			 (and process-command-line (find-switch "quiet")))
                  (setq *load-verbose* nil
                        *compile-verbose* nil
                        *compile-print* nil
@@ -285,8 +295,9 @@
 		 (ext::invoke-switch-demons *command-line-switches*
 					    *command-switch-demons*))
 	       (when (and print-herald
-			  (not (and process-command-line
-				    (find-switch "quiet"))))
+			  (not (or quiet
+				   (and process-command-line
+					(find-switch "quiet")))))
 		 ;; Don't print the herald if -quiet is given.
 		 (print-herald)))))
 	 (funcall init-function))
diff --git a/src/i18n/locale/cmucl.pot b/src/i18n/locale/cmucl.pot
index 5cdda5309bb89201971b17e3931c00fa2a17070f..7847d729e565a9bf5b02e9b2d6cc07f4c7b0e45d 100644
--- a/src/i18n/locale/cmucl.pot
+++ b/src/i18n/locale/cmucl.pot
@@ -6713,8 +6713,10 @@ msgid ""
 "\n"
 "  :process-command-line\n"
 "      If true (the default), process command-line switches via the normal\n"
-"  mechanisms, otherwise ignore all switches (except those processed by the\n"
-"  C startup code).\n"
+"  mechanisms, otherwise ignore all switches (except those processed by\n"
+"  the C startup code).  In either case, the command line switches are\n"
+"  saved in *COMMAND-LINE-STRINGS* and\n"
+"  *COMMAND-LINE-APPLICATION-ARGUMENTS*.\n"
 "\n"
 "  :executable\n"
 "      If nil (the default), save-lisp will save using the traditional\n"
@@ -6725,7 +6727,14 @@ msgid ""
 "  :batch-mode\n"
 "      If nil (the default), then the presence of the -batch command-line\n"
 "  switch will invoke batch-mode processing.  If true, the produced core\n"
-"  will always be in batch-mode, regardless of any command-line switches."
+"  will always be in batch-mode, regardless of any command-line switches.\n"
+"\n"
+"  :quiet\n"
+"     If non-NIL, loading, compiling, and GC messages are suppressed.\n"
+"     This is equivalent to setting *load-verbose*, *compile-verbose*,\n"
+"     *compile-print*, *compile-progress*, *require-verbose*, and\n"
+"     *gc-verbose* all to NIL.  If NIL (the default), the default\n"
+"     values of these variables are used."
 msgstr ""
 
 #: src/code/save.lisp