Index: code/branches/objecthierarchy2/src/orxonox/gamestates/GSRoot.cc
===================================================================
--- code/branches/objecthierarchy2/src/orxonox/gamestates/GSRoot.cc	(revision 2405)
+++ code/branches/objecthierarchy2/src/orxonox/gamestates/GSRoot.cc	(revision 2406)
@@ -44,9 +44,7 @@
 #include "tools/Timer.h"
 #include "objects/Tickable.h"
-#include "objects/worldentities/Backlight.h"
-#include "tools/ParticleInterface.h"
 #include "Settings.h"
 
-#if ORXONOX_PLATFORM == ORXONOX_PLATFORM_WIN32 
+#if ORXONOX_PLATFORM == ORXONOX_PLATFORM_WIN32
 #  ifndef WIN32_LEAN_AND_MEAN
 #    define WIN32_LEAN_AND_MEAN
@@ -231,15 +229,21 @@
         if (Core::isMaster())
         {
-            float change = factor / this->timeFactor_;
+            TimeFactorListener::timefactor_s = factor;
+
+            for (ObjectList<TimeFactorListener>::iterator it = ObjectList<TimeFactorListener>::begin(); it != ObjectList<TimeFactorListener>::end(); ++it)
+                it->changedTimeFactor(factor, this->timeFactor_);
 
             this->timeFactor_ = factor;
-/*
-            for (ObjectList<ParticleInterface>::iterator it = ObjectList<ParticleInterface>::begin(); it != ObjectList<ParticleInterface>::end(); ++it)
-                it->setSpeedFactor(it->getSpeedFactor() * change);
-
-            for (ObjectList<Backlight>::iterator it = ObjectList<Backlight>::begin(); it != ObjectList<Backlight>::end(); ++it)
-                it->setTimeFactor(timeFactor_);
-*/
         }
     }
+
+    ////////////////////////
+    // TimeFactorListener //
+    ////////////////////////
+    float TimeFactorListener::timefactor_s = 1.0f;
+
+    TimeFactorListener::TimeFactorListener()
+    {
+        RegisterRootObject(TimeFactorListener);
+    }
 }
Index: code/branches/objecthierarchy2/src/orxonox/gamestates/GSRoot.h
===================================================================
--- code/branches/objecthierarchy2/src/orxonox/gamestates/GSRoot.h	(revision 2405)
+++ code/branches/objecthierarchy2/src/orxonox/gamestates/GSRoot.h	(revision 2406)
@@ -72,4 +72,21 @@
         ConsoleCommand*       ccSetTimeFactor_;
     };
+
+    class _OrxonoxExport TimeFactorListener : virtual public OrxonoxClass
+    {
+        friend class GSRoot;
+
+        public:
+            TimeFactorListener();
+            virtual ~TimeFactorListener() {}
+
+        protected:
+            virtual void changedTimeFactor(float factor_new, float factor_old) {}
+            inline float getTimeFactor() const
+                { return TimeFactorListener::timefactor_s; }
+
+        private:
+            static float timefactor_s;
+    };
 }
 
Index: code/branches/objecthierarchy2/src/orxonox/objects/worldentities/Backlight.cc
===================================================================
--- code/branches/objecthierarchy2/src/orxonox/objects/worldentities/Backlight.cc	(revision 2405)
+++ code/branches/objecthierarchy2/src/orxonox/objects/worldentities/Backlight.cc	(revision 2406)
@@ -135,6 +135,6 @@
         if (this->ribbonTrail_ && this->tickcount_ >= 2)
         {
-            this->ribbonTrail_->setWidthChange(0, this->width_ * this->getWorldScale() / this->lifetime_/* * Backlight::timeFactor_s*/);
-            this->ribbonTrail_->setColourChange(0, 0, 0, 0, 1.0f / this->lifetime_/* * Backlight::timeFactor_s*/);
+            this->ribbonTrail_->setWidthChange(0, this->width_ * this->getWorldScale() / this->lifetime_ * this->getTimeFactor());
+            this->ribbonTrail_->setColourChange(0, 0, 0, 0, 1.0f / this->lifetime_ * this->getTimeFactor());
         }
     }
@@ -227,3 +227,8 @@
         }
     }
+
+    void Backlight::changedTimeFactor(float factor_new, float factor_old)
+    {
+        this->update_lifetime();
+    }
 }
Index: code/branches/objecthierarchy2/src/orxonox/objects/worldentities/Backlight.h
===================================================================
--- code/branches/objecthierarchy2/src/orxonox/objects/worldentities/Backlight.h	(revision 2405)
+++ code/branches/objecthierarchy2/src/orxonox/objects/worldentities/Backlight.h	(revision 2406)
@@ -32,8 +32,9 @@
 #include "OrxonoxPrereqs.h"
 #include "FadingBillboard.h"
