Index: branches/playability/src/world_entities/particles/emitter_node.cc
===================================================================
--- branches/playability/src/world_entities/particles/emitter_node.cc	(revision 10096)
+++ branches/playability/src/world_entities/particles/emitter_node.cc	(revision 10098)
@@ -73,7 +73,12 @@
 
   this->lifeCycle += dt/this->lifeSpan;
-  if  (unlikely(this->lifeCycle >= 1))
+  if  (this->lifeCycle >= 1)
   {
     this->removeNode();
+    this->hide();
+    this->system->removeEmitter(this->emitter);
+    this->emitter->stop();
+    this->emitter->setSystem(NULL);
+    this->started = false;
   }
   PRINTF(0)("Coordinate Update EmitterNode: (%f,%f,%f) -> (%f,%f,%f)\n",this->getAbsCoor().x,this->getAbsCoor().y,this->getAbsCoor().z,this->velocity.x,this->velocity.y,this->velocity.z);
Index: branches/playability/src/world_entities/particles/emitter_node.h
===================================================================
--- branches/playability/src/world_entities/particles/emitter_node.h	(revision 10096)
+++ branches/playability/src/world_entities/particles/emitter_node.h	(revision 10098)
@@ -8,6 +8,7 @@
 #define _EMITTER_NODE_H
 
-#include "p_node.h"
+#include "world_entity.h"
 #include "dot_emitter.h"
+#include "particle_system.h"
 
 // FORWARD DECLARATION
@@ -17,5 +18,5 @@
 
 //! A class to handle an Emitter.
