anchor.diff:  	(progn
   	  (setf (gethash property-name (sheep-direct-properties sheep))
   		(make-instance 'standard-sheep-property :name property-name :value new-value))
  +	  (set-property-owner sheep property-name)
   	  new-value))))
  +
  +(defun set-property-owner (sheep property-name)
  +  "Sets SHEEP as owner of PROPERTY-NAME, and cascades the info down."
  +  (setf (gethash property-name (sheep-property-owners sheep))
  +	sheep)
  +  (mapc (lambda (child) (setf (gethash property-name (sheep-property-owners child)) 
  +			      sheep))
  +	(sheep-direct-children sheep)))
   
   (defgeneric remove-property (sheep property-name)
     (:documentation "Removes a property from a particular sheep."))
   (defmethod remove-property ((sheep standard-sheep) property-name)
     "Simply removes the hash value from the sheep. Leaves parents intact."
  +  (remhash property-name (sheep-property-owners sheep))
  +  (mapc (lambda (child) (remhash property-name (sheep-direct-properties child)))
  +	(sheep-direct-children sheep))
     (remhash property-name (sheep-direct-properties sheep)))
   
   (defun has-property-p (sheep property-name)
  
positive.code: 	      (setf (get-property child property-name) value)))))
    child)
  
  ;;; Inheritance-related predicates
  (defun direct-parent-p (maybe-parent child)
    (when (member maybe-parent (sheep-direct-parents child))
  
negative.code: 	    (%get-property-object sheep property-name)
  	  (when has-p
  	    (return-from get-property-with-hierarchy-list (%value prop-obj))))
       finally (error 'unbound-property)))
  
  (defun get-property-owner-with-hierarchy-list (list property-name)
    (loop for sheep in list
       do (multiple-value-bind (prop-obj has-p)
  	    (%get-property-object sheep property-name)
  	  (declare (ignore prop-obj))
  	  (when has-p
  	    (return-from get-property-owner-with-hierarchy-list sheep)))
       finally (error 'unbound-property)))
  
  (defgeneric (setf get-property) (new-value sheep property-name)
  