+#include "gamestates/GSRoot.h"
 
 namespace orxonox
 {
-    class _OrxonoxExport Backlight : public FadingBillboard
+    class _OrxonoxExport Backlight : public FadingBillboard, public TimeFactorListener
     {
         public:
@@ -74,4 +75,7 @@
             virtual void changedScale();
 
+        protected:
+            virtual void changedTimeFactor(float factor_new, float factor_old);
+
         private:
             virtual void startturnonoff();
Index: code/branches/objecthierarchy2/src/orxonox/tools/ParticleInterface.cc
===================================================================
--- code/branches/objecthierarchy2/src/orxonox/tools/ParticleInterface.cc	(revision 2405)
+++ code/branches/objecthierarchy2/src/orxonox/tools/ParticleInterface.cc	(revision 2406)
@@ -52,5 +52,5 @@
     ParticleInterface::ParticleInterface(Ogre::SceneManager* scenemanager, const std::string& templateName, LODParticle::LOD detaillevel)
     {
-        RegisterRootObject(ParticleInterface);
+        RegisterObject(ParticleInterface);
 
         assert(scenemanager);
@@ -69,6 +69,5 @@
             {
                 this->particleSystem_ = this->scenemanager_->createParticleSystem("particles" + getConvertedValue<unsigned int, std::string>(ParticleInterface::counter_s++), templateName);
-                this->particleSystem_->setSpeedFactor(1.0f);
-//                this->particleSystem_->setSpeedFactor(Orxonox::getInstance().getTimeFactor());
+                this->setSpeedFactor(1.0f);
             }
             catch (...)
@@ -224,19 +223,12 @@
     void ParticleInterface::setSpeedFactor(float factor)
     {
-        if (this->particleSystem_)
-        {
-//            this->particleSystem_->setSpeedFactor(Orxonox::getInstance().getTimeFactor() * factor);
-            this->particleSystem_->setSpeedFactor(1.0f * factor);
-        }
-    }
-    float ParticleInterface::getSpeedFactor() const
-    {
-        if (this->particleSystem_)
-        {
-//            return (this->particleSystem_->getSpeedFactor() / Orxonox::getInstance().getTimeFactor());
-            return (this->particleSystem_->getSpeedFactor() / 1.0f);
-        }
-        else
-            return 1.0f;
+        this->speedFactor_ = factor;
+
+        if (this->particleSystem_)
+            this->particleSystem_->setSpeedFactor(factor * this->getTimeFactor());
+    }
+    void ParticleInterface::changedTimeFactor(float factor_new, float factor_old)
+    {
+        this->setSpeedFactor(this->speedFactor_);
     }
 
Index: code/branches/objecthierarchy2/src/orxonox/tools/ParticleInterface.h
===================================================================
--- code/branches/objecthierarchy2/src/orxonox/tools/ParticleInterface.h	(revision 2405)
+++ code/branches/objecthierarchy2/src/orxonox/tools/ParticleInterface.h	(revision 2406)
@@ -37,4 +37,5 @@
 #include "core/OrxonoxClass.h"
 #include "util/Math.h"
+#include "gamestates/GSRoot.h"
 
 #define getAllEmitters() \
@@ -45,5 +46,5 @@
 namespace orxonox
 {
-    class _OrxonoxExport ParticleInterface : public OrxonoxClass
+    class _OrxonoxExport ParticleInterface : public TimeFactorListener
     {
         public:
@@ -69,5 +70,6 @@
             unsigned int getNumAffectors() const;
 
-            float getSpeedFactor() const;
+            inline float getSpeedFactor() const
+                { return this->speedFactor_; }
             void setSpeedFactor(float factor);
             bool getKeepParticlesInLocalSpace() const;
@@ -90,4 +92,7 @@
                 { return ParticleInterface::currentParticleInterface_s; }
 
+        protected:
+            virtual void changedTimeFactor(float factor_new, float factor_old);
+
         private:
             void updateVisibility();
@@ -102,4 +107,5 @@
             bool                      bAllowedByLOD_;
             unsigned int              detaillevel_;     //!< Detail level of this particle effect (0: off, 1: low, 2: normal, 3: high)
+            float                     speedFactor_;
             Ogre::SceneManager*       scenemanager_;
     };
Index: code/branches/objecthierarchy2/src/orxonox/tools/Timer.cc
===================================================================
--- code/branches/objecthierarchy2/src/orxonox/tools/Timer.cc	(revision 2405)
+++ code/branches/objecthierarchy2/src/orxonox/tools/Timer.cc	(revision 2406)
@@ -96,5 +96,5 @@
         this->time_ = 0;
 
-        RegisterRootObject(TimerBase);
+        RegisterObject(TimerBase);
     }
 
@@ -137,5 +137,5 @@
         {
             // If active: Decrease the timer by the duration of the last frame
-            this->time_ -= time.getDeltaTimeMicroseconds();
+            this->time_ -= (long long)(time.getDeltaTimeMicroseconds() * this->getTimeFactor());
 
             if (this->time_ <= 0)
Index: code/branches/objecthierarchy2/src/orxonox/tools/Timer.h
===================================================================
--- code/branches/objecthierarchy2/src/orxonox/tools/Timer.h	(revision 2405)
+++ code/branches/objecthierarchy2/src/orxonox/tools/Timer.h	(revision 2406)
@@ -63,4 +63,5 @@
 #include "OrxonoxPrereqs.h"
 #include "core/OrxonoxClass.h"
+#include "gamestates/GSRoot.h"
 
 namespace orxonox
@@ -72,5 +73,5 @@
 
     //! TimerBase is the parent of the Timer class.
-    class _OrxonoxExport TimerBase : public OrxonoxClass
+    class _OrxonoxExport TimerBase : public TimeFactorListener
     {
         public:
