Index: /trunk/ccl/level-1/l1-clos-boot.lisp
===================================================================
--- /trunk/ccl/level-1/l1-clos-boot.lisp	(revision 256)
+++ /trunk/ccl/level-1/l1-clos-boot.lisp	(revision 257)
@@ -1180,4 +1180,17 @@
   name)
 
+(defun check-setf-find-class-protected-class (old-class new-class name)
+  (when (and (standard-instance-p old-class)
+	     (%class.kernel-p old-class)
+	     *warn-if-redefine-kernel*
+	     ;; EQL might be necessary on foreign classes
+	     (not (eq new-class old-class)))
+    (cerror "Setf (FIND-CLASS ~s) to the new class."
+	    "The class name ~s currently denotes the class ~s that
+marked as being a critical part of the system; an attempt is being made
+to replace that class with ~s" name old-class new-class)
+    (setf (%class.kernel-p old-class) nil)))
+
+
 (queue-fixup
  (without-interrupts 
@@ -1188,8 +1201,6 @@
       (when *warn-if-redefine-kernel*
         (let ((old-class (cdr cell)))
-          (when (and old-class (neq class old-class) (%class.kernel-p old-class))
-            (cerror "Redefine ~S."
-                    "~S is already defined in the CCL kernel." old-class)
-            (setf (%class.kernel-p old-class) nil))))
+	  (when old-class
+	    (check-setf-find-class-protected-class old-class class name))))
       (when (null class)
         (when cell
