Index: /code/branches/presentation/src/modules/docking/Dock.cc
===================================================================
--- /code/branches/presentation/src/modules/docking/Dock.cc	(revision 8666)
+++ /code/branches/presentation/src/modules/docking/Dock.cc	(revision 8667)
@@ -84,5 +84,5 @@
     {
         PlayerTrigger* pTrigger = orxonox_cast<PlayerTrigger*>(trigger);
-        Pawn* pawn = NULL;
+        PlayerInfo* player = NULL;
 
         // Check whether it is a player trigger and extract pawn from it
@@ -93,5 +93,5 @@
                 return false;
             }
-            pawn = pTrigger->getTriggeringPlayer();
+            player = pTrigger->getTriggeringPlayer();
         }
         else
@@ -100,15 +100,7 @@
             return false;
         }
-        if(pawn == NULL)
-        {
-            COUT(4) << "Docking::execute Can't retrieve Pawn from Trigger. (" << trigger->getIdentifier()->getName() << ")" << std::endl;
-            return false;
-        }
-
-        // Extract the PlayerInfo from the Pawn.
-        PlayerInfo* player = pawn->getPlayer();
         if(player == NULL)
         {
-            COUT(2) << "Docking::execute The PlayerInfo* is NULL." << std::endl;
+            COUT(4) << "Docking::execute Can't retrieve PlayerInfo from Trigger. (" << trigger->getIdentifier()->getName() << ")" << std::endl;
             return false;
         }
Index: /code/branches/presentation/src/modules/notifications/NotificationDispatcher.cc
===================================================================
--- /code/branches/presentation/src/modules/notifications/NotificationDispatcher.cc	(revision 8666)
+++ /code/branches/presentation/src/modules/notifications/NotificationDispatcher.cc	(revision 8667)
@@ -140,5 +140,5 @@
 
         PlayerTrigger* pTrigger = orxonox_cast<PlayerTrigger*>(trigger);
-        Pawn* pawn = NULL;
+        PlayerInfo* player = NULL;
 
         // If the trigger is a PlayerTrigger.
@@ -148,10 +148,10 @@
                 return false;
             else
-                pawn = pTrigger->getTriggeringPlayer();
+                player = pTrigger->getTriggeringPlayer();
         }
         else
             return false;
 
-        if(pawn == NULL)
+        if(player == NULL)
         {
             COUT(4) << "The NotificationDispatcher was triggered by an entity other than a Pawn. (" << trigger->getIdentifier()->getName() << ")" << std::endl;
@@ -159,18 +159,5 @@
         }
 
-        // Extract the PlayerInfo from the Pawn.
-        PlayerInfo* player = pawn->getPlayer();
-
-        if(player == NULL)
-        {
-            CCOUT(3) << "The PlayerInfo* is NULL." << std::endl;
-            return false;
-        }
-
-        // HACK fix. Resolve this issue another way...
-        if(GameMode::isStandalone())
-            this->dispatch(0);
-        else
-            this->dispatch(player->getClientID());
+        this->dispatch(player->getClientID());
 
         return true;
Index: /code/branches/presentation/src/modules/objects/Script.cc
===================================================================
--- /code/branches/presentation/src/modules/objects/Script.cc	(revision 8666)
+++ /code/branches/presentation/src/modules/objects/Script.cc	(revision 8667)
@@ -140,5 +140,5 @@
 
         PlayerTrigger* pTrigger = orxonox_cast<PlayerTrigger*>(trigger);
-        Pawn* pawn = NULL;
+        PlayerInfo* player = NULL;
 
         // If the trigger is a PlayerTrigger.
@@ -148,21 +148,12 @@
                 return false;
             else
-                pawn = pTrigger->getTriggeringPlayer();
+                player = pTrigger->getTriggeringPlayer();
         }
         else
             return false;
 
-        if(pawn == NULL)  //TODO: Will this ever happen? If not, change in NotificationDispatcher as well.
+        if(player == NULL)  //TODO: Will this ever happen? If not, change in NotificationDispatcher as well.
         {
             COUT(4) << "The Script was triggered by an entity other than a Pawn. (" << trigger->getIdentifier()->getName() << ")" << std::endl;
-            return false;
-        }
-
-        // Extract the PlayerInfo from the Pawn.
-        PlayerInfo* player = pawn->getPlayer();
-
-        if(player == NULL)
-        {
-            COUT(3) << "The PlayerInfo* is NULL." << std::endl;
             return false;
         }
Index: /code/branches/presentation/src/modules/objects/triggers/DistanceTrigger.cc
===================================================================
--- /code/branches/presentation/src/modules/objects/triggers/DistanceTrigger.cc	(revision 8666)
+++ /code/branches/presentation/src/modules/objects/triggers/DistanceTrigger.cc	(revision 8667)
@@ -205,6 +205,9 @@
                         entity = entity->getParent();
 
-                    Pawn* player = orxonox_cast<Pawn*>(entity);
-                    this->setTriggeringPlayer(player);
+                    Pawn* pawn = orxonox_cast<Pawn*>(entity);
+                    if(pawn != NULL)
+                        this->setTriggeringPawn(pawn);
+                    else
+                        CCOUT(2) << "Pawn was NULL." << endl;
                 }
                 
