Index: branches/coll_rect/src/lib/collision_reaction/collision_handle.cc
===================================================================
--- branches/coll_rect/src/lib/collision_reaction/collision_handle.cc	(revision 9892)
+++ branches/coll_rect/src/lib/collision_reaction/collision_handle.cc	(revision 9893)
@@ -108,87 +108,4 @@
     this->targetList.push_back(target);
     PRINTF(5)("addTarget: %i \n", target.id());
-  }
-
-
-  /**
-   * registers a new Collision Object
-   *  @param entityA WorldEntity A of the collision
-   *  @param entityB WorldEntity B of the collision
-   * if a there is already a collision object with the same stats
-   * registration will be skipped and the last collision object is returned
-   */
-  Collision* CollisionHandle::registerCollision(WorldEntity* entityA, WorldEntity* entityB)
-  {
-    //first get the collision object, multiple sources
-    Collision* c;
-    if( this->collisionList.empty() ||
-        ((this->collisionList.back())->getEntityA() != entityA && (this->collisionList.back())->getEntityB() != entityB ))
-    {
-      c = CREngine::getInstance()->popCollisionObject();
-      c->collide(entityA, entityB);
-      this->collisionList.push_back(c);
-
-      // now register it as a shared collision with the other collision entity
-      CollisionHandle* ch = entityB->getCollisionHandle(this->type);
-      if( ch != NULL)
-        ch->registerSharedCollision(c);
-    }
-    else
-      c = this->collisionList.back();
-
-    return c;
-  }
-
-
-  /**
-   * register a Collision to the Collision handle.
-   *  @param collision the collision object to register
-   *
-   * This is used for internal collision registration: sharing the collision objects between Collision Reactions
-   * Therefore dispatching it only once
-   */
-  void CollisionHandle::registerSharedCollision(Collision* collision)
-  {
-    // fist check if we are listening for this Collision
-    if( !this->filterCollision(collision))
-      return;
-
-    // set the state to not dispatched
-    this->bDispatched = false;
-    this->bCollided = true;
-    collision->setEntityBCollide(true);
-
-    this->collisionList.push_back(collision);
-  }
-
-
-  /**
-   * this is the function to be called on a collision event for this handle
-   *  @param collision the collision objects containing all collision informations
-   */
-  void CollisionHandle::registerCollisionEvent(CollisionEvent* collisionEvent)
-  {
-    if( !this->filterCollisionEvent(collisionEvent))
-      return;
-
-    // set the state to not dispatched
-    this->bDispatched = false;
-    this->bCollided = true;
-
-    // checks if these WorldEntities have already collided or if its a new collision -> create a new Collision object
-    Collision* c = this->registerCollision(collisionEvent->getEntityA(), collisionEvent->getEntityB());
-    c->setEntityACollide(true);
-
-    c->registerCollisionEvent(collisionEvent);
-    PRINTF(5)("Registering Collision Event: %s, %s\n", collisionEvent->getEntityA()->getClassCName(), collisionEvent->getEntityB()->getClassCName());
-  }
-
-
-  /**
-   * flushes the collision list
-   */
-  void CollisionHandle::flushCollisions()
-  {
-    this->collisionList.clear();
   }
 
Index: branches/coll_rect/src/lib/collision_reaction/collision_handle.h
===================================================================
--- branches/coll_rect/src/lib/collision_reaction/collision_handle.h	(revision 9892)
+++ branches/coll_rect/src/lib/collision_reaction/collision_handle.h	(revision 9893)
@@ -36,7 +36,4 @@
 
     void addTarget(const ClassID& target);
-    Collision* registerCollision(WorldEntity* entityA, WorldEntity* entityB);
-    void registerSharedCollision(Collision* collision);
-    void registerCollisionEvent(CollisionEvent* collisionEvent);
 
     /** @returns true if regiestered some new collision events in this tick frame */
Index: branches/coll_rect/src/lib/collision_reaction/collision_tube.cc
===================================================================
--- branches/coll_rect/src/lib/collision_reaction/collision_tube.cc	(revision 9892)
+++ branches/coll_rect/src/lib/collision_reaction/collision_tube.cc	(revision 9893)
@@ -67,10 +67,14 @@
 
     // check if there is already a collision defined between these objects
