Index: /orxonox/branches/particleEngine/src/lib/graphics/particles/particle_emitter.cc
===================================================================
--- /orxonox/branches/particleEngine/src/lib/graphics/particles/particle_emitter.cc	(revision 3931)
+++ /orxonox/branches/particleEngine/src/lib/graphics/particles/particle_emitter.cc	(revision 3932)
@@ -18,4 +18,6 @@
 #include "particle_emitter.h"
 
+#include "particle_system.h"
+
 using namespace std;
 
@@ -32,4 +34,6 @@
    this->emissionRate = emissionRate;
    this->velocity = velocity;
+
+   this->saveTime = 0.0;
 }
 
@@ -104,2 +108,13 @@
 */
 
+void ParticleEmitter::tick(float dt, ParticleSystem* system)
+{
+  // saving the time
+  float countF = (dt+this->saveTime) / emissionRate;
+  int count = (int)round(countF);
+  this->saveTime = countF - (float)count;
+
+  for (int i = 0; i <= count; i++)
+    // emmits from EMITTER_DOT,
+    system->addParticle(this->getAbsCoor(), direction * velocity );
+}
Index: /orxonox/branches/particleEngine/src/lib/graphics/particles/particle_emitter.h
===================================================================
--- /orxonox/branches/particleEngine/src/lib/graphics/particles/particle_emitter.h	(revision 3931)
+++ /orxonox/branches/particleEngine/src/lib/graphics/particles/particle_emitter.h	(revision 3932)
@@ -29,4 +29,5 @@
   void start();
   void stop();
+  void tick(float dt, ParticleSystem* system);
 
   /* controlling the behavour: these can be used as Animation interfaces */
@@ -41,4 +42,6 @@
   float emissionRate;   //!< amount of particles per seconds emitted by emiter
   float velocity;       //!< the contant speed a particle gets if been emitted
+
+  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 3931)
+++ /orxonox/branches/particleEngine/src/lib/graphics/particles/particle_engine.cc	(revision 3932)
@@ -33,4 +33,6 @@
 
    this->systemList = new tList<ParticleSystem>;
+
+   this->connectionList = new tList<ParticleConnection>;
 }
 
@@ -58,7 +60,29 @@
   delete this->systemList;
 
+  delete this->connectionList;
 
   ParticleEngine::singletonRef = NULL;
 }
+
+void ParticleEngine::addSystem(ParticleSystem* system)
+{
+  this->systemList->add(system);
+}
+
+
+/**
+   \brief
+
+   \todo header, check for double connections
+*/
+void ParticleEngine::addConnection(ParticleEmitter* emitter, ParticleSystem* system)
+{
+  ParticleConnection* tmpCon = new ParticleConnection;
+  tmpCon->emitter = emitter;
+  tmpCon->system = system;
+
+  this->connectionList->add(tmpCon);
+}
+
 
 /**
@@ -68,4 +92,16 @@
 void ParticleEngine::tick(float dt)
 {
+  // add new Particles to each System they are connected to.
+  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();
   ParticleSystem* tmpSys = tmpIt->nextElement();
@@ -78,2 +114,16 @@
 
 }
+
+
+void ParticleEngine::draw(void)
+{
+  tIterator<ParticleSystem>* tmpIt = systemList->getIterator();
+  ParticleSystem* tmpSys = tmpIt->nextElement();
+  while(tmpSys)
+    {
+      tmpSys->draw();
+      tmpSys = tmpIt->nextElement();
+    }
+  delete tmpIt;
+
+}
Index: /orxonox/branches/particleEngine/src/lib/graphics/particles/particle_engine.h
===================================================================
--- /orxonox/branches/particleEngine/src/lib/graphics/particles/particle_engine.h	(revision 3931)
+++ /orxonox/branches/particleEngine/src/lib/graphics/particles/particle_engine.h	(revision 3932)
@@ -28,8 +28,9 @@
 
   void tick(float dt);
+  void draw(void);
 
   void addSystem(ParticleSystem* system);
   void addEmitter(ParticleEmitter* emitter);
-  void addConection(ParticleEmitter* emitter, ParticleSystem* system);
+  void addConnection(ParticleEmitter* emitter, ParticleSystem* system);
 
   bool removeSystem(ParticleSystem* system);
Index: /orxonox/branches/particleEngine/src/lib/graphics/particles/particle_system.cc
===================================================================
--- /orxonox/branches/particleEngine/src/lib/graphics/particles/particle_system.cc	(revision 3931)
+++ /orxonox/branches/particleEngine/src/lib/graphics/particles/particle_system.cc	(revision 3932)
@@ -20,4 +20,5 @@
 #include "particle_emitter.h"
 #include "particle_engine.h"
+#include "compiler.h"
 
 using namespace std;
@@ -36,4 +37,9 @@
 
    this->particleType = type;
+   this->particles = NULL;
+   this->conserve = 1.0;
+   this->setLifeSpan(5.0);
+
+   ParticleEngine::getInstance()->addSystem(this);
 }
 
@@ -43,13 +49,86 @@
 
 */
