Index: code/trunk/src/orxonox/objects/controllers/HumanController.cc
===================================================================
--- code/trunk/src/orxonox/objects/controllers/HumanController.cc	(revision 3037)
+++ code/trunk/src/orxonox/objects/controllers/HumanController.cc	(revision 3038)
@@ -159,5 +159,5 @@
                 pawn->kill();
             else if (HumanController::localController_s->player_)
-                HumanController::localController_s->player_->stopControl(HumanController::localController_s->controllableEntity_);
+                HumanController::localController_s->player_->stopControl();
         }
     }
Index: code/trunk/src/orxonox/objects/gametypes/Gametype.cc
===================================================================
--- code/trunk/src/orxonox/objects/gametypes/Gametype.cc	(revision 3037)
+++ code/trunk/src/orxonox/objects/gametypes/Gametype.cc	(revision 3038)
@@ -130,5 +130,5 @@
             {
                 ControllableEntity* oldentity = it->first->getControllableEntity();
-        
+
                 ControllableEntity* entity = this->defaultControllableEntity_.fabricate(oldentity->getCreator());
                 if (oldentity->getCamera())
@@ -143,5 +143,4 @@
                 }
 
-                it->first->stopControl(oldentity, true);
                 it->first->startControl(entity);
             }
@@ -421,5 +420,5 @@
 
     void Gametype::addTime(float t)
