Index: code/branches/objecthierarchy2/src/orxonox/objects/CMakeLists.txt
===================================================================
--- code/branches/objecthierarchy2/src/orxonox/objects/CMakeLists.txt	(revision 2344)
+++ code/branches/objecthierarchy2/src/orxonox/objects/CMakeLists.txt	(revision 2350)
@@ -3,4 +3,5 @@
   EventDispatcher.cc
   EventTarget.cc
+  GlobalShader.cc
   Level.cc
   Radar.cc
Index: code/branches/objecthierarchy2/src/orxonox/objects/GlobalShader.cc
===================================================================
--- code/branches/objecthierarchy2/src/orxonox/objects/GlobalShader.cc	(revision 2350)
+++ code/branches/objecthierarchy2/src/orxonox/objects/GlobalShader.cc	(revision 2350)
@@ -0,0 +1,78 @@
+/*
+ *   ORXONOX - the hottest 3D action shooter ever to exist
+ *                    > www.orxonox.net <
+ *
+ *
+ *   License notice:
+ *
+ *   This program is free software; you can redistribute it and/or
+ *   modify it under the terms of the GNU General Public License
+ *   as published by the Free Software Foundation; either version 2
+ *   of the License, or (at your option) any later version.
+ *
+ *   This program is distributed in the hope that it will be useful,
+ *   but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *   GNU General Public License for more details.
+ *
+ *   You should have received a copy of the GNU General Public License
+ *   along with this program; if not, write to the Free Software
+ *   Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
+ *
+ *   Author:
+ *      Fabian 'x3n' Landau
+ *   Co-authors:
+ *      ...
+ *
+ */
+
+#include "OrxonoxStableHeaders.h"
+#include "GlobalShader.h"
+
+#include "core/CoreIncludes.h"
+#include "core/XMLPort.h"
+#include "objects/Scene.h"
+#include "util/Exception.h"
+
+namespace orxonox
+{
+    CreateFactory(GlobalShader);
+
+    GlobalShader::GlobalShader(BaseObject* creator) : BaseObject(creator), Synchronisable(creator)
+    {
+        RegisterObject(GlobalShader);
+
+        if (!this->getScene())
+            ThrowException(AbortLoading, "Can't create Camera, no scene given.");
+        if (!this->getScene()->getSceneManager())
+            ThrowException(AbortLoading, "Can't create Camera, no scene manager given.");
+
+        this->shader_.setSceneManager(this->getScene()->getSceneManager());
+
+        this->registerVariables();
+    }
+
+    GlobalShader::~GlobalShader()
+    {
+    }
+
+    void GlobalShader::XMLPort(Element& xmlelement, XMLPort::Mode mode)
+    {
+        SUPER(GlobalShader, XMLPort, xmlelement, mode);
+
+        XMLPortParamExtern(GlobalShader, Shader, &this->shader_, "compositor", setCompositor, getCompositor, xmlelement, mode);
+    }
+
+    void GlobalShader::registerVariables()
+    {
+        REGISTERDATA  (this->bVisible_, direction::toclient, new NetworkCallback<GlobalShader>(this, &GlobalShader::changedVisibility));
+        REGISTERSTRING(const_cast<std::string&>(this->shader_.getCompositor()), direction::toclient, new NetworkCallback<Shader>(&this->shader_, &Shader::changedCompositor));
+    }
+
+    void GlobalShader::changedVisibility()
+    {
+        SUPER(GlobalShader, changedVisibility);
+
+        this->shader_.setVisible(this->isVisible());
+    }
+}
Index: code/branches/objecthierarchy2/src/orxonox/objects/GlobalShader.h
===================================================================
--- code/branches/objecthierarchy2/src/orxonox/objects/GlobalShader.h	(revision 2350)
+++ code/branches/objecthierarchy2/src/orxonox/objects/GlobalShader.h	(revision 2350)
@@ -0,0 +1,61 @@
+/*
+ *   ORXONOX - the hottest 3D action shooter ever to exist
+ *                    > www.orxonox.net <
+ *
+ *
+ *   License notice:
+ *
+ *   This program is free software; you can redistribute it and/or
+ *   modify it under the terms of the GNU General Public License
+ *   as published by the Free Software Foundation; either version 2
+ *   of the License, or (at your option) any later version.
+ *
+ *   This program is distributed in the hope that it will be useful,
+ *   but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *   GNU General Public License for more details.
+ *
+ *   You should have received a copy of the GNU General Public License
+ *   along with this program; if not, write to the Free Software
+ *   Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
+ *
+ *   Author:
+ *      Fabian 'x3n' Landau
+ *   Co-authors:
+ *      ...
+ *
+ */
+
+#ifndef _GlobalShader_H__
+#define _GlobalShader_H__
+
+#include "OrxonoxPrereqs.h"
+
+#include "core/BaseObject.h"
+#include "network/Synchronisable.h"
+#include "tools/Shader.h"
+
+namespace orxonox
+{
+    class _OrxonoxExport GlobalShader : public BaseObject, public Synchronisable
+    {
+        public:
+            GlobalShader(BaseObject* creator);
+            virtual ~GlobalShader();
+
+            virtual void XMLPort(Element& xmlelement, XMLPort::Mode mode);
+            void registerVariables();
+
+            virtual void changedVisibility();
+
+            inline const Shader& getShader() const
+                { return this->shader_; }
+
+        private:
+            void changedCompositor();
+
+            Shader shader_;
+    };
+}
+
+#endif /* _GlobalShader_H__ */
Index: code/branches/objecthierarchy2/src/orxonox/objects/items/Engine.cc
===================================================================
--- code/branches/objecthierarchy2/src/orxonox/objects/items/Engine.cc	(revision 2344)
+++ code/branches/objecthierarchy2/src/orxonox/objects/items/Engine.cc	(revision 2350)
@@ -32,5 +32,7 @@
 #include "core/CoreIncludes.h"
 #include "core/XMLPort.h"
