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)))
  +(defmethod (setf get-property) :after (new-value (sheep standard-sheep) property-name)
  +  (declare (ignore new-value property-name))
  +  (memoize-property-access sheep)
  +  (loop for child-pointer in (sheep-direct-children sheep)
  +     do (memoize-property-access (weak-pointer-value child-pointer))))
   
   (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)))
  +(defmethod remove-property :after ((sheep standard-sheep) property-name)
  +  (loop for child-pointer in (sheep-direct-children sheep)
  +     do (remhash property-name (sheep-direct-properties (weak-pointer-value child-pointer)))))
   
   (defun has-property-p (sheep property-name)
     "Returns T if a property with PROPERTY-NAME is available to SHEEP."
  
positive.code:     :accessor sheep-direct-properties)
     (property-owners
      :initarg :property-owner
      :initform (make-hash-table :test #'equal)
      :accessor sheep-property-owners)
     (roles
      :initform nil
  
negative.code: (defun compute-sheep-hierarchy-list (sheep)
    (handler-case 
        (let ((sheeple-to-order (collect-parents sheep)))
    	(topological-sort sheeple-to-order
  			  (remove-duplicates
  			   (mapappend #'local-precedence-ordering
  				      sheeple-to-order))
  			  #'std-tie-breaker-rule))
      (simple-error ()
        (error 'sheep-hierarchy-error))))
  
  