-    { 
+    {
         if (this->timeLimit_ == 0)
           this->time_ -= t;
@@ -429,5 +428,5 @@
 
     void Gametype::removeTime(float t)
-    { 
+    {
         if (this->timeLimit_ == 0)
           this->time_ += t;
@@ -437,10 +436,10 @@
 
     void Gametype::resetTimer()
-    { 
+    {
         this->resetTimer(timeLimit_);
     }
 
     void Gametype::resetTimer(float t)
-    { 
+    {
         this->timeLimit_ = t;
         this->time_ = t;
Index: code/trunk/src/orxonox/objects/infos/PlayerInfo.cc
===================================================================
--- code/trunk/src/orxonox/objects/infos/PlayerInfo.cc	(revision 3037)
+++ code/trunk/src/orxonox/objects/infos/PlayerInfo.cc	(revision 3038)
@@ -62,5 +62,5 @@
         if (this->BaseObject::isInitialized())
         {
-            this->stopControl(this->controllableEntity_);
+            this->stopControl();
 
             if (this->controller_)
@@ -142,24 +142,18 @@
     }
 
-    void PlayerInfo::startControl(ControllableEntity* entity, bool callback)
-    {
-        if (entity == this->controllableEntity_)
+    void PlayerInfo::startControl(ControllableEntity* entity)
+    {
+        if (!entity || entity == this->controllableEntity_)
             return;
 
         if (this->controllableEntity_)
-            this->stopControl(this->controllableEntity_, callback);
+            this->stopControl();
 
         this->controllableEntity_ = entity;
-
-        if (entity)
-        {
-            this->controllableEntityID_ = entity->getObjectID();
-            entity->setPlayer(this);
-            this->bReadyToSpawn_ &= (!this->bSetUnreadyAfterSpawn_);
-        }
-        else
-        {
-            this->controllableEntityID_ = OBJECTID_UNKNOWN;
-        }
+        this->controllableEntityID_ = entity->getObjectID();
+
+        entity->setPlayer(this);
+
+        this->bReadyToSpawn_ &= (!this->bSetUnreadyAfterSpawn_);
 
         if (this->controller_)
@@ -169,19 +163,20 @@
     }
 
-    void PlayerInfo::stopControl(ControllableEntity* entity, bool callback)
-    {
-        if (entity && this->controllableEntity_ == entity)
-        {
-            this->controllableEntity_ = 0;
-            this->controllableEntityID_ = OBJECTID_UNKNOWN;
-
-            if (this->controller_)
-                this->controller_->setControllableEntity(0);
-
-            if (callback)
-                entity->removePlayer();
-
-            this->changedControllableEntity();
-        }
+    void PlayerInfo::stopControl()
+    {
+        ControllableEntity* entity = this->controllableEntity_;
+
+        if (!entity)
+            return;
+
+        this->controllableEntity_ = 0;
+        this->controllableEntityID_ = OBJECTID_UNKNOWN;
+
+        if (this->controller_)
+            this->controller_->setControllableEntity(0);
+
+        entity->removePlayer();
+
+        this->changedControllableEntity();
     }
 
@@ -192,10 +187,9 @@
             Synchronisable* temp = Synchronisable::getSynchronisable(this->controllableEntityID_);
             ControllableEntity* entity = dynamic_cast<ControllableEntity*>(temp);
-
             this->startControl(entity);
         }
         else
         {
-            this->stopControl(this->controllableEntity_);
+            this->stopControl();
         }
     }
Index: code/trunk/src/orxonox/objects/infos/PlayerInfo.h
===================================================================
--- code/trunk/src/orxonox/objects/infos/PlayerInfo.h	(revision 3037)
+++ code/trunk/src/orxonox/objects/infos/PlayerInfo.h	(revision 3038)
@@ -68,6 +68,6 @@
                 { return this->bReadyToSpawn_; }
 
-            void startControl(ControllableEntity* entity, bool callback = true);
-            void stopControl(ControllableEntity* entity, bool callback = true);
+            void startControl(ControllableEntity* entity);
+            void stopControl();
 
             inline ControllableEntity* getControllableEntity() const
Index: code/trunk/src/orxonox/objects/worldentities/ControllableEntity.cc
===================================================================
--- code/trunk/src/orxonox/objects/worldentities/ControllableEntity.cc	(revision 3037)
+++ code/trunk/src/orxonox/objects/worldentities/ControllableEntity.cc	(revision 3038)
@@ -91,5 +91,5 @@
 
             if (this->getPlayer() && this->getPlayer()->getControllableEntity() == this)
-                this->getPlayer()->stopControl(this, false);
+                this->getPlayer()->stopControl();
 
             if (this->hud_)
Index: code/trunk/src/orxonox/objects/worldentities/ControllableEntity.h
===================================================================
--- code/trunk/src/orxonox/objects/worldentities/ControllableEntity.h	(revision 3037)
+++ code/trunk/src/orxonox/objects/worldentities/ControllableEntity.h	(revision 3038)
@@ -39,4 +39,6 @@
     class _OrxonoxExport ControllableEntity : public MobileEntity
     {
+        friend class PlayerInfo; // PlayerInfo uses setPlayer and removePlayer
+
         public:
             ControllableEntity(BaseObject* creator);
@@ -50,6 +52,4 @@
             virtual void changedPlayer() {}
 
-            virtual void setPlayer(PlayerInfo* player);
-            virtual void removePlayer();
             inline PlayerInfo* getPlayer() const
                 { return this->player_; }
@@ -131,4 +131,7 @@
 
         protected:
+            virtual void setPlayer(PlayerInfo* player); // don't call this directly, use friend class PlayerInfo instead
+            virtual void removePlayer();                // don't call this directly, use friend class PlayerInfo instead
+
             virtual void startLocalHumanControl();
             virtual void stopLocalHumanControl();
Index: code/trunk/src/orxonox/objects/worldentities/pawns/Pawn.cc
===================================================================
--- code/trunk/src/orxonox/objects/worldentities/pawns/Pawn.cc	(revision 3037)
+++ code/trunk/src/orxonox/objects/worldentities/pawns/Pawn.cc	(revision 3038)
@@ -209,6 +209,6 @@
                 this->getGametype()->pawnKilled(this, this->lastHitOriginator_);
 
-            if (this->getPlayer())
-                this->getPlayer()->stopControl(this);
+            if (this->getPlayer() && this->getPlayer()->getControllableEntity() == this)
+                this->getPlayer()->stopControl();
 
             if (GameMode::isMaster())
Index: code/trunk/src/orxonox/objects/worldentities/pawns/Pawn.h
===================================================================
--- code/trunk/src/orxonox/objects/worldentities/pawns/Pawn.h	(revision 3037)
+++ code/trunk/src/orxonox/objects/worldentities/pawns/Pawn.h	(revision 3038)
@@ -47,7 +47,4 @@
             virtual void tick(float dt);
             void registerVariables();
-
-            virtual void setPlayer(PlayerInfo* player);
-            virtual void removePlayer();
 
             inline bool isAlive() const
@@ -113,4 +110,7 @@
 
         protected:
+            virtual void setPlayer(PlayerInfo* player);
+            virtual void removePlayer();
+
             virtual void death();
             virtual void deatheffect();
Index: code/trunk/src/orxonox/objects/worldentities/pawns/Spectator.h
===================================================================
--- code/trunk/src/orxonox/objects/worldentities/pawns/Spectator.h	(revision 3037)
+++ code/trunk/src/orxonox/objects/worldentities/pawns/Spectator.h	(revision 3038)
@@ -46,7 +46,4 @@
             virtual void tick(float dt);
 
-            virtual void setPlayer(PlayerInfo* player);
-            virtual void startLocalHumanControl();
-
             virtual void moveFrontBack(const Vector2& value);
             virtual void moveRightLeft(const Vector2& value);
@@ -59,4 +56,8 @@
             virtual void fire(WeaponMode::Enum fireMode);
             virtual void greet();
+
+        protected:
+            virtual void setPlayer(PlayerInfo* player);
+            virtual void startLocalHumanControl();
 
         private:
