Index: code/branches/core7/src/libraries/core/BaseObject.cc
===================================================================
--- code/branches/core7/src/libraries/core/BaseObject.cc	(revision 10575)
+++ code/branches/core7/src/libraries/core/BaseObject.cc	(revision 10576)
@@ -63,5 +63,4 @@
         this->bActive_ = true;
         this->bVisible_ = true;
-        this->oldGametype_ = 0;
         this->bRegisteredEventStates_ = false;
 
Index: code/branches/core7/src/libraries/core/BaseObject.h
===================================================================
--- code/branches/core7/src/libraries/core/BaseObject.h	(revision 10575)
+++ code/branches/core7/src/libraries/core/BaseObject.h	(revision 10576)
@@ -148,16 +148,6 @@
             inline virtual uint32_t getSceneID() const { return this->sceneID_; }
 
-            inline void setGametype(const StrongPtr<Gametype>& gametype)
-            {
-                if (gametype != this->gametype_)
-                {
-                    this->oldGametype_ = this->gametype_;
-                    this->gametype_ = gametype;
-                    this->changedGametype();
-                }
-            }
+            inline void setGametype(const StrongPtr<Gametype>& gametype) { this->gametype_ = gametype; }
             inline Gametype* getGametype() const { return this->gametype_; }
-            inline Gametype* getOldGametype() const { return this->oldGametype_; }
-            virtual void changedGametype() {}
 
             inline void setLevel(const StrongPtr<Level>& level) { this->level_ = level; }
@@ -219,5 +209,4 @@
             uint32_t               sceneID_;
             StrongPtr<Gametype>    gametype_;
-            Gametype*              oldGametype_;
             StrongPtr<Level>       level_;
             std::set<Template*>    templates_;
@@ -235,5 +224,4 @@
     SUPER_FUNCTION(4, BaseObject, XMLEventPort, false);
     SUPER_FUNCTION(8, BaseObject, changedName, false);
-    SUPER_FUNCTION(9, BaseObject, changedGametype, false);
 }
 
Index: code/branches/core7/src/libraries/core/class/Super.h
===================================================================
--- code/branches/core7/src/libraries/core/class/Super.h	(revision 10575)
+++ code/branches/core7/src/libraries/core/class/Super.h	(revision 10576)
@@ -274,7 +274,4 @@
         SUPER_NOARGS(classname, functionname)
 
-    #define SUPER_changedGametype(classname, functionname, ...) \
-        SUPER_NOARGS(classname, functionname)
-
     #define SUPER_changedUsed(classname, functionname, ...) \
         SUPER_NOARGS(classname, functionname)
@@ -555,17 +552,13 @@
         SUPER_FUNCTION_GLOBAL_DECLARATION_PART2;
 
-        SUPER_FUNCTION_GLOBAL_DECLARATION_PART1(9, changedGametype, false)
-            ()
-        SUPER_FUNCTION_GLOBAL_DECLARATION_PART2;
-
-        SUPER_FUNCTION_GLOBAL_DECLARATION_PART1(10, changedUsed, false)
-            ()
-        SUPER_FUNCTION_GLOBAL_DECLARATION_PART2;
-
-        SUPER_FUNCTION_GLOBAL_DECLARATION_PART1(11, changedCarrier, false)
-            ()
-        SUPER_FUNCTION_GLOBAL_DECLARATION_PART2;
-
-        SUPER_FUNCTION_GLOBAL_DECLARATION_PART1(12, changedPickedUp, false)
+        SUPER_FUNCTION_GLOBAL_DECLARATION_PART1(9, changedUsed, false)
+            ()
+        SUPER_FUNCTION_GLOBAL_DECLARATION_PART2;
+
+        SUPER_FUNCTION_GLOBAL_DECLARATION_PART1(10, changedCarrier, false)
+            ()
+        SUPER_FUNCTION_GLOBAL_DECLARATION_PART2;
+
+        SUPER_FUNCTION_GLOBAL_DECLARATION_PART1(11, changedPickedUp, false)
             ()
         SUPER_FUNCTION_GLOBAL_DECLARATION_PART2;
@@ -623,5 +616,4 @@
     SUPER_INTRUSIVE_DECLARATION(changedOverlayGroup);
     SUPER_INTRUSIVE_DECLARATION(changedName);
-    SUPER_INTRUSIVE_DECLARATION(changedGametype);
     SUPER_INTRUSIVE_DECLARATION(changedUsed);
     SUPER_INTRUSIVE_DECLARATION(changedCarrier);
Index: code/branches/core7/src/orxonox/Level.cc
===================================================================
--- code/branches/core7/src/orxonox/Level.cc	(revision 10575)
+++ code/branches/core7/src/orxonox/Level.cc	(revision 10576)
@@ -169,5 +169,5 @@
     {
         orxout(internal_info) << "player entered level (id: " << player->getClientID() << ", name: " << player->getName() << ')' << endl;
-        player->setGametype(this->getGametype());
+        player->switchGametype(this->getGametype());
     }
 
@@ -175,5 +175,5 @@
     {
         orxout(internal_info) << "player left level (id: " << player->getClientID() << ", name: " << player->getName() << ')' << endl;
-        player->setGametype(0);
+        player->switchGametype(0);
     }
 }
