Index: code/trunk/src/modules/weapons/MuzzleFlash.cc
===================================================================
--- code/trunk/src/modules/weapons/MuzzleFlash.cc	(revision 5781)
+++ code/trunk/src/modules/weapons/MuzzleFlash.cc	(revision 5929)
@@ -41,13 +41,6 @@
         RegisterObject(MuzzleFlash);
         this->setScale(0.1f);
-        
-        this->delayTimer_.setTimer(0.1f, false, this, createExecutor(createFunctor(&MuzzleFlash::destroy)));
 
+        this->delayTimer_.setTimer(0.1f, false, createExecutor(createFunctor(&MuzzleFlash::destroy, this)));
     }
-
-    void MuzzleFlash::destroy()
-    {
-        delete this;
-    }
- 
 }
Index: code/trunk/src/modules/weapons/MuzzleFlash.h
===================================================================
--- code/trunk/src/modules/weapons/MuzzleFlash.h	(revision 5781)
+++ code/trunk/src/modules/weapons/MuzzleFlash.h	(revision 5929)
@@ -43,10 +43,6 @@
             virtual ~MuzzleFlash() {}
 
-
-
         private:
-            void destroy();
-            Timer<MuzzleFlash> delayTimer_;
-
+            Timer delayTimer_;
     };
 }
Index: code/trunk/src/modules/weapons/WeaponsPrereqs.h
===================================================================
--- code/trunk/src/modules/weapons/WeaponsPrereqs.h	(revision 5781)
+++ code/trunk/src/modules/weapons/WeaponsPrereqs.h	(revision 5929)
@@ -28,6 +28,7 @@
 
 /**
-  @file
-  @brief Contains all the necessary forward declarations for all classes and structs.
+@file
+@brief
+    Shared library macros, enums, constants and forward declarations for the weapons module
 */
 
@@ -36,5 +37,4 @@
 
 #include "OrxonoxConfig.h"
-
 #include "OrxonoxPrereqs.h"
 
@@ -42,4 +42,5 @@
 // Shared library settings
 //-----------------------------------------------------------------------
+
 #if defined(ORXONOX_PLATFORM_WINDOWS) && !defined(ORXONOX_STATIC_BUILD)
 #  ifdef WEAPONS_SHARED_BUILD
@@ -64,20 +65,23 @@
 namespace orxonox
 {
-    class LaserFire;
+    class MuzzleFlash;
+
+    // munitions
+    class FusionMunition;
+    class LaserMunition;
+    class ReplenishingMunition;
+
+    // projectiles
+    class BillboardProjectile;
+    class LightningGunProjectile;
+    class ParticleProjectile;
+    class Projectile;
+
+    // weaponmodes
+    class EnergyDrink;
     class FusionFire;
     class HsW01;
+    class LaserFire;
     class LightningGun;
-    class EnergyDrink;
-
-    class Projectile;
-    class BillboardProjectile;
-    class ParticleProjectile;
-    class LightningGunProjectile;
-
-    class ReplenishingMunition;
-    class LaserMunition;
-    class FusionMunition;
-
-    class MuzzleFlash;
 }
 
Index: code/trunk/src/modules/weapons/munitions/ReplenishingMunition.cc
===================================================================
--- code/trunk/src/modules/weapons/munitions/ReplenishingMunition.cc	(revision 5781)
+++ code/trunk/src/modules/weapons/munitions/ReplenishingMunition.cc	(revision 5929)
@@ -44,5 +44,5 @@
         // replenishIntervall_ and replenishMunitionAmount_ will be set in the constructor of the
         // inheriting class, which comes after this constructor)
-        this->replenishingTimer_.setTimer(0.0f, false, this, createExecutor(createFunctor(&ReplenishingMunition::initializeTimer)));
+        this->replenishingTimer_.setTimer(0.0f, false, createExecutor(createFunctor(&ReplenishingMunition::initializeTimer, this)));
     }
 
