diff -u -r cl-store_0.4/default-backend.lisp cl-store/default-backend.lisp
--- cl-store_0.4/default-backend.lisp	2005-02-15 12:50:27.667912600 +0100
+++ cl-store/default-backend.lisp	2005-02-15 12:50:32.949162600 +0100
@@ -492,11 +492,49 @@
 ;; packages
 (defstore-cl-store (obj package stream)
   (output-type-code +package-code+ stream)
-  (store-object (package-name obj) stream))
+  (store-object (package-name obj) stream)
+  (store-object (package-nicknames obj) stream)
+  (store-object (package-use-list obj) stream)
+  (store-object (internal-symbols obj) stream)
+  (store-object (external-symbols obj) stream))
 
 (defrestore-cl-store (package stream)
-  (find-package (restore-object stream)))
-
+  (let* ((package-name (restore-object stream))
+	 (nicknames (restore-object stream))
+	 (use-list (restore-object stream))
+	 (internal-symbols (restore-object stream))
+	 (external-symbols (restore-object stream))
+	 (existing-package (find-package package-name)))
+    (cond ((or (not existing-package)
+	       (and existing-package *nuke-existing-packages*))
+	   (restore-package package-name nicknames use-list internal-symbols external-symbols 
+			    :force *nuke-existing-packages*))
+	  (t existing-package))))
+
+(defun internal-symbols (package)
+  (let (acc)
+    (do-symbols (symbol package)
+      (push symbol acc))
+    (nreverse acc)))
+
+(defun external-symbols (package)
+  (let (acc)
+    (do-external-symbols (symbol package)
+      (push symbol acc))
+    (nreverse acc)))
+
+(defun restore-package (package-name nicknames use-list internal-symbols external-symbols
+			&key force)
+  (when force
+    (delete-package package-name))
+  (let ((package (make-package package-name
+			       :nicknames nicknames
+			       :use use-list)))
+    (dolist (symbol internal-symbols)
+      (import symbol package))
+    (dolist (symbol external-symbols)
+      (export symbol package))
+    package))
 
 ;; multiple values
 
diff -u -r cl-store_0.4/plumbing.lisp cl-store/plumbing.lisp
--- cl-store_0.4/plumbing.lisp	2004-11-24 14:20:20.000000000 +0100
+++ cl-store/plumbing.lisp	2005-02-15 12:52:48.777287600 +0100
@@ -7,6 +7,8 @@
 (in-package :cl-store)
 (declaim (optimize (speed 3) (safety 1) (debug 1)))
 
+(defvar *nuke-existing-packages* nil
+  "Whether or not to overwrite existing packages on restoration.")
 (defvar *nuke-existing-classes* nil
   "Do we overwrite existing class definitions on restoration.")
 (defvar *store-class-superclasses* nil
