anchor.diff:                                   `(defmethod add ((inst ,name) (source ,x))
   				    (let ((arr (,a inst)))
   				      (,push source arr)
  -				      (%set-container source (,ls inst) ',name
  -						      (position source arr)))))))
  +				      (%set-container
  +				       source (,ls inst) ',o
  +				       (position source arr)))))))
                              types
                              hidden-slot-names
                              lengths
  -			   listener-slot-names))
  +			   listener-slot-names
  +			   original-slot-names))
   	 (defmethod remove-listener ((listener predicate-source) (input ,name))
   	   ,@(loop :for l :in listener-slot-names :collect
   		`(shifting-remove (,l input) listener *null-listener*))
  
positive.code: ;;----------------------------------------------------------------------
  
  (deftclass event-source
    (container-kind :unknown-kind :type keyword)
    (container-index -1 :type fixnum)
    (listeners (make-array 0 :element-type 'predicate-source :adjustable t
  			 :fill-pointer 0)
  	     :type (array predicate-source (*))))
  
  (defun %set-container (source listeners-array container-kind index)
    (setf (event-source-listeners source) listeners-array
  	(event-source-container-kind source) container-kind
  	(event-source-container-index source) index))
  
  (deftclass (predicate-source (:include event-source))
  
negative.code: 		       (let* ((acc (intern (format nil "~a-~a" kind slot)
  					  (symbol-package kind)))
  			      (pred
  			       `(eq (event-source-container-slot ,event-var)
  				    ',acc)))
  			 `((,name (&optional index)
  				  (if index
  				      `(,',acc ,',kind index)
  