+#include "objects/Scene.h"
 #include "objects/worldentities/pawns/SpaceShip.h"
+#include "tools/Shader.h"
 
 namespace orxonox
@@ -59,4 +61,6 @@
         this->accelerationUpDown_ = 0.0;
 
+        this->boostBlur_ = 0;
+
         this->registerVariables();
     }
@@ -65,5 +69,10 @@
     {
         if (this->isInitialized() && this->ship_)
+        {
             this->ship_->setEngine(0);
+
+            if (this->boostBlur_)
+                delete this->boostBlur_;
+        }
     }
 
@@ -178,4 +187,21 @@
         this->ship_->setBoost(false);
         this->ship_->setSteeringDirection(Vector3::ZERO);
+
+        if (!this->boostBlur_ && this->ship_->hasLocalController() && this->ship_->hasHumanController())
+        {
+            this->boostBlur_ = new Shader(this->ship_->getScene()->getSceneManager());
+            this->boostBlur_->setCompositor("Radial Blur");
+        }
+
+        if (this->boostBlur_ && this->maxSpeedFront_ != 0 && this->boostFactor_ != 1)
+            this->boostBlur_->setParameter("Ogre/Compositor/Radial_Blur", 0, 0, "sampleStrength", 5.0f * clamp((-velocity.z - this->maxSpeedFront_) / ((this->boostFactor_ - 1) * this->maxSpeedFront_), 0.0f, 1.0f));
+    }
+
+    void Engine::changedActivity()
+    {
+        SUPER(Engine, changedActivity);
+
+        if (this->boostBlur_)
+            this->boostBlur_->setVisible(this->isVisible());
     }
 
@@ -188,4 +214,10 @@
             if (ship->getEngine() != this)
                 ship->setEngine(this);
+
+            if (this->boostBlur_)
+            {
+                delete this->boostBlur_;
+                this->boostBlur_ = 0;
+            }
         }
     }
