diff --git a/test/test-utilities.script b/test/test-utilities.script
index dae08789b5ec27aa65b9d9f759ec6e57d5e55c0e..f7689b86dbd966963e75e474521dda222e327d4e 100644
--- a/test/test-utilities.script
+++ b/test/test-utilities.script
@@ -312,3 +312,12 @@
   (assert-equal (multiple-value-list (ensure-gethash 3 h nil)) '(nil nil))
   (assert-equal (multiple-value-list (gethash 3 h 4)) '(nil t))
   (assert-equal (multiple-value-list (ensure-gethash 3 h 5)) '(nil t)))
+
+(DBG :optimization-settings)
+#-(or allegro ecl-bytecmp gcl mkcl)
+(loop :for i :from 0 :to 3 :do
+  (with-optimization-settings (`((speed ,i) (space ,i) (safety ,i) (debug ,i)))
+    (let ((s (get-optimization-settings)))
+      (loop :for q :in '(speed space safety debug) :do
+        #+mkcl (DBG :os i q s (assoc q s))
+        (assert-equal i (second (assoc q s)))))))
diff --git a/uiop/lisp-build.lisp b/uiop/lisp-build.lisp
index 350424896eaab24fee721468de070954583b91bb..013b760b5c7e34cc96bc4a79f6622d83b97a0bbc 100644
--- a/uiop/lisp-build.lisp
+++ b/uiop/lisp-build.lisp
@@ -62,12 +62,12 @@ This can help you produce more deterministic output for FASLs."))
     "Optimization settings saved by PROCLAIM-OPTIMIZATION-SETTINGS")
   (defparameter +optimization-variables+
     ;; TODO: allegro genera corman mcl
-    (or #+(or abcl xcl) '(system::*speed* c::*space* c::*safety* c::*debug*)
-        #+clisp '(system::*optimize*)
+    (or #+(or abcl xcl) '(system::*speed* system::*space* system::*safety* system::*debug*)
+        #+clisp '() ;; system::*optimize* is a constant hash-table! (with non-constant contents)
         #+clozure '(ccl::*nx-speed* ccl::*nx-space* ccl::*nx-safety*
                     ccl::*nx-debug* ccl::*nx-cspeed*)
         #+(or cmu scl) '(c::*default-cookie*)
-        #+ecl '(c::*speed* c::*space* c::*safety* c::*debug*)
+        #+ecl (unless (use-ecl-byte-compiler-p) '(c::*speed* c::*space* c::*safety* c::*debug*))
         #+gcl '(compiler::*speed* compiler::*space* compiler::*compiler-new-safety* compiler::*debug*)
         #+lispworks '(compiler::*optimization-level*)
         #+mkcl '(si::*speed* si::*space* si::*safety* si::*debug*)
@@ -81,10 +81,12 @@ This can help you produce more deterministic output for FASLs."))
     #+(or abcl clisp cmu ecl lispworks mkcl sbcl scl xcl)
     (let ((settings '(speed space safety debug compilation-speed #+(or cmu scl) c::brevity)))
       #.`(loop :for x :in settings
-               ,@(or #+(or abcl ecl gcl mkcl xcl) '(:for v :in *optimization-variables*))
+               ,@(or #+(or abcl ecl gcl mkcl xcl) '(:for v :in +optimization-variables+))
                :for y = (or #+clisp (gethash x system::*optimize*)
                             #+(or abcl ecl mkcl xcl) (symbol-value v)
-                            #+(or cmu scl) (slot-value c::*default-cookie* x)
+                            #+(or cmu scl) (slot-value c::*default-cookie*
+                                                       (case x (compilation-speed 'c::cspeed)
+                                                             (otherwise x)))
                             #+lispworks (slot-value compiler::*optimization-level* x)
                             #+sbcl (cdr (assoc x sb-c::*policy*)))
                :when y :collect (list x y))))