Index: code/branches/presentation2/src/orxonox/infos/PlayerInfo.cc
===================================================================
--- code/branches/presentation2/src/orxonox/infos/PlayerInfo.cc	(revision 6106)
+++ code/branches/presentation2/src/orxonox/infos/PlayerInfo.cc	(revision 6107)
@@ -50,5 +50,6 @@
         this->controller_ = 0;
         this->controllableEntity_ = 0;
-        this->controllableEntityID_ = CLIENTID_UNKNOWN;
+        this->controllableEntityID_ = OBJECTID_UNKNOWN;
+        this->oldControllableEntity_ = 0;
 
         this->gtinfo_ = 0;
@@ -80,5 +81,4 @@
         registerVariable(this->name_,                 VariableDirection::ToClient, new NetworkCallback<PlayerInfo>(this, &PlayerInfo::changedName));
         registerVariable(this->controllableEntityID_, VariableDirection::ToClient, new NetworkCallback<PlayerInfo>(this, &PlayerInfo::networkcallback_changedcontrollableentityID));
-        registerVariable(this->bReadyToSpawn_,        VariableDirection::ToServer);
         registerVariable(this->gtinfoID_,             VariableDirection::ToClient, new NetworkCallback<PlayerInfo>(this, &PlayerInfo::networkcallback_changedgtinfoID));
     }
@@ -148,4 +148,6 @@
             return;
 
+        if (this->oldControllableEntity_)
+            this->stopTemporaryControl();
         if (this->controllableEntity_)
             this->stopControl();
@@ -163,7 +165,29 @@
         this->changedControllableEntity();
     }
+    
+    void PlayerInfo::startTemporaryControl(ControllableEntity* entity)
+    {
+        if (!entity)
+            return;
+        
+//         assert( this->temporaryControllableEntity_==0 );
+
+        this->oldControllableEntity_ = this->controllableEntity_;
+        this->controllableEntity_ = entity;
+        this->controllableEntityID_ = entity->getObjectID();
+
+        entity->setPlayer(this);
+
+        if (this->controller_)
+            this->controller_->setControllableEntity(entity);
+
+        this->changedControllableEntity();
+    }
 
     void PlayerInfo::stopControl()
     {
+        if ( this->oldControllableEntity_ )
+            this->stopTemporaryControl();
+        
         ControllableEntity* entity = this->controllableEntity_;
 
@@ -177,9 +201,30 @@
             this->controller_->setControllableEntity(0);
 
-        entity->removePlayer();
-
-        this->changedControllableEntity();
-    }
-
+        if ( GameMode::isMaster() )
+            entity->removePlayer();
+
+        this->changedControllableEntity();
+    }
+    
+    void PlayerInfo::stopTemporaryControl()
+    {
+        ControllableEntity* entity = this->controllableEntity_;
+
+        if (!entity || !this->oldControllableEntity_)
+            return;
+
+        this->controllableEntity_ = this->oldControllableEntity_;
+        this->controllableEntityID_ = this->controllableEntity_->getObjectID();
+        this->oldControllableEntity_ = 0;
+
+        if ( this->controllableEntity_ && this->controller_)
+            this->controller_->setControllableEntity(this->controllableEntity_);
+
+        if ( GameMode::isMaster() )
+            entity->removePlayer();
+        
+        this->changedControllableEntity();
+    }
+    
     void PlayerInfo::networkcallback_changedcontrollableentityID()
     {
@@ -196,4 +241,5 @@
     }
 
+
     void PlayerInfo::networkcallback_changedgtinfoID()
     {
Index: code/branches/presentation2/src/orxonox/infos/PlayerInfo.h
===================================================================
--- code/branches/presentation2/src/orxonox/infos/PlayerInfo.h	(revision 6106)
+++ code/branches/presentation2/src/orxonox/infos/PlayerInfo.h	(revision 6107)
@@ -69,4 +69,6 @@
             void startControl(ControllableEntity* entity);
             void stopControl();
+            void startTemporaryControl(ControllableEntity* entity);
+            void stopTemporaryControl();
 
             inline ControllableEntity* getControllableEntity() const
@@ -96,4 +98,5 @@
             Controller* controller_;
             ControllableEntity* controllableEntity_;
+            ControllableEntity* oldControllableEntity_;
             unsigned int controllableEntityID_;
 
