diff --git a/test/defsystem-depends-on/defsystem-dependency.asd b/test/defsystem-depends-on/defsystem-dependency.asd
new file mode 100644
index 0000000000000000000000000000000000000000..3f7f139c06c6891670ef01e823b814e1be7e5ee0
--- /dev/null
+++ b/test/defsystem-depends-on/defsystem-dependency.asd
@@ -0,0 +1,3 @@
+(defsystem "defsystem-dependency"
+  :depends-on ("overlapping-dependency")
+  :components ((:file "defsystem-dependency")))
diff --git a/test/defsystem-depends-on/defsystem-dependency.lisp b/test/defsystem-depends-on/defsystem-dependency.lisp
new file mode 100644
index 0000000000000000000000000000000000000000..c391ea4463ee1f5c9a7927182aed795fcc9aa16d
--- /dev/null
+++ b/test/defsystem-depends-on/defsystem-dependency.lisp
@@ -0,0 +1,3 @@
+(in-package :asdf-test)
+(defvar *dd* 0)
+(incf *dd*)
diff --git a/test/defsystem-depends-on/intermediate-dependency.asd b/test/defsystem-depends-on/intermediate-dependency.asd
new file mode 100644
index 0000000000000000000000000000000000000000..caf4ef95c8becfc730e53562f7669441f100c579
--- /dev/null
+++ b/test/defsystem-depends-on/intermediate-dependency.asd
@@ -0,0 +1,3 @@
+(defsystem "intermediate-dependency"
+  :defsystem-depends-on ("defsystem-dependency")
+  :components ((:file "intermediate-dependency")))
diff --git a/test/defsystem-depends-on/intermediate-dependency.lisp b/test/defsystem-depends-on/intermediate-dependency.lisp
new file mode 100644
index 0000000000000000000000000000000000000000..b8c6b4de2810a5c213a9a52d002c25eaa96865e8
--- /dev/null
+++ b/test/defsystem-depends-on/intermediate-dependency.lisp
@@ -0,0 +1,3 @@
+(in-package :asdf-test)
+(defvar *id* 0)
+(incf *id*)
diff --git a/test/defsystem-depends-on/main-system.asd b/test/defsystem-depends-on/main-system.asd
new file mode 100644
index 0000000000000000000000000000000000000000..8b24a7f467b06ceab1589d77e6f012bc96b2d0c8
--- /dev/null
+++ b/test/defsystem-depends-on/main-system.asd
@@ -0,0 +1,3 @@
+(defsystem "main-system"
+  :depends-on ("overlapping-dependency" "intermediate-dependency")
+  :components ((:file "main-system")))
diff --git a/test/defsystem-depends-on/main-system.lisp b/test/defsystem-depends-on/main-system.lisp
new file mode 100644
index 0000000000000000000000000000000000000000..bd64ac113fb9fb541d5c83e66391399347dfbb67
--- /dev/null
+++ b/test/defsystem-depends-on/main-system.lisp
@@ -0,0 +1,3 @@
+(in-package :asdf-test)
+(defvar *ms* 0)
+(incf *ms*)
diff --git a/test/defsystem-depends-on/overlapping-dependency.asd b/test/defsystem-depends-on/overlapping-dependency.asd
new file mode 100644
index 0000000000000000000000000000000000000000..e5c095c9da2bcf78506b69c1e2c6f00ab1bcbd86
--- /dev/null
+++ b/test/defsystem-depends-on/overlapping-dependency.asd
@@ -0,0 +1,6 @@
+(in-package :asdf-test)
+(defvar *od* 0)
+(defsystem "overlapping-dependency"
+  :components ((:file "overlapping-dependency"))
+  ;;:perform (load-op (o c) (incf *od*))
+  )
diff --git a/test/defsystem-depends-on/overlapping-dependency.lisp b/test/defsystem-depends-on/overlapping-dependency.lisp
new file mode 100644
index 0000000000000000000000000000000000000000..68f718059b96c63ad3007ee199cc5d4c8f08466f
--- /dev/null
+++ b/test/defsystem-depends-on/overlapping-dependency.lisp
@@ -0,0 +1,3 @@
+(in-package :asdf-test)
+(defvar *od* 0)
+(incf *od*)
diff --git a/test/test-defsystem-depends-on-phase-overlap.script b/test/test-defsystem-depends-on-phase-overlap.script
index 9a15c53ca97b2ad6e61b08ddf0aeab02f348d191..f4147b47721d74c9ae3abc3ba656609bfdbed1d4 100644
--- a/test/test-defsystem-depends-on-phase-overlap.script
+++ b/test/test-defsystem-depends-on-phase-overlap.script
@@ -1,32 +1,47 @@
 ;;-*- Lisp -*-
 
