Index: orxonox/branches/physics/src/lib/coord/p_node.h
===================================================================
--- orxonox/branches/physics/src/lib/coord/p_node.h	(revision 4223)
+++ orxonox/branches/physics/src/lib/coord/p_node.h	(revision 4274)
@@ -73,4 +73,6 @@
   /** \returns the Velocity of the Node */
   inline const Vector& getVelocity() const {return this->velocity;}
+  /** \returns the last calculated coordinate */
+  inline Vector getLastAbsCoor(void) {return this->lastAbsCoordinate;}
 
   void addChild (PNode* pNode, int parentingMode = DEFAULT_MODE);
Index: orxonox/branches/physics/src/lib/graphics/particles/particle_emitter.cc
===================================================================
--- orxonox/branches/physics/src/lib/graphics/particles/particle_emitter.cc	(revision 4223)
+++ orxonox/branches/physics/src/lib/graphics/particles/particle_emitter.cc	(revision 4274)
@@ -31,4 +31,7 @@
 {
    this->setClassName ("ParticleEmitter");
+
+   this->type = EMITTER_DOT;
+   this->emitterSize = 1.0;
    this->direction = direction;
    this->setSpread(angle);
@@ -50,5 +53,4 @@
 {
   ParticleEngine::getInstance()->removeEmitter(this);
-  
 }
 
@@ -69,4 +71,17 @@
 
 /* these are Animation interfaces: so you can change spec values as you want */
+
+/**
+   \param type the new Type of this emitter
+*/
+void ParticleEmitter::setType(EMITTER_TYPE type)
+{
+  this->type = type;
+}
+
+void ParticleEmitter::setSize(float emitterSize)
+{
+  this->emitterSize = emitterSize;
+}
 
 /**
@@ -140,6 +155,18 @@
 	    // this should spread the Particles evenly. if the Emitter is moved around quickly
 	    Vector equalSpread = this->getVelocity() * random()/RAND_MAX * dt;
+	    Vector extension; // the Vector for different fields.
 
-	    system->addParticle(this->getAbsCoor() - equalSpread, velocityV);
+	    if (this->type & 2)
+	      {
+		extension = Vector(this->emitterSize * ((float)rand()/RAND_MAX -.5), 0, this->emitterSize * ((float)rand()/RAND_MAX - .5));
+		extension = this->getAbsDir().apply(extension);
+	      }
+	    else if (this->type & 8)
+	      {
+		extension = Vector((float)rand()/RAND_MAX -.5, (float)rand()/RAND_MAX -.5, (float)rand()/RAND_MAX -.5) * this->emitterSize;
+	      }
+
+	    system->addParticle(this->getAbsCoor() + extension - equalSpread, velocityV);
+	    
 	  }
       }
Index: orxonox/branches/physics/src/lib/graphics/particles/particle_emitter.h
===================================================================
--- orxonox/branches/physics/src/lib/graphics/particles/particle_emitter.h	(revision 4223)
+++ orxonox/branches/physics/src/lib/graphics/particles/particle_emitter.h	(revision 4274)
@@ -13,8 +13,9 @@
 class ParticleSystem;
 
-typedef enum EMITTER_TYPE {EMITTER_DOT,
-			   EMITTER_PLANE,
-			   EMITTER_SPHERE,
-			   EMITTER_CUBE};
+//! The form of the Emitter to emit from
+typedef enum EMITTER_TYPE {EMITTER_DOT   = 1,
+			   EMITTER_PLANE = 2,
+			   EMITTER_SPHERE= 4,
+			   EMITTER_CUBE  = 8};
 
 //! A default singleton class.
@@ -32,4 +33,6 @@
 
   /* controlling the behavour: these can be used as Animation interfaces */
+  void setType(EMITTER_TYPE type);
+  void setSize(float emitterSize);
   void setEmissionRate(float emissionRate);
   void setSpread(float angle, float randomAngle = 0.0);
@@ -39,4 +42,6 @@
 
  private:
+  EMITTER_TYPE type;    //!< The type of emitter this is
+  float emitterSize;    //!< The size of the emitter (not for EMITTER_DOT)
   Vector direction;     //!< emition direction
   float angle;          //!< max angle from the direction of the emitter
Index: orxonox/branches/physics/src/story_entities/world.cc
===================================================================
--- orxonox/branches/physics/src/story_entities/world.cc	(revision 4223)
+++ orxonox/branches/physics/src/story_entities/world.cc	(revision 4274)
@@ -499,4 +499,6 @@
   // Creating a Test Particle Emitter
   ParticleEmitter* emitter = new ParticleEmitter(Vector(-1, 0, 0), M_PI_4, 400, .5);
+  emitter->setType(EMITTER_CUBE);
+  emitter->setSize(20);
   emitter->setParent(this->localPlayer);
   emitter->setRelCoor(Vector(0,-3,0));
