diff --git a/src/code/module.lisp b/src/code/module.lisp
index e2fb2f17612e27c15898559c9671147d1a4d8f0b..78c8bdffd2998292d693f6783c8e6c7076dcebbb 100644
--- a/src/code/module.lisp
+++ b/src/code/module.lisp
@@ -163,19 +163,5 @@
 (defmodule "asdf"
     "modules:asdf/asdf")
 
-;; Lisp-unit
-(defmodule :lisp-unit
-    "modules:load-lisp-unit")
-
-(defmodule "lisp-unit"
-    "modules:load-lisp-unit")
-
-;; Allow user to specify "cmu-contribs" or :cmu-contribs.
-(defmodule "cmu-contribs"
-    "modules:contrib")
-
-(defmodule :cmu-contribs
-    "modules:contrib")
-
 (defmodule :unix
   "modules:load-unix")
diff --git a/src/contrib/contrib.lisp b/src/contrib/contrib.lisp
index 1c9fd69c8e67487bbc8becf4edf892ca869504b6..bf01dec77b2682a5a4c99688a980213f4350e6d6 100644
--- a/src/contrib/contrib.lisp
+++ b/src/contrib/contrib.lisp
@@ -7,41 +7,9 @@
 (ext:file-comment
   "$Header: src/contrib/contrib.lisp $")
 
-;;; Define the various contrib modules.  We use defmodule for now
-;;; because it's easy for the contribs.
+;;; Empty for backward compatibility for users who require'd
+;;; cmu-contribs to get the CMU contribs.  The contribs all use asdf
+;;; now, so we don't need this file to do anything.
 
-(in-package "EXT")
 
-(defmodule "contrib-demos"
-    "modules:demos/demos" "modules:demos/menu")
 
-(defmodule "contrib-follow-mouse"
-    "modules:follow-mouse/follow-mouse")
-
-(defmodule "contrib-games-feebs"
-    "modules:games/feebs/feebs")
-
-(defmodule "contrib-hist"
-    "modules:hist/hist")
-
-(defmodule "contrib-psgraph"
-    "modules:psgraph/psgraph")
-
-;; This actually consists of several files, but compile-ops will
-;; compile and load them all, so this module appears to have just the
-;; one file.
-(defmodule "contrib-ops"
-    "modules:ops/compile-ops")
-
-(defmodule "contrib-embedded-c"
-    "modules:embedded-c/embedded-c")
-
-;; Sprof really needs to be compiled, so make this module compile sprof. 
-(defmodule "contrib-sprof"
-    "modules:sprof/compile-sprof")
-
-;; packed sse2 needs to be compiled to work.
-(defmodule "contrib-packed-sse2"
-    "modules:packed-sse2/compile-packed-sse2")
-
-(provide "cmu-contribs")
diff --git a/src/contrib/demos/demos.asd b/src/contrib/demos/contrib-demos.asd
similarity index 95%
rename from src/contrib/demos/demos.asd
rename to src/contrib/demos/contrib-demos.asd
index 26b0dd4e61d82e5d154127ffdc6e868e40359bf0..24b032ed08206fc0a443b100e374f647f897533d 100644
--- a/src/contrib/demos/demos.asd
+++ b/src/contrib/demos/contrib-demos.asd
@@ -7,7 +7,7 @@
 
 (require :clx)
 
