Index: code/trunk/src/core/CommandEvaluation.cc
===================================================================
--- code/trunk/src/core/CommandEvaluation.cc	(revision 1562)
+++ code/trunk/src/core/CommandEvaluation.cc	(revision 1563)
@@ -78,5 +78,5 @@
         if (this->bEvaluatedParams_ && this->function_)
         {
-            COUT(4) << "CE_execute (evaluation): " << this->function_->getName() << " " << this->param_[0] << " " << this->param_[1] << " " << this->param_[2] << " " << this->param_[3] << " " << this->param_[4] << std::endl;
+            COUT(5) << "CE_execute (evaluation): " << this->function_->getName() << " " << this->param_[0] << " " << this->param_[1] << " " << this->param_[2] << " " << this->param_[3] << " " << this->param_[4] << std::endl;
             (*this->function_)(this->param_[0], this->param_[1], this->param_[2], this->param_[3], this->param_[4]);
             return true;
Index: code/trunk/src/orxonox/GraphicsEngine.cc
===================================================================
--- code/trunk/src/orxonox/GraphicsEngine.cc	(revision 1562)
+++ code/trunk/src/orxonox/GraphicsEngine.cc	(revision 1563)
@@ -53,4 +53,5 @@
 
 #include "console/InGameConsole.h"
+#include "tools/ParticleInterface.h"
 #include "Settings.h"
 
@@ -76,4 +77,6 @@
   {
     RegisterObject(GraphicsEngine);
+
+    this->detailLevelParticle_ = 0;
 
     this->setConfigValues();
@@ -91,4 +94,11 @@
     SetConfigValue(ogreLogLevelNormal_  , 4).description("Corresponding orxonox debug level for ogre Normal");
     SetConfigValue(ogreLogLevelCritical_, 2).description("Corresponding orxonox debug level for ogre Critical");
+
+    unsigned int old = this->detailLevelParticle_;
+    SetConfigValue(detailLevelParticle_, 2).description("O: off, 1: low, 2: normal, 3: high");
+
+    if (this->detailLevelParticle_ != old)
+      for (Iterator<ParticleInterface> it = ObjectList<ParticleInterface>::begin(); it; ++it)
+        it->detailLevelChanged(this->detailLevelParticle_);
   }
 
Index: code/trunk/src/orxonox/GraphicsEngine.h
===================================================================
--- code/trunk/src/orxonox/GraphicsEngine.h	(revision 1562)
+++ code/trunk/src/orxonox/GraphicsEngine.h	(revision 1563)
@@ -80,4 +80,7 @@
             void windowClosed      (Ogre::RenderWindow* rw);
 
+            inline unsigned int getDetailLevelParticle() const
+              { return this->detailLevelParticle_; }
+
             static GraphicsEngine& getSingleton();
             static GraphicsEngine* getSingletonPtr() { return &getSingleton(); }
@@ -94,14 +97,15 @@
                              bool, const std::string&);
 
-            Ogre::Root*         root_;              //!< Ogre's root
-            Ogre::SceneManager* scene_;             //!< scene manager of the game
-            Ogre::RenderWindow* renderWindow_;      //!< the current render window
-            std::string         resourceFile_;      //!< resources file name
-            std::string         ogreConfigFile_;    //!< ogre config file name
-            std::string         ogrePluginsFile_;   //!< ogre plugins file name
-            std::string         ogreLogFile_;       //!< log file name for Ogre log messages
-            int ogreLogLevelTrivial_;               //!< Corresponding Orxonx debug level for LL_TRIVIAL
-            int ogreLogLevelNormal_;                //!< Corresponding Orxonx debug level for LL_NORMAL
-            int ogreLogLevelCritical_;              //!< Corresponding Orxonx debug level for LL_CRITICAL
+            Ogre::Root*         root_;                  //!< Ogre's root
+            Ogre::SceneManager* scene_;                 //!< scene manager of the game
+            Ogre::RenderWindow* renderWindow_;          //!< the current render window
+            std::string         resourceFile_;          //!< resources file name
+            std::string         ogreConfigFile_;        //!< ogre config file name
+            std::string         ogrePluginsFile_;       //!< ogre plugins file name
+            std::string         ogreLogFile_;           //!< log file name for Ogre log messages
+            int                 ogreLogLevelTrivial_;   //!< Corresponding Orxonx debug level for LL_TRIVIAL
+            int                 ogreLogLevelNormal_;    //!< Corresponding Orxonx debug level for LL_NORMAL
+            int                 ogreLogLevelCritical_;  //!< Corresponding Orxonx debug level for LL_CRITICAL
+            unsigned int        detailLevelParticle_;   //!< Detail level of particle effects (0: off, 1: low, 2: normal, 3: high)
     };
 }
