Index: orxonox/trunk/src/lib/graphics/particles/particle_emitter.cc
===================================================================
--- orxonox/trunk/src/lib/graphics/particles/particle_emitter.cc	(revision 4164)
+++ orxonox/trunk/src/lib/graphics/particles/particle_emitter.cc	(revision 4176)
@@ -137,6 +137,9 @@
 	    randDir = (this->getAbsDir()*Quaternion(angle + randomAngle *((float)rand()/RAND_MAX -.5), randDir)).apply(this->direction);
 	    Vector velocityV = randDir.getNormalized()*this->velocity + inheritVelocity;
-	    
-	    system->addParticle(this->getAbsCoor(), velocityV);
+
+	    // this should spread the Particles evenly. if the Emitter is moved around quickly
+	    Vector equalSpread = this->getVelocity() * random()/RAND_MAX * dt;
+
+	    system->addParticle(this->getAbsCoor() - equalSpread, velocityV);
 	  }
       }
Index: orxonox/trunk/src/lib/graphics/particles/particle_emitter.h
===================================================================
--- orxonox/trunk/src/lib/graphics/particles/particle_emitter.h	(revision 4164)
+++ orxonox/trunk/src/lib/graphics/particles/particle_emitter.h	(revision 4176)
@@ -22,6 +22,6 @@
 
  public:
-  ParticleEmitter(const Vector& direction, float angle = .5, float emissionRate = 1.0,
-		  float velocity = 1.0);
+  ParticleEmitter(const Vector& direction, float angle = .5,
+		  float emissionRate = 1.0, float velocity = 1.0);
   virtual ~ParticleEmitter(void);
 
Index: orxonox/trunk/src/lib/graphics/particles/particle_engine.cc
===================================================================
--- orxonox/trunk/src/lib/graphics/particles/particle_engine.cc	(revision 4164)
+++ orxonox/trunk/src/lib/graphics/particles/particle_engine.cc	(revision 4176)
@@ -228,15 +228,4 @@
 void ParticleEngine::tick(float dt)
 {
-  // add new Particles to each System connected to an Emitter.
-  tIterator<ParticleConnection>* tmpConIt = connectionList->getIterator();
-  ParticleConnection* tmpConnection = tmpConIt->nextElement();
-  while(tmpConnection)
-    {
-      tmpConnection->emitter->tick(dt, tmpConnection->system);
-      tmpConnection = tmpConIt->nextElement();
-    }
-  delete tmpConIt;
-  
-
   // ticks all the ParticleSystems
   tIterator<ParticleSystem>* tmpIt = systemList->getIterator();
@@ -248,10 +237,21 @@
     }
   delete tmpIt;
+
+  // add new Particles to each System connected to an Emitter.
+  tIterator<ParticleConnection>* tmpConIt = connectionList->getIterator();
+  ParticleConnection* tmpConnection = tmpConIt->nextElement();
+  while(tmpConnection)
+    {
+      tmpConnection->emitter->tick(dt, tmpConnection->system);
+      tmpConnection = tmpConIt->nextElement();
+    }
+  delete tmpConIt;
 }
 
 /**
    \brief draws all the systems and their Particles.
-*/
-void ParticleEngine::draw(void)
+   \param dt the time passed in seconds (since the last Frame)
+*/
+void ParticleEngine::draw(float dt)
 {
   tIterator<ParticleSystem>* tmpIt = systemList->getIterator();
@@ -259,5 +259,5 @@
   while(tmpSys)
     {
-      tmpSys->draw();
+      tmpSys->draw(dt);
       tmpSys = tmpIt->nextElement();
     }
Index: orxonox/trunk/src/lib/graphics/particles/particle_engine.h
===================================================================
--- orxonox/trunk/src/lib/graphics/particles/particle_engine.h	(revision 4164)
+++ orxonox/trunk/src/lib/graphics/particles/particle_engine.h	(revision 4176)
@@ -8,4 +8,6 @@
 
 #include "base_object.h"
+#include "particle_system.h"
+#include "particle_emitter.h"
 
 // FORWARD DEFINITION 
@@ -28,5 +30,5 @@
 
   void tick(float dt);
-  void draw(void);
+  void draw(float dt);
 
   void addSystem(ParticleSystem* system);
Index: orxonox/trunk/src/lib/graphics/particles/particle_system.cc
===================================================================
--- orxonox/trunk/src/lib/graphics/particles/particle_system.cc	(revision 4164)
+++ orxonox/trunk/src/lib/graphics/particles/particle_system.cc	(revision 4176)
@@ -35,16 +35,16 @@
 {
    this->setClassName ("ParticleSystem");
+   this->material = NULL;
    this->name = NULL;
    this->maxCount = maxCount;
    this->count = 0;
-   this->particleType = type;
    this->particles = NULL;
    this->deadList = NULL;
-   this->setConserve(.8);
-   this->setLifeSpan(.1);
+   this->setConserve(1);
+   this->setLifeSpan(1);
    this->setInheritSpeed(0);
    this->glID = NULL;
    this->setRadius(1.0, 1.0, 0.0);
-   this->setType(PARTICLE_SPRITE, 1);
+   this->setType(type, 1);
    ParticleEngine::getInstance()->addSystem(this);
 }
@@ -54,5 +54,5 @@
    \brief standard deconstructor
 */
-ParticleSystem::~ParticleSystem() 
+ParticleSystem::~ParticleSystem()
 {
   // delete what has to be deleted here
@@ -74,4 +74,7 @@
        delete tmpDelPart;
      }
+
+   if (this->material)
+     delete this->material;
 }
 
