Index: code/branches/questsystem2/src/orxonox/objects/quest/AddQuest.cc
===================================================================
--- code/branches/questsystem2/src/orxonox/objects/quest/AddQuest.cc	(revision 2196)
+++ code/branches/questsystem2/src/orxonox/objects/quest/AddQuest.cc	(revision 2205)
@@ -41,5 +41,5 @@
 #include "util/Exception.h"
 
-#include "orxonox/objects/worldentities/ControllableEntity.h"
+#include "orxonox/objects/infos/PlayerInfo.h"
 #include "QuestManager.h"
 #include "Quest.h"
@@ -84,5 +84,5 @@
         Returns true if the QuestEffect was successfully invoked.
     */
-    bool AddQuest::invoke(ControllableEntity* player)
+    bool AddQuest::invoke(PlayerInfo* player)
     {
         if(player == NULL) //!< Null-pointers are badass.
@@ -106,4 +106,5 @@
         }
 
+	COUT(3) << "Quest {" << this->getQuestId() << "} successfully added to player." << std::endl;
         return true;
     }
Index: code/branches/questsystem2/src/orxonox/objects/quest/AddQuest.h
===================================================================
--- code/branches/questsystem2/src/orxonox/objects/quest/AddQuest.h	(revision 2196)
+++ code/branches/questsystem2/src/orxonox/objects/quest/AddQuest.h	(revision 2205)
@@ -59,5 +59,5 @@
             virtual void XMLPort(Element& xmlelement, XMLPort::Mode mode); //!< Method for creating a AddQuest object through XML.
 
-            virtual bool invoke(ControllableEntity* player); //!< Invokes the QuestEffect.
+            virtual bool invoke(PlayerInfo* player); //!< Invokes the QuestEffect.
 
     };
Index: code/branches/questsystem2/src/orxonox/objects/quest/AddQuestHint.cc
===================================================================
--- code/branches/questsystem2/src/orxonox/objects/quest/AddQuestHint.cc	(revision 2196)
+++ code/branches/questsystem2/src/orxonox/objects/quest/AddQuestHint.cc	(revision 2205)
@@ -39,5 +39,5 @@
 #include "util/Exception.h"
 
-#include "orxonox/objects/worldentities/ControllableEntity.h"
+#include "orxonox/objects/infos/PlayerInfo.h"
 #include "QuestManager.h"
 #include "QuestItem.h"
@@ -105,5 +105,5 @@
         Returns true if the QuestEffect was successfully invoked.
     */