@@ -50,5 +50,5 @@
     {
         // Initialize the timer
-        this->replenishingTimer_.setTimer(this->replenishIntervall_, true, this, createExecutor(createFunctor(&ReplenishingMunition::replenish)));
+        this->replenishingTimer_.setTimer(this->replenishIntervall_, true, createExecutor(createFunctor(&ReplenishingMunition::replenish, this)));
     }
 
Index: code/trunk/src/modules/weapons/munitions/ReplenishingMunition.h
===================================================================
--- code/trunk/src/modules/weapons/munitions/ReplenishingMunition.h	(revision 5781)
+++ code/trunk/src/modules/weapons/munitions/ReplenishingMunition.h	(revision 5929)
@@ -51,5 +51,5 @@
             void initializeTimer();
 
-            Timer<ReplenishingMunition> replenishingTimer_;
+            Timer replenishingTimer_;
     };
 }
Index: code/trunk/src/modules/weapons/projectiles/LightningGunProjectile.cc
===================================================================
--- code/trunk/src/modules/weapons/projectiles/LightningGunProjectile.cc	(revision 5781)
+++ code/trunk/src/modules/weapons/projectiles/LightningGunProjectile.cc	(revision 5929)
@@ -42,5 +42,5 @@
         this->textureIndex_ = 1;
         this->maxTextureIndex_ = 8;
-        this->textureTimer_.setTimer(0.01f, true, this, createExecutor(createFunctor(&LightningGunProjectile::changeTexture)));
+        this->textureTimer_.setTimer(0.01f, true, createExecutor(createFunctor(&LightningGunProjectile::changeTexture, this)));
         
         registerVariables();
Index: code/trunk/src/modules/weapons/projectiles/LightningGunProjectile.h
===================================================================
--- code/trunk/src/modules/weapons/projectiles/LightningGunProjectile.h	(revision 5781)
+++ code/trunk/src/modules/weapons/projectiles/LightningGunProjectile.h	(revision 5929)
@@ -50,5 +50,5 @@
             unsigned int textureIndex_;
             unsigned int maxTextureIndex_;
-            Timer<LightningGunProjectile> textureTimer_;
+            Timer textureTimer_;
             std::string materialBase_;
       private:
Index: code/trunk/src/modules/weapons/projectiles/ParticleProjectile.cc
===================================================================
--- code/trunk/src/modules/weapons/projectiles/ParticleProjectile.cc	(revision 5781)
+++ code/trunk/src/modules/weapons/projectiles/ParticleProjectile.cc	(revision 5929)
@@ -59,5 +59,5 @@
         {
             this->detachOgreObject(this->particles_->getParticleSystem());
-            delete this->particles_;
+            this->particles_->destroy();
         }
     }
Index: code/trunk/src/modules/weapons/projectiles/Projectile.cc
===================================================================
--- code/trunk/src/modules/weapons/projectiles/Projectile.cc	(revision 5781)
+++ code/trunk/src/modules/weapons/projectiles/Projectile.cc	(revision 5929)
@@ -61,5 +61,5 @@
             this->attachCollisionShape(shape);
 
-            this->destroyTimer_.setTimer(this->lifetime_, false, this, createExecutor(createFunctor(&Projectile::destroyObject)));
+            this->destroyTimer_.setTimer(this->lifetime_, false, createExecutor(createFunctor(&Projectile::destroyObject, this)));
         }
     }
@@ -84,5 +84,5 @@
 
         if (this->bDestroy_)
-            delete this;
+            this->destroy(); // TODO: use a scheduler instead of deleting the object right here in tick()
     }
 
@@ -90,5 +90,5 @@
     {
         if (GameMode::isMaster())
-            delete this;
+            this->destroy();
     }
 
@@ -133,8 +133,7 @@
     }
 
-    void Projectile::destroyedPawn(Pawn* pawn)
+    void Projectile::setOwner(Pawn* owner)
     {
-        if (this->owner_ == pawn)
-            this->owner_ = 0;
+        this->owner_ = owner;
     }
 }
