diff --git a/TODO b/TODO
index 1a907bac21dd19a24842258abe65412d4ad24cf1..174a06a805bd5578b276c583de5307ce93682115 100644
--- a/TODO
+++ b/TODO
@@ -157,6 +157,10 @@
 *** `#5(1 ,@`(2 3)))` returns #(1 2 3),
      rather than #(1 2 3 2 3 2 3 2 3) or even better #(1 2 3 3 3).
 *** (DIRECTORY #p"*.*") fails to match files with pathname type NIL.
+*** Require is useless, because there is no system search path,
+   and so you can't put ASDF (or anything) there.
+*** Low-level compiler bug:
+   ./cl-launch.sh -B redo_test sh gcl exec noupdate noinc file system noinit
 
 ** ABCL has a few bugs.
 *** ABCL fails the timestamp propagation test.
@@ -235,6 +239,10 @@
 * operation cleanup?
 ** Kill backward-compat functions after all clients have moved on.
 ** Kill original-initargs -- BEWARE, it currently has clients!
+*** current ECL users used to depend on it for bundles, and may or may
+   not be satisfied with how it's not propagated anymore.
+*** SLIME uses it (!)
+*** weblocks uses it (!)
 ** To allow semantically distinct operations of the same class:
 You'd need to have a protocol to canonicalize them
 in the *OPERATIONS* memoization table, not by class name,
diff --git a/footer.lisp b/footer.lisp
index 692415b9fe1955c269371fc1dae0bcee7f46dfac..f824748c714fbc0cfa4f1a6d792f24ab352fa94b 100644
--- a/footer.lisp
+++ b/footer.lisp
@@ -7,9 +7,8 @@
 (in-package :asdf/footer)
 
 ;;;; Hook ASDF into the implementation's REQUIRE and other entry points.
-
+#+(or abcl clisp clozure cmu ecl mkcl sbcl)
 (with-upgradability ()
-  #+(or abcl clisp clozure cmu ecl mkcl sbcl)
   (if-let (x (and #+clisp (find-symbol* '#:*module-provider-functions* :custom nil)))
     (eval `(pushnew 'module-provide-asdf
                     #+abcl sys::*module-provider-functions*
@@ -37,7 +36,7 @@
                           (and (first l) (register-pre-built-system (coerce-name name)))
                           (values-list l))))))))
 
-#+cmu
+#+cmu ;; Hook into the CMUCL herald.
 (with-upgradability ()
   (defun herald-asdf (stream)
     (format stream "    ASDF ~A" (asdf-version)))
@@ -52,7 +51,8 @@
 
   (dolist (f '(:asdf :asdf2 :asdf3 :asdf3.1 :asdf-package-system)) (pushnew f *features*))
 
-  (provide "asdf") (provide "ASDF") ;; do it both ways to satisfy more people.
+  ;; Provide both lowercase and uppercase, to satisfy more people, especially LispWorks users.
+  (provide "asdf") (provide "ASDF")
 
   (cleanup-upgraded-asdf))
 
diff --git a/uiop/image.lisp b/uiop/image.lisp
index be9e2055e43bb43553558d473b4145095ba2a2fe..27ad191547acb85572b3c363c33bb865abcb1076 100644
--- a/uiop/image.lisp
+++ b/uiop/image.lisp
@@ -260,10 +260,15 @@ if we are not called from a directly executable image."
   (defun argv0 ()
     "On supported implementations (most that matter), return a string that for the name with which
 the program was invoked, i.e. argv[0] in C. On other implementations, return NIL."
-    ;; NB: not currently available on ABCL, Corman, Genera, MCL, MKCL
-    (or #+(or allegro clisp clozure cmu gcl lispworks sbcl scl xcl)
-	(first (raw-command-line-arguments))
-	#+ecl (si:argv 0)))
+    (cond
+      ((eq *image-dumped-p* :executable) ; yes, this ARGV0 is our argv0 !
+       ;; NB: not currently available on ABCL, Corman, Genera, MCL, MKCL
+       (or #+(or allegro clisp clozure cmu gcl lispworks sbcl scl xcl)
+           (first (raw-command-line-arguments))
+           #+ecl (si:argv 0)))
+      (t ;; argv[0] is the name of the interpreter.
+       ;; The wrapper script can export __CL_ARGV0. cl-launch does as of 4.0.1.8.
+       (getenvp "__CL_ARGV0"))))
 
   (defun setup-command-line-arguments ()
     (setf *command-line-arguments* (command-line-arguments)))