-    if( collision->match(*entityA, *entityB))
+    if( !collision->match(*entityA, *entityB))
     {
-      CollisionEvent* collisionEvent = CREngine::getInstance()->popCollisionEventObject();
-      collisionEvent->collide( CREngine::CR_COLLISION_TYPE_OBB, entityA, entityB, bvA, bvB);
-      collision->registerCollisionEvent( collisionEvent);
+      collision = CREngine::getInstance()->popCollisionObject();
+      collision->collide( entityA, entityB);
     }
+
+    // now register the new collision event
+    CollisionEvent* collisionEvent = CREngine::getInstance()->popCollisionEventObject();
+    collisionEvent->collide( CREngine::CR_COLLISION_TYPE_OBB, entityA, entityB, bvA, bvB);
+    collision->registerCollisionEvent( collisionEvent);
   }
 
@@ -85,9 +89,35 @@
    * @param bInWall true if the entity is in the ground material
    */
-  void CollisionTube::registerCollisionEvent(int type, WorldEntity* entity, WorldEntity* groundEntity,
+  void CollisionTube::registerCollisionEvent(CREngine::CollisionType type, WorldEntity* entity, WorldEntity* groundEntity,
                               const Vector& normal, const Vector& position, bool bInWall)
   {
-    //
+    Collision* collision = this->_collisionList.back();
+
+    // check if there is already a collision defined between these objects
+    if( !collision->match(*entity, *groundEntity))
+    {
+      collision = CREngine::getInstance()->popCollisionObject();
+      collision->collide( entity, groundEntity);
+    }
+
+    // now register the new collision event
+    CollisionEvent* collisionEvent = CREngine::getInstance()->popCollisionEventObject();
+    collisionEvent->collide( type, entity, groundEntity, normal, position, bInWall);
+    collision->registerCollisionEvent( collisionEvent);
   }
+
+
+  /**
+   * checks if two objects are
+   */
+  bool CollisionTube::needCollisionChecking(const WorldEntity& entityA, const WorldEntity& entityB)
+  {
+    //if( !this->isReactive( entityA, entityB) )
+    //  return false;
+
+    //if( entityA->)
+
+  }
+
 
   /**
Index: branches/coll_rect/src/lib/collision_reaction/collision_tube.h
===================================================================
--- branches/coll_rect/src/lib/collision_reaction/collision_tube.h	(revision 9892)
+++ branches/coll_rect/src/lib/collision_reaction/collision_tube.h	(revision 9893)
@@ -56,7 +56,8 @@
     inline bool isReactive(const WorldEntity& entityA, const WorldEntity& entityB) const
     { return (entityA.isReactive() && entityB.isReactive()); }
+    bool needCollisionChecking(const WorldEntity& entityA, const WorldEntity& entityB);
 
     void registerCollisionEvent(WorldEntity* entityA, WorldEntity* entityB, BoundingVolume* bvA, BoundingVolume* bvB);
-    void registerCollisionEvent(int type, WorldEntity* entity, WorldEntity* groundEntity,
+    void registerCollisionEvent(CREngine::CollisionType type, WorldEntity* entity, WorldEntity* groundEntity,
                                 const Vector& normal, const Vector& position, bool bInWall = false);
 
Index: branches/coll_rect/src/lib/collision_reaction/cr_defs.h
===================================================================
--- branches/coll_rect/src/lib/collision_reaction/cr_defs.h	(revision 9892)
+++ branches/coll_rect/src/lib/collision_reaction/cr_defs.h	(revision 9893)
@@ -28,16 +28,4 @@
 
 
-//!< the collision axis x collision event
-#define COLLISION_TYPE_AXIS_X      1
-#define COLLISION_TYPE_AXIS_X_NEG  2
-//!< the collision axis y collision event
-#define COLLISION_TYPE_AXIS_Y      3
-#define COLLISION_TYPE_AXIS_Y_NEG  4
-//!< the collision axis z collision event
-#define COLLISION_TYPE_AXIS_Z      5
-#define COLLISION_TYPE_AXIS_Z_NEG  6
-//!< the collision is a obb collision
-#define COLLISION_TYPE_OBB         8
-
 
 #endif /* _NETWORK_MANAGER */
Index: branches/coll_rect/src/lib/collision_reaction/cr_engine.cc
===================================================================
--- branches/coll_rect/src/lib/collision_reaction/cr_engine.cc	(revision 9892)
+++ branches/coll_rect/src/lib/collision_reaction/cr_engine.cc	(revision 9893)
@@ -123,5 +123,4 @@
   {
     // first clear all CollisionHandles
-
     std::vector<CollisionHandle*>::iterator it = this->collisionHandles.begin();
     for(; it < this->collisionHandles.end(); it++)
