Index: trunk/src/world_entities/weapons/projectile.h
===================================================================
--- trunk/src/world_entities/weapons/projectile.h	(revision 5442)
+++ trunk/src/world_entities/weapons/projectile.h	(revision 5443)
@@ -44,4 +44,8 @@
 
 
+    /** @brief This is called, when the Projectile is Emitted */
+    virtual void activate() = 0;
+    /** @brief This is called, when the Projectile is being destroyed, or deleted */
+    virtual void deactivate() = 0;
 
     virtual void destroy ();
Index: trunk/src/world_entities/weapons/test_bullet.cc
===================================================================
--- trunk/src/world_entities/weapons/test_bullet.cc	(revision 5442)
+++ trunk/src/world_entities/weapons/test_bullet.cc	(revision 5443)
@@ -1,4 +1,2 @@
-
-
 /*
    orxonox - the future of 3D-vertical-scrollers
@@ -13,5 +11,6 @@
    ### File Specific
    main-programmer: Patrick Boenzli
-   co-programmer:
+   co-programmer: Benjamin Grauer
+
 */
 #define DEBUG_SPECIAL_MODULE DEBUG_MODULE_WEAPON
@@ -24,5 +23,11 @@
 #include "fast_factory.h"
 
-#include "obb_tree.h"
+#include "state.h"
+#include "list.h"
+
+#include "particle_engine.h"
+#include "particle_emitter.h"
+#include "particle_system.h"
+
 
 using namespace std;
@@ -44,4 +49,10 @@
   this->remove();
   this->lifeSpan = 5;
+
+  this->emitter = new ParticleEmitter(Vector(0,1,0), M_2_PI, 100, 0.01);
+  this->emitter->setParent(this);
+  this->emitter->setEmissionRate(20);
+
+  this->emitter->setSpread(M_2_PI);
 }
 
@@ -52,4 +63,5 @@
 TestBullet::~TestBullet ()
 {
+  delete this->emitter;
   /*
      do not delete the test projectModel, since it is pnode
@@ -59,7 +71,38 @@
 }
 
+ParticleSystem* TestBullet::explosionParticles = NULL;
+
+
+void TestBullet::activate()
+{
+  State::getWorldEntityList()->add(this);
+  if (unlikely(TestBullet::explosionParticles == NULL))
+  {
+    TestBullet::explosionParticles = new ParticleSystem(10000, PARTICLE_SPRITE);
+    TestBullet::explosionParticles->setLifeSpan(.5);
+    TestBullet::explosionParticles->setRadius(0.0, .5);
+    TestBullet::explosionParticles->setRadius(0.5, 2.0);
+    TestBullet::explosionParticles->setRadius(0.0, 0.0);
+    TestBullet::explosionParticles->setColor(0.0, 1,0,0,.7);
+    TestBullet::explosionParticles->setColor(0.5, .8,.8,0,.5);
+    TestBullet::explosionParticles->setColor(1.0, .5,.5,.5,.0);
+  }
+
+  ParticleEngine::getInstance()->addConnection(this->emitter, TestBullet::explosionParticles);
+}
+
+
+void TestBullet::deactivate()
+{
+  ParticleEngine::getInstance()->breakConnection(this->emitter, TestBullet::explosionParticles);
+
+  GarbageCollector::getInstance()->collect(this);
+  this->lifeCycle = 0.0;
+}
+
+
 void TestBullet::collidesWith(WorldEntity* entity, const Vector& location)
 {
-  this->destroy();
+
 }
 
@@ -81,6 +124,5 @@
       PRINTF(5)("FINALIZE===========================\n");
 //      this->finalize();
-      GarbageCollector::getInstance()->collect(this);
-      this->lifeCycle = 0.0; //! @todo should not be here
+      this->deactivate();
     }
 }
@@ -91,5 +133,8 @@
 void TestBullet::destroy ()
 {
+  this->deactivate();
 
+
+  GarbageCollector::getInstance()->collect(this);
 
 }
Index: trunk/src/world_entities/weapons/test_bullet.h
===================================================================
--- trunk/src/world_entities/weapons/test_bullet.h	(revision 5442)
+++ trunk/src/world_entities/weapons/test_bullet.h	(revision 5443)
@@ -11,16 +11,28 @@
 class Vector;
 class Weapon;
+class ParticleSystem;
+class ParticleEmitter;
 
 class TestBullet : public Projectile
 {
- public:
-  TestBullet ();
-  virtual ~TestBullet ();
+  public:
+    TestBullet ();
+    virtual ~TestBullet ();
 
-  virtual void collidesWith(WorldEntity* entity, const Vector& location);
-  virtual void destroy ();
 
-  virtual void tick (float time);
-  virtual void draw ();
+    virtual void activate();
+    virtual void deactivate();
+
+    virtual void collidesWith(WorldEntity* entity, const Vector& location);
+
+    virtual void destroy ();
+
+    virtual void tick (float time);
+    virtual void draw ();
+
+
+  private:
+    static ParticleSystem*     explosionParticles;
+    ParticleEmitter*           emitter;
 
 };
Index: trunk/src/world_entities/weapons/test_gun.cc
===================================================================
--- trunk/src/world_entities/weapons/test_gun.cc	(revision 5442)
+++ trunk/src/world_entities/weapons/test_gun.cc	(revision 5443)
@@ -29,5 +29,4 @@
 #include "factory.h"
 
-#include "state.h"
 #include "vector.h"
 #include "list.h"
@@ -189,5 +188,5 @@
   pj->setAbsCoor(this->getEmissionPoint());
   pj->setAbsDir(this->getAbsDir());
-  State::getWorldEntityList()->add(pj);
+  pj->activate();
 }
 
Index: trunk/src/world_entities/weapons/turret.cc
===================================================================
--- trunk/src/world_entities/weapons/turret.cc	(revision 5442)
+++ trunk/src/world_entities/weapons/turret.cc	(revision 5443)
@@ -138,5 +138,5 @@
   if (target != NULL)
   {
-    pj->setVelocity(this->getVelocity()+(this->getAbsDir().apply(Vector(1,0,0))*100.0 + VECTOR_RAND(20)
+    pj->setVelocity(this->getVelocity()+(this->getAbsDir().apply(Vector(1,0,0))*100.0 + VECTOR_RAND(13)
             /*target->getAbsCoor() - this->getAbsCoor()*/)*.5);//this->getVelocity());
   }
@@ -147,6 +147,5 @@
   pj->setAbsCoor(this->getEmissionPoint());
   pj->setAbsDir(this->getAbsDir());
-
-  State::getWorldEntityList()->add(pj);
+  pj->activate();
 }
 
