diff --git a/asdf.lisp b/asdf.lisp
index 6a13da8..d2ec531 100644
--- a/asdf.lisp
+++ b/asdf.lisp
@@ -219,7 +219,7 @@ and NIL NAME and TYPE components"
 (defclass component ()
   ((name :accessor component-name :initarg :name :documentation
          "Component name: designator for a string composed of portable pathname characters")
-   (version :accessor component-version :initarg :version)
+   (version :accessor component-version :initarg :version :initform nil)
    (in-order-to :initform nil :initarg :in-order-to)
    ;; XXX crap name
    (do-first :initform nil :initarg :do-first)
@@ -323,13 +323,14 @@ 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 :initform nil)
    (long-description
-    :accessor system-long-description :initarg :long-description)
-   (author :accessor system-author :initarg :author)
-   (maintainer :accessor system-maintainer :initarg :maintainer)
+    :accessor system-long-description :initarg :long-description :initform nil)
+   (author :accessor system-author :initarg :author :initform nil)
+   (maintainer :accessor system-maintainer :initarg :maintainer :initform nil)
    (licence :accessor system-licence :initarg :licence
-            :accessor system-license :initarg :license)))
+            :accessor system-license :initarg :license :initform nil)))
 
 ;;; version-satisfies
 
@@ -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