-class EmitterNode : public PNode
+class EmitterNode : public WorldEntity
 {
   ObjectListDeclaration(EmitterNode);
@@ -31,5 +32,5 @@
   inline void setVelocity(Vector velocity) { this->velocity = velocity;};
 
-  inline void setupParticle(DotEmitter* emitter, ParticleSystem* system) { this->emitter = emitter; this->system = system;} ;
+  inline void setupParticle(DotEmitter* emitter, ParticleSystem* system) { this->emitter = emitter; this->system = system; this->system->setLifeSpan(this->lifeSpan);} ;
   void setLifetime( float lifeTime) { this->lifeSpan  = lifeTime;};
 
Index: branches/playability/src/world_entities/projectiles/mbolt.cc
===================================================================
--- branches/playability/src/world_entities/projectiles/mbolt.cc	(revision 10096)
+++ branches/playability/src/world_entities/projectiles/mbolt.cc	(revision 10098)
@@ -144,5 +144,5 @@
 void MBolt::collidesWith(WorldEntity* entity, const Vector& location)
 {
-  PRINTF(5)("MBolt collides pretest\n");
+  PRINTF(0)("MBolt collides pretest\n");
   if( entity == NULL)
     return;
Index: branches/playability/src/world_entities/space_ships/space_ship.cc
===================================================================
--- branches/playability/src/world_entities/space_ships/space_ship.cc	(revision 10096)
+++ branches/playability/src/world_entities/space_ships/space_ship.cc	(revision 10098)
@@ -141,9 +141,8 @@
   //  this->setRelDir(Quaternion(M_PI, Vector(1,0,0)));
   this->registerObject(this, SpaceShip::_objectList);
-  this->toList(OM_GROUP_00);
   PRINTF(4)("SPACESHIP INIT\n");
 
   //weapons:
-  /*
+  
   Weapon* wpRight1 = new LightBlaster ();
   wpRight1->setName( "LightBlaster");
@@ -151,5 +150,5 @@
   Weapon* wpLeft1 = new LightBlaster ();
   wpLeft1->setName( "LightBlaster");
-  wpLeft1->setParent( this);*/
+  wpLeft1->setParent( this);
 
   Weapon* wpRight2 = new MediumBlaster ();
@@ -159,5 +158,5 @@
   wpLeft2->setName( "MediumBlaster");
   wpLeft2->setParent( this);
-  /*
+  
   Weapon* wpRight3 = new HeavyBlaster ();
   wpRight3->setName( "HeavyBlaster");
@@ -165,5 +164,5 @@
   Weapon* wpLeft3 = new HeavyBlaster ();
   wpLeft3->setName( "HeavyBlaster");
-  wpLeft3->setParent( this);*/
+  wpLeft3->setParent( this);
 
   Weapon* cannon = new SwarmLauncher();
@@ -172,10 +171,10 @@
 
 
-  //this->weaponMan.addWeapon( wpLeft1, 0, 0);
-  //this->weaponMan.addWeapon( wpRight1, 0, 1);
+  this->weaponMan.addWeapon( wpLeft1, 0, 0);
+  this->weaponMan.addWeapon( wpRight1, 0, 1);
   this->weaponMan.addWeapon( wpLeft2, 0, 2);
   this->weaponMan.addWeapon( wpRight2, 0, 3);
-  //this->weaponMan.addWeapon( wpLeft3, 0, 4);
-  //this->weaponMan.addWeapon( wpRight3, 0, 5);
+  this->weaponMan.addWeapon( wpLeft3, 0, 4);
+  this->weaponMan.addWeapon( wpRight3, 0, 5);
 
   this->secWeaponMan.addWeapon( cannon, 1, 0);
@@ -184,10 +183,10 @@
   this->secWeaponMan.changeWeaponConfig(1);
 
-  //wpRight1->requestAction(WA_ACTIVATE);
-  //wpLeft1->requestAction(WA_ACTIVATE);
+  wpRight1->requestAction(WA_ACTIVATE);
+  wpLeft1->requestAction(WA_ACTIVATE);
   wpRight2->requestAction(WA_ACTIVATE);
   wpLeft2->requestAction(WA_ACTIVATE);
-  //wpRight3->requestAction(WA_ACTIVATE);
-  //wpLeft3->requestAction(WA_ACTIVATE);
+  wpRight3->requestAction(WA_ACTIVATE);
+  wpLeft3->requestAction(WA_ACTIVATE);
 
   cannon->requestAction(WA_ACTIVATE);
@@ -328,15 +327,18 @@
 
   
-  this->trail = new Trail( 3, 3, .2, this);
+  this->trail = new Trail( 10, 10, .2, this);
   //this->trail->setParent( this);
   this->trail->setTexture( "maps/engine.png");
 
-  this->trailL = new Trail( 3, 3, .2, this);
+  this->trailL = new Trail( 10, 10, .2, this);
   //this->trailL->setParent( this);
   this->trailL->setTexture( "maps/engine.png");
 
-  this->trailR = new Trail( 3, 3, .2, this);
+  this->trailR = new Trail( 10, 10, .2, this);
   //this->trailR->setParent( this);
   this->trailR->setTexture( "maps/engine.png");
+
+  
+  this->toList(OM_GROUP_00);
 }
 
@@ -374,9 +376,10 @@
   this->secWeaponMan.showCrosshair();
   this->toList( OM_GROUP_01 );
+  /*
   for(ObjectList<PNode>::const_iterator it = this->getNodesChildren().begin(); it != this->getNodesChildren().end(); it++)
   {
     if( likely( dynamic_cast<Weapon*>(*it) != NULL))
-      dynamic_cast<WorldEntity*>(*it)->toList( OM_GROUP_00_PROJ);
-  }
+      dynamic_cast<WorldEntity*>(*it)->toList( OM_GROUP_01);
+  }*/
   //dynamic_cast<Element2D*>(this->secWeaponMan.getFixedTarget())->setVisibility( true);
   //this->attachCamera();
@@ -388,9 +391,10 @@
   this->secWeaponMan.hideCrosshair();
   this->toList( OM_GROUP_00);
+  /*
   for(ObjectList<PNode>::const_iterator it = this->getNodesChildren().begin(); it != this->getNodesChildren().end(); it++)
   {
     if( likely( dynamic_cast<Weapon*>(*it) != NULL))
-      dynamic_cast<WorldEntity*>(*it)->toList( OM_GROUP_01_PROJ);
-  }
+      dynamic_cast<WorldEntity*>(*it)->toList( OM_GROUP_00);
+  }*/
   //dynamic_cast<Element2D*>(this->secWeaponMan.getFixedTarget())->setVisibility( false);
   //this->detachCamera();
@@ -593,14 +597,14 @@
   explosionParticles->setRadius(.5, 6.0);
   explosionParticles->setRadius(1.0, 3.0);
-  explosionParticles->setColor(0.0, 1,1,0,.9);
-  explosionParticles->setColor(0.5, .8,.8,0,.5);
-  explosionParticles->setColor(1.0, .8,.8,.7,.0);
-
-  
-  emitter = new DotEmitter( 200, 0, 0);
-  emitter->setSpread( M_PI, M_PI);
-  emitter->setSpread( 50);
-  emitter->setEmissionRate( 50.0);
-  emitter->setEmissionVelocity( 150.0);
+  explosionParticles->setColor(0.0, 1,1,1,.9);
+  explosionParticles->setColor(0.1,  1,1,0,.9);
+  explosionParticles->setColor(0.5, .8,.4,0,.5);
+  explosionParticles->setColor(1.0, .2,.2,.2,.0);
+
+  
+  emitter = new DotEmitter( 200, 200, M_2_PI);
+  emitter->setSpread( 0, M_2_PI);
+  emitter->setEmissionRate( 400.0);
+  //emitter->setEmissionVelocity( 200.0);
   emitter->setSystem( explosionParticles);
   emitter->setAbsCoor( this->getAbsCoor());
@@ -618,18 +622,13 @@
 */
   this->setAbsCoor(Vector(-10000,10000,10000));
-  this->hide();
+  //this->hide();
 
   this->toList( OM_DEAD);
-  for(ObjectList<PNode>::const_iterator it = this->getNodesChildren().begin(); it != this->getNodesChildren().end(); it++)
-  {
-    if( likely( dynamic_cast<Weapon*>(*it) != NULL))
-      dynamic_cast<WorldEntity*>(*it)->toList( OM_DEAD);
-  }
-    PRINTF(0)("spaceship destroy == ship translated \n");
+  PRINTF(0)("spaceship destroy == ship translated \n");
 }
 
 void SpaceShip::respawn( )
 {
-  this->unhide();
+  //this->unhide();
   /*for(ObjectList<PNode>::const_iterator it = this->getNodesChildren().begin(); it != this->getNodesChildren().end(); it++)
   {
@@ -637,4 +636,5 @@
       dynamic_cast<WorldEntity*>(*it)->toList( OM_GROUP_00);
   }*/
+  /*
   if( this->hasPlayer())
   {
@@ -654,5 +654,5 @@
 		dynamic_cast<WorldEntity*>(*it)->toList( OM_GROUP_01_PROJ);
 	}
-  }
+  }*/
 
 }