-    bool AddQuestHint::invoke(ControllableEntity* player)
+    bool AddQuestHint::invoke(PlayerInfo* player)
     {
         if(player == NULL) //!< NULL-pointers are evil!
Index: code/branches/questsystem2/src/orxonox/objects/quest/AddQuestHint.h
===================================================================
--- code/branches/questsystem2/src/orxonox/objects/quest/AddQuestHint.h	(revision 2196)
+++ code/branches/questsystem2/src/orxonox/objects/quest/AddQuestHint.h	(revision 2205)
@@ -58,5 +58,5 @@
             virtual void XMLPort(Element& xmlelement, XMLPort::Mode mode); //!< Method for creating a AddQuestHint object through XML.
 
-            virtual bool invoke(ControllableEntity* player); //!< Invokes the QuestEffect.
+            virtual bool invoke(PlayerInfo* player); //!< Invokes the QuestEffect.
 
         private:
Index: code/branches/questsystem2/src/orxonox/objects/quest/AddReward.cc
===================================================================
--- code/branches/questsystem2/src/orxonox/objects/quest/AddReward.cc	(revision 2196)
+++ code/branches/questsystem2/src/orxonox/objects/quest/AddReward.cc	(revision 2205)
@@ -38,5 +38,5 @@
 #include "core/CoreIncludes.h"
 
-#include "orxonox/objects/worldentities/ControllableEntity.h"
+#include "orxonox/objects/infos/PlayerInfo.h"
 #include "Rewardable.h"
 
@@ -103,5 +103,5 @@
         Returns true if the QuestEffect was invoked successfully.
     */
-    bool AddReward::invoke(ControllableEntity* player)
+    bool AddReward::invoke(PlayerInfo* player)
     {
         bool check = true;
Index: code/branches/questsystem2/src/orxonox/objects/quest/AddReward.h
===================================================================
--- code/branches/questsystem2/src/orxonox/objects/quest/AddReward.h	(revision 2196)
+++ code/branches/questsystem2/src/orxonox/objects/quest/AddReward.h	(revision 2205)
@@ -59,5 +59,5 @@
             virtual void XMLPort(Element& xmlelement, XMLPort::Mode mode); //!< Method for creating a AddReward object through XML.
 
-            virtual bool invoke(ControllableEntity* player); //!< Invokes the QuestEffect.
+            virtual bool invoke(PlayerInfo* player); //!< Invokes the QuestEffect.
 
         private:
Index: code/branches/questsystem2/src/orxonox/objects/quest/ChangeQuestStatus.h
===================================================================
--- code/branches/questsystem2/src/orxonox/objects/quest/ChangeQuestStatus.h	(revision 2196)
+++ code/branches/questsystem2/src/orxonox/objects/quest/ChangeQuestStatus.h	(revision 2205)
@@ -59,5 +59,5 @@
             virtual void XMLPort(Element& xmlelement, XMLPort::Mode mode); //!< Method for creating a ChangeQuestStatus object through XML.
 
-            virtual bool invoke(ControllableEntity* player) = 0; //!< Invokes the QuestEffect.
+            virtual bool invoke(PlayerInfo* player) = 0; //!< Invokes the QuestEffect.
 
         protected:
Index: code/branches/questsystem2/src/orxonox/objects/quest/CompleteQuest.cc
===================================================================
--- code/branches/questsystem2/src/orxonox/objects/quest/CompleteQuest.cc	(revision 2196)
+++ code/branches/questsystem2/src/orxonox/objects/quest/CompleteQuest.cc	(revision 2205)
@@ -39,5 +39,5 @@
 #include "util/Exception.h"
 
-#include "orxonox/objects/worldentities/ControllableEntity.h"
+#include "orxonox/objects/infos/PlayerInfo.h"
 #include "QuestManager.h"
 #include "Quest.h"
@@ -81,5 +81,5 @@
         Returns true if the QuestEffect was invoked successfully.
     */
-    bool CompleteQuest::invoke(ControllableEntity* player)
+    bool CompleteQuest::invoke(PlayerInfo* player)
     {
         if(player == NULL) //!< You know, what we think of NULL-pointers...
Index: code/branches/questsystem2/src/orxonox/objects/quest/CompleteQuest.h
===================================================================
--- code/branches/questsystem2/src/orxonox/objects/quest/CompleteQuest.h	(revision 2196)
+++ code/branches/questsystem2/src/orxonox/objects/quest/CompleteQuest.h	(revision 2205)
@@ -59,5 +59,5 @@
             virtual void XMLPort(Element& xmlelement, XMLPort::Mode mode); //!< Method for creating a CompleteQuest object through XML.
 
-            virtual bool invoke(ControllableEntity* player); //!< Invokes the QuestEffect.
+            virtual bool invoke(PlayerInfo* player); //!< Invokes the QuestEffect.
 
     };
Index: code/branches/questsystem2/src/orxonox/objects/quest/FailQuest.cc
===================================================================
--- code/branches/questsystem2/src/orxonox/objects/quest/FailQuest.cc	(revision 2196)
+++ code/branches/questsystem2/src/orxonox/objects/quest/FailQuest.cc	(revision 2205)
@@ -39,5 +39,5 @@
 #include "util/Exception.h"
 
-#include "orxonox/objects/worldentities/ControllableEntity.h"
+#include "orxonox/objects/infos/PlayerInfo.h"
 #include "QuestManager.h"
 #include "Quest.h"
@@ -81,5 +81,5 @@
         Returns true if the QuestEffect was invoked successfully.
     */
-    bool FailQuest::invoke(ControllableEntity* player)
+    bool FailQuest::invoke(PlayerInfo* player)
     {
         if(player == NULL) //!< We don't know what to do with no player.
Index: code/branches/questsystem2/src/orxonox/objects/quest/FailQuest.h
===================================================================
--- code/branches/questsystem2/src/orxonox/objects/quest/FailQuest.h	(revision 2196)
+++ code/branches/questsystem2/src/orxonox/objects/quest/FailQuest.h	(revision 2205)
@@ -59,5 +59,5 @@
             virtual void XMLPort(Element& xmlelement, XMLPort::Mode mode); //!< Method for creating a FailQuest object through XML.
 
-            virtual bool invoke(ControllableEntity* player); //!< Invokes the QuestEffect.
+            virtual bool invoke(PlayerInfo* player); //!< Invokes the QuestEffect.
 
     };
Index: code/branches/questsystem2/src/orxonox/objects/quest/GlobalQuest.cc
===================================================================
--- code/branches/questsystem2/src/orxonox/objects/quest/GlobalQuest.cc	(revision 2196)
+++ code/branches/questsystem2/src/orxonox/objects/quest/GlobalQuest.cc	(revision 2205)
@@ -36,5 +36,5 @@
 #include "GlobalQuest.h"
 
-#include "orxonox/objects/worldentities/ControllableEntity.h"
+#include "orxonox/objects/infos/PlayerInfo.h"
 #include "core/CoreIncludes.h"
 #include "util/Exception.h"
@@ -86,5 +86,5 @@
         Returns true if the Quest could be failed, false if not.
     */
-    bool GlobalQuest::fail(ControllableEntity* player)
+    bool GlobalQuest::fail(PlayerInfo* player)
     {
         if(this->isFailable(player)) //!< Check whether the Quest can be failed.
@@ -93,5 +93,5 @@
             
             //! Iterate through all players possessing this Quest.
-            for(std::set<ControllableEntity*>::const_iterator it = players_.begin(); it != players_.end(); it++)
+            for(std::set<PlayerInfo*>::const_iterator it = players_.begin(); it != players_.end(); it++)
             {
                 QuestEffect::invokeEffects(*it, this->getFailEffectList());
@@ -115,5 +115,5 @@
         Returns true if the Quest could be completed, false if not.
     */
-    bool GlobalQuest::complete(ControllableEntity* player)
+    bool GlobalQuest::complete(PlayerInfo* player)
     {
         if(this->isCompletable(player)) //!< Check whether the Quest can be completed.
@@ -122,5 +122,5 @@
             
             //! Iterate through all players possessing the Quest.
-            for(std::set<ControllableEntity*>::const_iterator it = players_.begin(); it != players_.end(); it++)
+            for(std::set<PlayerInfo*>::const_iterator it = players_.begin(); it != players_.end(); it++)
             {
                 QuestEffect::invokeEffects(*it, this->getCompleteEffectList());
@@ -145,5 +145,5 @@
         Throws an exception if either isInactive() of isActive() throws one.
     */
-    bool GlobalQuest::isStartable(const ControllableEntity* player) const
+    bool GlobalQuest::isStartable(const PlayerInfo* player) const
     {
         return this->isInactive(player) ||  this->isActive(player);
@@ -160,5 +160,5 @@
         Throws an Exception if isActive() throws one.
     */
-    bool GlobalQuest::isFailable(const ControllableEntity* player) const
+    bool GlobalQuest::isFailable(const PlayerInfo* player) const
     {
         return this->isActive(player);
@@ -176,5 +176,5 @@
         Throws an Exception if isActive() throws one.
     */
-    bool GlobalQuest::isCompletable(const ControllableEntity* player) const
+    bool GlobalQuest::isCompletable(const PlayerInfo* player) const
     {
         return this->isActive(player);
@@ -189,13 +189,13 @@
         Throws an Exception if player is NULL.
     */
-    questStatus::Enum GlobalQuest::getStatus(const ControllableEntity* player) const
+    questStatus::Enum GlobalQuest::getStatus(const PlayerInfo* player) const
     {
         if(player == NULL) //!< We don't want NULL-Pointers!
         {
-            ThrowException(Argument, "The input ControllableEntity* is NULL.");
+            ThrowException(Argument, "The input PlayerInfo* is NULL.");
         }
 
         //! Find the player.
-        std::set<ControllableEntity*>::const_iterator it = this->players_.find((ControllableEntity*)(void*)player);
+        std::set<PlayerInfo*>::const_iterator it = this->players_.find((PlayerInfo*)(void*)player);
         if (it != this->players_.end()) //!< If the player was found.
         {
@@ -217,5 +217,5 @@
         Returns false if player is NULL.
     */
-    bool GlobalQuest::setStatus(ControllableEntity* player, const questStatus::Enum & status)
+    bool GlobalQuest::setStatus(PlayerInfo* player, const questStatus::Enum & status)
     {
         if(player == NULL) //!< We don't want NULL-Pointers!
@@ -225,5 +225,5 @@
 
         //! Find the player.
-        std::set<ControllableEntity*>::const_iterator it = this->players_.find(player);
+        std::set<PlayerInfo*>::const_iterator it = this->players_.find(player);
         if (it == this->players_.end()) //!< Player is not yet in the list.
         {
Index: code/branches/questsystem2/src/orxonox/objects/quest/GlobalQuest.h
===================================================================
--- code/branches/questsystem2/src/orxonox/objects/quest/GlobalQuest.h	(revision 2196)
+++ code/branches/questsystem2/src/orxonox/objects/quest/GlobalQuest.h	(revision 2205)
@@ -92,17 +92,17 @@
             virtual void XMLPort(Element& xmlelement, XMLPort::Mode mode); //!< Method for creating a GlobalQuest object through XML.
             
-            virtual bool fail(ControllableEntity* player); //!< Fails the Quest.
-            virtual bool complete(ControllableEntity* player); //!< Completes the Quest.
+            virtual bool fail(PlayerInfo* player); //!< Fails the Quest.
+            virtual bool complete(PlayerInfo* player); //!< Completes the Quest.
 
         protected:
-            virtual bool isStartable(const ControllableEntity* player) const; //!< Checks whether the Quest can be started.
-            virtual bool isFailable(const ControllableEntity* player) const; //!< Checks whether the Quest can be failed.
-            virtual bool isCompletable(const ControllableEntity* player) const; //!< Checks whether the Quest can be completed.
+            virtual bool isStartable(const PlayerInfo* player) const; //!< Checks whether the Quest can be started.
+            virtual bool isFailable(const PlayerInfo* player) const; //!< Checks whether the Quest can be failed.
+            virtual bool isCompletable(const PlayerInfo* player) const; //!< Checks whether the Quest can be completed.
 
-            virtual questStatus::Enum getStatus(const ControllableEntity* player) const; //!< Returns the status of the Quest for a specific player.
-            virtual bool setStatus(ControllableEntity* player, const questStatus::Enum & status); //!< Sets the status for a specific player.
+            virtual questStatus::Enum getStatus(const PlayerInfo* player) const; //!< Returns the status of the Quest for a specific player.
+            virtual bool setStatus(PlayerInfo* player, const questStatus::Enum & status); //!< Sets the status for a specific player.
 
         private:
-            std::set<ControllableEntity*> players_; //!< The set of players which possess this Quest.
+            std::set<PlayerInfo*> players_; //!< The set of players which possess this Quest.
             questStatus::Enum status_; //!< The status of this Quest.
             std::list<QuestEffect*> rewards_; //!< Reward QuestEffects only invoked on the player completing the Quest.
Index: code/branches/questsystem2/src/orxonox/objects/quest/LocalQuest.cc
===================================================================
--- code/branches/questsystem2/src/orxonox/objects/quest/LocalQuest.cc	(revision 2196)
+++ code/branches/questsystem2/src/orxonox/objects/quest/LocalQuest.cc	(revision 2205)
@@ -39,5 +39,5 @@
 #include "util/Exception.h"
 
-#include "orxonox/objects/worldentities/ControllableEntity.h"
+#include "orxonox/objects/infos/PlayerInfo.h"
 #include "QuestEffect.h"
 
@@ -84,5 +84,5 @@
         Returns true if the Quest could be failed, false if not.
     */
-    bool LocalQuest::fail(ControllableEntity* player)
+    bool LocalQuest::fail(PlayerInfo* player)
     {
         if(this->isFailable(player)) //!< Checks whether the quest can be failed.
@@ -106,5 +106,5 @@
         Returns true if the Quest could be completed, false if not.
     */
-    bool LocalQuest::complete(ControllableEntity* player)
+    bool LocalQuest::complete(PlayerInfo* player)
     {
         if(this->isCompletable(player)) //!< Checks whether the Quest can be completed.
@@ -127,7 +127,7 @@
         Returns true if the Quest can be started, false if not.
     @throws
-        Throws an exception if isInactive(ControllableEntity*) throws one.
-    */
-    bool LocalQuest::isStartable(const ControllableEntity* player) const
+        Throws an exception if isInactive(PlayerInfo*) throws one.
+    */
+    bool LocalQuest::isStartable(const PlayerInfo* player) const
     {
         return this->isInactive(player);
@@ -142,7 +142,7 @@
         Returns true if the Quest can be failed, false if not.
     @throws
-        Throws an exception if isActive(ControllableEntity*) throws one.
-    */
-    bool LocalQuest::isFailable(const ControllableEntity* player) const
+        Throws an exception if isActive(PlayerInfo*) throws one.
+    */
+    bool LocalQuest::isFailable(const PlayerInfo* player) const
     {
         return this->isActive(player);
@@ -157,7 +157,7 @@
         Returns true if the Quest can be completed, false if not.
     @throws
-        Throws an exception if isInactive(ControllableEntity*) throws one.
-    */
-    bool LocalQuest::isCompletable(const ControllableEntity* player) const
+        Throws an exception if isInactive(PlayerInfo*) throws one.
+    */
+    bool LocalQuest::isCompletable(const PlayerInfo* player) const
     {
         return this->isActive(player);
@@ -174,12 +174,12 @@
         Throws an Exception if player is NULL.
     */
-    questStatus::Enum LocalQuest::getStatus(const ControllableEntity* player) const
+    questStatus::Enum LocalQuest::getStatus(const PlayerInfo* player) const
     {
         if(player == NULL) //!< No player has no defined status.
         {
-            ThrowException(Argument, "The input ControllableEntity* is NULL.");
-        }
-
-        std::map<ControllableEntity*, questStatus::Enum>::const_iterator it = this->playerStatus_.find((ControllableEntity*)(void*)player); //Thx. to x3n for the (ControllableEntity*)(void*) 'hack'.
+            ThrowException(Argument, "The input PlayerInfo* is NULL.");
+        }
+
+        std::map<const PlayerInfo*, questStatus::Enum>::const_iterator it = this->playerStatus_.find(player);
         if (it != this->playerStatus_.end()) //!< If there is a player in the map.
         {
@@ -201,5 +201,5 @@
         Returns false if player is NULL.
     */
-    bool LocalQuest::setStatus(ControllableEntity* player, const questStatus::Enum & status)
+    bool LocalQuest::setStatus(PlayerInfo* player, const questStatus::Enum & status)
     {
         if(player == NULL) //!< We can't set a status for no player.
Index: code/branches/questsystem2/src/orxonox/objects/quest/LocalQuest.h
===================================================================
--- code/branches/questsystem2/src/orxonox/objects/quest/LocalQuest.h	(revision 2196)
+++ code/branches/questsystem2/src/orxonox/objects/quest/LocalQuest.h	(revision 2205)
@@ -87,17 +87,17 @@
             virtual void XMLPort(Element& xmlelement, XMLPort::Mode mode); //!< Method for creating a LocalQuest object through XML.
             
-            virtual bool fail(ControllableEntity* player); //!< Fails the Quest.
-            virtual bool complete(ControllableEntity* player); //!< Completes the Quest.
+            virtual bool fail(PlayerInfo* player); //!< Fails the Quest.
+            virtual bool complete(PlayerInfo* player); //!< Completes the Quest.
 
         protected:
-            virtual bool isStartable(const ControllableEntity* player) const; //!< Checks whether the Quest can be started.
-            virtual bool isFailable(const ControllableEntity* player) const; //!< Checks whether the Quest can be failed.
-            virtual bool isCompletable(const ControllableEntity* player) const; //!< Checks whether the Quest can be completed.
+            virtual bool isStartable(const PlayerInfo* player) const; //!< Checks whether the Quest can be started.
+            virtual bool isFailable(const PlayerInfo* player) const; //!< Checks whether the Quest can be failed.
+            virtual bool isCompletable(const PlayerInfo* player) const; //!< Checks whether the Quest can be completed.
 
-            virtual questStatus::Enum getStatus(const ControllableEntity* player) const; //!< Returns the status of the Quest for a specific player.
-            virtual bool setStatus(ControllableEntity* player, const questStatus::Enum & status); //!< Sets the status for a specific player.
+            virtual questStatus::Enum getStatus(const PlayerInfo* player) const; //!< Returns the status of the Quest for a specific player.
+            virtual bool setStatus(PlayerInfo* player, const questStatus::Enum & status); //!< Sets the status for a specific player.
 
         private:
-            std::map<ControllableEntity*, questStatus::Enum> playerStatus_; //!< List of the status for each player, with the Player-pointer as key.
+            std::map<const PlayerInfo*, questStatus::Enum> playerStatus_; //!< List of the status for each player, with the Player-pointer as key.
 
     };
Index: code/branches/questsystem2/src/orxonox/objects/quest/Quest.cc
===================================================================
--- code/branches/questsystem2/src/orxonox/objects/quest/Quest.cc	(revision 2196)
+++ code/branches/questsystem2/src/orxonox/objects/quest/Quest.cc	(revision 2205)
@@ -38,5 +38,5 @@
 #include "core/CoreIncludes.h"
 
-#include "orxonox/objects/worldentities/ControllableEntity.h"
+#include "orxonox/objects/infos/PlayerInfo.h"
 #include "QuestManager.h"
 #include "QuestDescription.h"
@@ -313,5 +313,5 @@
         Throws an exception if getStatus throws one.
     */
-    bool Quest::isInactive(const ControllableEntity* player) const
+    bool Quest::isInactive(const PlayerInfo* player) const
     {
         return this->getStatus(player) == questStatus::inactive;
@@ -328,5 +328,5 @@
         Throws an exception if getStatus throws one.
     */
-    bool Quest::isActive(const ControllableEntity* player) const
+    bool Quest::isActive(const PlayerInfo* player) const
     {
 
@@ -344,5 +344,5 @@
         Throws an exception if getStatus throws one.
     */
-    bool Quest::isFailed(const ControllableEntity* player) const
+    bool Quest::isFailed(const PlayerInfo* player) const
     {
         return this->getStatus(player) == questStatus::failed;
@@ -359,5 +359,5 @@
         Throws an exception if getStatus throws one.
     */
-    bool Quest::isCompleted(const ControllableEntity* player) const
+    bool Quest::isCompleted(const PlayerInfo* player) const
     {
         return this->getStatus(player) == questStatus::completed;
@@ -372,5 +372,5 @@
         Returns true if the Quest could be started, false if not.
     */
-    bool Quest::start(ControllableEntity* player)
+    bool Quest::start(PlayerInfo* player)
     {
         if(this->isStartable(player)) //!< Checks whether the quest can be started.
Index: code/branches/questsystem2/src/orxonox/objects/quest/Quest.h
===================================================================
--- code/branches/questsystem2/src/orxonox/objects/quest/Quest.h	(revision 2196)
+++ code/branches/questsystem2/src/orxonox/objects/quest/Quest.h	(revision 2205)
@@ -44,6 +44,6 @@
 
 #include "core/XMLPort.h"
+
 #include "QuestItem.h"
-
 
 namespace questStatus
@@ -104,17 +104,17 @@
                 { return this->hints_; }
 
-            bool isInactive(const ControllableEntity* player) const; //!< Returns true if the quest status for the specific player is 'inactive'.
-            bool isActive(const ControllableEntity* player) const; //!< Returns true if the quest status for the specific player is 'active'.
-            bool isFailed(const ControllableEntity* player) const; //!< Returns true if the quest status for the specific player is 'failed'.
-            bool isCompleted(const ControllableEntity* player) const; //!< Returns true if the quest status for the specific player is 'completed'.
+            bool isInactive(const PlayerInfo* player) const; //!< Returns true if the quest status for the specific player is 'inactive'.
+            bool isActive(const PlayerInfo* player) const; //!< Returns true if the quest status for the specific player is 'active'.
+            bool isFailed(const PlayerInfo* player) const; //!< Returns true if the quest status for the specific player is 'failed'.
+            bool isCompleted(const PlayerInfo* player) const; //!< Returns true if the quest status for the specific player is 'completed'.
 
-            bool start(ControllableEntity* player); //!< Sets a Quest to active.
-	    virtual bool fail(ControllableEntity* player) = 0; //!< Fails the Quest.
-            virtual bool complete(ControllableEntity* player) = 0; //!< Completes the Quest.
+            bool start(PlayerInfo* player); //!< Sets a Quest to active.
+	    virtual bool fail(PlayerInfo* player) = 0; //!< Fails the Quest.
+            virtual bool complete(PlayerInfo* player) = 0; //!< Completes the Quest.
 
         protected:
-            virtual bool isStartable(const ControllableEntity* player) const = 0; //!< Checks whether the Quest can be started.
-            virtual bool isFailable(const ControllableEntity* player) const = 0; //!< Checks whether the Quest can be failed.
-            virtual bool isCompletable(const ControllableEntity* player) const = 0; //!< Checks whether the Quest can be completed.
+            virtual bool isStartable(const PlayerInfo* player) const = 0; //!< Checks whether the Quest can be started.
+            virtual bool isFailable(const PlayerInfo* player) const = 0; //!< Checks whether the Quest can be failed.
+            virtual bool isCompletable(const PlayerInfo* player) const = 0; //!< Checks whether the Quest can be completed.
 
             const Quest* getParentQuest(void); //!< Returns the parentquest of the Quest.
@@ -138,6 +138,6 @@
                 { return this->completeEffects_; }
 
-            virtual questStatus::Enum getStatus(const ControllableEntity* player) const = 0; //!< Returns the status of the Quest for a specific player.
-            virtual bool setStatus(ControllableEntity* player, const questStatus::Enum & status) = 0; //!< Changes the status for a specific player.
+            virtual questStatus::Enum getStatus(const PlayerInfo* player) const = 0; //!< Returns the status of the Quest for a specific player.
+            virtual bool setStatus(PlayerInfo* player, const questStatus::Enum & status) = 0; //!< Changes the status for a specific player.
             
 	private:
Index: code/branches/questsystem2/src/orxonox/objects/quest/QuestDescription.cc
===================================================================
--- code/branches/questsystem2/src/orxonox/objects/quest/QuestDescription.cc	(revision 2196)
+++ code/branches/questsystem2/src/orxonox/objects/quest/QuestDescription.cc	(revision 2205)
@@ -34,4 +34,5 @@
 
 #include "OrxonoxStableHeaders.h"
+
 #include "QuestDescription.h"
 
Index: code/branches/questsystem2/src/orxonox/objects/quest/QuestEffect.cc
===================================================================
--- code/branches/questsystem2/src/orxonox/objects/quest/QuestEffect.cc	(revision 2196)
+++ code/branches/questsystem2/src/orxonox/objects/quest/QuestEffect.cc	(revision 2205)
@@ -38,5 +38,5 @@
 #include "core/CoreIncludes.h"
 
-#include "orxonox/objects/worldentities/ControllableEntity.h"
+#include "orxonox/objects/infos/PlayerInfo.h"
 
 namespace orxonox {
@@ -71,5 +71,5 @@
         Returns false if there was an error, view console of log for further detail.
     */
-    bool QuestEffect::invokeEffects(ControllableEntity* player, std::list<QuestEffect*> & effects)
+    bool QuestEffect::invokeEffects(PlayerInfo* player, std::list<QuestEffect*> & effects)
     {
         bool check = true;
Index: code/branches/questsystem2/src/orxonox/objects/quest/QuestEffect.h
===================================================================
--- code/branches/questsystem2/src/orxonox/objects/quest/QuestEffect.h	(revision 2196)
+++ code/branches/questsystem2/src/orxonox/objects/quest/QuestEffect.h	(revision 2205)
@@ -57,6 +57,6 @@
             virtual ~QuestEffect();
 
-            virtual bool invoke(ControllableEntity* player) = 0; //!< Invokes the QuestEffect.
-            static bool invokeEffects(ControllableEntity* player, std::list<QuestEffect*> & effects); //!< Invokes all QuestEffects in the list.
+            virtual bool invoke(PlayerInfo* player) = 0; //!< Invokes the QuestEffect.
+            static bool invokeEffects(PlayerInfo* player, std::list<QuestEffect*> & effects); //!< Invokes all QuestEffects in the list.
 
 
Index: code/branches/questsystem2/src/orxonox/objects/quest/QuestEffectBeacon.cc
===================================================================
--- code/branches/questsystem2/src/orxonox/objects/quest/QuestEffectBeacon.cc	(revision 2196)
+++ code/branches/questsystem2/src/orxonox/objects/quest/QuestEffectBeacon.cc	(revision 2205)
@@ -35,4 +35,5 @@
 #include "core/EventIncludes.h"
 
+#include "orxonox/objects/infos/PlayerInfo.h"
 #include "orxonox/objects/worldentities/ControllableEntity.h"
 #include "orxonox/objects/worldentities/triggers/PlayerTrigger.h"
@@ -50,5 +51,4 @@
         this->times_ = -1;
         this->trigger_ = NULL;
-        this->player_ = NULL;
     }
 
@@ -69,21 +69,20 @@
     {
 	SetSubclassEvent(QuestEffectBeacon, "execute", execute, event, PlayerTrigger);
-	
-	this->player_ = dynamic_cast<ControllableEntity*>(event.originator_);
     }
     
-    bool QuestEffectBeacon::execute(void)
+    bool QuestEffectBeacon::execute(bool b, ControllableEntity* entity)
     {
-        
-        if(!(this->isActive()))
+        if(!b || !(this->isActive()))
         {
             return false;
         }
-        if(this->player_ == NULL)
+        if(entity == NULL)
         {
             return false;
         }
         
-        bool check = QuestEffect::invokeEffects(this->player_, this->effects_);
+        PlayerInfo* player = entity->getPlayer();
+        
+        bool check = QuestEffect::invokeEffects(player, this->effects_);
         if(check)
         {
Index: code/branches/questsystem2/src/orxonox/objects/quest/QuestEffectBeacon.h
===================================================================
--- code/branches/questsystem2/src/orxonox/objects/quest/QuestEffectBeacon.h	(revision 2196)
+++ code/branches/questsystem2/src/orxonox/objects/quest/QuestEffectBeacon.h	(revision 2205)
@@ -63,5 +63,5 @@
 	    virtual void processEvent(Event& event);
 	    
-	    bool execute(void);
+	    bool execute(bool b, ControllableEntity* player);
 	    
 	    bool isActive(void);
@@ -78,5 +78,4 @@
             QuestEffectBeaconStatus::Enum status_;
             PlayerTrigger* trigger_;
-            ControllableEntity* player_;
             
             bool setTimes(const int & n);
Index: code/branches/questsystem2/src/orxonox/objects/quest/QuestHint.cc
===================================================================
--- code/branches/questsystem2/src/orxonox/objects/quest/QuestHint.cc	(revision 2196)
+++ code/branches/questsystem2/src/orxonox/objects/quest/QuestHint.cc	(revision 2205)
@@ -39,5 +39,5 @@
 #include "util/Exception.h"
 
-#include "orxonox/objects/worldentities/ControllableEntity.h"
+#include "orxonox/objects/infos/PlayerInfo.h"
 #include "Quest.h"
 
@@ -86,14 +86,14 @@
         Returns true if the QuestHint is active for the specified player.
     */
-    bool QuestHint::isActive(ControllableEntity* player)
+    bool QuestHint::isActive(const PlayerInfo* player) const
     {
         if(player == NULL) //!< NULL-Pointers are ugly!
         {
-            ThrowException(Argument, "The input ControllableEntity* is NULL.");
+            ThrowException(Argument, "The input PlayerInfo* is NULL.");
             return false;
         }
 
         //! Find the player.
-        std::map<ControllableEntity*, questHintStatus::Enum>::iterator it = this->playerStatus_.find(player);
+        std::map<const PlayerInfo*, questHintStatus::Enum>::const_iterator it = this->playerStatus_.find(player);
         if (it != this->playerStatus_.end()) //!< If the player is in the map.
         {
@@ -112,5 +112,5 @@
         Returns true if the activation was successful, false if there were problems.
     */
-    bool QuestHint::setActive(ControllableEntity* player)
+    bool QuestHint::setActive(PlayerInfo* player)
     {
         if(this->quest_->isActive(player)) //!< For a hint to get activated the quest must be active.
Index: code/branches/questsystem2/src/orxonox/objects/quest/QuestHint.h
===================================================================
--- code/branches/questsystem2/src/orxonox/objects/quest/QuestHint.h	(revision 2196)
+++ code/branches/questsystem2/src/orxonox/objects/quest/QuestHint.h	(revision 2205)
@@ -82,7 +82,7 @@
             virtual void XMLPort(Element& xmlelement, XMLPort::Mode mode); //!< Method for creating a QuestHint object through XML.
 
-            bool isActive(ControllableEntity* player); //!< Returns true if the QuestHint is active for the input player.
+            bool isActive(const PlayerInfo* player) const; //!< Returns true if the QuestHint is active for the input player.
 
-            bool setActive(ControllableEntity* player); //!< Activates the QuestHint for the input player.
+            bool setActive(PlayerInfo* player); //!< Activates the QuestHint for the input player.
             bool setQuest(Quest* quest); //!< Sets the Quest the QuestHint belongs to.
 
@@ -96,5 +96,5 @@
         private:
             Quest* quest_; //!< The Quest the QuestHint belongs to.
-            std::map<ControllableEntity*, questHintStatus::Enum> playerStatus_; //!< List of the status for each player, with the Player-pointer as key.
+            std::map<const PlayerInfo*, questHintStatus::Enum> playerStatus_; //!< List of the status for each player, with the Player-pointer as key.
 
     };
Index: code/branches/questsystem2/src/orxonox/objects/quest/Rewardable.h
===================================================================
--- code/branches/questsystem2/src/orxonox/objects/quest/Rewardable.h	(revision 2196)
+++ code/branches/questsystem2/src/orxonox/objects/quest/Rewardable.h	(revision 2205)
@@ -66,5 +66,5 @@
                 Return true if successful.
             */
-            virtual bool reward(ControllableEntity* player) = 0; //!<
+            virtual bool reward(PlayerInfo* player) = 0; //!<
 
     };
