Index: orxonox/trunk/src/lib/particles/particle_emitter.cc
===================================================================
--- orxonox/trunk/src/lib/particles/particle_emitter.cc	(revision 4725)
+++ orxonox/trunk/src/lib/particles/particle_emitter.cc	(revision 4726)
@@ -30,5 +30,4 @@
 CREATE_FACTORY(ParticleEmitter);
 
-
 /**
    \brief standard constructor
@@ -37,9 +36,7 @@
                   float velocity)
 {
-  this->setClassID(CL_PARTICLE_EMITTER, "ParticleEmitter");
-  this->type = EMITTER_DOT;
-  this->emitterSize = 1.0;
+  this->init();
+
   this->direction = direction;
-  this->setInheritSpeed(0);
   this->setSpread(angle);
   this->setEmissionRate(emissionRate);
@@ -55,7 +52,5 @@
 ParticleEmitter::ParticleEmitter(const TiXmlElement* root)
 {
-   this->setClassID(CL_PARTICLE_EMITTER, "ParticleEmitter");
-
-   this->saveTime = 0.0;
+  this->init();
 
    if (root)
@@ -76,4 +71,20 @@
 
 /**
+  \brief initializes default values of a ParitcleEmitter
+*/
+void ParticleEmitter::init()
+{
+  this->setClassID(CL_PARTICLE_EMITTER, "ParticleEmitter");
+
+  this->type = PARTICLE_EMITTER_DEFAULT_TYPE;
+  this->emitterSize = PARTICLE_EMITTER_DEFAULT_SIZE;
+  this->setInheritSpeed(PARTICLE_EMITTER_DEFAULT_INHERIT_SPEED);
+  this->setEmissionRate(PARTICLE_EMITTER_DEFAULT_EMISSION_RATE);
+  this->setSize(PARTICLE_EMITTER_DEFAULT_SIZE);
+
+  this->saveTime = 0.0;
+}
+
+/**
    \brief loads a ParticleEmitter from a XML-element
    \param root the XML-element to load from
@@ -103,4 +114,7 @@
   LoadParam<ParticleEmitter>(root, "spread", this, &ParticleEmitter::setSpread)
     .describe("The angle the particles are emitted from (angle, deviation)");
+
+
+  LoadParam<ParticleEmitter>(root, "emission-direction", this, &ParticleEmitter::setDirection);
 }
 
Index: orxonox/trunk/src/lib/particles/particle_emitter.h
===================================================================
--- orxonox/trunk/src/lib/particles/particle_emitter.h	(revision 4725)
+++ orxonox/trunk/src/lib/particles/particle_emitter.h	(revision 4726)
@@ -12,4 +12,11 @@
 class ParticleSystem;
 class TiXmlElement;
+
+// Default values
+#define PARTICLE_EMITTER_DEFAULT_SIZE              1.0
+#define PARTICLE_EMITTER_DEFAULT_EMISSION_RATE     50
+#define PARTICLE_EMITTER_DEFAULT_TYPE              EMITTER_DOT
+#define PARTICLE_EMITTER_DEFAULT_INHERIT_SPEED     0.0
+#define PARTICLE_EMITTER_DEFAULT_SPREAD            M_PI
 
 //! The form of the Emitter to emit from
@@ -31,4 +38,5 @@
   virtual ~ParticleEmitter(void);
 
+  void init();
   void loadParams(const TiXmlElement* root);
 
@@ -47,4 +55,6 @@
   void setEmissionVelocity(float velocity, float randomVelocity = 0.0);
   void setEmissionMomentum(float momentum, float randomMomentum = 0.0);
+
+  void setDirection(float x, float y, float z) { this->direction = Vector(x,y,z); }; //!< todo this should be done via PNODE
 
   /** \returns the type of the emitter */
Index: orxonox/trunk/src/lib/particles/particle_engine.cc
===================================================================
--- orxonox/trunk/src/lib/particles/particle_engine.cc	(revision 4725)
+++ orxonox/trunk/src/lib/particles/particle_engine.cc	(revision 4726)
@@ -24,4 +24,5 @@
 #include "debug.h"
 #include "stdlibincl.h"
+#include "load_param.h"
 
 using namespace std;
