Index: branches/proxy/src/lib/network/monitor/network_monitor.h
===================================================================
--- branches/proxy/src/lib/network/monitor/network_monitor.h	(revision 9583)
+++ branches/proxy/src/lib/network/monitor/network_monitor.h	(revision 9584)
@@ -76,5 +76,5 @@
 
     inline const std::list<NetworkNode*>& getNodeList() const { return this->nodeList; };
-    inline PeerInfo* getPeerByUserId( int userId) { this->localNode->getPeerByUserId(userId); }
+    inline PeerInfo* getPeerByUserId( int userId) { return this->localNode->getPeerByUserId(userId); }
 
     void toggleGUI();
Index: branches/proxy/src/lib/network/network_stream.cc
===================================================================
--- branches/proxy/src/lib/network/network_stream.cc	(revision 9583)
+++ branches/proxy/src/lib/network/network_stream.cc	(revision 9584)
@@ -121,4 +121,5 @@
   this->pInfo->lastAckedState = 0;
   this->pInfo->lastRecvedState = 0;
+  this->pInfo->bLocal = true;
 
   this->bRedirect = false;
@@ -200,4 +201,5 @@
   this->peers[node].connectionMonitor = new ConnectionMonitor( NET_ID_MASTER_SERVER );
   this->peers[node].ip = this->peers[node].socket->getRemoteAddress();
+  this->peers[node].bLocal = true;
 }
 
@@ -219,4 +221,5 @@
   this->peers[proxyId].connectionMonitor = new ConnectionMonitor( proxyId );
   this->peers[proxyId].ip = this->peers[proxyId].socket->getRemoteAddress();
+  this->peers[proxyId].bLocal = true;
 }
 
@@ -257,6 +260,7 @@
   // fake the unique id
   hs->setUniqueID( NET_UID_HANDSHAKE );
-  assert( peers[userId].handshake == NULL );
-  peers[userId].handshake = hs;
+  assert( this->peers[userId].handshake == NULL );
+  this->peers[userId].handshake = hs;
+  this->peers[userId].bLocal = true;
 
   // set the preferred nick name
@@ -495,9 +499,10 @@
 {
   // create new handshake and init its variables
-  peers[userId].handshake = new Handshake(this->pInfo->nodeType, userId, this->networkGameManager->getUniqueID(), MessageManager::getInstance()->getUniqueID());
-  peers[userId].handshake->setUniqueID(userId);
-
-  peers[userId].connectionMonitor = new ConnectionMonitor( userId );
-  peers[userId].userId = userId;
+  this->peers[userId].handshake = new Handshake(this->pInfo->nodeType, userId, this->networkGameManager->getUniqueID(), MessageManager::getInstance()->getUniqueID());
+  this->peers[userId].handshake->setUniqueID(userId);
+
+  this->peers[userId].connectionMonitor = new ConnectionMonitor( userId );
+  this->peers[userId].userId = userId;
+  this->peers[userId].bLocal = true;
 
   PRINTF(0)("num sync: %d\n", synchronizeables.size());
@@ -508,16 +513,16 @@
   if( pi != NULL)
   {
-    peers[userId].handshake->setProxy1Address( pi->ip);
+    this->peers[userId].handshake->setProxy1Address( pi->ip);
   }
   pi = this->networkMonitor->getSecondChoiceProxy();
   if( pi != NULL)
-    peers[userId].handshake->setProxy2Address( pi->ip);
+    this->peers[userId].handshake->setProxy2Address( pi->ip);
 
   // check if the connecting client should reconnect to a proxy server
   if( SharedNetworkData::getInstance()->isMasterServer())
-    peers[userId].handshake->setRedirect(/*this->networkMonitor->isReconnectNextClient()*/false);
+    this->peers[userId].handshake->setRedirect(/*this->networkMonitor->isReconnectNextClient()*/false);
 
   // the connecting node of course is a client
-  peers[userId].ip = peers[userId].socket->getRemoteAddress();
+  this->peers[userId].ip = this->peers[userId].socket->getRemoteAddress();
 }
 
Index: branches/proxy/src/lib/network/peer_info.cc
===================================================================
--- branches/proxy/src/lib/network/peer_info.cc	(revision 9583)
+++ branches/proxy/src/lib/network/peer_info.cc	(revision 9584)
@@ -49,4 +49,5 @@
   this->lastRecvedState = 0;
   this->connectionMonitor = NULL;
+  this->bLocal = false;
 
   this->ip = IP(0,0);
Index: branches/proxy/src/lib/network/peer_info.h
===================================================================
--- branches/proxy/src/lib/network/peer_info.h	(revision 9583)
+++ branches/proxy/src/lib/network/peer_info.h	(revision 9584)
@@ -30,4 +30,5 @@
     static const std::string& nodeTypeToString(unsigned int type);
 
+    inline bool isLocal() { return this->bLocal; }
 
 
@@ -44,4 +45,6 @@
     int                 lastRecvedState;         //!< last received state
 
+    bool                bLocal;                  //!< true if this node is localy connected to this node
+
     static const std::string nodeNames[];
 
Index: branches/proxy/src/lib/network/proxy/proxy_control.cc
===================================================================
--- branches/proxy/src/lib/network/proxy/proxy_control.cc	(revision 9583)
+++ branches/proxy/src/lib/network/proxy/proxy_control.cc	(revision 9584)
@@ -18,8 +18,9 @@
 
 
-#include "player.h"
 #include "state.h"
 #include "shared_network_data.h"
 #include "network_game_manager.h"
+#include "ip.h"
+#include "peer_info.h"
 
 #include "converter.h"
@@ -77,4 +78,8 @@
 /**
  *  signals new client connected to this local proxy
+ *
+ *  byte 0 - 3     :      userId
+ *  byte 4 - 7     :      ip address (IPaddress.host)
+ *
  * @param userId userId of the new client
  */
@@ -90,7 +95,8 @@
   // and the ip as an int
   PeerInfo* pInfo = SharedNetworkData::getInstance()->getNetworkMonitor()->getPeerByUserId(userId);
-  assert( Converter::intToByteArray( userId, data, INTSIZE ) == INTSIZE );
-
-  MessageManager::getInstance()->sendMessage( MSGID_PROXY_NEWCLIENT, data, INTSIZE, RT_SERVER, NET_UNASSIGNED, MP_HIGHBANDWIDTH );
+  assert(pInfo != NULL);
+  assert( Converter::intToByteArray( pInfo->ip.host(), data + INTSIZE, INTSIZE ) == INTSIZE );
+
+  MessageManager::getInstance()->sendMessage( MSGID_PROXY_NEWCLIENT, data, 2*INTSIZE, RT_SERVER, NET_UNASSIGNED, MP_HIGHBANDWIDTH );
 }
 
@@ -118,4 +124,15 @@
   int newClientId = 0;
   assert( Converter::byteArrayToInt( data, &newClientId) == INTSIZE );
+  // now read the ip address
+  int ipHost = 0;
+  assert( Converter::byteArrayToInt( data + INTSIZE, &ipHost) == INTSIZE );
+
+  // register the new node at the network monitor
+  NetworkMonitor* netMon = SharedNetworkData::getInstance()->getNetworkMonitor();
+  PeerInfo* pInfo = new PeerInfo();
+  pInfo->bLocal = false;
+  pInfo->ip = IP(ipHost, 0);
+  pInfo->nodeType = NET_CLIENT;
+  netMon->addNode(pInfo);
 
   PRINTF(0)("Got Signal: from %i new player arrived with userId: %i\n", senderId, newClientId);
