Index: branches/presentation/src/world_entities/creatures/fps_player.cc
===================================================================
--- branches/presentation/src/world_entities/creatures/fps_player.cc	(revision 9161)
+++ branches/presentation/src/world_entities/creatures/fps_player.cc	(revision 9162)
@@ -416,2 +416,9 @@
 }
 
+void FPSPlayer::destroy( WorldEntity* killer )
+{
+  Playable::destroy( killer );
+  
+  toList( OM_DEAD );
+}
+
Index: branches/presentation/src/world_entities/creatures/fps_player.h
===================================================================
--- branches/presentation/src/world_entities/creatures/fps_player.h	(revision 9161)
+++ branches/presentation/src/world_entities/creatures/fps_player.h	(revision 9162)
@@ -27,4 +27,5 @@
     virtual void reset();
     
+    virtual void destroy(WorldEntity* killer);
     virtual void respawn();
 
Index: branches/presentation/src/world_entities/npcs/generic_npc.cc
===================================================================
--- branches/presentation/src/world_entities/npcs/generic_npc.cc	(revision 9161)
+++ branches/presentation/src/world_entities/npcs/generic_npc.cc	(revision 9162)
@@ -581,5 +581,5 @@
 
 
-void GenericNPC::destroy()
+void GenericNPC::destroy(WorldEntity* killer)
 {
   int randi = (int)(5.0f * (float)rand()/(float)RAND_MAX);
Index: branches/presentation/src/world_entities/npcs/generic_npc.h
===================================================================
--- branches/presentation/src/world_entities/npcs/generic_npc.h	(revision 9161)
+++ branches/presentation/src/world_entities/npcs/generic_npc.h	(revision 9162)
@@ -77,5 +77,5 @@
 
 
-  void destroy();
+  virtual void destroy(WorldEntity* killer);
 
   private:
Index: branches/presentation/src/world_entities/npcs/ground_turret.cc
===================================================================
--- branches/presentation/src/world_entities/npcs/ground_turret.cc	(revision 9161)
+++ branches/presentation/src/world_entities/npcs/ground_turret.cc	(revision 9162)
@@ -176,5 +176,5 @@
 }
 
