Index: code/branches/FICN/src/network/Client.cc
===================================================================
--- code/branches/FICN/src/network/Client.cc	(revision 399)
+++ code/branches/FICN/src/network/Client.cc	(revision 400)
@@ -154,3 +154,9 @@
   }
   
+  void Client::processClassid(classid *clid){
+    
+    
+    
+  }
+  
 }
Index: code/branches/FICN/src/network/Client.h
===================================================================
--- code/branches/FICN/src/network/Client.h	(revision 399)
+++ code/branches/FICN/src/network/Client.h	(revision 400)
@@ -19,4 +19,5 @@
 #include "PacketManager.h"
 #include "GameStateManager.h"
+#include "orxonox/core/IdentifierIncludes.h"
 
 
@@ -56,4 +57,6 @@
   // implement data processing functions of PacketDecoder
   void processGamestate( GameState *data);
+  void processClassid(classid *clid);
+
 };
 
Index: code/branches/FICN/src/network/ConnectionManager.cc
===================================================================
--- code/branches/FICN/src/network/ConnectionManager.cc	(revision 399)
+++ code/branches/FICN/src/network/ConnectionManager.cc	(revision 400)
@@ -198,7 +198,9 @@
 
   bool ConnectionManager::addClient(ENetEvent *event){
+    int id=clientVector.size();
     clientVector.push_back((event->peer->address));
-    clientMap[event->peer->address]=clientVector.size()-1;
+    clientMap[event->peer->address]=id;
     peerMap[event->peer->address]=*(event->peer);
+    syncClassid(id);
     return true;
   }
@@ -216,3 +218,20 @@
   }
   
+  void ConnectionManager::syncClassid(int clientID){
+    int i=0;
+    std::string classname;
+    bool abort=false;
+    orxonox::Identifier *id;
+    while(!abort){
+      id = orxonox::ID(i);
+      if(id == NULL)
+        abort=true;
+      else{
+        classname = id->getName();
+        addPacket(packet_gen.clid( i, classname ),clientID);
+      }
+    }
+    sendPackets();
+  }
+  
 }
Index: code/branches/FICN/src/network/ConnectionManager.h
===================================================================
--- code/branches/FICN/src/network/ConnectionManager.h	(revision 399)
+++ code/branches/FICN/src/network/ConnectionManager.h	(revision 400)
@@ -25,4 +25,6 @@
 #include "ConnectionManager.h"
 #include "PacketBuffer.h"
+#include "PacketManager.h"
+#include "orxonox/core/IdentifierIncludes.h"
 
 namespace std{
@@ -67,6 +69,8 @@
     int getClientID(ENetPeer peer);
     int getClientID(ENetAddress address);
+    void syncClassid(int clientID);
     ENetPeer getClientPeer(int clientID);
     PacketBuffer buffer;
+    PacketGenerator packet_gen;
     
     ENetHost *server;
Index: code/branches/FICN/src/network/PacketDecoder.cc
===================================================================
--- code/branches/FICN/src/network/PacketDecoder.cc	(revision 399)
+++ code/branches/FICN/src/network/PacketDecoder.cc	(revision 400)
@@ -44,4 +44,8 @@
 		return true;
 		break;
+          case CLASSID:
+                clid(packet);
+                return true;
+                break;
 	}
 	return false;
@@ -126,4 +130,16 @@
 }
 
+void PacketDecoder::clid( ENetPacket *packet)
+{
+        classid* cid = new classid;
+        cid->length = ((classid*)(packet->data))->length;
+        cid->id = ((classid *)(packet->data))->id;
+        cid->classid = ((classid *)(packet->data))->classid;
+        cid->message = (const char *)malloc(cid->length);
+        enet_packet_destroy( packet );
+        processClassid(&cid);
+}
+
+
 // now the data processing functions:
 
@@ -131,4 +147,11 @@
   printChat(data);
 }
+
+void PacketDecoder::processClassid( classid *cid){
+  printClassid(cid);
+  return;
+}
+
+
 
 //these are some print functions for test stuff
@@ -163,2 +186,10 @@
 	cout << "size of gamestate: " << data->size << endl;
 }
+
+void PacketDecoder::printClassid( classid *cid)
+{
+        cout << "id of classid:    " << cid->id << endl;
+        cout << "size of classid:  " << cid->length << endl;
+        cout << "ID of classid:    " << cid->classid <<endl;
+        cout << "data of classid:  " << cid->message <<endl;
+}
Index: code/branches/FICN/src/network/PacketGenerator.cc
===================================================================
--- code/branches/FICN/src/network/PacketGenerator.cc	(revision 399)
+++ code/branches/FICN/src/network/PacketGenerator.cc	(revision 400)
@@ -86,2 +86,14 @@
 	return packet;
 }
+
+ENetPacket* PacketGenerator::clid( int classid, std::string classname, int reliable ){
+        unsigned char* data = (unsigned char *)malloc(3*sizeof(int)+classname.length()+1);
+        *(int *)data = CLASSID;
+        *((int *)data+1) = classname.length()+1;
+        *((int *)data+2) = classid;
+        memcpy( (void *)(data+3*sizeof(int)), classname.c_str(), classname.length()+1);
+        ENetPacket *packet = enet_packet_create( data , 3*sizeof(int)+classname.length()+1, reliable );
+        return packet;
+}
+
+
Index: code/branches/FICN/src/network/PacketManager.h
===================================================================
--- code/branches/FICN/src/network/PacketManager.h	(revision 399)
+++ code/branches/FICN/src/network/PacketManager.h	(revision 400)
@@ -2,4 +2,5 @@
 #define PACKETMANAGER_H_
 
+#include <string>
 #include <enet/enet.h>
 #include "GameStateManager.h"
@@ -13,5 +14,6 @@
 	KEYBOARD,
 	CHAT,
-	GAMESTATE
+	GAMESTATE ,
+        CLASSID
 };
 
@@ -32,4 +34,5 @@
 	ENetPacket* chatMessage( const char* message, int reliable = ENET_PACKET_FLAG_RELIABLE );
 	ENetPacket* gstate( GameState* states, int reliable = ENET_PACKET_FLAG_RELIABLE );
+        ENetPacket* clid( int classid, std::string classname, int reliable = ENET_PACKET_FLAG_RELIABLE );
 private:
 	//used to set the bytes in the right order
@@ -85,4 +88,11 @@
 		const char* message;
 	};
+        
+        struct classid{
+          int id;
+          int length;
+          int classid;
+          const char *message;
+        };
 	
 	void acknowledgement( ENetPacket* packet );
@@ -91,4 +101,5 @@
 	void chatMessage( ENetPacket* packet );
 	void gstate( ENetPacket* packet );
+        void clid( ENetPacket *packet);
 	
   //process data
@@ -96,4 +107,5 @@
   //virtual void processGamestate(GameState *state);
   virtual void processChat( chat *data);
+  virtual void processClassid( classid *cid);
   //virtual void processAck( ack *data);
   
@@ -104,4 +116,5 @@
 	void printChat( chat* data );
 	void printGamestate( GameState* data );
+        void printClassid( classid *cid);
 };
 }
Index: code/branches/FICN/src/network/Server.cc
===================================================================
--- code/branches/FICN/src/network/Server.cc	(revision 399)
+++ code/branches/FICN/src/network/Server.cc	(revision 400)
@@ -112,3 +112,4 @@
   }
   
+  
 }
