diff --git a/asdf.lisp b/asdf.lisp
index 6a13da8..196d9a4 100644
--- a/asdf.lisp
+++ b/asdf.lisp
@@ -323,7 +323,8 @@ and NIL NAME and TYPE components"
               (acons property new-value (slot-value c 'properties))))))
 
 (defclass system (module)
-  ((description :accessor system-description :initarg :description)
+  ((source-file :reader system-source-file)
+   (description :accessor system-description :initarg :description)
    (long-description
     :accessor system-long-description :initarg :long-description)
    (author :accessor system-author :initarg :author)
@@ -1136,7 +1137,9 @@ method."))
                   (change-class (cdr s) ',class))
                  (t
                   (register-system (quote ,name)
-                                   (make-instance ',class :name ',name)))))
+                                   (make-instance ',class :name ',name))))
+           (setf (slot-value (cdr (system-registered-p ',name)) 'source-file)
+                 *load-truename*))
          (parse-component-form nil (apply
                                     #'list
                                     :module (coerce-name ',name)
@@ -1396,15 +1399,6 @@ output to `*verbose-out*`.  Returns the shell's exit code."
 (defmethod system-source-file ((system-name t))
   (system-source-file (find-system system-name)))
 
-(defmethod system-source-file ((system system))
-  (let ((pn (and (slot-boundp system 'relative-pathname)
-		 (make-pathname
-		  :type "asd"
-		  :name (asdf:component-name system)
-		  :defaults (asdf:component-relative-pathname system)))))
-    (when pn
-      (probe-file pn))))
-
 (defun system-source-directory (system-name)
   (make-pathname :name nil
                  :type nil
