diff --git a/header.lisp b/header.lisp
index fd3c553196e3e3b74f02f9127825c6751bfb3553..486fe1736610cbba8747dacfe00e6c5c655549bc 100644
--- a/header.lisp
+++ b/header.lisp
@@ -54,7 +54,7 @@
   (declaim (optimize (speed 1) (safety 3) (debug 3)))
   (setf ext:*gc-verbose* nil))
 
-#+(or abcl clisp clozure cmu ecl xcl)
+#+(or abcl clisp clozure cmu ecl xcl) ;; punt on hard package upgrade on those implementations
 (eval-when (:load-toplevel :compile-toplevel :execute)
   (unless (member :asdf3 *features*)
     (let* ((existing-version
@@ -71,7 +71,7 @@
            (existing-version-number (and existing-version (read-from-string existing-major-minor)))
            (away (format nil "~A-~A" :asdf existing-version)))
       (when (and existing-version
-                 (< existing-version-number #+abcl 2.25 #+cmu 2.018 #-(or abcl cmu) 2.27))
+                 (< existing-version-number 2.27))
         (rename-package :asdf away)
         (when *load-verbose*
           (format t "~&; Renamed old ~A package away to ~A~%" :asdf away))))))
diff --git a/test/run-tests.sh b/test/run-tests.sh
index 18eabcd86084a3cc015021af7bb7c91a8876efa9..fd8e10f4713664116ee3d59ce7a6d6f1d298c3a6 100755
--- a/test/run-tests.sh
+++ b/test/run-tests.sh
@@ -290,7 +290,7 @@ upgrade_methods () {
     cat <<EOF
 'load-asdf-lisp'load-asdf-lisp-clean
 'load-asdf-lisp'load-asdf-system
-'load-asdf-lisp'compile-load-asdf
+'load-asdf-lisp'compile-load-asdf-upgrade
 'load-asdf-lisp'load-asdf-fasl
 ()'load-asdf-fasl
 'load-asdf-lisp-and-test-uiop'load-asdf-fasl
diff --git a/test/script-support.lisp b/test/script-support.lisp
index f4252d89916e1745d9c102d1cddeaf9d87be80e5..c869f12ccd9242b4417365d965a565b743ce0273 100644
--- a/test/script-support.lisp
+++ b/test/script-support.lisp
@@ -20,7 +20,8 @@ Some constraints:
    #:hash-table->alist
    #:load-asdf #:maybe-compile-asdf
    #:load-asdf-lisp #:compile-asdf #:load-asdf-fasl
-   #:compile-load-asdf #:load-asdf-system #:clean-load-asdf-system
+   #:compile-load-asdf #:compile-load-asdf-upgrade
+   #:load-asdf-system #:clean-load-asdf-system
    #:register-directory #:load-test-system
    #:with-test #:test-asdf #:debug-asdf
    #:assert-compare
@@ -388,7 +389,7 @@ is bound, write a message and exit on an error.  If
 (defmacro with-asdf-conditions ((&optional verbose) &body body)
   `(call-with-asdf-conditions #'(lambda () ,@body) ,verbose))
 
-(defun compile-asdf (&optional tag verbose)
+(defun compile-asdf (&optional tag verbose upgradep)
   (let* ((alisp (asdf-lisp tag))
          (afasl (asdf-fasl tag))
          (tmp (make-pathname :name "asdf-tmp" :defaults afasl)))
@@ -401,7 +402,7 @@ is bound, write a message and exit on an error.  If
              (good (key)
                (when (probe-file afasl) (delete-file afasl))
                (rename-file tmp afasl)
-               key))
+               compile-asdf key))
         (cond
           ((null result)
            (bad :no-output))
@@ -416,6 +417,7 @@ is bound, write a message and exit on an error.  If
             ;; ECL 11.1.1 has spurious warnings, same with XCL 0.0.0.291.
             ;; SCL has no warning but still raises the warningp flag since 2.20.15 (?)
             #+(or clisp cmu ecl scl xcl) (good :expected-style-warnings)
+            (and upgradep (good :unexpected-style-warnings))
             (bad :unexpected-style-warnings)))
           (t (good :success)))))))
 
@@ -453,16 +455,20 @@ is bound, write a message and exit on an error.  If
       (:success
        (leave-test "ASDF compiled cleanly" 0)))))
 
-(defun compile-load-asdf (&optional tag)
+(defun compile-load-asdf (&optional tag upgradep)
   ;; emulate the way asdf upgrades itself: load source, compile, load fasl.
   (load-asdf-lisp tag)
-  (let ((results (compile-asdf tag)))
+  (let ((results (compile-asdf tag nil upgradep)))
     (ecase results
       ((:no-output :unexpected-full-warnings :unexpected-style-warnings)
-       (warn "ASDF compiled with ~S" results)
-       (leave-test "failed to compile ASDF" 1))
-      ((:expected-full-warnings :expected-style-warnings :success)
-       (load-asdf-fasl tag)))))
+         (warn "ASDF compiled with ~S" results)
+         (unless (and upgradep (eq results :unexpected-style-warnings))
+           (leave-test "failed to compile ASDF" 1)))
+      ((:expected-full-warnings :expected-style-warnings :success)))
+    (load-asdf-fasl tag)))
+
+(defun compile-load-asdf-upgrade (&optional tag)
+  (compile-load-asdf tag t))
 
 ;;; Now, functions to compile and load ASDF.