Index: branches/network/src/lib/coord/p_node.cc
===================================================================
--- branches/network/src/lib/coord/p_node.cc	(revision 6466)
+++ branches/network/src/lib/coord/p_node.cc	(revision 6469)
@@ -1039,5 +1039,5 @@
   SYNCHELP_READ_FKT( BaseObject::writeState );
 
-  PRINTF(0)("name = %s\n", this->getName());
+  //PRINTF(0)("name = %s\n", this->getName());
 
   char * parentName = NULL;
@@ -1092,5 +1092,5 @@
   {
     SYNCHELP_READ_STRINGM( childName );
-    PRINTF(0)("childname = %s\n", childName);
+    //PRINTF(0)("childname = %s\n", childName);
     addChild( childName );
     delete childName;
@@ -1113,5 +1113,5 @@
   SYNCHELP_WRITE_FKT( BaseObject::readState );
 
-  PRINTF(0)("name = %s\n", this->getName());
+  //PRINTF(0)("name = %s\n", this->getName());
 
   if ( this->parent )
@@ -1130,5 +1130,5 @@
   SYNCHELP_WRITE_FLOAT( this->relCoordinate.z );
 
-  PRINTF(0)("%s, %f, %f, %f\n", getClassName(), relCoordinate.x, relCoordinate.y, relCoordinate.z);
+  //PRINTF(0)("%s, %f, %f, %f\n", getClassName(), relCoordinate.x, relCoordinate.y, relCoordinate.z);
 
   SYNCHELP_WRITE_FLOAT( this->absCoordinate.x );
@@ -1136,5 +1136,5 @@
   SYNCHELP_WRITE_FLOAT( this->absCoordinate.z );
 
-  PRINTF(0)("%s, %f, %f, %f\n", getClassName(), absCoordinate.x, absCoordinate.y, absCoordinate.z);
+  //PRINTF(0)("%s, %f, %f, %f\n", getClassName(), absCoordinate.x, absCoordinate.y, absCoordinate.z);
 
   SYNCHELP_WRITE_FLOAT( this->relDirection.w );
@@ -1153,5 +1153,4 @@
   for (std::list<PNode*>::const_iterator it = children.begin(); it!=children.end(); it++)
   {
-    PRINTF(0)("childname = %s\n", (*it)->getName() );
     SYNCHELP_WRITE_STRING( (*it)->getName() );
   }
Index: branches/network/src/lib/network/network_game_manager.cc
===================================================================
--- branches/network/src/lib/network/network_game_manager.cc	(revision 6466)
+++ branches/network/src/lib/network/network_game_manager.cc	(revision 6469)
@@ -28,4 +28,5 @@
 #include "game_world.h"
 #include "world_entity.h"
+#include "network_manager.h"
 
 
@@ -84,6 +85,4 @@
   {
     b = data[i++];
-
-    PRINTF(0)("WriteBytes: b = %d\n", b);
 
     if ( isServer() )
@@ -145,5 +144,4 @@
     if ( b == REQUEST_ENTITY_LIST )
     {
-      PRINTF(0)("sending THE list\n");
       sendEntityList( sender );
       continue;
@@ -276,4 +274,5 @@
       delete b;
     }
+
   }
   else
@@ -404,5 +403,4 @@
     if ( !writeToClientBuffer( outBuffer[userID], (int)((*it)->getLeafClassID()) ) )
       return;
-      //PRINTF(0)("SendEntityList: ClassID = %x\n", (*it)->getRealClassID());
 
     if ( !writeToClientBuffer( outBuffer[userID], (int)((*it)->getUniqueID()) ) )
@@ -411,18 +409,4 @@
     if ( !writeToClientBuffer( outBuffer[userID], (int)((*it)->getOwner()) ) )
       return;
-
-
-    PRINTF(0)("id = %x %s %s\n", (int)((*it)->getLeafClassID()), (*it)->getClassName(), (*it)->getName());
-
-
-    /*if ( (*it)->isA(CL_WORLD_ENTITY) )
-    {
-      n = dynamic_cast<WorldEntity*>((*it))->readState( outBuffer[userID].buffer, outBuffer[userID].maxLength-outBuffer[userID].length );
-      if ( n = 0 )
-      {
-        PRINTF(2)("n = 0\n");
-      }
-      outBuffer[userID].length += n;
-  }*/
 
     it++;
@@ -478,4 +462,17 @@
     PRINTF(0)("Fabricated %s with id %d\n", s->getClassName(), s->getUniqueID());
 
+    //NOTE: hack to prevent collision
+    if ( b->isA(CL_WORLD_ENTITY) )
+    {
+      if ( NetworkManager::getInstance()->getHostID()!=0 )
+      {
+        static Vector pos = Vector(1000.0, 1000.0, 1000.0);
+        PNode *p = dynamic_cast<PNode*>(b);
+        p->setRelCoor(pos);
+        p->updateNode(0);
+        pos += Vector(1000.0, 1000.0, 1000.0);
+      }
+    }
+
     return b;
   }
