diff --git a/parse-defsystem.lisp b/parse-defsystem.lisp
index e298ff48422e223e45886fd3baa558dc78a7ef3d..7845871fac8a6e86753ed42f1a777ea78c092758 100644
--- a/parse-defsystem.lisp
+++ b/parse-defsystem.lisp
@@ -310,7 +310,8 @@ system names contained using COERCE-NAME. Return the result."
                dep-forms))
             (system (or (find-system-if-being-defined name)
                         (if-let (registered (registered-system name))
-                          (reset-system registered :name name :source-file source-file)
+                          (reset-system-class registered 'undefined-system
+                                              :name name :source-file source-file)
                           (register-system (make-instance 'undefined-system
                                                           :name name :source-file source-file)))))
             (component-options
@@ -328,7 +329,7 @@ system names contained using COERCE-NAME. Return the result."
        (unless (subtypep class 'system)
          (error 'non-system-system :name name :class-name (class-name class)))
        (unless (eq (type-of system) class)
-         (change-class system class)))
+         (reset-system-class system class)))
      (parse-component-form nil (list* :module name :pathname directory component-options))))
 
   (defmacro defsystem (name &body options)
diff --git a/system.lisp b/system.lisp
index c09889d40e2d9c29d729b5bea8182182d6f0b7d2..3325ee46ec2d62c2e4f6d9a542badc8cd163c453 100644
--- a/system.lisp
+++ b/system.lisp
@@ -5,7 +5,7 @@
   (:recycle :asdf :asdf/system :asdf/find-system)
   (:use :uiop/common-lisp :uiop :asdf/upgrade :asdf/session :asdf/component)
   (:export
-   #:system #:proto-system #:undefined-system #:reset-system
+   #:system #:proto-system #:undefined-system #:reset-system-class
    #:system-source-file #:system-source-directory #:system-relative-pathname
    #:system-description #:system-long-description
    #:system-author #:system-maintainer #:system-licence #:system-license
@@ -105,10 +105,10 @@ ASDF to build."))
   (defclass undefined-system (system) ()
     (:documentation "System that was not defined yet."))
 
-  (defun reset-system (system &rest keys &key &allow-other-keys)
+  (defun reset-system-class (system new-class &rest keys &key &allow-other-keys)
     "Erase any data from a SYSTEM except its basic identity, then reinitialize it
 based on supplied KEYS."
-    (change-class (change-class system 'proto-system) 'undefined-system)
+    (change-class (change-class system 'proto-system) new-class)
     (apply 'reinitialize-instance system keys)))