@@ -766,12 +766,12 @@
         this->travelNode->updateNode(0.01f);
 
-        //this->setParent(this->travelNode);
+        this->setParent(this->travelNode);
         this->setRelCoor(0,0,0);
 
-        //State::getCameraNode()->setParentSoft(this->travelNode);
-        State::getCameraNode()->setParentSoft(this);
+        State::getCameraNode()->setParentSoft(this->travelNode);
+        //State::getCameraNode()->setParentSoft(this);
         State::getCameraNode()->setRelCoorSoft(-0.01, 40, 0);
-        //State::getCameraTargetNode()->setParentSoft(this->travelNode);
-        State::getCameraTargetNode()->setParentSoft(this);
+        State::getCameraTargetNode()->setParentSoft(this->travelNode);
+        //State::getCameraTargetNode()->setParentSoft(this);
         State::getCameraTargetNode()->setRelCoorSoft(0,0,0);
 
@@ -797,6 +797,5 @@
   float airCoeff = 2.5;
   float pi = 3.14;
-  
-  Vector tempVelocity;
+ 
 
   switch(this->getPlaymode())
@@ -806,31 +805,31 @@
       // these routines will change the travel movement into zero in a short amout of time, if the player
       // doesn't press any buttons.
-      if (tempVelocity.x >= 0)
-      {
-        if (tempVelocity.x > airCoeff*this->acceleration * dt)
-          tempVelocity.x -= airCoeff* this->acceleration * dt;
+      if (this->travelVelocity.x >= 0)
+      {
+        if (this->travelVelocity.x > airCoeff*this->acceleration * dt)
+          this->travelVelocity.x -= airCoeff* this->acceleration * dt;
         else
-          tempVelocity.x = 0;
+          this->travelVelocity.x = 0;
       }
       else
       {
-        if (tempVelocity.x < -airCoeff*this->acceleration * dt)
-          tempVelocity.x += airCoeff* this->acceleration * dt;
+        if (this->travelVelocity.x < -airCoeff*this->acceleration * dt)
+          this->travelVelocity.x += airCoeff* this->acceleration * dt;
         else
-          tempVelocity.x = 0;
-      }
-      if (tempVelocity.z >= 0)
-      {
-        if (tempVelocity.z > airCoeff*this->acceleration * dt)
-          tempVelocity.z -= airCoeff* this->acceleration * dt;
+          this->travelVelocity.x = 0;
+      }
+      if (this->travelVelocity.z >= 0)
+      {
+        if (this->travelVelocity.z > airCoeff*this->acceleration * dt)
+          this->travelVelocity.z -= airCoeff* this->acceleration * dt;
         else
-          tempVelocity.z = 0;
+          this->travelVelocity.z = 0;
       }
       else
       {
-        if (tempVelocity.z < -airCoeff*this->acceleration * dt)
-          tempVelocity.z += airCoeff* this->acceleration * dt;
+        if (this->travelVelocity.z < -airCoeff*this->acceleration * dt)
+          this->travelVelocity.z += airCoeff* this->acceleration * dt;
         else
-          tempVelocity.z = 0;
+          this->travelVelocity.z = 0;
       }
     
@@ -850,16 +849,16 @@
         if(this->getRelCoor().x < this->travelDistancePlus.x)
         {
-          if (tempVelocity.x < this->travelSpeed)
+          if (this->travelVelocity.x < this->travelSpeed)
           {
-            tempVelocity.x += (airCoeff + 1.0)*this->acceleration*dt;
+            this->travelVelocity.x += (airCoeff + 1.0)*this->acceleration*dt;
           }
           else
           {
-            tempVelocity.x = this->travelSpeed;
+            this->travelVelocity.x = this->travelSpeed;
           }
         }
         else
         {
-          tempVelocity.x = 0.0f;
+          this->travelVelocity.x = 0.0f;
         }
       }