Index: /code/branches/presentation/src/modules/objects/triggers/MultiTriggerContainer.cc
===================================================================
--- /code/branches/presentation/src/modules/objects/triggers/MultiTriggerContainer.cc	(revision 8666)
+++ /code/branches/presentation/src/modules/objects/triggers/MultiTriggerContainer.cc	(revision 8667)
@@ -73,5 +73,5 @@
         {
             this->setForPlayer(true);
-            this->setTriggeringPlayer(pawn);
+            this->setTriggeringPawn(pawn);
         }
     }
Index: /code/branches/presentation/src/modules/questsystem/QuestEffectBeacon.cc
===================================================================
--- /code/branches/presentation/src/modules/questsystem/QuestEffectBeacon.cc	(revision 8666)
+++ /code/branches/presentation/src/modules/questsystem/QuestEffectBeacon.cc	(revision 8667)
@@ -113,5 +113,5 @@
 
         PlayerTrigger* pTrigger = orxonox_cast<PlayerTrigger*>(trigger);
-        Pawn* pawn = NULL;
+        PlayerInfo* player = NULL;
 
         // If the trigger is a PlayerTrigger.
@@ -121,21 +121,12 @@
                 return false;
             else
-                pawn = pTrigger->getTriggeringPlayer();
+                player = pTrigger->getTriggeringPlayer();
         }
         else
             return false;
 
-        if(pawn == NULL)
+        if(player == NULL)
         {
             COUT(4) << "The QuestEffectBeacon was triggered by an entity other than a Pawn. (" << trigger->getIdentifier()->getName() << ")" << std::endl;
-            return false;
-        }
-
-        // Extract the PlayerInfo from the Pawn.
-        PlayerInfo* player = pawn->getPlayer();
-
-        if(player == NULL)
-        {
-            COUT(3) << "The PlayerInfo* is NULL." << std::endl;
             return false;
         }
Index: /code/branches/presentation/src/orxonox/interfaces/InterfaceCompilation.cc
===================================================================
--- /code/branches/presentation/src/orxonox/interfaces/InterfaceCompilation.cc	(revision 8666)
+++ /code/branches/presentation/src/orxonox/interfaces/InterfaceCompilation.cc	(revision 8667)
@@ -59,5 +59,4 @@
         RegisterRootObject(PlayerTrigger);
 
-        this->player_ = NULL;
         this->isForPlayer_ = false;
     }
Index: /code/branches/presentation/src/orxonox/interfaces/PlayerTrigger.h
===================================================================
--- /code/branches/presentation/src/orxonox/interfaces/PlayerTrigger.h	(revision 8666)
+++ /code/branches/presentation/src/orxonox/interfaces/PlayerTrigger.h	(revision 8667)
@@ -40,9 +40,12 @@
 #include "core/OrxonoxClass.h"
 
+#include "infos/PlayerInfo.h"
+#include "worldentities/pawns/Pawn.h"
+
 namespace orxonox
 {
     /**
     @brief
-        PlayerTrigger is an interface if implemented by a specific trigger can be used to recover the Player (or more precisely the @ref orxonox::Pawn "Pawn") that triggered it.
+        PlayerTrigger is an interface if implemented by a specific trigger can be used to recover the Player (or the @ref orxonox::Pawn "Pawn") that triggered it.
 
     @author
@@ -58,13 +61,20 @@
 
         /**
-        @brief Returns the player that triggered the PlayerTrigger.
+        @brief Returns the Pawn that triggered the PlayerTrigger.
         @return Returns a pointer to the Pawn that triggered the PlayerTrigger.
         */
-        inline Pawn* getTriggeringPlayer(void) const
+        inline Pawn* getTriggeringPawn(void) const
+            { return this->pawn_.get(); }
+
+        /**
+        @brief Returns the player that triggered the PlayerTrigger.
+        @return Returns a pointer to the PlayerInfo that triggered the PlayerTrigger.
+        */
+        inline PlayerInfo* getTriggeringPlayer(void) const
             { return this->player_; }
 
         /**
-        @brief Checks whether the PlayerTrigger normally returns a Pawn.
-        @return Returns true if the PlayerTrigger normally returns a Pawn.
+        @brief Checks whether the PlayerTrigger normally returns a Pawn/PlayerInfo.
+        @return Returns true if the PlayerTrigger normally returns a Pawn/PlayerInfo.
         */
         inline bool isForPlayer(void) const
@@ -76,6 +86,6 @@
         @param player A pointer to the Pawn that triggered the PlayerTrigger.
         */
-        inline void setTriggeringPlayer(Pawn* player)
-           { this->player_ = player; }
+        inline void setTriggeringPawn(Pawn* pawn)
+           { assert(pawn); this->player_ = WeakPtr<PlayerInfo>(pawn->getPlayer()); this->pawn_ = WeakPtr<Pawn>(pawn); }
 
         /**
@@ -87,5 +97,6 @@
 
     private:
-        Pawn* player_; //!< The player that triggered the PlayerTrigger.
+        WeakPtr<PlayerInfo> player_; //!< The player that triggered the PlayerTrigger.
+        WeakPtr<Pawn> pawn_; //!< The Pawn that triggered the PlayerTrigger.
         bool isForPlayer_; //!< Is true when the PlayerTrigger should be set to normally be triggered by Pawns.
 