+;; TODO: make it files, so that DEFINE-OP can propagate and cause reloading.
+
 (in-package :asdf-test)
 
-(setf *central-registry* nil)
+(setf *central-registry* (list (subpathname *test-directory* "defsystem-depends-on/")))
 
-(defparameter *od* 0)
-(def-test-system "overlapping-dependency"
-  :perform (load-op (o c) (incf *od*)))
+(defvar *od* 0)
+(defvar *dd* 0)
+(defvar *id* 0)
+(defvar *ms* 0)
+(defun reset-vars (&optional (x 0))
+  (setf *od* x *dd* x *id* x *ms* x))
+(assert-equal (list *od* *dd* *id* *ms*) '(0 0 0 0))
 
-(defparameter *dd* 0)
-(def-test-system "defsystem-dependency"
-  :depends-on ("overlapping-dependency")
-  :perform (load-op (o c) (incf *dd*)))
+(DBG "Finding main-system doesn't load defsystem-dependency")
+(reset-vars)
+(find-system "main-system")
+(assert-equal (list *od* *dd* *id* *ms*) '(0 0 0 0))
 
-(defparameter *id* 0)
-(def-test-system "intermediate-dependency"
-  :defsystem-depends-on ("defsystem-dependency")
-  :perform (load-op (o c) (incf *id*)))
+(DBG "Finding intermediate-dependency does load defsystem-dependency")
+(reset-vars)
+(find-system "intermediate-dependency")
+(assert-equal (list *od* *dd* *id* *ms*) '(1 1 0 0))
 
-(defparameter *ms* 0)
-(def-test-system "main-system"
-  :depends-on ("overlapping-dependency" "intermediate-dependency")
-  :perform (load-op (o c) (incf *ms*)))
+(DBG "Loading main-system doesn't reload defsystem-dependency or overlapping-dependency")
+(reset-vars)
+(load-system "main-system")
+(assert-equal (list *od* *dd* *id* *ms*) '(0 0 1 1))
 
-(DBG "Load it once")
+(DBG "Loading main-system a second time doesn't reload anything")
+(reset-vars)
 (load-system "main-system")
+(assert-equal (list *od* *dd* *id* *ms*) '(0 0 0 0))
+
+(DBG :foo
+     (component-sideway-dependencies (find-system "intermediate-dependency"))
+     (asdf::direct-dependencies 'prepare-op "intermediate-dependency")
+     (asdf::direct-dependencies 'load-op "intermediate-dependency")
+     (asdf::direct-dependencies 'compile-op "intermediate-dependency"))
+
+(DBG "Forcing overlapping-dependency causes a complete reload, but overlapping-dependency is only loaded once")
+(reset-vars)
+(with-asdf-session (:override t)
+  (load-system "main-system" :force '("overlapping-dependency")))
 (assert-equal (list *od* *dd* *id* *ms*) '(1 1 1 1))
-
-(DBG "Load it a second time, forcing od")
-(load-system "main-system" :force '("overlapping-dependency"))
-(assert-equal (list *od* *dd* *id* *ms*) '(2 2 2 2))