Index: code/branches/core7/src/orxonox/infos/HumanPlayer.cc
===================================================================
--- code/branches/core7/src/orxonox/infos/HumanPlayer.cc	(revision 10575)
+++ code/branches/core7/src/orxonox/infos/HumanPlayer.cc	(revision 10576)
@@ -160,7 +160,7 @@
     }
 
-    void HumanPlayer::changedGametype()
-    {
-        PlayerInfo::changedGametype();
+    void HumanPlayer::switchGametype(Gametype* gametype)
+    {
+        PlayerInfo::switchGametype(gametype);
 
         if (this->isInitialized() && this->isLocalPlayer())
Index: code/branches/core7/src/orxonox/infos/HumanPlayer.h
===================================================================
--- code/branches/core7/src/orxonox/infos/HumanPlayer.h	(revision 10575)
+++ code/branches/core7/src/orxonox/infos/HumanPlayer.h	(revision 10576)
@@ -51,5 +51,5 @@
             void setClientID(unsigned int clientID);
 
-            virtual void changedGametype();
+            virtual void switchGametype(Gametype* gametype);
 
             inline void setHumanHUDTemplate(const std::string& name)
Index: code/branches/core7/src/orxonox/infos/PlayerInfo.cc
===================================================================
--- code/branches/core7/src/orxonox/infos/PlayerInfo.cc	(revision 10575)
+++ code/branches/core7/src/orxonox/infos/PlayerInfo.cc	(revision 10576)
@@ -57,5 +57,5 @@
         this->gtinfo_ = 0;
         this->gtinfoID_ = OBJECTID_UNKNOWN;
-        this->updateGametypeInfo();
+        this->updateGametypeInfo(this->getGametype());
 
         this->registerVariables();
@@ -95,36 +95,41 @@
     }
 
-    void PlayerInfo::changedGametype()
-    {
-        this->updateGametypeInfo();
+    void PlayerInfo::switchGametype(Gametype* gametype)
+    {
+        Gametype* oldGametype = this->getGametype();
+        this->setGametype(gametype);
+        Gametype* newGametype = this->getGametype();
+
+
+        this->updateGametypeInfo(newGametype);
 
         if (this->isInitialized())
         {
-            if (this->getOldGametype())
+            if (oldGametype)
             {
-                if (this->getGametype())
-                    this->getOldGametype()->playerSwitched(this, this->getGametype());
+                if (newGametype)
+                    oldGametype->playerSwitched(this, newGametype);
                 else
-                    this->getOldGametype()->playerLeft(this);
+                    oldGametype->playerLeft(this);
             }
 
-            if (this->getGametype())
+            if (newGametype)
             {
-                if (this->getOldGametype())
-                    this->getGametype()->playerSwitchedBack(this, this->getOldGametype());
+                if (oldGametype)
+                    newGametype->playerSwitchedBack(this, oldGametype);
                 else
-                    this->getGametype()->playerEntered(this);
+                    newGametype->playerEntered(this);
             }
         }
     }
 
-    void PlayerInfo::updateGametypeInfo()
+    void PlayerInfo::updateGametypeInfo(Gametype* gametype)
     {
         this->gtinfo_ = 0;
         this->gtinfoID_ = OBJECTID_UNKNOWN;
 
-        if (this->getGametype() && this->getGametype()->getGametypeInfo())
-        {
-            this->gtinfo_ = this->getGametype()->getGametypeInfo();
+        if (gametype && gametype->getGametypeInfo())
+        {
+            this->gtinfo_ = gametype->getGametypeInfo();
             this->gtinfoID_ = this->gtinfo_->getObjectID();
         }
Index: code/branches/core7/src/orxonox/infos/PlayerInfo.h
===================================================================
--- code/branches/core7/src/orxonox/infos/PlayerInfo.h	(revision 10575)
+++ code/branches/core7/src/orxonox/infos/PlayerInfo.h	(revision 10576)
@@ -45,5 +45,5 @@
 
             virtual void changedName();
-            virtual void changedGametype();
+            virtual void switchGametype(Gametype* gametype);
 
             virtual void changedController() {}
@@ -94,5 +94,5 @@
             void networkcallback_changedcontrollableentityID();
             void networkcallback_changedgtinfoID();
-            void updateGametypeInfo();
+            void updateGametypeInfo(Gametype* gametype);
 
             bool bReadyToSpawn_;
Index: code/branches/core7/src/orxonox/interfaces/Pickupable.h
===================================================================
--- code/branches/core7/src/orxonox/interfaces/Pickupable.h	(revision 10575)
+++ code/branches/core7/src/orxonox/interfaces/Pickupable.h	(revision 10576)
@@ -187,7 +187,7 @@
 
     //! SUPER functions.
-    SUPER_FUNCTION(10, Pickupable, changedUsed, false);
-    SUPER_FUNCTION(11, Pickupable, changedCarrier, false);
-    SUPER_FUNCTION(12, Pickupable, changedPickedUp, false);
+    SUPER_FUNCTION(9, Pickupable, changedUsed, false);
+    SUPER_FUNCTION(10, Pickupable, changedCarrier, false);
+    SUPER_FUNCTION(11, Pickupable, changedPickedUp, false);
 }
 
