anchor.diff:  			  (list =dolly=))))
       (setf (sheep-direct-parents sheep) real-parents)
       (loop for parent in parents
  -       do (let ((pointer (make-weak-pointer sheep)))
  -    	    (pushnew pointer (sheep-direct-children parent))
  -    	    (finalize sheep (lambda () (setf (sheep-direct-children parent)
  -    					     (delete (the (not number) pointer)
  -    						     (the list (sheep-direct-children parent))))))))
  +         for pointer = (make-weak-pointer sheep)
  +       do (setf (gethash sheep (sheep-direct-children parent)) t))
       (memoize-sheep-hierarchy-list sheep)
       sheep))
   
  
positive.code: (defun remove-parent (parent child &key (keep-properties nil))
    (setf (sheep-direct-parents child)
  	(delete parent (sheep-direct-parents child)))
    (setf (sheep-direct-children parent)
  	(delete child (sheep-direct-children parent) :key #'weak-pointer-value))
    (when keep-properties
      (loop for property-name being the hash-keys of (sheep-direct-properties parent)
         using (hash-value value)
  
negative.code:   (nickname nil)
    (documentation "")
    (direct-parents nil)
    (direct-children (make-weak-hash-table :weakness :value :test #'eq))
    (direct-properties (make-hash-table :test #'eq))
  ;;  (property-owners (make-weak-hash-table :weakness :value :test #'eq))
    (direct-roles nil)
  