Index: /branches/coll_rect/src/lib/collision_detection/obb_tree_node.cc
===================================================================
--- /branches/coll_rect/src/lib/collision_detection/obb_tree_node.cc	(revision 9938)
+++ /branches/coll_rect/src/lib/collision_detection/obb_tree_node.cc	(revision 9939)
@@ -477,4 +477,7 @@
 {
   if( unlikely(treeNode == NULL || nodeA == NULL || nodeB == NULL))
+    return;
+
+  if( !CoRe::CollisionTube::getInstance()->isReactive( *nodeA, *nodeB) )
     return;
 
Index: /branches/coll_rect/src/lib/collision_reaction/collision.h
===================================================================
--- /branches/coll_rect/src/lib/collision_reaction/collision.h	(revision 9938)
+++ /branches/coll_rect/src/lib/collision_reaction/collision.h	(revision 9939)
@@ -32,4 +32,5 @@
   {
   public:
+
     Collision();
     virtual ~Collision();
@@ -39,8 +40,42 @@
 
 
+    /* list stuff */
+  public:
+    typedef std::vector<CollisionEvent*>                  collisionVector;  //!< the vector containing all collision events
+    typedef std::vector<CollisionEvent*>::iterator        iterator;         //!< iterator definition
+    typedef std::vector<CollisionEvent*>::const_iterator  const_iterator;   //!< constant iterator definition
+
+    /** registers a @param event CollisionEvent to take place */
+    inline void registerCollisionEvent(CollisionEvent* event) { this->_collisionEvents.push_back(event); this->bDispatched = false;}
+    /** @returns a vector of collision events */
+    inline const std::vector<CollisionEvent*>& getCollisionEvents() const { return this->_collisionEvents; }
+
+    void flushCollisionEvents();
+
+
+    /** @returns iterator pointing to the beginning of the collision event vector */
+    inline iterator       begin()        { return this->_collisionEvents.begin(); }
+    /** @returns const iterator pointing to the beginning of the collision event vector */
+    inline const_iterator begin() const  { return this->_collisionEvents.begin(); }
+    /** @returns iterator pointing to the end of the collision event vector */
+    inline iterator       end()          { return this->_collisionEvents.end(); }
+    /** @returns const iterator pointing to the end of the collision event vector */
+    inline const_iterator end() const    { return this->_collisionEvents.end(); }
+
+
+  private:
+    collisionVector  _collisionEvents;               //!< the collision event list
+
+
+
+    /* misc interface functions */
+  public:
     /** @return Collision WorldEntity A */
     inline WorldEntity* getEntityA() const { return this->entityA; }
     /** @return Collision WorldEntity B */
     inline WorldEntity* getEntityB() const { return this->entityB; }
+    inline bool match(const WorldEntity& entityA, WorldEntity& entityB) const {
+      return ((this->entityA == &entityA && this->entityB == &entityB) || (this->entityA == &entityB && this->entityB == &entityA)); }
+
     /** @return true if Entity A collides */
     inline bool isEntityACollide() const { return this->entityACollide; }
@@ -53,19 +88,9 @@
 
 
-    inline bool match(const WorldEntity& entityA, WorldEntity& entityB) const {
-      return ((this->entityA == &entityA && this->entityB == &entityB) || (this->entityA == &entityB && this->entityB == &entityA)); }
+
     /** @returns true if this Collision has already been dispatched */
     inline bool isDispatched() { return this->bDispatched; }
     /** sets the dispatched flag to true */
     inline void dispatched() { this->bDispatched = true; }
-
-    /** registers a @param event CollisionEvent to take place */
-    inline void registerCollisionEvent(CollisionEvent* event) { this->collisionEvents.push_back(event); this->bDispatched = false;}
-    /** @returns a vector of collision events */
-    inline const std::vector<CollisionEvent*>& getCollisionEvents() const { return this->collisionEvents; }
-
-
-    void flushCollisionEvents();
-
 
   private:
@@ -77,5 +102,4 @@
     bool                         bDispatched;                   //!< true if this collision has already been dispatched
 
-    std::vector<CollisionEvent*> collisionEvents;               //!< the collision event list
   };
 }
Index: /branches/coll_rect/src/lib/collision_reaction/collision_filter.cc
===================================================================
--- /branches/coll_rect/src/lib/collision_reaction/collision_filter.cc	(revision 9938)
+++ /branches/coll_rect/src/lib/collision_reaction/collision_filter.cc	(revision 9939)
@@ -70,5 +70,5 @@
     if( likely(this->validCRType( type)))
     {
-      //check if this or any parent class isn't already registered
+      //check if this class isn't already registered
       std::vector<ClassID>::iterator it = this->_filters[type].begin();
       for(; it != this->_filters[type].end(); it++)
@@ -78,5 +78,5 @@
       }
 
-      // so subscribe the reaction finaly
+      // so subscribe the reaction finally
       this->_filters[type].push_back(target1);
       this->_bReactive = true;
@@ -132,5 +132,5 @@
    * if the WorldEntity entity is actualy responsive for a certain other WorldEntity
    */
-  bool CollisionFilter::operator()(const WorldEntity* entity) const
+  bool CollisionFilter::operator()(const WorldEntity& entity) const
   {
     // if there are no installed criterions just ommit and
@@ -143,5 +143,5 @@
       std::vector<ClassID>::const_iterator it = this->_filters[i].begin();
       for(; it != this->_filters[i].end(); i++ )
-        if( unlikely(entity->isA(*it)))
+        if( unlikely(entity.isA(*it)))
           return true;
     }