@@ -720,5 +717,4 @@
     i += Converter::byteArrayToInt( &data[i], &owner );
 
-    PRINTF(0)("before fabricate\n");
     if ( classID != CL_NETWORK_GAME_MANAGER && classID != CL_HANDSHAKE )
     {
Index: branches/network/src/lib/network/network_stream.cc
===================================================================
--- branches/network/src/lib/network/network_stream.cc	(revision 6466)
+++ branches/network/src/lib/network/network_stream.cc	(revision 6469)
@@ -291,5 +291,5 @@
         dataLength -= sizeof(header);
 
-        PRINTF(0)("read %d bytes from socket uniqueID = %d\n", dataLength, header.synchronizeableID);
+        PRINTF(5)("read %d bytes from socket uniqueID = %d\n", dataLength, header.synchronizeableID);
 
         if ( dataLength != header.length )
Index: branches/network/src/world_entities/power_ups/param_power_up.cc
===================================================================
--- branches/network/src/world_entities/power_ups/param_power_up.cc	(revision 6466)
+++ branches/network/src/world_entities/power_ups/param_power_up.cc	(revision 6469)
@@ -138,4 +138,5 @@
     SYNCHELP_READ_INT( this->min_value );
     SYNCHELP_READ_INT( this->max_value );
+    respawn();
   }
 
@@ -162,5 +163,5 @@
     SYNCHELP_WRITE_FKT( PowerUp::readState );
 
-    int i = this->type;
+    int i = (int)this->type;
     SYNCHELP_WRITE_INT( i );
     SYNCHELP_WRITE_INT( this->value );
Index: branches/network/src/world_entities/skybox.cc
===================================================================
--- branches/network/src/world_entities/skybox.cc	(revision 6466)
+++ branches/network/src/world_entities/skybox.cc	(revision 6469)
@@ -230,6 +230,4 @@
   SYNCHELP_READ_STRINGM( textureName );
 
-  PRINT(0)("GOT DATA: size=%f texture='%s'\n", size, textureName);
-
   this->setSize( size );
   this->setTextureAndType( textureName, "jpg" );
Index: branches/network/src/world_entities/space_ships/space_ship.cc
===================================================================
--- branches/network/src/world_entities/space_ships/space_ship.cc	(revision 6466)
+++ branches/network/src/world_entities/space_ships/space_ship.cc	(revision 6469)
@@ -525,19 +525,66 @@
 }
 
+#define MASK_bUp         1
+#define MASK_bDown       2
+#define MASK_bLeft       4
+#define MASK_bRight      8
+#define MASK_bAscend    16
+#define MASK_bDescend   32
+#define MASK_bFire      64
+#define MASK_bRollL    128
+#define MASK_bRollR    256
+
+#define DATA_state       1
+#define DATA_flags       2
+#define DATA_mouse       3
 
 int SpaceShip::writeBytes( const byte * data, int length, int sender )
 {
-  setRequestedSync( false );
-  setIsOutOfSync( false );
-
   SYNCHELP_READ_BEGIN();
 
-  SYNCHELP_READ_FKT( WorldEntity::writeState );
+  byte b;
+  SYNCHELP_READ_BYTE( b );
+
+  if ( b == DATA_state && this->getHostID()!=this->getOwner() )
+  {
+    setRequestedSync( false );
+    setIsOutOfSync( false );
+    SYNCHELP_READ_FKT( WorldEntity::writeState );
+    SYNCHELP_READ_FLOAT( cycle );
+  }
+
+  if ( b == DATA_flags && this->getHostID()!=this->getOwner() )
+  {
+    int flags;
+    SYNCHELP_READ_INT( flags );
+
+    bUp = flags & MASK_bUp != 0;
+    bDown = flags & MASK_bDown != 0;
+    bLeft = flags & MASK_bLeft != 0;
+    bRight = flags & MASK_bRight != 0;
+    bAscend = flags & MASK_bAscend != 0;
+    bDescend = flags & MASK_bDescend != 0;
+    bFire = flags & MASK_bFire != 0;
+    bRollL = flags & MASK_bRollL != 0;
+    bRollR = flags & MASK_bRollR != 0;
+  }
+
+  if ( b == DATA_mouse && this->getHostID()!=this->getOwner() )
+  {
+    SYNCHELP_READ_FLOAT( xMouse );
+    SYNCHELP_READ_FLOAT( yMouse );
+    SYNCHELP_READ_FLOAT( mouseSensitivity ); //TODO: remove this two lines
+    SYNCHELP_READ_FLOAT( cycle );
+  }
 
   return SYNCHELP_READ_N;
 }
 
