Index: /trunk/src/util/game_rules.h
===================================================================
--- /trunk/src/util/game_rules.h	(revision 7043)
+++ /trunk/src/util/game_rules.h	(revision 7044)
@@ -26,6 +26,6 @@
 
 
-    virtual void onPlayerSpawn(Player* player) {}
-    virtual void onPlayerDeath(Player* player) {}
+    virtual void onPlayerSpawn() {}
+    virtual void onPlayerDeath() {}
 
 
Index: /trunk/src/util/multiplayer_team_deathmatch.cc
===================================================================
--- /trunk/src/util/multiplayer_team_deathmatch.cc	(revision 7043)
+++ /trunk/src/util/multiplayer_team_deathmatch.cc	(revision 7044)
@@ -23,4 +23,7 @@
 #include "state.h"
 
+#include "player.h"
+#include "playable.h"
+
 
 using namespace std;
@@ -42,7 +45,9 @@
 
   this->deathScreen = new Billboard();
-  this->deathScreen->setSize(State::getResX(), State::getResY());
+  this->deathScreen->setSize(State::getResX()/4.0, State::getResY()/4.0);
   this->deathScreen->setAbsCoor2D(State::getResX()/2.0f, State::getResY()/2.0f);
-  //this->deathScreen->setVisibility(false);
+  this->deathScreen->setVisibility(false);
+
+  this->localPlayer = State::getPlayer();
 
   if( root != NULL)
@@ -54,5 +59,8 @@
  */
 MultiplayerTeamDeathmatch::~MultiplayerTeamDeathmatch()
-{}
+{
+  if( this->deathScreen)
+    delete this->deathScreen;
+}
 
 
@@ -87,7 +95,8 @@
  * @param player the spawned player
  */
-void MultiplayerTeamDeathmatch::onPlayerSpawn(Player* player)
+void MultiplayerTeamDeathmatch::onPlayerSpawn()
 {
-  this->bLocalPlayerDead = true;
+  this->bLocalPlayerDead = false;
+  this->deathScreen->setVisibility(false);
 }
 
@@ -97,8 +106,8 @@
  * @param player the killed player
  */
-void MultiplayerTeamDeathmatch::onPlayerDeath(Player* player)
+void MultiplayerTeamDeathmatch::onPlayerDeath()
 {
-  this->localPlayer = player;
   this->bLocalPlayerDead = true;
+  this->deathScreen->setVisibility(true);
 }
 
@@ -118,9 +127,9 @@
 
     // long enough dead?
-    if( dt >= this->deathTimeout)
+    if( this->timeout >= this->deathTimeout)
     {
       this->timeout = 0.0f;
-
       // respawn
+      (State::getPlayer())->getPlayable()->respawn();
     }
   }
Index: /trunk/src/util/multiplayer_team_deathmatch.h
===================================================================
--- /trunk/src/util/multiplayer_team_deathmatch.h	(revision 7043)
+++ /trunk/src/util/multiplayer_team_deathmatch.h	(revision 7044)
@@ -29,6 +29,6 @@
 
 
-    virtual void onPlayerSpawn(Player* player);
-    virtual void onPlayerDeath(Player* player);
+    virtual void onPlayerSpawn();
+    virtual void onPlayerDeath();
 
 
Index: /trunk/src/world_entities/playable.cc
===================================================================
--- /trunk/src/world_entities/playable.cc	(revision 7043)
+++ /trunk/src/world_entities/playable.cc	(revision 7044)
@@ -27,4 +27,5 @@
 #include "power_ups/param_power_up.h"
 
+#include "game_rules.h"
 
 #include "dot_emitter.h"
@@ -136,13 +137,12 @@
 
 
-void Playable::die()
-{
-    //this->deactivateNode();
-  this->toList(OM_DEAD);
-  this->emitter->setSystem(explosionParticles);
-  this->setAbsCoor(0, 0, 0);
-    //this->setAbsDir(Vector(1,0,0), 0);
-  this->emitter->setSystem(NULL);
-
+void Playable::respawn()
+{
+  PRINTF(0)("Playable respawn\n");
+  // only if this is the spaceship of the player
+  if( this == State::getPlayer()->getPlayable())
+    State::getGameRules()->onPlayerSpawn();
+
+  this->setAbsCoor(0.0, 0.0, 0.0);
 
   if( this->getOwner()%2 == 0)
@@ -150,4 +150,22 @@
   else
     this->toList(OM_GROUP_01);
+}
+
+
+void Playable::die()
+{
+  PRINTF(0)("Playable dies\n");
+  // only if this is the spaceship of the player
+  if( this == State::getPlayer()->getPlayable())
+    State::getGameRules()->onPlayerDeath();
+
+  this->toList(OM_DEAD);
+  //.HACK: moves the entity to an unknown place far far away: in the future, GameRules will look for that
+  this->setAbsCoor(-2000.0, -2000.0, -2000.0);
+
+  //explosion hack
+  this->emitter->setSystem(explosionParticles);
+  this->setAbsCoor(0, 0, 0);
+  this->emitter->setSystem(NULL);
 }
 
Index: /trunk/src/world_entities/playable.h
===================================================================
--- /trunk/src/world_entities/playable.h	(revision 7043)
+++ /trunk/src/world_entities/playable.h	(revision 7044)
@@ -30,4 +30,5 @@
 
     virtual void die();
+    virtual void respawn();
 
     virtual bool pickup(PowerUp* powerUp);
