diff --git a/asdf.lisp b/asdf.lisp
index 6590fdc..4d81878 100644
--- a/asdf.lisp
+++ b/asdf.lisp
@@ -62,7 +62,8 @@
   (setf excl::*autoload-package-name-alist*
         (remove "asdf" excl::*autoload-package-name-alist*
                 :test 'equalp :key 'car))
-  #+ecl (require :cmp)
+  #-ecl-bytecmp
+  (require :cmp)
   #+(and (or win32 windows mswindows mingw32) (not cygwin)) (pushnew :asdf-windows *features*)
   #+(or unix cygwin) (pushnew :asdf-unix *features*))
 
@@ -876,13 +877,6 @@ processed in order by OPERATE."))
 ;;;; -------------------------------------------------------------------------
 ;;; Methods in case of hot-upgrade. See https://bugs.launchpad.net/asdf/+bug/485687
 (when *upgraded-p*
-   #+ecl
-   (when (find-class 'compile-op nil)
-     (defmethod update-instance-for-redefined-class :after
-         ((c compile-op) added deleted plist &key)
-       (declare (ignore added deleted))
-       (let ((system-p (getf plist 'system-p)))
-         (when system-p (setf (getf (slot-value c 'flags) :system-p) system-p)))))
    (when (find-class 'module nil)
      (eval
       `(defmethod update-instance-for-redefined-class :after
@@ -1893,7 +1887,7 @@ recursive calls to traverse.")
    (on-failure :initarg :on-failure :accessor operation-on-failure
                :initform *compile-file-failure-behaviour*)
    (flags :initarg :flags :accessor compile-op-flags
-          :initform #-ecl nil #+ecl '(:system-p t))))
+          :initform nil)))
 
 (defun output-file (operation component)
   "The unique output file of performing OPERATION on COMPONENT"
@@ -1908,15 +1902,6 @@ recursive calls to traverse.")
                          file)
      :do (ensure-directories-exist pathname)))
 
-#+ecl
-(defmethod perform :after ((o compile-op) (c cl-source-file))
-  ;; Note how we use OUTPUT-FILES to find the binary locations
-  ;; This allows the user to override the names.
-  (let* ((files (output-files o c))
-         (object (first files))
-         (fasl (second files)))
-    (c:build-fasl fasl :lisp-files (list object))))
-
 (defmethod perform :after ((operation operation) (c component))
   (setf (gethash (type-of operation) (component-operation-times c))
         (get-universal-time)))
@@ -1936,6 +1921,7 @@ recursive calls to traverse.")
         (output-file (first (output-files operation c)))
         (*compile-file-warnings-behaviour* (operation-on-warnings operation))
         (*compile-file-failure-behaviour* (operation-on-failure operation)))
+    (declare (notinline compile-file*)) ; allow redefinition
     (multiple-value-bind (output warnings-p failure-p)
         (apply #'compile-file* source-file :output-file output-file
                (compile-op-flags operation))
@@ -3236,6 +3222,20 @@ effectively disabling the output translation facility."
          (setf output-truename nil)))
       (values output-truename warnings-p failure-p))))
 
+#+(and ecl (not ecl-bytecmp))
+(progn
+  (defparameter *asdf-compile-file* #'compile-file*)
+  (setf (fdefinition 'compile-file*)
+        #'(lambda (input-file &rest keys)
+            (multiple-value-bind (object-file flags1 flags2)
+                (apply *asdf-compile-file* input-file (list* :system-p t keys))
+              (values (and object-file
+                           (c::build-fasl (compile-file-pathname object-file :type :fasl)
+                                          :lisp-files (list object-file))
+                           object-file)
+                      flags1
+                      flags2)))))
+
 #+abcl
 (defun* translate-jar-pathname (source wildcard)
   (declare (ignore wildcard))
@@ -3718,17 +3718,6 @@ with a different configuration, so the configuration would be re-read then."
 ;;;; Things to do in case we're upgrading from a previous version of ASDF.
 ;;;; See https://bugs.launchpad.net/asdf/+bug/485687
 ;;;;
-;;;; TODO: debug why it's not enough to upgrade from ECL <= 9.11.1
-(eval-when (:compile-toplevel :load-toplevel :execute)
-  #+ecl ;; Support upgrade from before ECL went to 1.369
-  (when (fboundp 'compile-op-system-p)
-    (defmethod compile-op-system-p ((op compile-op))
-      (getf :system-p (compile-op-flags op)))
-    (defmethod initialize-instance :after ((op compile-op)
-                                           &rest initargs
-                                           &key system-p &allow-other-keys)
-      (declare (ignorable initargs))
-      (when system-p (appendf (compile-op-flags op) (list :system-p system-p))))))
 
 ;;; If a previous version of ASDF failed to read some configuration, try again.
 (when *ignored-configuration-form*