-(defsystem :demos
+(defsystem :contrib-demos
   :name "demos"
   :maintainer "CMU Common Lisp Group"
   :licence "Public Domain"
diff --git a/src/contrib/embedded-c/embedded-c.asd b/src/contrib/embedded-c/contrib-embedded-c.asd
similarity index 91%
rename from src/contrib/embedded-c/embedded-c.asd
rename to src/contrib/embedded-c/contrib-embedded-c.asd
index 2f474e750e52dc2ed7eef87dbf8ede83b4085bc7..9bbb00b032374286e128e1f477a2bc178ac86054 100644
--- a/src/contrib/embedded-c/embedded-c.asd
+++ b/src/contrib/embedded-c/contrib-embedded-c.asd
@@ -2,7 +2,7 @@
 
 (in-package :asdf)
 
-(defsystem :embedded-c
+(defsystem :contrib-embedded-c
   :name "embedded-c"
   :author "Helmut Eller"
   :license "Public Domain"
diff --git a/src/contrib/follow-mouse/follow-mouse.asd b/src/contrib/follow-mouse/contrib-follow-mouse.asd
similarity index 76%
rename from src/contrib/follow-mouse/follow-mouse.asd
rename to src/contrib/follow-mouse/contrib-follow-mouse.asd
index 8571c427e16fbbff7a10bbf15d038cf326105d3b..3da0fd7b9ae70def37ec857a4a491b2effb4a57f 100644
--- a/src/contrib/follow-mouse/follow-mouse.asd
+++ b/src/contrib/follow-mouse/contrib-follow-mouse.asd
@@ -2,12 +2,12 @@
 
 (in-package :asdf)
 
-(defsystem :follows-mouse
+(defsystem :contrib-follows-mouse
   :name "follows-mouse"
   :maintainer "Todd Kaufman"
   :licence "Public Domain"
   :long-description "This Hemlock customization causes Hemlock's current window to be set to
-whatever Hemlock window the mouse enters, except the echo area."
+whatever Hemlock window the mouse enters, except the echo area.
 of the X Window System."
   :components
   ((:file "follow-mouse")))
diff --git a/src/contrib/games/feebs/brains.lisp b/src/contrib/games/feebs/brains.lisp
index a5c953bc5d08161dd7210fb1d81224cff5ffa123..a22671de3a62497e7831c3e8831ed851a6577a5b 100644
--- a/src/contrib/games/feebs/brains.lisp
+++ b/src/contrib/games/feebs/brains.lisp
@@ -9,8 +9,10 @@
 ;;; feebs.
 ;;;
 
-(in-package "SAMPLE-BRAINS" :use '("LISP" "FEEBS"))
+(defpackage "SAMPLE-BRAINS"
+  (:use "LISP" "FEEBS"))
 
+(in-package "SAMPLE-BRAINS")
 
 ;;; Experimental brain.  Like the built-in conservative brain, but without the
 ;;; range limitation.
diff --git a/src/contrib/games/feebs/feebs.asd b/src/contrib/games/feebs/contrib-games-feebs.asd
similarity index 73%
rename from src/contrib/games/feebs/feebs.asd
rename to src/contrib/games/feebs/contrib-games-feebs.asd
index 12525b31d2ef176b7e328d16ba290be4ffba4966..4dc913dde5c670b5cec1a3c840fe38833321578e 100644
--- a/src/contrib/games/feebs/feebs.asd
+++ b/src/contrib/games/feebs/contrib-games-feebs.asd
@@ -2,9 +2,9 @@
 
 (in-package :asdf)
 
-(defsystem :feebs
+(defsystem :contrib-games-feebs
   :name "feebs"
   :description "Planet of the Feebs. A somewhat educational simulation game."
   :components
   ((:file "feebs")
-   (:file "brains")))
\ No newline at end of file
+   (:file "brains" :depends-on ("feebs"))))
diff --git a/src/contrib/hist/hist.asd b/src/contrib/hist/contrib-hist.asd
similarity index 91%
rename from src/contrib/hist/hist.asd
rename to src/contrib/hist/contrib-hist.asd
index a1c8825dd51c50cccb8a9882dd060f29bb61caf3..79f262dfa8d2cf2ff72d426f0d85bab29d5d5fa4 100644
--- a/src/contrib/hist/hist.asd
+++ b/src/contrib/hist/contrib-hist.asd
@@ -2,7 +2,7 @@
 
 (in-package :asdf)
 
-(defsystem :hist
+(defsystem :contrib-hist
   :name "hist"
   :maintainer "Scott E. Fahlman"
   :licence "Public Domain"
diff --git a/src/contrib/hist/hist.lisp b/src/contrib/hist/hist.lisp
index d2388cadbe7d6b01195148b9ffe45634d4b86806..cd9baac62437d0f56737c6dada639b7d37d8f7e8 100644
--- a/src/contrib/hist/hist.lisp
+++ b/src/contrib/hist/hist.lisp
@@ -23,6 +23,9 @@
 ;;; Dependencies: Depends only on standard Common Lisp facilities.
 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
 
+(defpackage "HIST"
+  (:use "COMMON-LISP")
+
 (in-package "HIST")
 (export '(hist hist-record))
 
diff --git a/src/contrib/ops/ops.asd b/src/contrib/ops/contrib-ops.asd
similarity index 94%
rename from src/contrib/ops/ops.asd
rename to src/contrib/ops/contrib-ops.asd
index 9b8661757b8abc070155904395bae72082dbfe82..9f29222c8d88fef46230db50e87542627893b345 100644
--- a/src/contrib/ops/ops.asd
+++ b/src/contrib/ops/contrib-ops.asd
@@ -2,7 +2,7 @@
 
 (in-package :asdf)
 
-(defsystem :ops
+(defsystem :contrib-ops
   :name "ops"
   :licence "Public Domain"
   :description "MIT Regression Tester"
diff --git a/src/contrib/ops/ops-util.lisp b/src/contrib/ops/ops-util.lisp
index 58eabfba1b52990662801ccdfd8e713b8cd971c6..0b6774d0ebb749f453fa6b3ade8cee184c7310e4 100644
--- a/src/contrib/ops/ops-util.lisp
+++ b/src/contrib/ops/ops-util.lisp
@@ -20,7 +20,8 @@
 ;;;; modules.  This must be loaded first so commonlisp systems that
 ;;;; expand macros early have them available.
 
-(unless (find-package "OPS") (make-package "OPS"))
+(defpackage "OPS"
+  (:use "COMMON-LISP"))
 
 (in-package "OPS")
 
diff --git a/src/contrib/packed-sse2/contrib-packed-sse2.asd b/src/contrib/packed-sse2/contrib-packed-sse2.asd
new file mode 100644
index 0000000000000000000000000000000000000000..18db262951e15cc3c4891cf2c718bc37367e92f0
--- /dev/null
+++ b/src/contrib/packed-sse2/contrib-packed-sse2.asd
@@ -0,0 +1,11 @@
+;;;; -*- Mode: LISP; Syntax: ANSI-Common-Lisp; Base: 10 -*-
+
+(in-package :asdf)
+
+(defsystem :contrib-packed-sse2
+  :name "cmu-packed-sse2"
+  :maintainer "Cmucl project"
+  :licence "Public Domain"
+  :long-description "Functions to work with packed SSE2 objects"
+  :components
+  ((:file "packed-sse2")))
diff --git a/src/contrib/psgraph/psgraph.asd b/src/contrib/psgraph/contrib-psgraph.asd
similarity index 93%
rename from src/contrib/psgraph/psgraph.asd
rename to src/contrib/psgraph/contrib-psgraph.asd
index 9aaee07464b22f18a9ef15fbfc01b16a4962d06c..888cdaf1a7a6d9fea5162a505010c453694c9fdd 100644
--- a/src/contrib/psgraph/psgraph.asd
+++ b/src/contrib/psgraph/contrib-psgraph.asd
@@ -2,7 +2,7 @@
 
 (in-package :asdf)
 
-(defsystem :psgraph
+(defsystem :contrib-psgraph
   :name "PSGrapher"
   :author "Joseph Bates et al."
   :licence "Public Domain"
diff --git a/src/contrib/sprof/sprof.asd b/src/contrib/sprof/contrib-sprof.asd
similarity index 89%
rename from src/contrib/sprof/sprof.asd
rename to src/contrib/sprof/contrib-sprof.asd
index e100e0560820cbe92859bddda729a5bb252d56d5..711bd7bac1c7a8d550fbca9bce05990e237d96c6 100644
--- a/src/contrib/sprof/sprof.asd
+++ b/src/contrib/sprof/contrib-sprof.asd
@@ -2,7 +2,7 @@
 
 (in-package :asdf)
 
-(defsystem :sprof
+(defsystem :contrib-sprof
   :name "demos"
   :author "Gerd Moellmann"
   :license "BSD-like"
diff --git a/src/contrib/unix/unix.asd b/src/contrib/unix/unix.asd
new file mode 100644
index 0000000000000000000000000000000000000000..7c464cf36fbe42fe1decb844b591d4d00c296a1a
--- /dev/null
+++ b/src/contrib/unix/unix.asd
@@ -0,0 +1,13 @@
+;;;; -*- Mode: LISP; Syntax: ANSI-Common-Lisp; Base: 10 -*-
+
+(in-package :asdf)
+
+(defsystem :unix
+  :name "cmu-unix"
+  :maintainer "Cmucl project"
+  :licence "Public Domain"
+  :long-description "Interface to other Unix functions"
+  :components
+  ((:file
+    #-linux "unix"
+    #+linux "unix-glibc2")))
diff --git a/tests/run-tests.lisp b/tests/run-tests.lisp
index c3c84ddd98730ec8eb29af6029e30dc55a7bf01f..8aa6a0982e7602380f01b704b237325eea7660bb 100644
--- a/tests/run-tests.lisp
+++ b/tests/run-tests.lisp
@@ -39,6 +39,7 @@
 
 (in-package :cmucl-test-runner)
 
+(require :asdf)
 (require :lisp-unit)
 
 ;; Be rather verbose in printing the tests