Index: orxonox/trunk/src/lib/graphics/graphics_engine.cc
===================================================================
--- orxonox/trunk/src/lib/graphics/graphics_engine.cc	(revision 4662)
+++ orxonox/trunk/src/lib/graphics/graphics_engine.cc	(revision 4663)
@@ -93,5 +93,5 @@
 
   // setting up the Resolution
-  this->setResolution(800, 600, 16);
+  this->setResolution(1000, 800, 16);
 
 
Index: orxonox/trunk/src/lib/particles/particle_system.cc
===================================================================
--- orxonox/trunk/src/lib/particles/particle_system.cc	(revision 4662)
+++ orxonox/trunk/src/lib/particles/particle_system.cc	(revision 4663)
@@ -26,4 +26,5 @@
 #include "material.h"
 #include "state.h"
+#include "objModel.h"
 
 #include "tinyxml.h"
@@ -86,4 +87,5 @@
 
   this->material = NULL;
+  this->model = NULL;
   this->maxCount = PARTICLE_DEFAULT_MAX_COUNT;
   this->count = 0;
@@ -141,9 +143,18 @@
   this->material = NULL;
 
-  if (this->particleType == PARTICLE_SPRITE)
+  switch (this->particleType)
     {
-      this->material = new Material("transperencyMap");
-      this->material->setDiffuseMap("pictures/radialTransparency.png");
+      case PARTICLE_SPRITE:
+        this->material = new Material("transperencyMap");
+        this->material->setDiffuseMap("pictures/radialTransparency.png");
       //  material->setTransparency(.5);
+        break;
+      case PARTICLE_MODEL:
+        if (!this->model)
+        {
+          PRINTF(2)("Model not loaded yet, please do this through ParticleSystem::loadModel()");
+          this->setType(PARTICLE_SPRITE);
+        }
+        break;
     }
 }
@@ -159,4 +170,19 @@
 {
   this->material = material;
+}
+
+
+
+/**
+ * sets a Model to the Particles
+ * @param modelName the Name of the Model to load
+ */
+void ParticleSystem::setModel(const char* modelName)
+{
+  if (this->model)
+    delete this->model;
+  if (modelName)
+    this->model = new OBJModel(modelName);
+  this->setType(PARTICLE_MODEL);
 }
 
@@ -312,5 +338,5 @@
    Drawing all the particles with the appropriate Type.
    This is just the fastest Way to do this, but will most likely be changed in the future.
