anchor.diff:  (defun (setf std-get-clonefunction) (new-value sheep property-name)
     (setf (gethash property-name (gethash 'clonefunctions sheep)) new-value))
   
  -(defun remove-property (sheep property-name)
  -  (if (std-sheep-p sheep)
  -      (std-remove-property sheep property-name)
  -      (remove-property-using-metasheep (sheep-metasheep sheep) sheep property-name)))
  -(defun std-remove-property (sheep property-name)
  -  (when (remhash property-name (gethash 'properties sheep))
  -    (memoize-property-access sheep)
  -    t))
  -
  -(defun has-property-p (sheep property-name)
  -  "Returns T if a property with PROPERTY-NAME is available to SHEEP."
  -  (handler-case
  -      (when (property-value sheep property-name)
  -	t)
  -    (unbound-property () nil)))
  -
  -(defun has-direct-property-p (sheep property-name)
  -  (if (std-sheep-p sheep)
  -      (std-has-direct-property-p sheep property-name)
  -      (has-direct-property-p-using-metasheep 
  -       (sheep-metasheep sheep) sheep property-name)))
  -(defun std-has-direct-property-p (sheep property-name)
  -  (multiple-value-bind (value has-p)
  -      (gethash property-name (gethash 'properties sheep))
  -    value
  -    has-p))
  -
  -(defun who-sets (sheep property-name)
  -  (if (std-sheep-p sheep)
  -      (std-who-sets sheep property-name)
  -      (who-sets-using-metasheep (sheep-metasheep sheep) sheep property-name)))
  -(defun std-who-sets (sheep property-name)
  -  (multiple-value-bind (owner has-p)
  -      (gethash property-name (gethash 'property-owners sheep))
  -    (if has-p
  -	owner
  -	(error 'unbound-property))))
  -
  -(defun available-properties (sheep)
  -  (if (std-sheep-p sheep)
  -      (std-available-properties sheep)
  -      (available-properties-using-metasheep (sheep-metasheep sheep) sheep)))
  -(defun std-available-properties (sheep)
  -  (let ((obj-keys (loop for keys being the hash-keys of (gethash 'properties sheep)
  -		     collect keys)))
  -    (remove-duplicates
  -     (flatten
  -      (append obj-keys (mapcar #'available-properties (gethash 'parents sheep)))))))
  -
   (defun available-cloneforms (sheep)
     (if (std-sheep-p sheep)
         (std-available-cloneforms sheep)
  
positive.code: 
  ;;;
  ;;; Hierarchy Resolution
  ;;; - blatantly taken from Closette.
  ;;;
  (defun collect-parents (sheep)
    (labels ((all-parents-loop (seen parents)
  
negative.code:      do (memoize-property-access (weak-pointer-value child-pointer)))
    new-value)
  
  (defun remove-property (sheep property-name)
    (if (std-sheep-p sheep)
        (std-remove-property sheep property-name)
        (remove-property-using-metasheep (sheep-metasheep sheep) sheep property-name)))
  (defun std-remove-property (sheep property-name)
    (when (remhash property-name (gethash 'properties sheep))
      (memoize-property-access sheep)
      t))
  
  (defun has-property-p (sheep property-name)
    "Returns T if a property with PROPERTY-NAME is available to SHEEP."
    (handler-case
        (when (property-value sheep property-name)
  	t)
      (unbound-property () nil)))
  
  (defun has-direct-property-p (sheep property-name)
    (if (std-sheep-p sheep)
        (std-has-direct-property-p sheep property-name)
        (has-direct-property-p-using-metasheep 
         (sheep-metasheep sheep) sheep property-name)))
  (defun std-has-direct-property-p (sheep property-name)
    (multiple-value-bind (value has-p)
        (gethash property-name (gethash 'properties sheep))
      value
      has-p))
  
  (defun who-sets (sheep property-name)
    (if (std-sheep-p sheep)
        (std-who-sets sheep property-name)
        (who-sets-using-metasheep (sheep-metasheep sheep) sheep property-name)))
  (defun std-who-sets (sheep property-name)
    (multiple-value-bind (owner has-p)
        (gethash property-name (gethash 'property-owners sheep))
      (if has-p
  	owner
  	(error 'unbound-property))))
  
  (defun available-properties (sheep)
    (if (std-sheep-p sheep)
        (std-available-properties sheep)
        (available-properties-using-metasheep (sheep-metasheep sheep) sheep)))
  (defun std-available-properties (sheep)
    (let ((obj-keys (loop for keys being the hash-keys of (gethash 'properties sheep)
  		     collect keys)))
      (remove-duplicates
       (flatten
        (append obj-keys (mapcar #'available-properties (gethash 'parents sheep)))))))
  
  ;;;
  ;;; Cloneforms/functions
  ;;;
  (defun get-cloneform (sheep property-name)
    (if (std-sheep-p sheep)
        (std-get-cloneform sheep property-name)
  