-ParticleSystem::~ParticleSystem () 
+ParticleSystem::~ParticleSystem() 
 {
   // delete what has to be deleted here
 }
 
+// setting properties
+void ParticleSystem::setMaterial(Material* material)
+{
+  
+}
+
+void ParticleSystem::setLifeSpan(float lifeSpan, float randomLifeSpan)
+{
+
+}
+
+void ParticleSystem::setRadius(float startRadius, float endRadius, float randomRadius)
+{
+
+}
+
+void ParticleSystem::setConserve(float conserve)
+{
+  this->conserve = conserve;
+}
+
+
 
 void ParticleSystem::tick(float dt)
 {
+  Particle* tmpPart = particles;
+  while (likely(tmpPart != NULL))
+    {
+      tmpPart->position = tmpPart->position + tmpPart->velocity;
+
+      // many more to come
+
+      tmpPart = tmpPart->next;
+    }
+}
+
+void ParticleSystem::draw(void)
+{
+  Particle* tmpPart = particles;
+  if (likely(tmpPart != NULL))
+    {
+      glBegin(GL_POINTS);
+      while (likely(tmpPart != NULL))
+	{
+	  // draw in DOT mode
+	  glVertex3f(tmpPart->position.x, tmpPart->position.y, tmpPart->position.z);
+	  
+	  
+	  tmpPart = tmpPart->next;
+	}
+      glEnd();
+    }
+}
+
+
+void ParticleSystem::addParticle(Vector position, Vector velocity, unsigned int data)
+{
+  // if it is the first Particle
+  if (unlikely(particles == NULL))
+    {
+      this->particles = new Particle;
+      this->particles->next = NULL;
+    }
+  // filling the List from the beginning
+  else
+    {
+      Particle* tmpPart = new Particle;
+      tmpPart->next = this->particles;
+      this->particles = tmpPart;
+    }
   
+  particles->timeToLive = this->lifeSpan + (float)(random()/RAND_MAX)* this->randomLifeSpan;
+  particles->position = position;
+  particles->velocity = velocity;
+  //  particle->rotation = ; //! \todo rotation is once again something to be done.
+  particles->mass = this->initialMass + (random()/RAND_MAX)* this->randomInitialMass;
+  particles->radius = this->startRadius + (random()/RAND_MAX)*this->randomRadius;
+}
 
-}
Index: /orxonox/branches/particleEngine/src/lib/graphics/particles/particle_system.h
===================================================================
--- /orxonox/branches/particleEngine/src/lib/graphics/particles/particle_system.h	(revision 3931)
+++ /orxonox/branches/particleEngine/src/lib/graphics/particles/particle_system.h	(revision 3932)
@@ -34,6 +34,5 @@
   Quaternion rotation;        //!< The current rotation of this particle.
   float mass;                 //!< The mass of this particle.