-*/
+ */
 void ParticleSystem::draw(void) const
 {
@@ -321,5 +347,5 @@
 
   switch (this->particleType)
-    {
+  {
     default:
     case PARTICLE_SPRITE:
@@ -332,43 +358,43 @@
 
       while (likely(drawPart != NULL))
-        {
-          glColor4fv(drawPart->color);
+      {
+        glColor4fv(drawPart->color);
           //! \todo implement a faster code for the look-at Camera algorithm.
 
-          const PNode* camera = State::getInstance()->getCamera();  //!< \todo MUST be different
-          Vector cameraPos = camera->getAbsCoor();
-          Vector cameraTargetPos = State::getInstance()->getCameraTarget()->getAbsCoor();
-          Vector view = cameraTargetPos - cameraPos;
-          Vector up = Vector(0, 1, 0);
-          up = camera->getAbsDir().apply(up);
-          Vector h = up.cross(view);
-          Vector v = h.cross(view);
-          h.normalize();
-          v.normalize();
-          v *= .5 * drawPart->radius;
-          h *= .5 * drawPart->radius;
-
-          glBegin(GL_TRIANGLE_STRIP);
-          glTexCoord2i(1, 1);
-          glVertex3f(drawPart->position.x - h.x - v.x,
-                     drawPart->position.y - h.y - v.y,
-                     drawPart->position.z - h.z - v.z);
-          glTexCoord2i(0, 1);
-          glVertex3f(drawPart->position.x - h.x + v.x,
-                     drawPart->position.y - h.y + v.y,
-                     drawPart->position.z - h.z + v.z);
-          glTexCoord2i(1, 0);
-          glVertex3f(drawPart->position.x + h.x - v.x,
-                     drawPart->position.y + h.y - v.y,
-                     drawPart->position.z + h.z - v.z);
-          glTexCoord2i(0, 0);
-          glVertex3f(drawPart->position.x + h.x + v.x,
-                     drawPart->position.y + h.y + v.y,
-                     drawPart->position.z + h.z + v.z);
-
-          glEnd();
-
-          drawPart = drawPart->next;
-        }
+        const PNode* camera = State::getInstance()->getCamera();  //!< \todo MUST be different
+        Vector cameraPos = camera->getAbsCoor();
+        Vector cameraTargetPos = State::getInstance()->getCameraTarget()->getAbsCoor();
+        Vector view = cameraTargetPos - cameraPos;
+        Vector up = Vector(0, 1, 0);
+        up = camera->getAbsDir().apply(up);
+        Vector h = up.cross(view);
+        Vector v = h.cross(view);
+        h.normalize();
+        v.normalize();
+        v *= .5 * drawPart->radius;
+        h *= .5 * drawPart->radius;
+
+        glBegin(GL_TRIANGLE_STRIP);
+        glTexCoord2i(1, 1);
+        glVertex3f(drawPart->position.x - h.x - v.x,
+                   drawPart->position.y - h.y - v.y,
+                   drawPart->position.z - h.z - v.z);
+        glTexCoord2i(0, 1);
+        glVertex3f(drawPart->position.x - h.x + v.x,
+                   drawPart->position.y - h.y + v.y,
+                   drawPart->position.z - h.z + v.z);
+        glTexCoord2i(1, 0);
+        glVertex3f(drawPart->position.x + h.x - v.x,
+                   drawPart->position.y + h.y - v.y,
+                   drawPart->position.z + h.z - v.z);
+        glTexCoord2i(0, 0);
+        glVertex3f(drawPart->position.x + h.x + v.x,
+                   drawPart->position.y + h.y + v.y,
+                   drawPart->position.z + h.z + v.z);
+
+        glEnd();
+
+        drawPart = drawPart->next;
+      }
       glDepthMask(GL_TRUE);
       break;
@@ -378,13 +404,30 @@
       glBegin(GL_LINES);
       while (likely(drawPart != NULL))
-        {
-          glColor4fv(drawPart->color);
-          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;
-        }
+      {
+        glColor4fv(drawPart->color);
+        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_MODEL:
+      if (likely(this->model != NULL))
+        while (likely(drawPart != NULL))
+      {
+        glPushMatrix();
+        glMatrixMode(GL_MODELVIEW);
+
+        glTranslatef(drawPart->position.x, drawPart->position.y, drawPart->position.z);
+        glScalef(drawPart->radius, drawPart->radius, drawPart->radius);
+
+        this->model->draw();
+
+        glPopMatrix();
+        drawPart = drawPart->next;
+      }
       break;
 
@@ -392,15 +435,15 @@
       glBegin(GL_POINTS);
       while (likely(drawPart != NULL))
-        {
-          glColor4fv(drawPart->color);
-
-          glLineWidth(drawPart->radius);
-
-          glVertex3f(drawPart->position.x, drawPart->position.y, drawPart->position.z);
-          drawPart = drawPart->next;
-        }
+      {
+        glColor4fv(drawPart->color);
+
+        glLineWidth(drawPart->radius);
+
+        glVertex3f(drawPart->position.x, drawPart->position.y, drawPart->position.z);
+        drawPart = drawPart->next;
+      }
       glEnd();
       break;
-    }
+  }
   glPopAttrib();
 }
Index: orxonox/trunk/src/lib/particles/particle_system.h
===================================================================
--- orxonox/trunk/src/lib/particles/particle_system.h	(revision 4662)
+++ orxonox/trunk/src/lib/particles/particle_system.h	(revision 4663)
@@ -77,4 +77,5 @@
   void setType(PARTICLE_TYPE particleType, int count = 0);
   void setMaterial(Material* material);
+  void setModel(const char* modelName = NULL);
   void setLifeSpan(float lifeSpan, float randomLifeSpan = 0.0);
   void setConserve(float conserve);
@@ -122,4 +123,5 @@
   PARTICLE_TYPE     particleType;        //!< A type for all the Particles
   Material*         material;            //!< A Material for all the Particles.
+  Model*            model;               //!< A Model to be displayed (PARTICLE_MODEL)
   Particle*         particles;           //!< A list of particles of this System.
   Particle*         deadList;            //!< A list of dead Particles in the System.
Index: orxonox/trunk/src/story_entities/world.cc
===================================================================
--- orxonox/trunk/src/story_entities/world.cc	(revision 4662)
+++ orxonox/trunk/src/story_entities/world.cc	(revision 4663)
@@ -483,4 +483,5 @@
   system->setRadius(1.0, 0.0, .0);
   system->setMass (0.0, 1.0);
+  system->setModel(ResourceManager::getFullName("models/orx-rocket.obj"));
 
   system->setColor(0, .5, 0, 0, 1);
@@ -490,5 +491,5 @@
 
   // Creating a Test Particle Emitter
-  ParticleEmitter* emitter = new ParticleEmitter(Vector(-1, 0, 0), M_PI_4, 400, .5);
+  ParticleEmitter* emitter = new ParticleEmitter(Vector(-1, 0, 0), M_PI_4, 40, .5);
   emitter->setType(EMITTER_DOT);
   emitter->setSize(20);