@@ -869,16 +868,16 @@
         if(this->getRelCoor().x > this->travelDistanceMinus.x)
         {
-          if (tempVelocity.x > -this->travelSpeed)
+          if (this->travelVelocity.x > -this->travelSpeed)
           {
-            tempVelocity.x -= (airCoeff + 1.0)*this->acceleration*dt;
+            this->travelVelocity.x -= (airCoeff + 1.0)*this->acceleration*dt;
           }
           else
           {
-            tempVelocity.x = -this->travelSpeed;
+            this->travelVelocity.x = -this->travelSpeed;
           }
         }
         else
         {
-          tempVelocity.x = 0.0f;
+          this->travelVelocity.x = 0.0f;
         }
       }
@@ -888,16 +887,16 @@
         if(this->getRelCoor().z > this->travelDistanceMinus.y)
         {
-          if (tempVelocity.z > -this->travelSpeed)
+          if (this->travelVelocity.z > -this->travelSpeed)
           {
-            tempVelocity.z -= (airCoeff + 1.0)*this->acceleration*dt;
+            this->travelVelocity.z -= (airCoeff + 1.0)*this->acceleration*dt;
           }
           else
           {
-            tempVelocity.z = -this->travelSpeed;
+            this->travelVelocity.z = -this->travelSpeed;
           }
         }
         else
         {
-          tempVelocity.z = 0.0f;
+          this->travelVelocity.z = 0.0f;
         }
         this->setRelDirSoft(Quaternion(-pi/6, Vector(1,0,0)), 6);
