diff --git a/compiler/main.lisp b/compiler/main.lisp
index 4c8c532cc96c91962ab067c81fc6f1e86fcd361f..bb40fba11189db0abb171e59843abeef0bc08a7e 100644
--- a/compiler/main.lisp
+++ b/compiler/main.lisp
@@ -682,10 +682,16 @@
 ;;; compile something.  If *BLOCK-COMPILE* is true, then we still convert the
 ;;; form, but delay compilation, pushing the result on *TOP-LEVEL-LAMBDAS*
 ;;; instead.
+;;;
+;;;   The *DEFAULT-COOKIE* at this time becomes the default policy for
+;;; compiling the form.  Any enclosed PROCLAIMs will affect only subsequent
+;;; forms.
 ;;; 
 (defun convert-and-maybe-compile (form path object)
   (declare (list path) (type object object))
-  (let ((tll (ir1-top-level form path nil)))
+  (let* ((*lexical-environment*
+	  (make-lexenv :cookie *default-cookie*))
+	 (tll (ir1-top-level form path nil)))
     (cond (*block-compile* (push tll *top-level-lambdas*))
 	  (t
 	   (compile-top-level (list tll) object)
@@ -755,8 +761,11 @@
 			   unexport use-package unuse-package import)
 	     (eval form)
 	     (etypecase object
-	       (fasl-file (fasl-dump-cold-load-form form object))
-	       ((or null core-object))))
+	       (fasl-file
+		(compile-top-level-lambdas () t object)
+		(fasl-dump-cold-load-form form object))
+	       ((or null core-object)
+		(convert-and-maybe-compile form path object))))
 	    ((eval-when)
 	     (unless (>= (length form) 2)
 	       (compiler-error "EVAL-WHEN form is too short: ~S." form))