diff --git a/contrib/detect-multiply-used-files.lisp b/contrib/detect-multiply-used-files.lisp
new file mode 100644
index 0000000000000000000000000000000000000000..a8f0909f608f6fc8c8d39029158d5908324d9ab6
--- /dev/null
+++ b/contrib/detect-multiply-used-files.lisp
@@ -0,0 +1,30 @@
+(uiop:define-package :detect-multiply-used-files
+  (:use :asdf :uiop :common-lisp)
+  (:export #:find-fishy-components #:register-component-files #:*file-components*))
+
+(in-package :detect-multiply-used-files)
+
+(defparameter *file-components* (make-hash-table :test 'equal))
+
+(defun register-component-files (component)
+  (let ((c (find-component () component)))
+    (if-let (p (component-pathname c))
+      (pushnew (component-find-path c) (gethash (namestring p) *file-components*)))
+    (when (typep c 'parent-component)
+      (dolist (cc (component-children c))
+        (register-component-files cc)))))
+
+(defun table-keys (table)
+  (loop :for s :being :the :hash-keys :of table :collect s))
+
+(defun find-fishy-components ()
+  (clrhash *file-components*)
+  (map () 'register-component-files (table-keys asdf::*defined-systems*))
+  (loop :for p :in (sort (table-keys *file-components*) 'string<)
+        :for l = (gethash p *file-components*)
+        :when (and (file-pathname-p p) (not (length=n-p l 1)))
+        :do (format t "~&~S =>~{ ~S~}~%" p l)))
+
+#| ;; Use it like that:
+(detect-multiply-used-files:find-fishy-components)
+|#