-  float radius;               //!< The size of this particle. 
-
+  float radius;               //!< The current size of this particle.
 
   Particle* next;             //!< pointer to the next particle in the List. (NULL if no preceding one)
@@ -42,4 +41,5 @@
 //! A class to handle particle Systems
 class ParticleSystem : public BaseObject {
+  friend class ParticleEmitter;
 
  public:
@@ -50,6 +50,9 @@
   void setLifeSpan(float lifeSpan, float randomLifeSpan = 0.0);
   void setRadius(float startRadius, float endRadius, float randomRadius = 0.0);
+  void setConserve(float conserve);
+  void setMass(float mass, float randomMass);
 
   void tick(float dt);
+  void draw(void);
 
  private:
@@ -60,4 +63,6 @@
   float endRadius;
   float randomRadius;
+  float initialMass;
+  float randomInitialMass;
   
   // particles
@@ -66,4 +71,8 @@
   Material* material;        //!< A Material for all the Particles.
   Particle* particles;       //!< A list of particles of this System.
+
+
+  void addParticle(Vector position, Vector velocity, unsigned int data = 0);
+  
 };
 
Index: /orxonox/branches/particleEngine/src/story_entities/world.cc
===================================================================
--- /orxonox/branches/particleEngine/src/story_entities/world.cc	(revision 3931)
+++ /orxonox/branches/particleEngine/src/story_entities/world.cc	(revision 3932)
@@ -40,4 +40,8 @@
 #include "animation_player.h"
 
+#include "particle_engine.h"
+#include "particle_system.h"
+#include "particle_emitter.h"
+
 #include "command_node.h"
 #include "glmenu_imagescreen.h"
@@ -162,4 +166,7 @@
   AnimationPlayer::getInstance()->debug();
   delete AnimationPlayer::getInstance(); // this should be at the end of the unloading sequence.
+
+  delete ParticleEngine::getInstance();
+
   //delete garbagecollecor
   //delete animator
@@ -185,4 +192,6 @@
   this->entities = new tList<WorldEntity>();
   AnimationPlayer::getInstance(); // initializes the animationPlayer
+
+  ParticleEngine::getInstance();
 }
 
@@ -367,4 +376,10 @@
 	    trackManager->condition(2, LEFTRIGHT, this->localPlayer);
 	    this->glmis->step();
+	    
+	    testEmitter = new ParticleEmitter(Vector(1,0,0));
+	    testSystem = new ParticleSystem();
+
+	    ParticleEngine::getInstance()->addConnection(testEmitter, testSystem);
+
 	    break;
 	  }
@@ -745,4 +760,7 @@
 
   TextEngine::getInstance()->draw();
+
+  ParticleEngine::getInstance()->draw();
+
   lightMan->draw(); // must be at the end of the drawing procedure, otherwise Light cannot be handled as PNodes //
 }
@@ -931,4 +949,6 @@
 
       AnimationPlayer::getInstance()->tick(seconds);
+
+      ParticleEngine::getInstance()->tick(seconds);
     }
   this->lastFrame = currentFrame;
Index: /orxonox/branches/particleEngine/src/story_entities/world.h
===================================================================
--- /orxonox/branches/particleEngine/src/story_entities/world.h	(revision 3931)
+++ /orxonox/branches/particleEngine/src/story_entities/world.h	(revision 3932)
@@ -25,4 +25,7 @@
 class GarbageCollector;
 class Text;
+
+class ParticleEmitter;
+class ParticleSystem;
 
 //! The game world Interface
@@ -109,4 +112,7 @@
   Terrain* terrain;                   //!< The Terrain of the World.
 
+  ParticleSystem* testSystem;
+  ParticleEmitter* testEmitter;
+
   GLuint objectList;                  //!< temporary: \todo this will be ereased soon
   tList<WorldEntity>* entities;       //!< A template List of all entities. Every moving thing should be included here, and world automatically updates them.
