Index: /code/branches/gametypes/src/orxonox/objects/gametypes/Asteroids.cc
===================================================================
--- /code/branches/gametypes/src/orxonox/objects/gametypes/Asteroids.cc	(revision 2985)
+++ /code/branches/gametypes/src/orxonox/objects/gametypes/Asteroids.cc	(revision 2986)
@@ -44,4 +44,5 @@
         RegisterObject(Asteroids);
         this->firstCheckpointReached_ = false;
+        this->firstTimeSpawned_ = false;
     }
 
@@ -59,7 +60,17 @@
             this->end();
         }
-        
     }
 
+    void Asteroids::spawnPlayer(PlayerInfo* player)
+    {
+        if (this->timerIsActive_ && this->firstTimeSpawned_)
+        {
+            this->end();
+            return;
+        }
+
+        this->firstTimeSpawned_ = true;
+        Gametype::spawnPlayer(player);
+    }
 
     void Asteroids::start()
Index: /code/branches/gametypes/src/orxonox/objects/gametypes/Asteroids.h
===================================================================
--- /code/branches/gametypes/src/orxonox/objects/gametypes/Asteroids.h	(revision 2985)
+++ /code/branches/gametypes/src/orxonox/objects/gametypes/Asteroids.h	(revision 2986)
@@ -50,7 +50,11 @@
               { this->firstCheckpointReached_ = reached; }
 
+        protected:
+            virtual void spawnPlayer(PlayerInfo* player);
+
         private:
             bool firstCheckpointReached_;
             bool gameEnded_;
+            bool firstTimeSpawned_;
 
     };
Index: /code/branches/gametypes/src/orxonox/objects/quest/QuestEffectBeacon.cc
===================================================================
--- /code/branches/gametypes/src/orxonox/objects/quest/QuestEffectBeacon.cc	(revision 2985)
+++ /code/branches/gametypes/src/orxonox/objects/quest/QuestEffectBeacon.cc	(revision 2986)
@@ -41,5 +41,5 @@
 
 #include "orxonox/objects/infos/PlayerInfo.h"
-#include "orxonox/objects/worldentities/ControllableEntity.h"
+#include "orxonox/objects/worldentities/pawns/Pawn.h"
 #include "orxonox/objects/worldentities/triggers/PlayerTrigger.h"
 #include "QuestEffect.h"
@@ -120,14 +120,14 @@
 
         //! Extracting the ControllableEntity form the PlayerTrigger.
-        ControllableEntity* entity = trigger->getTriggeringPlayer();
-
-        if(entity == NULL)
-        {
-            COUT(2) << "The QuestEffectBeacon was triggered by an entity other than a ControllableEntity." << std::endl;
+        Pawn* pawn = trigger->getTriggeringPlayer();
+
+        if(pawn == NULL)
+        {
+            COUT(2) << "The QuestEffectBeacon was triggered by an entity other than a Pawn." << std::endl;
             return false;
         }
         
         //! Extract the PlayerInfo from the ControllableEntity.
-        PlayerInfo* player = entity->getPlayer();
+        PlayerInfo* player = pawn->getPlayer();
         
         if(player == NULL)
Index: /code/branches/gametypes/src/orxonox/objects/worldentities/MovableEntity.cc
===================================================================
--- /code/branches/gametypes/src/orxonox/objects/worldentities/MovableEntity.cc	(revision 2985)
+++ /code/branches/gametypes/src/orxonox/objects/worldentities/MovableEntity.cc	(revision 2986)
@@ -35,4 +35,5 @@
 #include "core/Executor.h"
 #include "core/Core.h"
+#include "objects/worldentities/pawns/Pawn.h"
 
 namespace orxonox
@@ -67,5 +68,25 @@
     {
         SUPER(MovableEntity, XMLPort, xmlelement, mode);
+
+        XMLPortParam(MovableEntity, "enablecollisiondamage", setEnableCollisionDamage, getEnableCollisionDamage, xmlelement, mode).defaultValues(false);
+        XMLPortParam(MovableEntity, "collisiondamage", setCollisionDamage, getCollisionDamage, xmlelement, mode).defaultValues(1);
     }
+
+    bool MovableEntity::collidesAgainst(WorldEntity* otherObject, btManifoldPoint& contactPoint)
+    {
+            if (Core::isMaster() && enableCollisionDamage_)
+            {
+                Pawn* victim = dynamic_cast<Pawn*>(otherObject);
+                if (victim)
+		{
+COUT(0) << "colission";
+                    
+                    victim->damage(this->collisionDamage_ * victim->getVelocity().dotProduct(this->getVelocity()));
+}
+            }
+
+        return false;
+    }
+
 
     void MovableEntity::registerVariables()
Index: /code/branches/gametypes/src/orxonox/objects/worldentities/MovableEntity.h
===================================================================
--- /code/branches/gametypes/src/orxonox/objects/worldentities/MovableEntity.h	(revision 2985)
+++ /code/branches/gametypes/src/orxonox/objects/worldentities/MovableEntity.h	(revision 2986)
@@ -46,4 +46,5 @@
 
             virtual void XMLPort(Element& xmlelement, XMLPort::Mode mode);
+            virtual bool collidesAgainst(WorldEntity* otherObject, btManifoldPoint& contactPoint);
             void registerVariables();
 
@@ -55,4 +56,24 @@
             inline void setOrientation(const Quaternion& orientation)
                 { MobileEntity::setOrientation(orientation); this->overwrite_orientation_ = this->getOrientation(); }
+
+            inline void setOwner(Pawn* owner)
+                { this->owner_ = owner; }
+            inline Pawn* getOwner() const
+                { return this->owner_; }
+
+            inline void setCollisionDamage(float c)
+                { this->collisionDamage_ = c; }
+
+            inline float getCollisionDamage()
+                { return this->collisionDamage_; }
+
+            inline void setEnableCollisionDamage(bool c)
+            { 
+                this->enableCollisionDamage_ = c; 
+                this->enableCollisionCallback();
+            } 
+
+            inline bool getEnableCollisionDamage()
+                { return this->enableCollisionDamage_; }
 
         private:
@@ -76,4 +97,8 @@
             Timer<MovableEntity> resynchronizeTimer_;
             Timer<MovableEntity>* continuousResynchroTimer_;
+
+            Pawn* owner_;
+            float collisionDamage_;
+            bool enableCollisionDamage_;
     };
 }