@@ -908,16 +907,16 @@
         if(this->getRelCoor().z < this->travelDistancePlus.y)
         {
-          if (tempVelocity.z < this->travelSpeed)
+          if (this->travelVelocity.z < this->travelSpeed)
           {
-            tempVelocity.z += (airCoeff + 1.0)*this->acceleration*dt;
+            this->travelVelocity.z += (airCoeff + 1.0)*this->acceleration*dt;
           }
           else
           {
-            tempVelocity.z = this->travelSpeed;
+            this->travelVelocity.z = this->travelSpeed;
           }
         }
         else
         {
-          tempVelocity.z = 0.0f;
+          this->travelVelocity.z = 0.0f;
         }
         this->setRelDirSoft(Quaternion(pi/6, Vector(1,0,0)), 6);
@@ -930,12 +929,12 @@
 
       this->travelNode->shiftCoor(Vector(this->cameraSpeed * dt, 0, 0));
-      this->shiftCoor (tempVelocity * dt);
+      this->shiftCoor (this->travelVelocity * dt);
 
     //normalisation of the vectors (vector sum must be <= travelspeed)
-    float xzNorm = sqrt(pow(tempVelocity.x, 2) + pow(tempVelocity.z, 2));
+    float xzNorm = sqrt(pow(this->travelVelocity.x, 2) + pow(this->travelVelocity.z, 2));
     if (xzNorm > this->travelSpeed)
     {
-      tempVelocity.x = tempVelocity.x/xzNorm * this->travelSpeed;
-      tempVelocity.z = tempVelocity.z/xzNorm * this->travelSpeed;
+      this->travelVelocity.x = this->travelVelocity.x/xzNorm * this->travelSpeed;
+      this->travelVelocity.z = this->travelVelocity.z/xzNorm * this->travelSpeed;
     }
 
@@ -944,5 +943,5 @@
     
     //set new coordinates calculated through key- events. 
-    this->shiftCoor (tempVelocity * dt);
+    this->shiftCoor (this->travelVelocity * dt);
     break;
     }
@@ -956,7 +955,7 @@
 /*
   this->travelNode->shiftCoor(Vector(this->cameraSpeed * dt, 0, 0));
-  this->shiftCoor (tempVelocity * dt);
-
-  float angle = tempVelocity.z / travelSpeed * pi / 3;
+  this->shiftCoor (this->travelVelocity * dt);
+
+  float angle = this->travelVelocity.z / travelSpeed * pi / 3;
   if (angle > pi/4) angle = pi/4;
   if (angle < -pi/4) angle = -pi/4;
Index: branches/playability/src/world_entities/space_ships/space_ship.h
===================================================================
--- branches/playability/src/world_entities/space_ships/space_ship.h	(revision 10096)
+++ branches/playability/src/world_entities/space_ships/space_ship.h	(revision 10098)
@@ -155,4 +155,5 @@
     PNode*                travelNode;
     float                 travelSpeed;        //!< the current speed of the Ship (to make soft movement)
+    Vector                travelVelocity;     //!< object internal velocity vector for relative movement to the track node
     Vector2D              travelDistancePlus;     //!< Travel-Distance away from the TravelNode
     Vector2D              travelDistanceMinus;
Index: branches/playability/src/world_entities/weapons/medium_blaster.cc
===================================================================
--- branches/playability/src/world_entities/weapons/medium_blaster.cc	(revision 10096)
+++ branches/playability/src/world_entities/weapons/medium_blaster.cc	(revision 10098)
@@ -96,5 +96,5 @@
   pj->setParent(PNode::getNullParent());
 
-  pj->setVelocity(this->getParent()->getVelocity() + this->getAbsDir().apply(Vector(1,0,0))*100);
+  pj->setVelocity(this->getParent()->getVelocity() + this->getAbsDir().apply(Vector(1,0,0))*160);
 
   pj->setAbsCoor(this->getEmissionPoint());
