anchor.diff:  	 (b2 (geom-get-body o2)))
       
       ;; At least one of these needs a body or movement shouldn't be happening...
  -    (unless (and (null b1) (null b2))
  +    (when (and (or b1 b2)
  +	       (or (and b1 (body-is-enabled b1))
  +		   (and b2 (body-is-enabled b2))))
  +		   
   
         ;; create space to hold the collisions...
         (with-foreign-object (contact '(:struct Contact-struct) *default-max-contacts*)
   	
  -	(let* ((surf (make-instance 'surface-parameters :pointer (cffi:foreign-slot-pointer contact '(:struct contact-struct) 'surface)))
  -	       (geom (print (cffi:foreign-slot-pointer (print contact) '(:struct ode::contact-struct) 'geom)))
  -	       (geom-obj (make-instance 'contact-geometry :pointer geom)))
  +	(let* ((surf (cffi:foreign-slot-pointer contact '(:struct contact-struct) 'surface))
  +	       (geom (cffi:foreign-slot-pointer contact '(:struct ode::contact-struct) 'geom)))
  +
   	  (combine-physics-objects o1 o2 surf)
   
  +	  (describe surf)
  +	  (format t "surf mode: ~A!~%" (cffi:foreign-slot-value (cffi:foreign-slot-pointer contact '(:struct contact-struct) 'surface) '(:struct surface-parameters-struct) 'mode))
  +	  (format t "surf bounce: ~A!~%" (cffi:foreign-slot-value (cffi:foreign-slot-pointer contact '(:struct contact-struct) 'surface) '(:struct surface-parameters-struct) 'bounce))
  +	  (format t "surf bounce-vel: ~A!~%" (cffi:foreign-slot-value (cffi:foreign-slot-pointer contact '(:struct contact-struct) 'surface) '(:struct surface-parameters-struct) 'bounce-vel))
  +	  (format t "surf soft-cfm: ~A!~%" (cffi:foreign-slot-value (cffi:foreign-slot-pointer contact '(:struct contact-struct) 'surface) '(:struct surface-parameters-struct) 'soft-cfm))
   
   	(let ((num-contacts (collide o1
   				     o2
   				     *default-max-contacts*
   				     geom
  -				     (cffi:foreign-type-size '(:struct contact-geometry-struct)))))
  +				     (cffi:foreign-type-size '(:struct contact-struct)))))
   
   	  (unless (zerop num-contacts)
  +
   	    
  -	  (format t "geo pos: ~A!~%" (cffi:foreign-slot-value  geom '(:struct contact-geometry-struct) 'pos))
  -	  (format t "geo depth: ~A!~%" (cffi:foreign-slot-value geom '(:struct contact-geometry-struct) 'depth))
  -	  (format t "g1 depth: ~A!~%" (cffi:foreign-slot-value  geom '(:struct contact-geometry-struct) 'g1))
  -	  (format t "g2 depth: ~A!~%" (cffi:foreign-slot-value  geom '(:struct contact-geometry-struct) 'g2))
  -
  +	    ;; (format t "geo pos: ~A!~%" (cffi:foreign-slot-value  geom '(:struct contact-geometry-struct) 'pos))
  +	    ;; (format t "geo depth: ~A!~%" (cffi:foreign-slot-value geom '(:struct contact-geometry-struct) 'depth))
  +	    ;; (format t "g1 depth: ~A!~%" (cffi:foreign-slot-value  geom '(:struct contact-geometry-struct) 'g1))
  +	    ;; (format t "g2 depth: ~A!~%" (cffi:foreign-slot-value  geom '(:struct contact-geometry-struct) 'g2))
  +	    
   	    (let* ((world (cond (b1 (body-get-world b1))
   				(b2 (body-get-world b2))
   				(t (error "Can't find a world for these two geometries/bodies!"))))
   		   (contact-group (ode::contact-group world)))
   	      
   	      (dotimes (i num-contacts)
  -		(print (joint-attach (print (joint-create-contact world contact-group contact)) b1 b2)))))))))))
  +		(joint-attach (joint-create-contact world contact-group (cffi:mem-aptr contact '(:struct Contact-Struct) i)) b1 b2))))))))))
   
  
positive.code: (in-package :cl-ode)
  
  (defclass proto-geometry () 
    ((surface-mode :initform '(:bounce :rolling :soft-CFM)
  		 :initarg :mode
  		 :accessor surface-mode
  		 :type :int)
     (surface-mu :INITFORM 1d10 :INITARG :mu :ACCESSOR surface-mu)
     (surface-mu2 :INITFORM 0 :INITARG :mu2 :ACCESSOR surface-mu2)
     (surface-rho :INITFORM .1d0 :INITARG :rho :ACCESSOR surface-rho)
     (surface-rho2 :INITFORM 0 :INITARG :rho2 :ACCESSOR surface-rho2)
     (surface-rhon :INITFORM 0 :INITARG :rhon :ACCESSOR surface-rhon)
     (surface-bounce :INITFORM .75 :INITARG :bounce :ACCESSOR surface-bounce)
     (surface-bounce-vel :INITFORM .01 :INITARG :bounce-vel :ACCESSOR
  		       surface-bounce-vel)
     (surface-soft-erp :INITFORM 0 :INITARG :soft-erp :ACCESSOR
  
negative.code: 
  (defmethod combine-physics-objects ((this geometry) (that geometry) params)
  
      (cffi:with-foreign-slots ((mode mu mu2 rho rho2 rhoN bounce bounce-vel soft-erp soft-cfm motion1 motion2 motionN slip1 slip2)
  			      params
  			      (:struct surface-parameters-struct))
        
  
        (setf mode
  	    (union (surface-Mode this) (surface-Mode this)))
  
        
        
        (setf mu       
  	    (max (surface-mu this) (surface-mu that)))
        
  	(when (member :mu2 mode)
  	  (setf mu2
  		(* (surface-mu2 this) (surface-mu2 that))))
  	
  	(when (member :bounce mode)
  