+
+
 int SpaceShip::readBytes( byte * data, int maxLength, int * reciever )
 {
+  SYNCHELP_WRITE_BEGIN();
+
   if ( isOutOfSync() && !requestedSync() && this->getHostID()!=this->getOwner() )
   {
@@ -551,12 +598,59 @@
     *reciever = rec;
 
-    SYNCHELP_WRITE_BEGIN();
+    SYNCHELP_WRITE_BYTE( (byte)DATA_state );
 
     SYNCHELP_WRITE_FKT( WorldEntity::readState );
+    SYNCHELP_WRITE_FLOAT( cycle );
 
     return SYNCHELP_WRITE_N;
   }
 
+
   *reciever = 0;
-  return 0;
-}
+
+  if ( this->getHostID()!=this->getOwner() )
+  {
+    int mask = 0;
+
+    if ( bUp )
+      mask |= MASK_bUp;
+    if ( bDown )
+      mask |= MASK_bDown;
+    if ( bLeft )
+      mask |= MASK_bLeft;
+    if ( bRight )
+      mask |= MASK_bRight;
+    if ( bAscend )
+      mask |= MASK_bAscend;
+    if ( bFire )
+      mask |= MASK_bFire;
+    if ( bRollL )
+      mask |= MASK_bRollL;
+    if ( bRollR )
+      mask |= MASK_bRollR;
+
+    static int oldMask = mask+1; //so it it different the first time!
+    static float oldxMouse = xMouse + 1.0;
+    static float oldyMouse = yMouse + 1.0;
+
+    if ( mask != oldMask )
+    {
+      oldMask = mask;
+      SYNCHELP_WRITE_BYTE( DATA_flags );
+      SYNCHELP_WRITE_INT( mask );
+    }
+
+    if ( oldxMouse != xMouse || oldyMouse != yMouse )
+    {
+      oldxMouse = xMouse;
+      oldyMouse = yMouse;
+      SYNCHELP_WRITE_BYTE( DATA_mouse );
+      SYNCHELP_WRITE_FLOAT( xMouse );
+      SYNCHELP_WRITE_FLOAT( yMouse );
+      SYNCHELP_WRITE_FLOAT( mouseSensitivity );
+      SYNCHELP_WRITE_FLOAT( cycle );  //TODO: remove this two lines
+    }
+  }
+
+  return SYNCHELP_WRITE_N;
+}
Index: branches/network/src/world_entities/world_entity.cc
===================================================================
--- branches/network/src/world_entities/world_entity.cc	(revision 6466)
+++ branches/network/src/world_entities/world_entity.cc	(revision 6469)
@@ -402,6 +402,15 @@
 
   SYNCHELP_READ_STRINGM( modelFileName );
+
   if ( strcmp(modelFileName, "") )
-    this->md2TextureFileName = modelFileName;
+    if ( strstr(modelFileName, ResourceManager::getInstance()->getDataDir()) )
+    {
+      this->md2TextureFileName = new char[strlen(modelFileName)-strlen(ResourceManager::getInstance()->getDataDir())+1];
+      strcpy((char*)this->md2TextureFileName, modelFileName+strlen(ResourceManager::getInstance()->getDataDir()));
+    }
+    else
+    {
+      this->md2TextureFileName = modelFileName;
+    }
 
   return SYNCHELP_READ_N;