Index: code/trunk/src/orxonox/Orxonox.cc
===================================================================
--- code/trunk/src/orxonox/Orxonox.cc	(revision 1562)
+++ code/trunk/src/orxonox/Orxonox.cc	(revision 1563)
@@ -71,4 +71,5 @@
 #include "hud/HUD.h"
 #include "objects/Tickable.h"
+#include "tools/ParticleInterface.h"
 
 #include "GraphicsEngine.h"
@@ -162,4 +163,16 @@
 
   /**
+    @brief Changes the speed of Orxonox
+  */
+  void Orxonox::setTimeFactor(float factor)
+  {
+    float change = factor / Orxonox::getSingleton()->getTimeFactor();
+    Orxonox::getSingleton()->timefactor_ = factor;
+
+    for (Iterator<ParticleInterface> it = ObjectList<ParticleInterface>::begin(); it; ++it)
+        it->setSpeedFactor(it->getSpeedFactor() * change);
+  }
+
+  /**
    * initialization of Orxonox object
    * @param argc argument counter
@@ -379,5 +392,5 @@
     Level* startlevel = new Level("levels/sample.oxw");
     Loader::open(startlevel);
-    
+
     return true;
   }
@@ -421,5 +434,5 @@
     //Ogre::SceneManager* mSceneMgr = GraphicsEngine::getSingleton().getSceneManager();
     //Ogre::Viewport* mViewport = mSceneMgr->getCurrentViewport();
-    
+
     //Ogre::CompositorManager::getSingleton().addCompositor(mViewport, "Bloom");
     //Ogre::CompositorManager::getSingleton().addCompositor(mViewport, "MotionBlur");
Index: code/trunk/src/orxonox/Orxonox.h
===================================================================
--- code/trunk/src/orxonox/Orxonox.h	(revision 1562)
+++ code/trunk/src/orxonox/Orxonox.h	(revision 1563)
@@ -67,6 +67,6 @@
       static void destroySingleton();
 
-      static inline void slomo(float factor) { Orxonox::getSingleton()->timefactor_ = factor; }
-      static inline void setTimeFactor(float factor = 1.0) { Orxonox::getSingleton()->timefactor_ = factor; }
+      static inline void slomo(float factor) { Orxonox::setTimeFactor(factor); }
+      static void setTimeFactor(float factor = 1.0);
       static inline float getTimeFactor() { return Orxonox::getSingleton()->timefactor_; }
       static inline void exit() { Orxonox::getSingleton()->abortRequest(); }
Index: code/trunk/src/orxonox/OrxonoxPrereqs.h
===================================================================
--- code/trunk/src/orxonox/OrxonoxPrereqs.h	(revision 1562)
+++ code/trunk/src/orxonox/OrxonoxPrereqs.h	(revision 1563)
@@ -60,5 +60,17 @@
 //-----------------------------------------------------------------------
 
-namespace orxonox {
+namespace orxonox
+{
+  namespace LODParticle
+  {
+    enum LOD
+    {
+      off = 0,
+      low = 1,
+      normal = 2,
+      high = 3
+    };
+  }
+
   class GraphicsEngine;
   class Orxonox;
Index: code/trunk/src/orxonox/hud/RadarObject.cc
===================================================================
--- code/trunk/src/orxonox/hud/RadarObject.cc	(revision 1562)
+++ code/trunk/src/orxonox/hud/RadarObject.cc	(revision 1563)
@@ -65,4 +65,5 @@
 {
     unsigned int RadarObject::count_s = 0;
+    unsigned int RadarObject::materialcount_s = 0;
     std::map<std::string, std::map<ColourValue, std::string> > RadarObject::materials_s;
 
@@ -99,6 +100,7 @@
         if (it == colourmap.end())
         {
-            materialname = "radarmaterial" + getConvertedValue<unsigned int, std::string>(RadarObject::count_s);
+            materialname = "radarmaterial" + getConvertedValue<unsigned int, std::string>(RadarObject::materialcount_s++);
             Ogre::MaterialPtr material = (Ogre::MaterialPtr)Ogre::MaterialManager::getSingleton().create(materialname, "General");
+            material->getTechnique(0)->getPass(0)->setSceneBlending(Ogre::SBT_TRANSPARENT_ALPHA);
             Ogre::TextureUnitState* textureunitstate = material->getTechnique(0)->getPass(0)->createTextureUnitState();
             textureunitstate->setTextureName(texturename);
Index: code/trunk/src/orxonox/hud/RadarObject.h
===================================================================
--- code/trunk/src/orxonox/hud/RadarObject.h	(revision 1562)
+++ code/trunk/src/orxonox/hud/RadarObject.h	(revision 1563)
@@ -64,5 +64,6 @@
       private:
         static std::map<std::string, std::map<ColourValue, std::string> > materials_s;
-        unsigned static int count_s;
+        static unsigned int count_s;
+        static unsigned int materialcount_s;
         Ogre::SceneNode* node_;					// node of object
         ColourValue colour_;
Index: code/trunk/src/orxonox/objects/ParticleProjectile.cc
===================================================================
--- code/trunk/src/orxonox/objects/ParticleProjectile.cc	(revision 1562)
+++ code/trunk/src/orxonox/objects/ParticleProjectile.cc	(revision 1563)
@@ -43,5 +43,5 @@
         if (this->owner_)
         {
-            this->particles_ = new ParticleInterface("Orxonox/shot2");
+            this->particles_ = new ParticleInterface("Orxonox/shot2", LODParticle::normal);
             this->particles_->addToSceneNode(this->getNode());
             this->particles_->getAllEmitters()->setDirection(-this->owner_->getInitialDir());
Index: code/trunk/src/orxonox/objects/ParticleSpawner.cc
===================================================================
--- code/trunk/src/orxonox/objects/ParticleSpawner.cc	(revision 1562)
+++ code/trunk/src/orxonox/objects/ParticleSpawner.cc	(revision 1563)
@@ -43,5 +43,5 @@
     }
 
-    ParticleSpawner::ParticleSpawner(const std::string& templateName, float lifetime, float delay, const Vector3& direction)
+    ParticleSpawner::ParticleSpawner(const std::string& templateName, LODParticle::LOD detaillevel, float lifetime, float delay, const Vector3& direction)
     {
         RegisterObject(ParticleSpawner);
@@ -50,5 +50,5 @@
         executor->setDefaultValues(lifetime);
         this->timer_.setTimer(delay, false, this, executor);
-        this->particle_ = new ParticleInterface(templateName);
+        this->particle_ = new ParticleInterface(templateName, detaillevel);
         this->particle_->addToSceneNode(this->getNode());
         this->particle_->setEnabled(false);
Index: code/trunk/src/orxonox/objects/ParticleSpawner.h
===================================================================
--- code/trunk/src/orxonox/objects/ParticleSpawner.h	(revision 1562)
+++ code/trunk/src/orxonox/objects/ParticleSpawner.h	(revision 1563)
@@ -33,5 +33,5 @@
 
 #include "WorldEntity.h"
-#include "../tools/Timer.h"
+#include "tools/Timer.h"
 
 namespace orxonox
@@ -41,5 +41,5 @@
         public:
             ParticleSpawner();
-            ParticleSpawner(const std::string& templateName, float lifetime, float delay = 0, const Vector3& direction = Vector3::ZERO);
+            ParticleSpawner(const std::string& templateName, LODParticle::LOD detaillevel, float lifetime, float delay = 0, const Vector3& direction = Vector3::ZERO);
             virtual ~ParticleSpawner();
             inline ParticleInterface* getParticleInterface() const
Index: code/trunk/src/orxonox/objects/Projectile.cc
===================================================================
--- code/trunk/src/orxonox/objects/Projectile.cc	(revision 1562)
+++ code/trunk/src/orxonox/objects/Projectile.cc	(revision 1563)
@@ -97,8 +97,8 @@
                     if (it->isA(Class(SpaceShipAI)))
                         ((SpaceShipAI*)(*it))->damage(this->damage_);
-                    ParticleSpawner* explosion = new ParticleSpawner(this->explosionTemplateName_, 2.0);
+                    ParticleSpawner* explosion = new ParticleSpawner(this->explosionTemplateName_, LODParticle::low, 2.0);
                     explosion->setPosition(this->getPosition());
                     explosion->create();
-                    ParticleSpawner* smoke = new ParticleSpawner(this->smokeTemplateName_, 6.0, 0.0);
+                    ParticleSpawner* smoke = new ParticleSpawner(this->smokeTemplateName_, LODParticle::normal, 6.0, 0.0);
                     smoke->setPosition(this->getPosition());
                     smoke->getParticleInterface()->setSpeedFactor(3.0);
Index: code/trunk/src/orxonox/objects/SpaceShip.cc
===================================================================
--- code/trunk/src/orxonox/objects/SpaceShip.cc	(revision 1562)
+++ code/trunk/src/orxonox/objects/SpaceShip.cc	(revision 1563)
@@ -187,5 +187,5 @@
     {
         // START CREATING THRUSTER
-        this->tt1_ = new ParticleInterface("Orxonox/thruster1");
+        this->tt1_ = new ParticleInterface("Orxonox/thruster1", LODParticle::low);
         this->tt1_->createNewEmitter();
         this->tt1_->getAllEmitters()->setDirection(-this->getInitialDir());
@@ -199,5 +199,5 @@
         tt1_->addToSceneNode(node2a);
 
-        this->tt2_ = new ParticleInterface("Orxonox/thruster2");
+        this->tt2_ = new ParticleInterface("Orxonox/thruster2", LODParticle::normal);
         this->tt2_->createNewEmitter();
         this->tt2_->getAllEmitters()->setDirection(Vector3(-1, 0, 0));
Index: code/trunk/src/orxonox/objects/SpaceShipAI.cc
===================================================================
--- code/trunk/src/orxonox/objects/SpaceShipAI.cc	(revision 1562)
+++ code/trunk/src/orxonox/objects/SpaceShipAI.cc	(revision 1563)
@@ -102,5 +102,5 @@
             newenemy->XMLPort(xmlelement, XMLPort::LoadObject);
 
-            ParticleSpawner* spawneffect = new ParticleSpawner("Orxonox/fairytwirl", 2.0, 0.0, newenemy->getOrth());
+            ParticleSpawner* spawneffect = new ParticleSpawner("Orxonox/fairytwirl", LODParticle::normal, 2.0, 0.0, newenemy->getOrth());
             spawneffect->setPosition(newenemy->getPosition() - newenemy->getOrth() * 50);
             spawneffect->create();
@@ -182,11 +182,16 @@
     void SpaceShipAI::kill()
     {
-        ParticleSpawner* explosion = new ParticleSpawner("Orxonox/BigExplosion1part1", 3.0);
-        explosion->setPosition(this->getPosition());
-        explosion->getParticleInterface()->setKeepParticlesInLocalSpace(true);
-        explosion->setScale(4);
-        explosion->create();
-
-        explosion = new ParticleSpawner("Orxonox/BigExplosion1part2", 3.0);
+        ParticleSpawner* explosion = new ParticleSpawner("Orxonox/BigExplosion1part1", LODParticle::low, 3.0);
+        explosion->setPosition(this->getPosition());
+        explosion->getParticleInterface()->setKeepParticlesInLocalSpace(true);
+        explosion->setScale(4);
+        explosion->create();
+
+        explosion = new ParticleSpawner("Orxonox/BigExplosion1part2", LODParticle::normal, 3.0);
+        explosion->setPosition(this->getPosition());
+        explosion->getParticleInterface()->setKeepParticlesInLocalSpace(true);
+        explosion->setScale(4);
+        explosion->create();
+        explosion = new ParticleSpawner("Orxonox/BigExplosion1part2", LODParticle::high, 3.0);
         explosion->setPosition(this->getPosition());
         explosion->getParticleInterface()->setKeepParticlesInLocalSpace(true);
@@ -196,5 +201,10 @@
         Vector3 ringdirection = Vector3(rnd(), rnd(), rnd());
         ringdirection.normalise();
-        explosion = new ParticleSpawner("Orxonox/BigExplosion1part3", 3.0, 0.5, ringdirection);
+        explosion = new ParticleSpawner("Orxonox/BigExplosion1part3", LODParticle::normal, 3.0, 0.5, ringdirection);
+        explosion->setPosition(this->getPosition());
+        explosion->getParticleInterface()->setKeepParticlesInLocalSpace(true);
+        explosion->setScale(4);
+        explosion->create();
+        explosion = new ParticleSpawner("Orxonox/BigExplosion1part3", LODParticle::high, 3.0, 0.5, ringdirection);
         explosion->setPosition(this->getPosition());
         explosion->getParticleInterface()->setKeepParticlesInLocalSpace(true);
Index: code/trunk/src/orxonox/tools/ParticleInterface.cc
===================================================================
--- code/trunk/src/orxonox/tools/ParticleInterface.cc	(revision 1562)
+++ code/trunk/src/orxonox/tools/ParticleInterface.cc	(revision 1563)
@@ -40,4 +40,5 @@
 #include "GraphicsEngine.h"
 #include "Orxonox.h"
+#include "core/CoreIncludes.h"
 #include "util/Convert.h"
 
@@ -47,9 +48,23 @@
   ParticleInterface* ParticleInterface::currentParticleInterface_s = 0;
 
-  ParticleInterface::ParticleInterface(const std::string& templateName)
+  ParticleInterface::ParticleInterface(const std::string& templateName, LODParticle::LOD detaillevel)
   {
+    RegisterRootObject(ParticleInterface);
+
     this->sceneNode_ = 0;
+    this->bEnabled_ = true;
+    this->detaillevel_ = (unsigned int)detaillevel;
     this->particleSystem_ = GraphicsEngine::getSingleton().getSceneManager()->createParticleSystem("particles" + getConvertedValue<unsigned int, std::string>(ParticleInterface::counter_s++), templateName);
     this->particleSystem_->setSpeedFactor(Orxonox::getSingleton()->getTimeFactor());
+
+    if (GraphicsEngine::getSingleton().getDetailLevelParticle() < (unsigned int)this->detaillevel_)
+    {
+      this->bVisible_ = false;
+      this->updateVisibility();
+    }
+    else
+    {
+      this->bVisible_ = true;
+    }
   }
 
@@ -134,6 +149,22 @@
   void ParticleInterface::setEnabled(bool enable)
   {
+    this->bEnabled_ = enable;
+    this->updateVisibility();
+  }
+
+  void ParticleInterface::detailLevelChanged(unsigned int newlevel)
+  {
+    if (newlevel >= (unsigned int)this->detaillevel_)
+      this->bVisible_ = true;
+    else
+      this->bVisible_ = false;
+
+    this->updateVisibility();
+  }
+
+  void ParticleInterface::updateVisibility()
+  {
     for (unsigned int i = 0; i < this->particleSystem_->getNumEmitters(); i++)
-      this->particleSystem_->getEmitter(i)->setEnabled(enable);
+      this->particleSystem_->getEmitter(i)->setEnabled(this->bEnabled_ && this->bVisible_);
   }
 
@@ -144,5 +175,5 @@
   float ParticleInterface::getSpeedFactor() const
   {
-    return this->particleSystem_->getSpeedFactor();
+    return (this->particleSystem_->getSpeedFactor() / Orxonox::getSingleton()->getTimeFactor());
   }
 
Index: code/trunk/src/orxonox/tools/ParticleInterface.h
===================================================================
--- code/trunk/src/orxonox/tools/ParticleInterface.h	(revision 1562)
+++ code/trunk/src/orxonox/tools/ParticleInterface.h	(revision 1563)
@@ -35,4 +35,5 @@
 #include <OgreParticleEmitter.h>
 
+#include "core/OrxonoxClass.h"
 #include "util/Math.h"
 
@@ -44,8 +45,8 @@
 namespace orxonox
 {
-  class _OrxonoxExport ParticleInterface
+  class _OrxonoxExport ParticleInterface : public OrxonoxClass
   {
     public:
-      ParticleInterface(const std::string& templateName);
+      ParticleInterface(const std::string& templateName, LODParticle::LOD detaillevel);
       ~ParticleInterface();
 
@@ -74,4 +75,5 @@
 
       void setEnabled(bool enable);
+      void detailLevelChanged(unsigned int newlevel);
 
       inline void storeThisAsCurrentParticleInterface()
@@ -81,8 +83,13 @@
 
     private:
+      void updateVisibility();
+
       static ParticleInterface* currentParticleInterface_s;
       static unsigned int counter_s;
       Ogre::SceneNode* sceneNode_;
       Ogre::ParticleSystem* particleSystem_;
+      bool bVisible_;
+      bool bEnabled_;
+      unsigned int detaillevel_;                            //!< Detail level of this particle effect (0: off, 1: low, 2: normal, 3: high)
   };
 }
