diff -ur src.orig/pcl/std-class.lisp src/pcl/std-class.lisp
--- src.orig/pcl/std-class.lisp	2005-07-07 11:44:27.000000000 -0500
+++ src/pcl/std-class.lisp	2006-12-11 00:01:52.000000000 -0600
@@ -816,13 +816,17 @@
   (when (and (not (or finalizep (class-finalized-p class)))
 	     (not (class-has-a-forward-referenced-superclass-p class)))
     (finalize-inheritance class)
+    (dolist (sub (class-direct-subclasses class))
+      (update-class sub nil))
     (return-from update-class))
   ;;
   (when (or finalizep
 	    (class-finalized-p class)
 	    (not (class-has-a-forward-referenced-superclass-p class)))
     (setf (find-class (class-name class)) class)
-    (update-cpl class (compute-class-precedence-list class))
+    (let ((*allow-forward-referenced-classes-in-cpl-p*
+	   (class-has-a-forward-referenced-superclass-p class)))
+      (update-cpl class (compute-class-precedence-list class)))
     (update-slots class (compute-slots class))
     (update-gfs-of-class class)
     (update-inits class (compute-default-initargs class))
@@ -832,6 +836,9 @@
   (unless finalizep
     (dolist (sub (class-direct-subclasses class))
       (update-class sub nil))))
+)
+
+(pushnew :cmucl-19d-patch-002 *features*)
 
 ;;;
 ;;; Set values of shared slots from initforms inherited from