diff --git a/code/package.lisp b/code/package.lisp
index 88508ab96411e03ee849d76986193a04bfba30f5..281f18804bb77771378b6eb53fcc5f8573cb902d 100644
--- a/code/package.lisp
+++ b/code/package.lisp
@@ -7,7 +7,7 @@
 ;;; Scott Fahlman or slisp-group@cs.cmu.edu.
 ;;;
 (ext:file-comment
-  "$Header: /Volumes/share2/src/cmucl/cvs2git/cvsroot/src/code/package.lisp,v 1.9 1991/02/08 13:34:25 ram Exp $")
+  "$Header: /Volumes/share2/src/cmucl/cvs2git/cvsroot/src/code/package.lisp,v 1.10 1991/02/11 13:24:43 ram Exp $")
 ;;;
 ;;; **********************************************************************
 ;;;
@@ -580,7 +580,6 @@
        (:EXPORT {symbol-name}*)
    All keywords except :SIZE can be used multiple times."
   (let ((body nil)
-	(n-package (gensym))
 	(package-name
 	 (etypecase package
 	   ;; Make sure we have a good package name to use.
@@ -588,7 +587,7 @@
 	   (symbol (symbol-name package)))))
     (multiple-value-bind
 	(nicknames uses shadows imports shadowed-imports exports interns size)
-	(parse-defpackage-keywords arguments n-package)
+	(parse-defpackage-keywords arguments package-name)
       ;; We set up the body of the form to return first things first
       ;; for readability, even though (since we're using PUSH) we
       ;; then have to NREVERSE at the end.  The order of operations
@@ -597,38 +596,39 @@
       ;;          3. :import-from and :return
       ;;          4. :export
       (when shadows
-	(push `(shadow (list ,@shadows) ,n-package)
+	(push `(shadow (list ,@shadows) ,package-name)
 	      body))
       (when shadowed-imports
-	(push `(shadowing-import (list ,@shadowed-imports) ,n-package)
+	(push `(shadowing-import (list ,@shadowed-imports) ,package-name)
 	      body))
       (when uses
-	(push `(use-package (list ,@uses) ,n-package)
+	(push `(use-package (list ,@uses) ,package-name)
 	      body))
       (when imports
-	(push `(import (list ,@imports) ,n-package)
+	(push `(import (list ,@imports) ,package-name)
 	      body))
       (when interns
 	(dolist (symbol interns)
-	  (push `(intern ,symbol ,n-package)
+	  (push `(intern ,symbol ,package-name)
 		body)))
       (when exports
-	(push `(export (list ,@exports) ,n-package)
+	(push `(export (list ,@exports) ,package-name)
 	      body))
       ;;
       ;; We do :nicknames and :sizeat the top (where it's convenient).
       ;; :Size is not implemented very well.  We assume, for absolutely
       ;; no good reason, that approximates 1/5 of the symbols in a
       ;; package will be external.
-      `(let ((,n-package
-	      (or (find-package ,package-name)
-		  (make-package
-		   ,package-name
-		   ,@(if nicknames `(:nicknames (list ,@nicknames)))
-		   ,@(if size `(:internal-symbols ,(round size 5/4)
-				:external-symbols ,(round size 5)))))))
+      `(progn
+	 (eval-when (compile load eval)
+	   (unless (find-package ,package-name)
+	     (make-package
+	      ,package-name
+	      ,@(if nicknames `(:nicknames (list ,@nicknames)))
+	      ,@(if size `(:internal-symbols ,(round size 5/4)
+			   :external-symbols ,(round size 5))))))
 	 ,@(nreverse body)
-	 ,n-package))))
+	 (find-package ,package-name)))))
 
 
 (defun parse-defpackage-keywords (rest-list n-package)