Index: branches/proxy/src/lib/network/monitor/network_monitor.cc
===================================================================
--- branches/proxy/src/lib/network/monitor/network_monitor.cc	(revision 9289)
+++ branches/proxy/src/lib/network/monitor/network_monitor.cc	(revision 9290)
@@ -99,7 +99,14 @@
     this->localNode->addClient(pInfo);
   else if( pInfo->isProxyServer())
+  {
     this->localNode->addProxyServer(pInfo);
+    // create a new node, since a proxy can connect clients again
+    NetworkNode* node = new NetworkNode(pInfo);
+    this->nodeList.push_back(node);
+  }
   else if( pInfo->isMasterServer())
+  {
     this->localNode->addMasterServer(pInfo);
+  }
 }
 
Index: branches/proxy/src/lib/network/monitor/network_monitor.h
===================================================================
--- branches/proxy/src/lib/network/monitor/network_monitor.h	(revision 9289)
+++ branches/proxy/src/lib/network/monitor/network_monitor.h	(revision 9290)
@@ -52,4 +52,8 @@
     inline int getPlayerNumber() { return this->playerNumber; }
 
+    /** @returns true if there are still free network slots available */
+    inline bool gotFreeSlots() { return (this->playerNumber < NET_MAX_CONNECTIONS)?true:false; }
+    void getServerWithFreeSlots() { }
+
 
     void showGUI();
Index: branches/proxy/src/lib/network/netdefs.h
===================================================================
--- branches/proxy/src/lib/network/netdefs.h	(revision 9289)
+++ branches/proxy/src/lib/network/netdefs.h	(revision 9290)
@@ -34,5 +34,5 @@
 
 /* maximal connectinons for the server*/
-#define MAX_CONNECTIONS 1000
+#define NET_MAX_CONNECTIONS 5
 
 /* network polling frequency */
Index: branches/proxy/src/lib/network/network_stream.cc
===================================================================
--- branches/proxy/src/lib/network/network_stream.cc	(revision 9289)
+++ branches/proxy/src/lib/network/network_stream.cc	(revision 9290)
@@ -337,5 +337,5 @@
 
     // check if there are too many clients connected
-    if ( clientId > MAX_CONNECTIONS )
+    if ( clientId > NET_MAX_CONNECTIONS )
     {
       peers[clientId].handshake->doReject( "too many connections" );
@@ -420,5 +420,5 @@
                (*it)->getUniqueID(), (*it)->beSynchronized());
   }
-  PRINT(0)(" Maximal Connections: %i\n", MAX_CONNECTIONS );
+  PRINT(0)(" Maximal Connections: %i\n", NET_MAX_CONNECTIONS );
 
 }
@@ -568,5 +568,5 @@
 
       // server fakes uniqueid == 0 for handshake
-      if ( this->isMasterServer() && sync.getUniqueID() < MAX_CONNECTIONS - 1 )
+      if ( this->isMasterServer() && sync.getUniqueID() < NET_MAX_CONNECTIONS - 1 )
         n = Converter::intToByteArray( 0, buf + offset, UDP_PACKET_SIZE - offset );
       else
Index: branches/proxy/src/lib/network/network_stream.h
===================================================================
--- branches/proxy/src/lib/network/network_stream.h	(revision 9289)
+++ branches/proxy/src/lib/network/network_stream.h	(revision 9290)
@@ -52,5 +52,5 @@
     inline bool isClient() const { return (this->pInfo->nodeType == NET_CLIENT)? true:false; }
 //     inline bool isActive() const { return this->bActive; }
-    inline int getMaxConnections(){ return MAX_CONNECTIONS; }
+    inline int getMaxConnections(){ return NET_MAX_CONNECTIONS; }
 
     /* functions for the peerInfo information retreival */
Index: branches/proxy/src/lib/network/peer_info.h
===================================================================
--- branches/proxy/src/lib/network/peer_info.h	(revision 9289)
+++ branches/proxy/src/lib/network/peer_info.h	(revision 9290)
@@ -32,7 +32,10 @@
     int                 userId;
     int                 nodeType;
+    IPaddress           ip;
+
     NetworkSocket *     socket;
     Handshake *         handshake;
     ConnectionMonitor * connectionMonitor;
+
     int                 lastAckedState;
     int                 lastRecvedState;
Index: branches/proxy/src/lib/network/shared_network_data.cc
===================================================================
--- branches/proxy/src/lib/network/shared_network_data.cc	(revision 9289)
+++ branches/proxy/src/lib/network/shared_network_data.cc	(revision 9290)
@@ -35,5 +35,5 @@
   this->hostID = -1;
   this->defaultSyncStream = NULL;
-  this->newUniqueID = MAX_CONNECTIONS + 2;
+  this->newUniqueID = NET_MAX_CONNECTIONS + 2;
   this->nodeType = NET_CLIENT;
 }
Index: branches/proxy/src/lib/network/udp_socket.h
===================================================================
--- branches/proxy/src/lib/network/udp_socket.h	(revision 9289)
+++ branches/proxy/src/lib/network/udp_socket.h	(revision 9290)
@@ -31,5 +31,5 @@
 
     virtual void connectToServer( std::string host, int port );
-    
+
     virtual void disconnectServer();
 
@@ -37,5 +37,8 @@
 
     virtual int readPacket(byte * data, int maxLength);
-    
+
+    IPaddress getAddress() { return this->ip; }
+
+
   private:
     UdpServerSocket * serverSocket;   //!< will get packets here
@@ -44,12 +47,12 @@
     UDPsocket         socket;         //!< socket used to send/recieve
     UDPpacket *       packet;
-    
+
     byte              randomByte;     //!< contains random bytes & 0xFC
-    
+
     bool writeRawPacket( byte * data, int length );
     bool checkUdpCmd( byte udpCmd );
     bool checkRandomByte( byte rndByte );
     byte generateNewRandomByte();
-    
+
     void init();
 
