Index: orxonox/branches/particleEngine/src/lib/graphics/particles/particle_emitter.cc
===================================================================
--- orxonox/branches/particleEngine/src/lib/graphics/particles/particle_emitter.cc	(revision 3934)
+++ orxonox/branches/particleEngine/src/lib/graphics/particles/particle_emitter.cc	(revision 3935)
@@ -19,4 +19,5 @@
 
 #include "particle_system.h"
+#include "particle_engine.h"
 
 using namespace std;
@@ -33,7 +34,9 @@
    this->setSpread(angle);
    this->setEmissionRate(emissionRate);
-   this->velocity = velocity;
+   this->setVelocity(velocity);
 
    this->saveTime = 0.0;
+
+   ParticleEngine::getInstance()->addEmitter(this);
 }
 
@@ -45,5 +48,8 @@
 */
 ParticleEmitter::~ParticleEmitter () 
-{}
+{
+   ParticleEngine::getInstance()->removeEmitter(this);
+  
+}
 
 
@@ -85,8 +91,8 @@
 */
 void ParticleEmitter::setSpread(float angle, float randomAngle)
-{}
-
-
-
+{
+  this->angle = angle;
+  this->randomAngle = randomAngle;
+}
 
 /**
@@ -98,6 +104,9 @@
    you may want to use the animation class
 */
-void ParticleEmitter::setVelocity(float velocity, float random)
-{}
+void ParticleEmitter::setVelocity(float velocity, float randomVelocity)
+{
+  this->velocity = velocity;
+  this->randomVelocity = randomVelocity;
+}
 
 /**
@@ -116,8 +125,11 @@
   this->saveTime /= this->emissionRate;
 
+
   for (int i = 0; i <= count; i++)
     // emmits from EMITTER_DOT,
     {
-      Vector randDir = Quaternion(Vector(random()-RAND_MAX/2, random()-RAND_MAX/2, random()-RAND_MAX/2), angle).apply(this->direction);
+      Vector randDir = Vector(random()-RAND_MAX/2, random()-RAND_MAX/2, random()-RAND_MAX/2);
+      randDir.normalize();
+      randDir = Quaternion(angle + randomAngle *((float)random()/RAND_MAX -.5), randDir).apply(this->direction);
       randDir.normalize();
       system->addParticle(this->getAbsCoor(), randDir* velocity);
Index: orxonox/branches/particleEngine/src/lib/graphics/particles/particle_emitter.h
===================================================================
--- orxonox/branches/particleEngine/src/lib/graphics/particles/particle_emitter.h	(revision 3934)
+++ orxonox/branches/particleEngine/src/lib/graphics/particles/particle_emitter.h	(revision 3935)
@@ -22,5 +22,5 @@
 
  public:
-  ParticleEmitter(const Vector& direction, float angle = 20.0, float emissionRate = 1.0, 
+  ParticleEmitter(const Vector& direction, float angle = .5, float emissionRate = 1.0, 
 		  float velocity = 1.0);
   virtual ~ParticleEmitter(void);
@@ -34,12 +34,13 @@
   void setEmissionRate(float emissionRate);
   void setSpread(float angle, float randomAngle = 0.0);
-  void setVelocity(float velocity, float random = 0.0);
+  void setVelocity(float velocity, float randomVelocity = 0.0);
 
  private:
   Vector direction;     //!< emition direction
   float angle;          //!< max angle from the direction of the emitter
-  float angleRandom;    //!< random emission angle (angle +- angleRandom is the emitted angle.
-  float emissionRate;   //!< amount of particles per seconds emitted by emiter
-  float velocity;       //!< the contant speed a particle gets if been emitted
+  float randomAngle;    //!< random emission angle (angle +- angleRandom is the emitted angle.
+  float emissionRate;   //!< amount of particles per seconds emitted by emitter.
+  float velocity;       //!< the initial speed of a Particles.
+  float randomVelocity; //!< the random variation from the initial Speed.
 
   float saveTime;       //!< The time that was missing by the last Tick (otherwise there would be no emission when framefate is too big).
Index: orxonox/branches/particleEngine/src/lib/graphics/particles/particle_engine.cc
===================================================================
--- orxonox/branches/particleEngine/src/lib/graphics/particles/particle_engine.cc	(revision 3934)
+++ orxonox/branches/particleEngine/src/lib/graphics/particles/particle_engine.cc	(revision 3935)
@@ -33,5 +33,5 @@
 
    this->systemList = new tList<ParticleSystem>;
-
+   this->emitterList = new tList<ParticleEmitter>;
    this->connectionList = new tList<ParticleConnection>;
 }
@@ -70,4 +70,8 @@
 }
 
+void ParticleEngine::addEmitter(ParticleEmitter* emitter)
+{
+  this->emitterList->add(emitter);
+}
 
 /**
@@ -83,4 +87,16 @@
 
   this->connectionList->add(tmpCon);
+}
+
+
+bool ParticleEngine::removeSystem(ParticleSystem* system)
+{
+  this->systemList->remove(system);
+  
+}
+
+bool ParticleEngine::removeEmitter(ParticleEmitter* emitter)
+{
+  this->emitterList->remove(emitter);
 }
 
Index: orxonox/branches/particleEngine/src/lib/graphics/particles/particle_system.cc
===================================================================
--- orxonox/branches/particleEngine/src/lib/graphics/particles/particle_system.cc	(revision 3934)
+++ orxonox/branches/particleEngine/src/lib/graphics/particles/particle_system.cc	(revision 3935)
@@ -40,5 +40,5 @@
    this->particleType = type;
    this->particles = NULL;
-   this->conserve = 1.0;
+   this->setConserve(.8);
    this->setLifeSpan(.1);
 
@@ -54,4 +54,5 @@
 {
   // delete what has to be deleted here
+   ParticleEngine::getInstance()->removeSystem(this);
 }
 
@@ -59,5 +60,5 @@
 void ParticleSystem::setMaterial(Material* material)
 {
-  
+  this->material = material;
 }
 
@@ -70,10 +71,17 @@
 void ParticleSystem::setRadius(float startRadius, float endRadius, float randomRadius)
 {
-
+  this->startRadius = startRadius;
+  this->endRadius = endRadius;
+  this->randomRadius = randomRadius;
 }
 
 void ParticleSystem::setConserve(float conserve)
 {
-  this->conserve = conserve;
+  if (conserve > 1.0)
+    this->conserve = 1.0;
+  else if (conserve < 0.0)
+    this->conserve = 0.0;
+  else
+    this->conserve = conserve;
 }
 
@@ -86,5 +94,5 @@
   while (likely(tickPart != NULL))
     {
-	  
+      
       tickPart->position = tickPart->position + tickPart->velocity;
       // many more to come
@@ -94,5 +102,6 @@
 
 
-
+      if (this->conserve < 1.0)
+	tickPart->velocity = tickPart->velocity * this->conserve;
       // find out if we have to delete tickPart
       if ((tickPart->timeToLive -= dt) <= 0)
@@ -113,5 +122,4 @@
 	    }
 	  --this->count;
-	  printf("deleted particle: count %d\n", count);
 	}
       else
@@ -128,5 +136,5 @@
   if (likely(drawPart != NULL))
     {
-      glBegin(GL_TRIANGLES);
+      glBegin(GL_POINTS);
       while (likely(drawPart != NULL))
 	{
