Index: code/branches/objecthierarchy/src/orxonox/objects/gametypes/Gametype.cc
===================================================================
--- code/branches/objecthierarchy/src/orxonox/objects/gametypes/Gametype.cc	(revision 1949)
+++ code/branches/objecthierarchy/src/orxonox/objects/gametypes/Gametype.cc	(revision 1950)
@@ -31,8 +31,11 @@
 
 #include "core/CoreIncludes.h"
+#include "core/ConsoleCommand.h"
 #include "objects/infos/PlayerInfo.h"
 
 namespace orxonox
 {
+    SetConsoleCommand(Gametype, listPlayers, true);
+
     CreateUnloadableFactory(Gametype);
 
@@ -54,10 +57,31 @@
     }
 
+    void Gametype::listPlayers()
+    {
+        Gametype* gametype = Gametype::getCurrentGametype();
+
+        if (gametype)
+        {
+            for (std::set<PlayerInfo*>::const_iterator it = gametype->players_.begin(); it != gametype->players_.end(); ++it)
+                COUT(0) << "ID: " << (*it)->getClientID() << ", Name: " << (*it)->getName() << std::endl;
+        }
+        else
+        {
+            for (ObjectList<PlayerInfo>::iterator it = ObjectList<PlayerInfo>::begin(); it != ObjectList<PlayerInfo>::end(); ++it)
+                COUT(0) << "ID: " << (*it)->getClientID() << ", Name: " << (*it)->getName() << std::endl;
+        }
+    }
+
     void Gametype::clientConnected(unsigned int clientID)
     {
         COUT(0) << "client connected" << std::endl;
 
+        // create new PlayerInfo instance
         PlayerInfo* player = new PlayerInfo();
         player->setClientID(clientID);
+
+        // add to clients-map
+        assert(!this->clients_[clientID]);
+        this->clients_[clientID] = player;
     }
 
@@ -65,4 +89,11 @@
     {
         COUT(0) << "client disconnected" << std::endl;
+
+        // remove from clients-map
+        PlayerInfo* player = this->clients_[clientID];
+        this->clients_.erase(clientID);
+
+        // delete PlayerInfo instance
+        delete player;
     }
 
@@ -88,3 +119,14 @@
         COUT(0) << "player " << player->getName() << " left" << std::endl;
     }
+
+    void Gametype::playerChangedName(PlayerInfo* player)
+    {
+        if (this->players_.find(player) != this->players_.end())
+        {
+            if (player->getName() != player->getOldName())
+            {
+                COUT(0) << "player " << player->getOldName() << " changed name to " << player->getName() << std::endl;
+            }
+        }
+    }
 }
Index: code/branches/objecthierarchy/src/orxonox/objects/gametypes/Gametype.h
===================================================================
--- code/branches/objecthierarchy/src/orxonox/objects/gametypes/Gametype.h	(revision 1949)
+++ code/branches/objecthierarchy/src/orxonox/objects/gametypes/Gametype.h	(revision 1950)
@@ -32,4 +32,6 @@
 #include "OrxonoxPrereqs.h"
 
+#include <map>
+
 #include "core/BaseObject.h"
 #include "network/ClientConnectionListener.h"
@@ -39,4 +41,6 @@
     class _OrxonoxExport Gametype : public BaseObject, public network::ClientConnectionListener
     {
+        friend class PlayerInfo;
+
         public:
             Gametype();
@@ -44,6 +48,5 @@
 
             static Gametype* getCurrentGametype();
-            void addPlayer(PlayerInfo* player);
-            void removePlayer(PlayerInfo* player);
+            static void listPlayers();
 
         protected:
@@ -54,6 +57,12 @@
             virtual void playerLeft(PlayerInfo* player);
 
+            virtual void playerChangedName(PlayerInfo* player);
+
         private:
+            void addPlayer(PlayerInfo* player);
+            void removePlayer(PlayerInfo* player);
+
             std::set<PlayerInfo*> players_;
+            std::map<unsigned int, PlayerInfo*> clients_;
     };
 }
Index: code/branches/objecthierarchy/src/orxonox/objects/infos/PlayerInfo.cc
===================================================================
--- code/branches/objecthierarchy/src/orxonox/objects/infos/PlayerInfo.cc	(revision 1949)
+++ code/branches/objecthierarchy/src/orxonox/objects/infos/PlayerInfo.cc	(revision 1950)
@@ -51,4 +51,5 @@
 
         this->ping_ = -1;
+        this->clientID_ = (unsigned int)-1;
         this->bLocalPlayer_ = Core::isStandalone();
         this->bLocalPlayer_ = false;
@@ -85,4 +86,7 @@
     {
 std::cout << "# PI(" << this->getObjectID() << "): changedName to " << this->getName() << std::endl;
+        Gametype* gametype = Gametype::getCurrentGametype();
+        if (gametype)
+            gametype->playerChangedName(this);
     }
 
Index: code/branches/objecthierarchy/src/orxonox/objects/worldentities/PositionableEntity.h
===================================================================
--- code/branches/objecthierarchy/src/orxonox/objects/worldentities/PositionableEntity.h	(revision 1949)
+++ code/branches/objecthierarchy/src/orxonox/objects/worldentities/PositionableEntity.h	(revision 1950)
@@ -44,5 +44,5 @@
 
             inline void setPosition(const Vector3& position)
-                { this->node_->setPosition(position); std::cout << "set position to " << position << std::endl; }
+                { this->node_->setPosition(position); }
             inline void translate(const Vector3& distance, Ogre::Node::TransformSpace relativeTo = Ogre::Node::TS_LOCAL)
                 { this->node_->translate(distance, relativeTo); }