@@ -240,19 +243,19 @@
 /**
    \brief draws all the Particles of this System
-*/
-void ParticleSystem::draw(void)
-{
+   \param the time passed in seconds (since the last draw)
+*/
+void ParticleSystem::draw(float dt)
+{
+  glPushAttrib(GL_ENABLE_BIT);
   //  material->select();
-
-
-  glMatrixMode(GL_MODELVIEW);
-  //  glDisable(GL_LIGHTING);
-  material->select(); 
-  glDisable(GL_DEPTH_TEST);
- Particle* drawPart = particles;
-  if (likely(drawPart != NULL))
+  Particle* drawPart = particles;
+
+  switch (this->particleType)
     {
-      //draw in DOT mode
-      //      glBegin(GL_POINTS);
+    case PARTICLE_SPRITE:
+      glMatrixMode(GL_MODELVIEW);
+      //  glDisable(GL_LIGHTING);
+      material->select(); 
+      glDisable(GL_DEPTH_TEST);
       while (likely(drawPart != NULL))
 	{
@@ -267,7 +270,38 @@
 	}
       //      glEnd();
+      
+      //  glEnable(GL_LIGHTING);
+      
+      glEnable(GL_DEPTH_TEST);
+      break;
+    default:
+
+    case PARTICLE_SPARK:
+      glEnable(GL_LINE_SMOOTH);
+      glBegin(GL_LINES);
+      while (likely(drawPart != NULL))
+	{
+	  glVertex3f(drawPart->position.x, drawPart->position.y, drawPart->position.z);
+	  glVertex3f(drawPart->position.x - drawPart->velocity.x,
+		     drawPart->position.y - drawPart->velocity.y,
+		     drawPart->position.z - drawPart->velocity.z);
+	  drawPart = drawPart->next;
+	}
+      glEnd();
+      break;
+      
+    case PARTICLE_DOT:
+      glBegin(GL_POINTS);
+      while (likely(drawPart != NULL))
+	{
+	  glLineWidth(drawPart->radius);
+
+	  glVertex3f(drawPart->position.x, drawPart->position.y, drawPart->position.z);
+	  drawPart = drawPart->next;
+	}
+      glEnd();
+      break;
     }
-  //  glEnable(GL_LIGHTING);
-  glEnable(GL_DEPTH_TEST);
+  glPopAttrib();
 }
 
@@ -291,5 +325,8 @@
 	    }
 	  else
-	    this->particles = new Particle;
+	    {
+	      PRINTF(5)("Generating new Particle\n");
+	      this->particles = new Particle;
+	    }
 	  this->particles->next = NULL;
 	}
@@ -304,5 +341,8 @@
 	    }
 	  else
-	    tmpPart = new Particle;
+	    {
+	      PRINTF(5)("Generating new Particle\n");
+	      tmpPart = new Particle;
+	    }
 	  tmpPart->next = this->particles;
 	  this->particles = tmpPart;
Index: orxonox/trunk/src/lib/graphics/particles/particle_system.h
===================================================================
--- orxonox/trunk/src/lib/graphics/particles/particle_system.h	(revision 4164)
+++ orxonox/trunk/src/lib/graphics/particles/particle_system.h	(revision 4176)
@@ -54,5 +54,6 @@
 
  public:
-  ParticleSystem(unsigned int maxCount = PARTICLE_DEFAULT_MAX_COUNT, PARTICLE_TYPE type = PARTICLE_DEFAULT_TYPE);
+  ParticleSystem(unsigned int maxCount = PARTICLE_DEFAULT_MAX_COUNT,
+		 PARTICLE_TYPE type = PARTICLE_DEFAULT_TYPE);
   virtual ~ParticleSystem();
   void setName(const char* name);
@@ -63,10 +64,11 @@
   void setInheritSpeed(float value);
   void setLifeSpan(float lifeSpan, float randomLifeSpan = 0.0);
-  void setRadius(float startRadius, float endRadius, float randomStartRadius = 0.0, float randomEndRadius = 0.0);
+  void setRadius(float startRadius, float endRadius,
+		 float randomStartRadius = 0.0, float randomEndRadius = 0.0);
   void setConserve(float conserve);
   void setMass(float mass, float randomMass);
 
   void tick(float dt);
-  void draw(void);
+  void draw(float dt);
 
   void debug(void);
Index: orxonox/trunk/src/lib/gui/gui/gui_video.cc
===================================================================
--- orxonox/trunk/src/lib/gui/gui/gui_video.cc	(revision 4164)
+++ orxonox/trunk/src/lib/gui/gui/gui_video.cc	(revision 4176)
@@ -107,4 +107,5 @@
       Label* modelDetailLabel;  //!< Label for model-detail.
       Menu* modelDetail;        //!< model-detail.
+      CheckButton* particles;   //!< If the Particles should be enabled
       Label* antiAliasingLabel; //!< Label for the anti-aliasing mode.
       Menu* antiAliasing;       //!< Menu for the Antialiasing-mode.
@@ -142,4 +143,9 @@
       advancedBox->fill(modelDetail);
       
+      particles = new CheckButton(CONFIG_NAME_PARTICLES_ENABLED);
+      particles->saveability();
+      particles->setDefaultValue(1);
+      advancedBox->fill(particles);
+
       antiAliasingLabel = new Label("Anti-Aliasing-depth:");
       advancedBox->fill(antiAliasingLabel);
@@ -155,4 +161,6 @@
       filterMethod->saveability();
       advancedBox->fill(filterMethod);
+
+
   
       closeButton = new Button("close");