@@ -82,4 +83,21 @@
 
 /**
+  \brief loads the ParticleEngines settings and connections between particles and emitters
+  \param root the XML-element to load this from.
+ */
+void ParticleEngine::loadParams(const TiXmlElement* root)
+{
+  const TiXmlElement* element = root->FirstChildElement();
+  while( element != NULL)
+  {
+    LoadParam<ParticleEngine>(element, "connect", this, &ParticleEngine::addConnection, true)
+        .describe("connects an Emitter to a System (emitterName, systemName)");
+    element = element->NextSiblingElement();
+  }
+}
+
+
+
+/**
    \brief Adds a System to the System list.
 
@@ -99,4 +117,25 @@
 {
   this->emitterList->add(emitter);
+}
+
+/**
+  \brief Connects a ParticleSystem to a ParticleSystem thus emitting Particles.
+  \param emitter the Emitter to connect to the System
+  \param system the System to connect to the Emitter
+*/
+void ParticleEngine::addConnection(const char* emitter, const char* system)
+{
+  ParticleEmitter* tmpEmit = this->getEmitterByName(emitter);
+  ParticleSystem* tmpSys = this->getSystemByName(system);
+
+  if (tmpEmit != NULL && tmpSys != NULL)
+    this->addConnection(tmpEmit, tmpSys);
+  else
+  {
+    if (tmpEmit == NULL)
+      PRINTF(2)("Emitter %s not found in the List of emitters, not connecting to %s\n", emitter, system);
+    if (tmpEmit == NULL)
+      PRINTF(2)("System %s not found in the List of emitters, not connecting to %s\n", system, emitter);
+  }
 }
 
Index: orxonox/trunk/src/lib/particles/particle_engine.h
===================================================================
--- orxonox/trunk/src/lib/particles/particle_engine.h	(revision 4725)
+++ orxonox/trunk/src/lib/particles/particle_engine.h	(revision 4726)
@@ -8,6 +8,9 @@
 
 #include "base_object.h"
+
 #include "particle_system.h"
 #include "particle_emitter.h"
+
+#include "tinyxml.h"
 
 // FORWARD DEFINITION
@@ -34,4 +37,6 @@
   inline static ParticleEngine* getInstance(void) { if (!singletonRef) singletonRef = new ParticleEngine();  return singletonRef; };
 
+  void loadParams(const TiXmlElement* root);
+
   void tick(float dt);
   void draw(void) const;
@@ -40,4 +45,6 @@
   void addEmitter(ParticleEmitter* emitter);
   void addConnection(ParticleEmitter* emitter, ParticleSystem* system);
+  void addConnection(const char* emitter, const char* system);
+
 
   bool removeSystem(ParticleSystem* system);
Index: orxonox/trunk/src/lib/particles/particle_system.cc
===================================================================
--- orxonox/trunk/src/lib/particles/particle_system.cc	(revision 4725)
+++ orxonox/trunk/src/lib/particles/particle_system.cc	(revision 4726)
@@ -127,8 +127,5 @@
 
   LoadParam<ParticleSystem>(root, "type", this, &ParticleSystem::setType)
-      .describe("sets the type of the Particles, (DOT, SPARK, SPRITE or MODEL)");
-
-  LoadParam<ParticleSystem>(root, "model", this, &ParticleSystem::setModel)
-      .describe("sets a model to be loaded on top of this System (also sets type to Model)");
+      .describe("sets the type of the Particles, (dot, spark, sprite or model)");
 
   // PER-PARTICLE-ATTRIBUTES:
@@ -149,9 +146,9 @@
 void ParticleSystem::setType(const char* particleType)
 {
-  if (strcmp(particleType, "DOTS"))
+  if (!strcmp(particleType, "dot"))
     this->setType(PARTICLE_DOT);
-  else if (strcmp(particleType, "SPARKS"))
+  else if(!strcmp(particleType, "spark"))
     this->setType(PARTICLE_SPARK);
-  else if (strcmp(particleType, "MODELS"))
+  else if(!strcmp(particleType, "model"))
     this->setType(PARTICLE_MODEL);
   else // if (strcmp(particleType, "SPRITE"))
@@ -187,12 +184,5 @@
       //  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;
-    }
+  }
 }
 
@@ -207,24 +197,4 @@
 {
   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)
-    ResourceManager::getInstance()->unload(this->model);
-  if (modelName)
-  {
-    this->model = (Model*)ResourceManager::getInstance()->load(modelName, OBJ, RP_LEVEL);
-    this->setType(PARTICLE_MODEL);
-  }
-  else
-  {
-    this->model = NULL;
-    this->setType(PARTICLE_SPRITE);
-  }
 }
 
@@ -505,4 +475,6 @@
           drawPart = drawPart->next;
         }
+        else
+          printf("no model loaded onto ParticleSystem-%s\n", this->getName());
       }
       break;
@@ -595,5 +567,18 @@
 void ParticleSystem::debug(void) const
 {
-  PRINT(0)("  ParticleSystem %s\n", this->getName());
+  PRINT(0)("  ParticleSystem %s, type: ", this->getName());
+  {
+      if (this->particleType == PARTICLE_MODEL)
+        PRINT(0)("model");
+      else if (this->particleType == PARTICLE_SPRITE)
+        PRINT(0)("sprite");
+      else if (this->particleType == PARTICLE_DOT)
+        PRINT(0)("dot");
+      else if (this->particleType == PARTICLE_SPARK)
+        PRINT(0)("spark");
+
+      PRINT(0)("\n");
+  }
+
   PRINT(0)("  ParticleCount: %d, maximumCount: %d :: filled %d%%\n", this->count, this->maxCount, 100*this->count/this->maxCount);
   if (deadList)
