anchor.diff:       (flatten
         (append obj-keys (mapcar #'available-properties (sheep-direct-parents sheep)))))))
   
  +(defun available-cloneforms (sheep)
  +  (if (eql (sheep-metaobject sheep) =standard-sheep-metasheep=)
  +      (std-available-cloneforms sheep)
  +      (available-cloneforms-using-metasheep (sheep-metasheep sheep) sheep)))
  +(defun std-available-cloneforms (sheep)
  +  (let ((obj-keys (loop for keys being the hash-keys of (sheep-direct-cloneforms sheep)
  +		     collect keys)))
  +    (remove-duplicates
  +     (flatten
  +      (append obj-keys (mapcar #'available-cloneforms (sheep-direct-parents sheep)))))))
  +
   ;;; Memoization
   (defun memoize-property-access (sheep)
     (loop for property in (available-properties sheep)
  
positive.code: (defun std-add-parents (sheep parents)
    (let ((real-parents (or parents
  			  (list =dolly=))))
      (setf (sheep-direct-parents sheep) real-parents)))
  
  (defun set-up-properties (sheep properties)
    (loop for property-list in properties
  
negative.code: 
  (defun %get-property-owner (sheep property-name)
    (let ((hierarchy-list (sheep-hierarchy-list sheep)))
      (loop for sheep-obj in hierarchy-list
         do (when (handler-case
  		    (get-property sheep-obj property-name)
  		  (unbound-property () nil))
  	    (return-from %get-property-owner
  	      sheep-obj))
         finally (error 'unbound-property))))
  
  (defun memoize-sheep-hierarchy-list (sheep)
  