Index: /code/branches/gametypes/src/orxonox/objects/worldentities/triggers/CheckPoint.cc
===================================================================
--- /code/branches/gametypes/src/orxonox/objects/worldentities/triggers/CheckPoint.cc	(revision 2985)
+++ /code/branches/gametypes/src/orxonox/objects/worldentities/triggers/CheckPoint.cc	(revision 2986)
@@ -37,4 +37,5 @@
 
 #include "orxonox/objects/worldentities/ControllableEntity.h"
+#include "orxonox/objects/worldentities/pawns/Pawn.h"
 
 namespace orxonox
@@ -51,4 +52,6 @@
     this->bIsDestination_ = false;
     //this->setVisible(true);
+
+    this->notifyMaskUpdate();
   }
 
@@ -87,3 +90,9 @@
      }
   }
+
+  void CheckPoint::notifyMaskUpdate()
+  {
+      this->targetMask_.exclude(Class(BaseObject));
+      this->targetMask_.include(Class(Pawn));
+  }
 }
Index: /code/branches/gametypes/src/orxonox/objects/worldentities/triggers/CheckPoint.h
===================================================================
--- /code/branches/gametypes/src/orxonox/objects/worldentities/triggers/CheckPoint.h	(revision 2985)
+++ /code/branches/gametypes/src/orxonox/objects/worldentities/triggers/CheckPoint.h	(revision 2986)
@@ -57,4 +57,5 @@
     private:
       virtual void triggered(bool bIsTriggered); 
+      virtual void notifyMaskUpdate();
 
       inline void setDestination(bool isDestination)
Index: /code/branches/gametypes/src/orxonox/objects/worldentities/triggers/DistanceTrigger.cc
===================================================================
--- /code/branches/gametypes/src/orxonox/objects/worldentities/triggers/DistanceTrigger.cc	(revision 2985)
+++ /code/branches/gametypes/src/orxonox/objects/worldentities/triggers/DistanceTrigger.cc	(revision 2986)
@@ -35,5 +35,5 @@
 #include "core/XMLPort.h"
 
-#include "orxonox/objects/worldentities/ControllableEntity.h"
+#include "orxonox/objects/worldentities/pawns/Pawn.h"
 
 namespace orxonox
@@ -109,4 +109,6 @@
     WEMask.include(Class(WorldEntity));
     this->targetMask_ *= WEMask;
+
+    this->notifyMaskUpdate();
   }
 
@@ -133,5 +135,5 @@
         if(this->isForPlayer())
 	{
-          ControllableEntity* player = dynamic_cast<ControllableEntity*>(entity);
+          Pawn* player = dynamic_cast<Pawn*>(entity);
 	  this->setTriggeringPlayer(player);
 	}
Index: /code/branches/gametypes/src/orxonox/objects/worldentities/triggers/DistanceTrigger.h
===================================================================
--- /code/branches/gametypes/src/orxonox/objects/worldentities/triggers/DistanceTrigger.h	(revision 2985)
+++ /code/branches/gametypes/src/orxonox/objects/worldentities/triggers/DistanceTrigger.h	(revision 2986)
@@ -63,7 +63,9 @@
     protected:
       virtual bool isTriggered(TriggerMode mode);
+      virtual void notifyMaskUpdate() {}
+
+      ClassTreeMask targetMask_;
 
     private:
-      ClassTreeMask targetMask_;
       std::set<Ogre::Node*> targetSet_;
       float distance_;
Index: /code/branches/gametypes/src/orxonox/objects/worldentities/triggers/PlayerTrigger.h
===================================================================
--- /code/branches/gametypes/src/orxonox/objects/worldentities/triggers/PlayerTrigger.h	(revision 2985)
+++ /code/branches/gametypes/src/orxonox/objects/worldentities/triggers/PlayerTrigger.h	(revision 2986)
@@ -60,5 +60,5 @@
         @return Returns a pointer to the ControllableEntity that triggered the PlayerTrigger.
         */
-        inline ControllableEntity* getTriggeringPlayer(void) const
+        inline Pawn* getTriggeringPlayer(void) const
             { return this->player_; }
         
@@ -77,5 +77,5 @@
         @param player A pointer to the ControllableEntity that triggered the PlayerTrigger.
         */
-        inline void setTriggeringPlayer(ControllableEntity* player)
+        inline void setTriggeringPlayer(Pawn* player)
            { this->player_ = player; }
 
@@ -88,5 +88,5 @@
         
     private:
-        ControllableEntity* player_; //!< The player that triggered the PlayerTrigger.
+        Pawn* player_; //!< The player that triggered the PlayerTrigger.
         bool isForPlayer_; //!< Is true when the PlayerTrigger schould be set to normally be triggered by ControllableEntities.
     
