Index: branches/network/src/util/game_rules.h
===================================================================
--- branches/network/src/util/game_rules.h	(revision 8798)
+++ branches/network/src/util/game_rules.h	(revision 8801)
@@ -35,8 +35,8 @@
     /** adding a kill event to the kill list @param kill the kill object containing all infos */
     void registerKill(const Kill& kill);
+    virtual void registerSpawn( WorldEntity * we ){}
 
     virtual void onPlayerSpawn() {}
     virtual void onPlayerDeath() {}
-
 
     virtual void tick(float dt) = 0;
Index: branches/network/src/util/multiplayer_team_deathmatch.cc
===================================================================
--- branches/network/src/util/multiplayer_team_deathmatch.cc	(revision 8798)
+++ branches/network/src/util/multiplayer_team_deathmatch.cc	(revision 8801)
@@ -139,24 +139,4 @@
 
 /**
- * called when the player enters the game
- * @param player the spawned player
- */
-void MultiplayerTeamDeathmatch::onPlayerSpawn()
-{
-  this->bLocalPlayerDead = false;
-}
-
-
-/**
- * when the player is killed
- * @param player the killed player
- */
-void MultiplayerTeamDeathmatch::onPlayerDeath()
-{
-  this->bLocalPlayerDead = true;
-}
-
-
-/**
  * time tick
  * @param dt time
@@ -786,2 +766,11 @@
 }
 
+/**
+ * this function is called on player respawn
+ * @param we 
+ */
+void MultiplayerTeamDeathmatch::registerSpawn( WorldEntity * we )
+{
+  onRespawn( we->getOwner() );
+}
+
Index: branches/network/src/util/multiplayer_team_deathmatch.h
===================================================================
--- branches/network/src/util/multiplayer_team_deathmatch.h	(revision 8798)
+++ branches/network/src/util/multiplayer_team_deathmatch.h	(revision 8801)
@@ -41,7 +41,5 @@
     virtual std::string getPlayableModelFileName( int userId, int team, ClassID classId );
 
-    virtual void onPlayerSpawn();
-    virtual void onPlayerDeath();
-
+    virtual void registerSpawn( WorldEntity * we );
 
     virtual void tick(float dt);
Index: branches/network/src/world_entities/spawning_point.cc
===================================================================
--- branches/network/src/world_entities/spawning_point.cc	(revision 8798)
+++ branches/network/src/world_entities/spawning_point.cc	(revision 8801)
@@ -24,5 +24,6 @@
 #include "compiler.h"
 
-#include <map>
+#include "state.h"
+#include "game_rules.h"
 
 
@@ -107,5 +108,10 @@
 void SpawningPoint::pushEntity(WorldEntity* entity, float delay)
 {
-  this->queue[entity] = this->localTimer + delay;
+  QueueEntry qe;
+  qe.entity = entity;
+  qe.list = entity->getOMListNumber();
+  qe.respawnTime = this->localTimer + delay;
+  
+  queue.push_back( qe );
 }
 
@@ -119,7 +125,8 @@
 
 
-  //BaseObject* spawningEntity = Factory::fabricate(this->classID);
-  //   if( likely(this->world != NULL))
-  //     this->world->spawn(dynamic_cast<WorldEntity*>(spawningEntity));
+  entity->setAbsCoor( this->getAbsCoor() );
+  entity->setAbsDir( this->getAbsDir() );
+  
+  //TODO set camera (not smooth)
 }
 
@@ -135,13 +142,29 @@
   this->localTimer += dt;
 
-  std::map<WorldEntity*, float>::iterator it = this->queue.begin();
-  for( ; it != this->queue.end(); it++)
+  std::list<QueueEntry>::iterator it = this->queue.begin();
+  for( ; it != this->queue.end(); )
   {
-    //
-    if( it->second <= this->localTimer)
+    
+    if( it->respawnTime <= this->localTimer)
     {
       //spawn the player
-      this->spawn(it->first);
+      this->spawn(it->entity);
+      
+      it->entity->toList( it->list );
+      
+      if ( State::getGameRules() )
+      {
+        (State::getGameRules())->registerSpawn( it->entity );
+      }
+      
+      std::list<QueueEntry>::iterator delit = it;
+      it++;
+      
+      queue.erase( delit );
+      
+      continue;
     }
+    
+    it++;
   }
 
Index: branches/network/src/world_entities/spawning_point.h
===================================================================
--- branches/network/src/world_entities/spawning_point.h	(revision 8798)
+++ branches/network/src/world_entities/spawning_point.h	(revision 8801)
@@ -8,11 +8,17 @@
 #define _SPAWNING_POINT
 
-#include "world_entity.h"
+#include "playable.h"
 
-#include <map>
+#include <list>
 
 class World;
 class TiXmlElement;
 
+struct QueueEntry
+{
+  float respawnTime;
+  WorldEntity * entity;
+  OM_LIST list;
+};
 
 //!< used to indicate what type of objects are spawned by this spawning point
@@ -78,5 +84,5 @@
     ClassID                         classid;                        //!< the classid of the entity to spawn
     SpawningPointMode               mode;                           //!< the mode of the spawning point
-    std::map<WorldEntity*, float>   queue;                          //!< queue of waiting WorldEntities to be spawned
+    std::list<QueueEntry>           queue;                          //!< queue of waiting WorldEntities to be spawned
     bool                            bSpawning;                      //!< flag to indicate if this spawning point is active or not
 };
