diff --git a/code/gc.lisp b/code/gc.lisp
index 7932f262559850fe881760a809f40c67ee06e208..429c26ec20a7ba66563f10d1781146e2e5f138fc 100644
--- a/code/gc.lisp
+++ b/code/gc.lisp
@@ -5,7 +5,7 @@
 ;;; Carnegie Mellon University, and has been placed in the public domain.
 ;;;
 (ext:file-comment
-  "$Header: /Volumes/share2/src/cmucl/cvs2git/cvsroot/src/code/gc.lisp,v 1.22 1997/11/04 09:10:44 dtc Exp $")
+  "$Header: /Volumes/share2/src/cmucl/cvs2git/cvsroot/src/code/gc.lisp,v 1.23 1997/11/04 16:00:14 dtc Exp $")
 ;;;
 ;;; **********************************************************************
 ;;;
@@ -301,7 +301,8 @@
 
 ;;;; Internal GC
 
-(alien:def-alien-routine collect-garbage c-call:int)
+(alien:def-alien-routine collect-garbage c-call:int
+  #+gencgc (last-gen c-call:int))
 
 #-ibmrt
 (alien:def-alien-routine set-auto-gc-trigger c-call:void
@@ -353,7 +354,9 @@
 ;;; called.  The FORCE-P flags controls if a GC should occur even if the
 ;;; dynamic usage is not greater than *GC-TRIGGER*.
 ;;; 
-(defun sub-gc (&key (verbose-p *gc-verbose*) force-p)
+;;; For GENCGC all generations < GEN will be GC'ed.
+;;;
+(defun sub-gc (&key (verbose-p *gc-verbose*) force-p #+gencgc (gen 0))
   (unless *already-maybe-gcing*
     (let* ((*already-maybe-gcing* t)
 	   (start-time (get-internal-run-time))
@@ -383,7 +386,10 @@
 	      (carefully-funcall hook))
 	    (when *gc-trigger*
 	      (clear-auto-gc-trigger))
-	    (funcall *internal-gc*)
+	    #-gencgc (funcall *internal-gc*)
+	    #+gencgc (if (eq *internal-gc* #'collect-garbage)
+			 (funcall *internal-gc* gen)
+			 (funcall *internal-gc*))
 	    (let* ((post-gc-dyn-usage (dynamic-usage))
 		   (bytes-freed (- pre-gc-dyn-usage post-gc-dyn-usage)))
 	      (when *last-bytes-in-use*
@@ -420,11 +426,20 @@
 ;;;
 ;;; This is the user advertised garbage collection function.
 ;;; 
+#-gencgc
 (defun gc (&optional (verbose-p *gc-verbose*))
   "Initiates a garbage collection.  The optional argument, VERBOSE-P,
   which defaults to the value of the variable *GC-VERBOSE* controls
   whether or not GC statistics are printed."
   (sub-gc :verbose-p verbose-p :force-p t))
+;;;
+#+gencgc
+(defun gc (&key (verbose *gc-verbose*) (gen 0) (full nil))
+  "Initiates a garbage collection.  The keyword :VERBOSE, which
+   defaults to the value of the variable *GC-VERBOSE* controls whether or
+   not GC statistics are printed. The keyword :GEN defaluts to 0, and
+   controls the number of generations to garbage collect."
+  (sub-gc :verbose-p verbose :force-p t :gen (if full 6 gen)))
 
 
 ;;;; Auxiliary Functions.
diff --git a/code/purify.lisp b/code/purify.lisp
index cd07f6dec64fa7464a9f5c4f015c0ad10edd0615..1bdf54187c433ae80772419a6ffafad875f4d6f5 100644
--- a/code/purify.lisp
+++ b/code/purify.lisp
@@ -5,7 +5,7 @@
 ;;; Carnegie Mellon University, and has been placed in the public domain.
 ;;;
 (ext:file-comment
-  "$Header: /Volumes/share2/src/cmucl/cvs2git/cvsroot/src/code/purify.lisp,v 1.18 1994/10/31 04:11:27 ram Exp $")
+  "$Header: /Volumes/share2/src/cmucl/cvs2git/cvsroot/src/code/purify.lisp,v 1.19 1997/11/04 16:00:16 dtc Rel $")
 ;;;
 ;;; **********************************************************************
 ;;;
@@ -71,5 +71,6 @@
 	 #'(lambda (&rest ignore)
 	     (declare (ignore ignore))
 	     (write-line "Done.]"))))
-    (gc t))
+    #-gencgc (gc t)
+    #+gencgc (gc :verbose t))
   nil)
diff --git a/code/save.lisp b/code/save.lisp
index e752b6ad439b95820d28905b80552b7ecd5e4f50..090755c8e02d49cc585749c6512f816707091e0f 100644
--- a/code/save.lisp
+++ b/code/save.lisp
@@ -5,7 +5,7 @@
 ;;; Carnegie Mellon University, and has been placed in the public domain.
 ;;;
 (ext:file-comment
-  "$Header: /Volumes/share2/src/cmucl/cvs2git/cvsroot/src/code/save.lisp,v 1.31 1997/03/15 16:58:59 dtc Exp $")
+  "$Header: /Volumes/share2/src/cmucl/cvs2git/cvsroot/src/code/save.lisp,v 1.32 1997/11/04 16:00:15 dtc Exp $")
 ;;;
 ;;; **********************************************************************
 ;;;
@@ -153,7 +153,7 @@
   (if purify
       (purify :root-structures root-structures
 	      :environment-name environment-name)
-      (gc))
+      #-gencgc (gc) #+gencgc (gc :full t))
   (dolist (f *before-save-initializations*) (funcall f))
   (flet
       ((restart-lisp ()