Index: code/branches/objecthierarchy2/src/orxonox/objects/items/Engine.h
===================================================================
--- code/branches/objecthierarchy2/src/orxonox/objects/items/Engine.h	(revision 2344)
+++ code/branches/objecthierarchy2/src/orxonox/objects/items/Engine.h	(revision 2350)
@@ -48,4 +48,5 @@
 
             virtual void tick(float dt);
+            virtual void changedActivity();
 
             virtual void addToSpaceShip(SpaceShip* ship);
@@ -124,4 +125,6 @@
             float accelerationLeftRight_;
             float accelerationUpDown_;
+
+            Shader* boostBlur_;
     };
 }
Index: code/branches/objecthierarchy2/src/orxonox/objects/worldentities/Backlight.cc
===================================================================
--- code/branches/objecthierarchy2/src/orxonox/objects/worldentities/Backlight.cc	(revision 2344)
+++ code/branches/objecthierarchy2/src/orxonox/objects/worldentities/Backlight.cc	(revision 2350)
@@ -38,4 +38,5 @@
 #include "core/XMLPort.h"
 #include "objects/Scene.h"
+#include "util/Exception.h"
 
 namespace orxonox
@@ -59,7 +60,10 @@
         if (Core::showsGraphics())
         {
-            assert(this->getScene());
-            assert(this->getScene()->getSceneManager());
-            assert(this->getScene()->getRootSceneNode());
+            if (!this->getScene())
+                ThrowException(AbortLoading, "Can't create Camera, no scene given.");
+            if (!this->getScene()->getSceneManager())
+                ThrowException(AbortLoading, "Can't create Camera, no scene manager given.");
+            if (!this->getScene()->getRootSceneNode())
+                ThrowException(AbortLoading, "Can't create Camera, no root scene node given.");
 
             this->ribbonTrail_ = this->getScene()->getSceneManager()->createRibbonTrail(this->getNode()->getName());
Index: code/branches/objecthierarchy2/src/orxonox/objects/worldentities/Camera.cc
===================================================================
--- code/branches/objecthierarchy2/src/orxonox/objects/worldentities/Camera.cc	(revision 2344)
+++ code/branches/objecthierarchy2/src/orxonox/objects/worldentities/Camera.cc	(revision 2350)
@@ -37,4 +37,6 @@
 #include <OgreSceneNode.h>
 #include <OgreViewport.h>
+#include <OgreCompositorManager.h>
+#include <OgreResource.h>
 
 #include "util/Exception.h"
@@ -42,4 +44,5 @@
 #include "core/ConfigValueIncludes.h"
 #include "objects/Scene.h"
+#include "tools/Shader.h"
 #include "CameraManager.h"
 
@@ -75,4 +78,5 @@
         {
             this->releaseFocus();
+            this->getScene()->getSceneManager()->destroyCamera(this->camera_);
         }
     }
@@ -122,6 +126,25 @@
     void Camera::setFocus(Ogre::Viewport* viewport)
     {
+        // This workaround is needed to avoid weird behaviour with active compositors while
+        // switching the camera (like freezing the image)
+        //
+        // Last known Ogre version needing this workaround:
+        // 1.4.8
+
+        // deactivate all compositors
+        {
+            Ogre::ResourceManager::ResourceMapIterator iterator = Ogre::CompositorManager::getSingleton().getResourceIterator();
+            while (iterator.hasMoreElements())
+                Ogre::CompositorManager::getSingleton().setCompositorEnabled(viewport, iterator.getNext()->getName(), false);
+        }
+
         this->bHasFocus_ = true;
         viewport->setCamera(this->camera_);
+
+        // reactivate all visible compositors
+        {
+            for (ObjectList<Shader>::iterator it = ObjectList<Shader>::begin(); it != ObjectList<Shader>::end(); ++it)
+                it->updateVisibility();
+        }
     }
 }