Index: code/trunk/src/modules/weapons/projectiles/Projectile.h
===================================================================
--- code/trunk/src/modules/weapons/projectiles/Projectile.h	(revision 5781)
+++ code/trunk/src/modules/weapons/projectiles/Projectile.h	(revision 5929)
@@ -33,10 +33,9 @@
 
 #include "tools/Timer.h"
-#include "interfaces/PawnListener.h"
 #include "worldentities/MovableEntity.h"
 
 namespace orxonox
 {
-    class _WeaponsExport Projectile : public MovableEntity, public PawnListener
+    class _WeaponsExport Projectile : public MovableEntity
     {
         public:
@@ -49,5 +48,4 @@
             virtual void tick(float dt);
             virtual bool collidesAgainst(WorldEntity* otherObject, btManifoldPoint& contactPoint);
-            virtual void destroyedPawn(Pawn* pawn);
 
             inline void setDamage(float damage)
@@ -56,15 +54,14 @@
                 { return this->damage_; }
 
-            inline void setOwner(Pawn* owner)
-                { this->owner_ = owner; }
+            void setOwner(Pawn* owner);
             inline Pawn* getOwner() const
                 { return this->owner_; }
 
         private:
-            Pawn* owner_;
+            WeakPtr<Pawn> owner_;
             float lifetime_;
             float damage_;
             bool bDestroy_;
-            Timer<Projectile> destroyTimer_;
+            Timer destroyTimer_;
     };
 }
Index: code/trunk/src/modules/weapons/weaponmodes/EnergyDrink.cc
===================================================================
--- code/trunk/src/modules/weapons/weaponmodes/EnergyDrink.cc	(revision 5781)
+++ code/trunk/src/modules/weapons/weaponmodes/EnergyDrink.cc	(revision 5929)
@@ -54,5 +54,5 @@
         this->setMunitionName("FusionMunition");
 
-        this->delayTimer_.setTimer(1.0f, false, this, createExecutor(createFunctor(&EnergyDrink::shot)));
+        this->delayTimer_.setTimer(1.0f, false, createExecutor(createFunctor(&EnergyDrink::shot, this)));
         this->delayTimer_.stopTimer();
     }
Index: code/trunk/src/modules/weapons/weaponmodes/EnergyDrink.h
===================================================================
--- code/trunk/src/modules/weapons/weaponmodes/EnergyDrink.h	(revision 5781)
+++ code/trunk/src/modules/weapons/weaponmodes/EnergyDrink.h	(revision 5929)
@@ -59,5 +59,5 @@
             float speed_;
             float delay_;
-            Timer<EnergyDrink> delayTimer_;
+            Timer delayTimer_;
     };
 }
Index: code/trunk/src/modules/weapons/weaponmodes/HsW01.cc
===================================================================
--- code/trunk/src/modules/weapons/weaponmodes/HsW01.cc	(revision 5781)
+++ code/trunk/src/modules/weapons/weaponmodes/HsW01.cc	(revision 5929)
@@ -54,5 +54,5 @@
         this->setMunitionName("LaserMunition");
 
-        this->delayTimer_.setTimer(1.0f, false, this, createExecutor(createFunctor(&HsW01::shot)));
+        this->delayTimer_.setTimer(1.0f, false, createExecutor(createFunctor(&HsW01::shot, this)));
         this->delayTimer_.stopTimer();
     }
Index: code/trunk/src/modules/weapons/weaponmodes/HsW01.h
===================================================================
--- code/trunk/src/modules/weapons/weaponmodes/HsW01.h	(revision 5781)
+++ code/trunk/src/modules/weapons/weaponmodes/HsW01.h	(revision 5929)
@@ -57,5 +57,5 @@
             float speed_;
             float delay_;
-            Timer<HsW01> delayTimer_;
+            Timer delayTimer_;
     };
 }