-void GroundTurret::destroy()
+void GroundTurret::destroy(WorldEntity* killer)
 {
   this->setAbsDirSoft(Quaternion(-90, Vector(0,0,1)), 90);
Index: branches/presentation/src/world_entities/npcs/ground_turret.h
===================================================================
--- branches/presentation/src/world_entities/npcs/ground_turret.h	(revision 9161)
+++ branches/presentation/src/world_entities/npcs/ground_turret.h	(revision 9162)
@@ -25,5 +25,5 @@
   virtual void leftWorld ();
 
-  virtual void destroy();
+  virtual void destroy(WorldEntity* killer);
 
   virtual void draw() const;
Index: branches/presentation/src/world_entities/playable.cc
===================================================================
--- branches/presentation/src/world_entities/playable.cc	(revision 9161)
+++ branches/presentation/src/world_entities/playable.cc	(revision 9162)
@@ -401,9 +401,6 @@
 
 
-void Playable::destroy()
-{
-  Explosion::explode(dynamic_cast<PNode*>(this), Vector(1.0f, 1.0f, 1.0f));
-
-
+void Playable::destroy(WorldEntity* killer)
+{
   if( !this->bDead)
   {
@@ -414,13 +411,9 @@
       if( this == State::getPlayer()->getPlayable())
         State::getGameRules()->onPlayerDeath();
-
-      //     this->toList(OM_GROUP_05);
-      //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->bDead = true;
+    
+    if( State::getGameRules() != NULL)
+      State::getGameRules()->registerKill(Kill(killer, this));
   }
 }
Index: branches/presentation/src/world_entities/playable.h
===================================================================
--- branches/presentation/src/world_entities/playable.h	(revision 9161)
+++ branches/presentation/src/world_entities/playable.h	(revision 9162)
@@ -80,5 +80,5 @@
 
   // WorldEntity Extensions
-  virtual void destroy();
+  virtual void destroy(WorldEntity* killer);
   virtual void respawn();
   virtual void collidesWith(WorldEntity* entity, const Vector& location);
Index: branches/presentation/src/world_entities/projectiles/guided_missile.cc
===================================================================
--- branches/presentation/src/world_entities/projectiles/guided_missile.cc	(revision 9161)
+++ branches/presentation/src/world_entities/projectiles/guided_missile.cc	(revision 9162)
@@ -135,5 +135,5 @@
 {
   if (this->hitEntity != entity)
-    this->destroy();
+    this->destroy( entity );
   this->hitEntity = entity;
 }
@@ -180,7 +180,7 @@
  *  the function gets called, when the projectile is destroyed
  */
-void GuidedMissile::destroy ()
-{
-  Projectile::destroy();
+void GuidedMissile::destroy (WorldEntity* killer)
+{
+  Projectile::destroy( killer );
   PRINTF(5)("DESTROY GuidedMissile\n");
   this->lifeCycle = .95; //!< @todo calculate this usefully.
Index: branches/presentation/src/world_entities/projectiles/guided_missile.h
===================================================================
--- branches/presentation/src/world_entities/projectiles/guided_missile.h	(revision 9161)
+++ branches/presentation/src/world_entities/projectiles/guided_missile.h	(revision 9162)
@@ -26,5 +26,5 @@
     virtual void collidesWith(WorldEntity* entity, const Vector& location);
 
-    virtual void destroy ();
+    virtual void destroy (WorldEntity* killer);
 
     virtual void tick (float time);
Index: branches/presentation/src/world_entities/projectiles/hyperblast.cc
===================================================================
--- branches/presentation/src/world_entities/projectiles/hyperblast.cc	(revision 9161)
+++ branches/presentation/src/world_entities/projectiles/hyperblast.cc	(revision 9162)
@@ -126,7 +126,7 @@
  *  the function gets called, when the projectile is destroyed
 */
-void Hyperblast::destroy ()
+void Hyperblast::destroy (WorldEntity* killer)
 {
-  Projectile::destroy();
+  Projectile::destroy( killer );
 
   PRINTF(5)("DESTROY Hyperblast\n");
Index: branches/presentation/src/world_entities/projectiles/hyperblast.h
===================================================================
--- branches/presentation/src/world_entities/projectiles/hyperblast.h	(revision 9161)
+++ branches/presentation/src/world_entities/projectiles/hyperblast.h	(revision 9162)
@@ -27,5 +27,5 @@
     virtual void collidesWith(WorldEntity* entity, const Vector& location);
 
-    virtual void destroy ();
+    virtual void destroy (WorldEntity* killer);
 
     virtual void tick (float time);
Index: branches/presentation/src/world_entities/projectiles/laser.cc
===================================================================
--- branches/presentation/src/world_entities/projectiles/laser.cc	(revision 9161)
+++ branches/presentation/src/world_entities/projectiles/laser.cc	(revision 9162)
@@ -107,5 +107,5 @@
 {
   if (this->hitEntity != entity && entity->isA(CL_NPC))
-    this->destroy();
+    this->destroy( entity );
   this->hitEntity = entity;
 }
@@ -128,7 +128,7 @@
  *  the function gets called, when the projectile is destroyed
 */
-void Laser::destroy ()
+void Laser::destroy (WorldEntity* killer)
 {
-  Projectile::destroy();
+  Projectile::destroy( killer );
   PRINTF(5)("DESTROY Laser\n");
   this->lifeCycle = .95; //!< @todo calculate this usefully.
Index: branches/presentation/src/world_entities/projectiles/laser.h
===================================================================
--- branches/presentation/src/world_entities/projectiles/laser.h	(revision 9161)
+++ branches/presentation/src/world_entities/projectiles/laser.h	(revision 9162)
@@ -27,5 +27,5 @@
     virtual void collidesWith(WorldEntity* entity, const Vector& location);
 
-    virtual void destroy ();
+    virtual void destroy (WorldEntity* killer);
 
     virtual void tick (float dt);
Index: branches/presentation/src/world_entities/projectiles/projectile.cc
===================================================================
--- branches/presentation/src/world_entities/projectiles/projectile.cc	(revision 9161)
+++ branches/presentation/src/world_entities/projectiles/projectile.cc	(revision 9162)
@@ -162,5 +162,5 @@
 
   if (this->tickLifeCycle(dt))
-    this->destroy();
+    this->destroy( NULL );
 }
 
@@ -169,5 +169,5 @@
  *  the function gets called, when the projectile is destroyed
 */
-void Projectile::destroy ()
+void Projectile::destroy (WorldEntity* killer)
 {
   if (this->explosionBuffer != NULL)
Index: branches/presentation/src/world_entities/projectiles/projectile.h
===================================================================
--- branches/presentation/src/world_entities/projectiles/projectile.h	(revision 9161)
+++ branches/presentation/src/world_entities/projectiles/projectile.h	(revision 9162)
@@ -41,5 +41,5 @@
     virtual void deactivate() = 0;
 
-    virtual void destroy ();
+    virtual void destroy (WorldEntity* killer);
 
     virtual void tick (float dt);
Index: branches/presentation/src/world_entities/projectiles/rocket.cc
===================================================================
--- branches/presentation/src/world_entities/projectiles/rocket.cc	(revision 9161)
+++ branches/presentation/src/world_entities/projectiles/rocket.cc	(revision 9162)
@@ -128,5 +128,5 @@
 {
   if (this->hitEntity != entity)
-    this->destroy();
+    this->destroy( entity );
   this->hitEntity = entity;
 }
@@ -149,7 +149,7 @@
  *  the function gets called, when the projectile is destroyed
 */
-void Rocket::destroy ()
+void Rocket::destroy (WorldEntity* killer)
 {
-  Projectile::destroy();
+  Projectile::destroy( killer );
 
   PRINTF(5)("DESTROY Rocket\n");
Index: branches/presentation/src/world_entities/projectiles/rocket.h
===================================================================
--- branches/presentation/src/world_entities/projectiles/rocket.h	(revision 9161)
+++ branches/presentation/src/world_entities/projectiles/rocket.h	(revision 9162)
@@ -27,5 +27,5 @@
     virtual void collidesWith(WorldEntity* entity, const Vector& location);
 
-    virtual void destroy ();
+    virtual void destroy (WorldEntity* killer);
 
     virtual void tick (float time);
Index: branches/presentation/src/world_entities/projectiles/test_bullet.cc
===================================================================
--- branches/presentation/src/world_entities/projectiles/test_bullet.cc	(revision 9161)
+++ branches/presentation/src/world_entities/projectiles/test_bullet.cc	(revision 9162)
@@ -119,5 +119,5 @@
 {
   if (this->hitEntity != entity && entity->isA(CL_NPC))
-    this->destroy();
+    this->destroy( entity );
   this->hitEntity = entity;
 }
@@ -147,5 +147,5 @@
  *  the function gets called, when the projectile is destroyed
 */
-void TestBullet::destroy ()
+void TestBullet::destroy (WorldEntity* killer)
 {
   PRINTF(5)("DESTROY TestBullet\n");
Index: branches/presentation/src/world_entities/projectiles/test_bullet.h
===================================================================
--- branches/presentation/src/world_entities/projectiles/test_bullet.h	(revision 9161)
+++ branches/presentation/src/world_entities/projectiles/test_bullet.h	(revision 9162)
@@ -27,5 +27,5 @@
     virtual void collidesWith(WorldEntity* entity, const Vector& location);
 
-    virtual void destroy ();
+    virtual void destroy (WorldEntity* killer);
 
     virtual void tick (float time);
Index: branches/presentation/src/world_entities/space_ships/space_ship.cc
===================================================================
--- branches/presentation/src/world_entities/space_ships/space_ship.cc	(revision 9161)
+++ branches/presentation/src/world_entities/space_ships/space_ship.cc	(revision 9162)
@@ -513,5 +513,5 @@
 }
 
-void SpaceShip::destroy( )
+void SpaceShip::destroy( WorldEntity* killer )
 {
   PRINTF(0)("spaceship destroy\n");
Index: branches/presentation/src/world_entities/space_ships/space_ship.h
===================================================================
--- branches/presentation/src/world_entities/space_ships/space_ship.h	(revision 9161)
+++ branches/presentation/src/world_entities/space_ships/space_ship.h	(revision 9162)
@@ -37,5 +37,5 @@
     virtual void leftWorld();
     
-    virtual void destroy();
+    virtual void destroy(WorldEntity* killer);
     virtual void respawn();
 
Index: branches/presentation/src/world_entities/test_entity.cc
===================================================================
--- branches/presentation/src/world_entities/test_entity.cc	(revision 9161)
+++ branches/presentation/src/world_entities/test_entity.cc	(revision 9162)
@@ -116,5 +116,5 @@
   if( this->lastCollided != entity)
   {
-    this->destroy();
+    this->destroy( entity );
     this->lastCollided = entity;
 
@@ -126,5 +126,5 @@
 
 
-void TestEntity::destroy()
+void TestEntity::destroy(WorldEntity* killer)
 {
   if( this->bDeath)
Index: branches/presentation/src/world_entities/test_entity.h
===================================================================
--- branches/presentation/src/world_entities/test_entity.h	(revision 9161)
+++ branches/presentation/src/world_entities/test_entity.h	(revision 9162)
@@ -25,5 +25,5 @@
   void setAnim(int animationIndex, int animPlaybackMode);
 
-  virtual void destroy();
+  virtual void destroy(WorldEntity* killer);
 
   virtual void tick (float time);
Index: branches/presentation/src/world_entities/world_entity.cc
===================================================================
--- branches/presentation/src/world_entities/world_entity.cc	(revision 9161)
+++ branches/presentation/src/world_entities/world_entity.cc	(revision 9162)
@@ -750,8 +750,5 @@
   else
   {
-    this->destroy();
-
-    if( State::getGameRules() != NULL)
-      State::getGameRules()->registerKill(Kill(killer, this));
+    this->destroy( killer );
   }
 }
@@ -761,5 +758,5 @@
  * destoys the world entity
  */
-void WorldEntity::destroy()
+void WorldEntity::destroy(WorldEntity* killer)
 {
   this->toList(OM_DEAD);
Index: branches/presentation/src/world_entities/world_entity.h
===================================================================
--- branches/presentation/src/world_entities/world_entity.h	(revision 9161)
+++ branches/presentation/src/world_entities/world_entity.h	(revision 9162)
@@ -101,5 +101,5 @@
   virtual void hit(float damage, WorldEntity* killer);
 
-  virtual void destroy();
+  virtual void destroy( WorldEntity* killer );
 
 