@@ -158,5 +158,5 @@
   * if the WorldEntity entity is actualy responsive for a certain other WorldEntity
    */
-  bool CollisionFilter::operator()(const WorldEntity* entity, const CREngine::ReactionType type) const
+  bool CollisionFilter::operator()(const WorldEntity& entity, const CREngine::ReactionType type) const
   {
     // if there are no installed criterions just ommit and
@@ -166,6 +166,6 @@
     // goes through all registered filter criterions and looks for matches
     std::vector<ClassID>::const_iterator it = this->_filters[type].begin();
-    for(; it != this->_filters[type].end(); i++ )
-      if( unlikely(entity->isA(*it)))
+    for(; it != this->_filters[type].end(); it++ )
+      if( unlikely(entity.isA(*it)))
         return true;
 
Index: /branches/coll_rect/src/lib/collision_reaction/collision_filter.h
===================================================================
--- /branches/coll_rect/src/lib/collision_reaction/collision_filter.h	(revision 9938)
+++ /branches/coll_rect/src/lib/collision_reaction/collision_filter.h	(revision 9939)
@@ -46,7 +46,8 @@
 
 
+  public:
     /* Defines Operators */
-    bool operator()(const WorldEntity* entity) const;
-    bool operator()(const WorldEntity* entity, const CREngine::ReactionType type) const;
+    bool operator()(const WorldEntity& entity) const;
+    bool operator()(const WorldEntity& entity, const CREngine::ReactionType type) const;
 
 
@@ -59,4 +60,6 @@
     void unsubscribeReaction(CREngine::ReactionType type);
     void unsubscribeReactions();
+
+    inline bool isSubscribed(CREngine::ReactionType type) const { /*if( this->validCRType(type)) return this->_filters[type] != NULL; else return false;*/}
 
   private:
Index: /branches/coll_rect/src/lib/collision_reaction/collision_tube.cc
===================================================================
--- /branches/coll_rect/src/lib/collision_reaction/collision_tube.cc	(revision 9938)
+++ /branches/coll_rect/src/lib/collision_reaction/collision_tube.cc	(revision 9939)
@@ -95,9 +95,11 @@
                               const Vector& normal, const Vector& position, bool bInWall)
   {
+    // get last collision
     Collision* collision = this->_collisionList.back();
 
     // check if there is already a collision defined between these objects
-    if( !collision->match(*entity, *groundEntity))
+    if( collision != NULL && !collision->match(*entity, *groundEntity))
     {
+      // get a new collision object
       collision = CREngine::getInstance()->popCollisionObject();
       collision->collide( entity, groundEntity);
@@ -117,19 +119,21 @@
   void CollisionTube::handleCollisions()
   {
-    //
+    // for all collisions:
+    std::vector<Collision*>::iterator collisions = this->_collisionList.begin();
+    for(; collisions < this->_collisionList.end(); collisions++)
+    {
+
+
+      // for all collision events of each collision:
+      Collision::iterator events = (*collisions)->begin();
+      for(; events < (*collisions)->end(); events++)
+      {
+
+      }
+    }
   }
 
 
-  /**
-   * 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 9938)
+++ /branches/coll_rect/src/lib/collision_reaction/collision_tube.h	(revision 9939)
@@ -75,8 +75,7 @@
     /* Misc State Informations */
   public:
-    /** @returns true if at least one of both WorldEntities are subscribed for a collision check */
+    /** @returns true if at least one of both WorldEntities are subscribed for a collision reaction */
     inline bool isReactive(const WorldEntity& entityA, const WorldEntity& entityB) const
-      { return (entityA.isReactive() && entityB.isReactive()); }
-    bool needCollisionChecking(const WorldEntity& entityA, const WorldEntity& entityB);
+      { return (entityA.isReactive(entityB) && entityB.isReactive(entityA)); }
 
   };
Index: /branches/coll_rect/src/world_entities/world_entity.h
===================================================================
--- /branches/coll_rect/src/world_entities/world_entity.h	(revision 9938)
+++ /branches/coll_rect/src/world_entities/world_entity.h	(revision 9939)
@@ -88,8 +88,11 @@
   void unsubscribeReactions();
 
+  inline bool isSubscribed(CoRe::CREngine::ReactionType type) const { return this->_collisionFilter.isSubscribed( type); }
+
   /** @return true if there is at least on collision reaction subscribed */
   inline bool isReactive() const { return this->bReactive; }
-
-  const CoRe::CollisionFilter& getCollisionFilter(CoRe::CREngine::ReactionType type) const { return this->collisionFilter; }
+  inline bool isReactive( const WorldEntity& worldEntity) const { return this->isReactive() || (this->_collisionFilter(worldEntity)); }
+
+  const CoRe::CollisionFilter& getCollisionFilter(CoRe::CREngine::ReactionType type) const { return this->_collisionFilter; }
 
   /** @returns true if this entity is standing on ground (BSP model) */
@@ -191,5 +194,5 @@
 
   /* collision reaction stuff */
-  CoRe::CollisionFilter   collisionFilter;                 //!< filter for collision event filtering (not every entity listens to all collisions)
+  CoRe::CollisionFilter   _collisionFilter;                //!< filter for collision event filtering (not every entity listens to all collisions)
   bool                    bReactive;                       //!< true if there is at least one collision reaction subscibed
 
