Index: code/trunk/src/orxonox/objects/worldentities/triggers/CMakeLists.txt
===================================================================
--- code/trunk/src/orxonox/objects/worldentities/triggers/CMakeLists.txt	(revision 2171)
+++ code/trunk/src/orxonox/objects/worldentities/triggers/CMakeLists.txt	(revision 2261)
@@ -3,4 +3,5 @@
   DistanceTrigger.cc
   EventTrigger.cc
+  PlayerTrigger.cc
 )
 
Index: code/trunk/src/orxonox/objects/worldentities/triggers/DistanceTrigger.cc
===================================================================
--- code/trunk/src/orxonox/objects/worldentities/triggers/DistanceTrigger.cc	(revision 2171)
+++ code/trunk/src/orxonox/objects/worldentities/triggers/DistanceTrigger.cc	(revision 2261)
@@ -35,9 +35,11 @@
 #include "core/XMLPort.h"
 
+#include "orxonox/objects/worldentities/ControllableEntity.h"
+
 namespace orxonox
 {
   CreateFactory(DistanceTrigger);
 
-  DistanceTrigger::DistanceTrigger(BaseObject* creator) : Trigger(creator)
+  DistanceTrigger::DistanceTrigger(BaseObject* creator) : PlayerTrigger(creator)
   {
     RegisterObject(DistanceTrigger);
@@ -45,4 +47,5 @@
     this->distance_ = 100;
     this->targetMask_.exclude(Class(BaseObject));
+    this->setForPlayer(false); //!< Normally hasn't just ControllableEntities as targets.
   }
 
@@ -83,4 +86,12 @@
   {
     Identifier* targetId = ClassByString(targets);
+    
+    //! Checks whether the target is (or is derived from) a ControllableEntity.
+    Identifier* controllableEntityId = Class(ControllableEntity);
+    if(targetId->isA(controllableEntityId))
+    {
+      this->setForPlayer(true);
+    }
+    
     if (!targetId)
     {
@@ -117,8 +128,17 @@
       Vector3 distanceVec = entity->getWorldPosition() - this->getWorldPosition();
       if (distanceVec.length() < this->distance_)
+      {
+        
+        //! If the target is a player (resp. is a, or is derived from a, ControllableEntity) the triggeringPlayer is set to the target entity.
+        if(this->isForPlayer())
+	{
+          ControllableEntity* player = dynamic_cast<ControllableEntity*>(entity);
+	  this->setTriggeringPlayer(player);
+	}
+        
         return true;
+      }
     }
     return false;
-
   }
 
@@ -126,5 +146,7 @@
   {
     if (Trigger::isTriggered(mode))
+    {
       return checkDistance();
+    }
     else
       return false;
Index: code/trunk/src/orxonox/objects/worldentities/triggers/DistanceTrigger.h
===================================================================
--- code/trunk/src/orxonox/objects/worldentities/triggers/DistanceTrigger.h	(revision 2171)
+++ code/trunk/src/orxonox/objects/worldentities/triggers/DistanceTrigger.h	(revision 2261)
@@ -30,5 +30,5 @@
 #define _DistanceTrigger_H__
 
-#include "Trigger.h"
+#include "PlayerTrigger.h"
 
 #include <set>
@@ -37,7 +37,9 @@
 #include "core/BaseObject.h"
 
+#include "orxonox/objects/worldentities/ControllableEntity.h"
+
 namespace orxonox
 {
-  class _OrxonoxExport DistanceTrigger : public Trigger
+  class _OrxonoxExport DistanceTrigger : public PlayerTrigger
   {
     public:
@@ -66,4 +68,5 @@
       std::set<Ogre::Node*> targetSet_;
       float distance_;
+      
   };
 }
Index: code/trunk/src/orxonox/objects/worldentities/triggers/PlayerTrigger.cc
===================================================================
--- code/trunk/src/orxonox/objects/worldentities/triggers/PlayerTrigger.cc	(revision 2261)
+++ code/trunk/src/orxonox/objects/worldentities/triggers/PlayerTrigger.cc	(revision 2261)
@@ -0,0 +1,71 @@
+/*
+ *   ORXONOX - the hottest 3D action shooter ever to exist
+ *                    > www.orxonox.net <
+ *
+ *
+ *   License notice:
+ *
+ *   This program is free software; you can redistribute it and/or
+ *   modify it under the terms of the GNU General Public License
+ *   as published by the Free Software Foundation; either version 2
+ *   of the License, or (at your option) any later version.
+ *
+ *   This program is distributed in the hope that it will be useful,
+ *   but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *   GNU General Public License for more details.
+ *
+ *   You should have received a copy of the GNU General Public License
+ *   along with this program; if not, write to the Free Software
+ *   Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
+ *
+ *   Author:
+ *      Damian 'Mozork' Frick
+ *   Co-authors:
+ *      ...
+ *
+ */
+
+/**
+    @file PlayerTrigger.cc
+    @brief
+	Implementation of the PlayerTrigger class.
+*/
+
+#include "OrxonoxStableHeaders.h"
+#include "PlayerTrigger.h"
+
+#include "core/CoreIncludes.h"
+
+namespace orxonox {
+
+    /**
+    @brief
+        Constructor. Registers the object and initializes defaults.
+    */
+    PlayerTrigger::PlayerTrigger(BaseObject* creator) : Trigger(creator)
+    {
+        RegisterObject(PlayerTrigger);
+        
+        this->player_ = NULL;
+        this->isForPlayer_ = true;
+    }
+    
+    /**
+    @brief
+        Destructor.
+    */
+    PlayerTrigger::~PlayerTrigger()
+    {
+    }
+
+    /**
+    @brief
+        Method for creating a QuestEffectBeacon object through XML.
+    */
+    void PlayerTrigger::XMLPort(Element& xmlelement, XMLPort::Mode mode)
+    {
+	SUPER(PlayerTrigger, XMLPort, xmlelement, mode);
+    }
+
+}
Index: code/trunk/src/orxonox/objects/worldentities/triggers/PlayerTrigger.h
===================================================================
--- code/trunk/src/orxonox/objects/worldentities/triggers/PlayerTrigger.h	(revision 2261)
+++ code/trunk/src/orxonox/objects/worldentities/triggers/PlayerTrigger.h	(revision 2261)
@@ -0,0 +1,97 @@
+/*
+ *   ORXONOX - the hottest 3D action shooter ever to exist
+ *                    > www.orxonox.net <
+ *
+ *
+ *   License notice:
+ *
+ *   This program is free software; you can redistribute it and/or
+ *   modify it under the terms of the GNU General Public License
+ *   as published by the Free Software Foundation; either version 2
+ *   of the License, or (at your option) any later version.
+ *
+ *   This program is distributed in the hope that it will be useful,
+ *   but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *   GNU General Public License for more details.
+ *
+ *   You should have received a copy of the GNU General Public License
+ *   along with this program; if not, write to the Free Software
+ *   Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
+ *
+ *   Author:
+ *      Damian 'Mozork' Frick
+ *   Co-authors:
+ *      ...
+ *
+ */
+
+/**
+    @file PlayerTrigger.h
+    @brief
+	Definition of the PlayerTrigger class.
+*/
+
+#ifndef _PlayerTrigger_H__
+#define _PlayerTrigger_H__
+
+#include "OrxonoxPrereqs.h"
+
+#include "Trigger.h"
+
+namespace orxonox {
+    
+    /**
+    @brief
+        A PlayerTrigger is a trigger which is normally triggered by ControllableEntities and can as such return a pointer to the ControllableEntity which triggered it.
+    @author
+        Damian 'Mozork' Frick
+    */
+    class _OrxonoxExport PlayerTrigger : public Trigger
+    {
+	public:
+	    PlayerTrigger(BaseObject* creator);
+	    virtual ~PlayerTrigger();
+	    
+            virtual void XMLPort(Element& xmlelement, XMLPort::Mode mode); //!< Method for creating a PlayerTrigger object through XML.
+            
+            /**
+            @brief Returns the player that triggered the PlayerTrigger.
+            @return Returns a pointer to the ControllableEntity that triggered the PlayerTrigger.
+            */
+            inline ControllableEntity* getTriggeringPlayer(void) const
+                { return this->player_; }
+	    
+	    /**
+	    @brief Checks whether the PlayerTrigger normally returns a ControllableEntity.
+	    @return Returns true if the PlayerTrigger normally returns a ControllableEntity.
+	    */
+	    inline bool isForPlayer(void) const
+	       { return this->isForPlayer_; }
+            
+	protected:
+	    virtual bool isTriggered(TriggerMode mode) = 0;
+	    
+	    /**
+	    @brief Set the player that triggered the PlayerTrigger. This is normally done by classes inheriting vom PlayerTrigger.
+	    @param player A pointer to the ControllableEntity that triggered the PlayerTrigger.
+	    */
+	    inline void setTriggeringPlayer(ControllableEntity* player)
+	       { this->player_ = player; }
+
+            /**
+            @brief Set whether the PlayerTrigger normally is triggered by ControllableEntities.
+            @param isForPlayer Should be true when the PlayerTrigger schould be set to normally be triggered by ControllableEntities, false if not.
+            */
+	    inline void setForPlayer(bool isForPlayer)
+	       { this->isForPlayer_ = isForPlayer; }
+	    
+	private:
+	    ControllableEntity* player_; //!< The player that triggered the PlayerTrigger.
+	    bool isForPlayer_; //!< Is true when the PlayerTrigger schould be set to normally be triggered by ControllableEntities.
+	
+    };
+
+}
+
+#endif /* _PlayerTrigger_H__ */
