anchor.diff:      (setf (get-property sheep name) value)
       (add-readers-to-sheep readers name sheep)
       (add-writers-to-sheep writers name sheep))))
  +
  +(defun execute-clonefunctions (sheep)
  +  (if (eql (sheep-metasheep sheep) =standard-sheep-metasheep=)
  +      (std-execute-clonefunctions sheep)
  +      (execute-clonefunctions-using-metasheep 
  +       (sheep-metasheep sheep) sheep)))
  +(defun std-execute-clonefunctions (sheep)
  +  (let ((functions (loop for propname in (available-cloneforms the-sheep)
  +		      collect (get-clonefunction sheep propname))))
  +    (loop for fn in functions
  +	 (unless (eql fn *secret-unbound-value*)
  +	   (setf (get-property sheep propname) (funcall fn))))))
   
   (define-condition invalid-option-error (sheeple-error) ())
   (defun set-up-other-options (options sheep)
  
positive.code: 	      value
  	      (error 'unbound-property)))
  	(error 'unbound-property))))
  
  (defun (setf get-property) (new-value sheep property-name)
    (if (eql (sheep-metasheep sheep) =standard-sheep-metasheep=)
        (setf (std-get-property sheep property-name) new-value)
        (setf-get-property-using-metasheep 
         new-value (sheep-metasheep sheep) sheep property-name)))
  (defun (setf std-get-property) (new-value sheep property-name)
    (setf (gethash property-name sheep) new-value))
  
  (defun remove-property (sheep property-name)
    (if (eql (sheep-metasheep sheep) =standard-sheep-metasheep=)
  
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)
  