anchor.diff:    (remf all-keys :environment)
     (cond ((fboundp function-name)
            (let ((gf (fdefinition function-name)))
  -           (when (not (eql (class-of gf) generic-function-class))
  +           (when (and generic-function-class
  +                      (not (eql (class-of gf) generic-function-class)))
                (error "Redefinition of generic function ~S (~S) with different class. Changing from ~S to ~S."
                       function-name gf
                       (class-of gf) generic-function-class))
  
positive.code:          (when (fboundp function-name)
             (fmakunbound function-name))
           (setf (compiler-macro-function function-name) nil)))
    (when (symbolp generic-function-class)
      (setf generic-function-class (find-class generic-function-class)))
    ;; AMOP seems to imply that METHOD-CLASS should always be a class name,
    ;; that feels overly restrictive...
  
negative.code:                     all-keys))
             gf))
          (t
           (when (not generic-function-class)
             (setf generic-function-class *the-class-standard-gf*))
           (let ((gf (apply (if (eq generic-function-class *the-class-standard-gf*)
                                #'make-instance-standard-generic-function
                                #'make-instance)
  