diff --git a/pcl/defsys.lisp b/pcl/defsys.lisp
index 26b264f4de47d43823980184cb7b97d38f429295..89740559479d35fddfc5e10b0ac81e6c46e2e40e 100644
--- a/pcl/defsys.lisp
+++ b/pcl/defsys.lisp
@@ -590,7 +590,6 @@ and load your system with:
    (dfun        t                                   t (boot low cache))
    (fast-init   t                                   t (boot low))
    (braid       (+ precom1 precom2)                 t (boot defs low fin cache))
-   #+ignore
    (dlisp3      t                                   t (dlisp2 boot braid))
    (generic-functions t                             t (boot))
    (slots       t                                   t (vector boot defs low cache fin))
diff --git a/pcl/dlisp3.lisp b/pcl/dlisp3.lisp
index 26865a725622ed9b77137317b171c357e64035eb..7e89d5637fcbb0059e18c859e6bebc5df186b204 100644
--- a/pcl/dlisp3.lisp
+++ b/pcl/dlisp3.lisp
@@ -67,8 +67,26 @@
 		       `(cons ',key (emit-checking-or-caching-macro ,@key)))
 		   checking-or-caching-list)))
 
+#+nil
 (defun initialize-checking-or-caching-function-list ()
   (setq checking-or-caching-function-list
 	(make-checking-or-caching-function-list)))
 
+#+nil
 (initialize-checking-or-caching-function-list)
+
+;;; Rather than compiling the constructors here, just tickle the range
+;;; of shapes defined above, leaving the generation of the
+;;; constructors to precompile-dfun-constructors.
+;;;
+(dolist (key checking-or-caching-list)
+  (destructuring-bind (cached-emf-p return-value-p metatypes applyp) key
+    (multiple-value-bind (args generator)
+	(if cached-emf-p
+	    (if return-value-p
+		(values (list metatypes) 'emit-constant-value)
+		(values (list metatypes applyp) 'emit-caching))
+	    (if return-value-p
+		(values (list metatypes) 'emit-in-checking-p)
+		(values (list metatypes applyp) 'emit-checking)))
+      (apply #'get-dfun-constructor generator args))))