Index: branches/cr/src/lib/collision_reaction/collision.h
===================================================================
--- branches/cr/src/lib/collision_reaction/collision.h	(revision 8099)
+++ branches/cr/src/lib/collision_reaction/collision.h	(revision 8106)
@@ -30,4 +30,8 @@
     /** @return Collision WorldEntity B */
     inline WorldEntity* getEntityB() const { return this->entityB; }
+    /** @return true if Entity A collides */
+    inline bool isEntityACollide() { return this->entityACollide; }
+    /** @return true if Entity B collides */
+    inline bool isEntityBCollide() { return this->entityBCollide; }
 
     /** @returns true if this Collision has already been dispatched */
@@ -38,4 +42,6 @@
     /** @returns a vector of collision events */
     inline const std::vector<CollisionEvent*>& getCollisionEvents() const { return this->collisionEvents; }
+
+
 
     void handleCollisionEvents();
@@ -49,4 +55,6 @@
     WorldEntity*                 entityA;                       //!< the collision body A
     WorldEntity*                 entityB;                       //!< the collision body B
+    bool                         entityACollide;                //!< true if entity A is subscribed for collision reaction
+    bool                         entityBCollide;                //!< true if entity B is subscribed for collision reaction
 
     bool                         bDispatched;                   //!< true if this collision has already been dispatched
Index: branches/cr/src/lib/collision_reaction/collision_handle.cc
===================================================================
--- branches/cr/src/lib/collision_reaction/collision_handle.cc	(revision 8099)
+++ branches/cr/src/lib/collision_reaction/collision_handle.cc	(revision 8106)
@@ -17,4 +17,5 @@
 #include "collision_handle.h"
 
+#include "world_entity.h"
 
 #include "collision.h"
@@ -95,4 +96,8 @@
   this->collisionList.push_back(c);
 
+  // now register it as a shared collision with the other collision entity
+  CollisionHandle* ch = entityB->getCollisionHandle(this->type);
+  ch->registerSharedCollision(c);
+
   return c;
 }
@@ -105,7 +110,10 @@
  * Therefore dispatching it only once
  */
-void CollisionHandle::registerCollision(Collision* collision)
+void CollisionHandle::registerSharedCollision(Collision* collision)
 {
+  // set the state to not dispatched
+  this->bDispatched = false;
 
+  this->collisionList.push_back(collision);
 }
 
Index: branches/cr/src/lib/collision_reaction/collision_handle.h
===================================================================
--- branches/cr/src/lib/collision_reaction/collision_handle.h	(revision 8099)
+++ branches/cr/src/lib/collision_reaction/collision_handle.h	(revision 8106)
@@ -31,5 +31,5 @@
     void addTarget(long target);
     Collision* registerCollision(WorldEntity* entityA, WorldEntity* entityB);
-    void registerCollision(Collision* collision);
+    void registerSharedCollision(Collision* collision);
     void registerCollisionEvent(CollisionEvent* collisionEvent);
 
Index: branches/cr/src/lib/collision_reaction/cr_object_damage.cc
===================================================================
--- branches/cr/src/lib/collision_reaction/cr_object_damage.cc	(revision 8099)
+++ branches/cr/src/lib/collision_reaction/cr_object_damage.cc	(revision 8106)
@@ -56,14 +56,13 @@
   float velocity;
 
-  PhysicsInterface* pi;
 
-  const std::vector<CollisionEvent*>* collisionEvents = &(collision->getCollisionEvents());
-  std::vector<CollisionEvent*>::const_iterator it = collisionEvents->begin();
-  for(; it != collisionEvents->end(); it++)
-  {
-    pi = &(*it)->getEntityA()->getPhysicsInterface();
-    // go through the collisions and try to estimate the damage
-    mass = pi->getMass();
-  }
+
+//   const std::vector<CollisionEvent*>* collisionEvents = &(collision->getCollisionEvents());
+//   std::vector<CollisionEvent*>::const_iterator it = collisionEvents->begin();
+//   for(; it != collisionEvents->end(); it++)
+//   {
+//     // go through the collisions and try to estimate the damage
+//     mass = (*it)->getEntityA()->getMass();
+//   }
 
 }
Index: branches/cr/src/lib/physics/physics_interface.h
===================================================================
--- branches/cr/src/lib/physics/physics_interface.h	(revision 8099)
+++ branches/cr/src/lib/physics/physics_interface.h	(revision 8106)
@@ -39,4 +39,9 @@
   inline float getTotalMass( void ) const { return mass + massChildren; };
 
+  /** @returns the velocity */
+  inline const Vector getVelocity() { return this->velocity; }
+  /** @returns the acceleration */
+  inline const Vector getAcceleration() { return this->acceleration; }
+
   virtual void applyForce(const Vector& force);
   virtual void applyField(Field* field);
@@ -51,4 +56,7 @@
   float          massChildren;          //!< Sum of the masses of the children nodes
 
+  Vector         velocity;              //!< the velocity of the masspoint
+  Vector         acceleration;          //!< acceleration of the masspoint
+
   Vector         forceSum;              //!< Total central force for this tick
   Quaternion     momentumSum;           //!< Total momentum in this tick
