anchor.diff:  	     (gethash e *event-hash*))
       ret))
   
  -
   (clinch:defevent clinch:*on-mouse-down* (win mouse x y button state clicks ts)
   
     ;;(format t "win: ~A mouse: ~A x: ~A y: ~A button: ~A state: ~A clicks: ~A ts: ~A~%" win mouse x y button state clicks ts)
  
positive.code:     	    ((eq event :mouse-up)    (draw-hover quad text))
  	    ((eq event :mouse-hover) (draw-hover quad text))
  	    ((eq event :mouse-exit) (draw-inactive quad text)))
        (unless (eq event :mouse-move)
  	(format t "~Ar~%" e)))))
  
  (defun add-event-handler (event object func)
    (let ((hash (or (gethash event *event-hash*)
  
negative.code: 		 (:button . ,button)
  		 (:state . ,state)
  		 (:clicks . ,clicks)
  		 (:timestamp . ,ts)))
  	(collision-hash (make-hash-table :test 'equal)))
  
      (map-event (lambda (k v)
  		 (multiple-value-bind (collisions start ray) 
  		     (memoized-check-intersect (car (children k)) k x y *viewport* *projection* collision-hash) 
  
  		   (when collisions
  		     (funcall v k collisions (acons :event :mouse-down
  						    (acons :ray-start start
  							   (acons :ray ray event))))
  		     (when (= button *click-button*)
  		       (setf *last-mouse-down-target* k)))))
  
  	       :mouse-down)
  		     
      (when (= button *drag-button*)
        (map-event (lambda (k v)
  		   (multiple-value-bind (collisions start ray) 
  		       (memoized-check-intersect (car (children k)) k x y *viewport* *projection* collision-hash) 
  		     
  		     (when collisions
  		       (setf *dragging* k)
  		       (funcall v k collisions (acons :event :mouse-drag-start
  						      (acons :ray-start start
  							     (acons :ray ray event)))))))
  		         
  		 :mouse-drag-start))))
  
      
  (clinch:defevent clinch:*on-mouse-up* (win mouse x y button state clicks ts)
    
    ;;(format t "win: ~A mouse: ~A x: ~A y: ~A button: ~A state: ~A clicks: ~A ts: ~A~%" win mouse x y button state clicks ts)
      (let ((event `((:window . ,win)
  		   (:mouse . ,mouse)
  