Index: code/trunk/src/libraries/core/CorePrereqs.h
===================================================================
--- code/trunk/src/libraries/core/CorePrereqs.h	(revision 11083)
+++ code/trunk/src/libraries/core/CorePrereqs.h	(revision 11085)
@@ -184,4 +184,5 @@
     struct GameStateInfo;
     struct GameStateTreeNode;
+    class GlowMaterialListener;
     class GraphicsManager;
     class GUIManager;
Index: code/trunk/src/libraries/core/GlowMaterialListener.h
===================================================================
--- code/trunk/src/libraries/core/GlowMaterialListener.h	(revision 11085)
+++ code/trunk/src/libraries/core/GlowMaterialListener.h	(revision 11085)
@@ -0,0 +1,36 @@
+#ifndef _GlowMaterialListener_H__
+#define _GlowMaterialListener_H__
+
+#include <Ogre.h>
+#include <OgreMaterialManager.h>
+
+namespace orxonox
+{
+    class GlowMaterialListener : public Ogre::MaterialManager::Listener
+    {
+        public:
+            GlowMaterialListener()
+            {
+                mBlackMat = Ogre::MaterialManager::getSingleton().create("mGlowBlack", "Internal");
+                mBlackMat->getTechnique(0)->getPass(0)->setDiffuse(0,0,0,0);
+                mBlackMat->getTechnique(0)->getPass(0)->setSpecular(0,0,0,0);
+                mBlackMat->getTechnique(0)->getPass(0)->setAmbient(0,0,0);
+                mBlackMat->getTechnique(0)->getPass(0)->setSelfIllumination(0,0,0);
+            }
+
+            Ogre::Technique* handleSchemeNotFound(unsigned short, const Ogre::String& schemeName, Ogre::Material*mat, unsigned short, const Ogre::Renderable*)
+            {
+                if (schemeName == "glow")
+                {
+                    //LogManager::getSingleton().logMessage(">> adding glow to material: "+mat->getName());
+                    return mBlackMat->getTechnique(0);
+                }
+                return NULL;
+            }
+
+        private:
+            Ogre::MaterialPtr mBlackMat;
+    };
+}
+
+#endif /* _GlowMaterialListener_H__ */
Index: code/trunk/src/libraries/core/GraphicsManager.cc
===================================================================
--- code/trunk/src/libraries/core/GraphicsManager.cc	(revision 11083)
+++ code/trunk/src/libraries/core/GraphicsManager.cc	(revision 11085)
@@ -38,4 +38,5 @@
 #include <OgreRoot.h>
 #include <OgreLogManager.h>
+#include <OgreMaterialManager.h>
 #include <OgreRenderWindow.h>
 #include <OgreRenderSystem.h>
@@ -56,4 +57,5 @@
 #include "Game.h"
 #include "GameMode.h"
+#include "GlowMaterialListener.h"
 #include "GUIManager.h"
 #include "Loader.h"
@@ -100,4 +102,5 @@
         , renderWindow_(nullptr)
         , viewport_(nullptr)
+        , glowMaterialListener_(nullptr)
         , lastFrameStartTime_(0.0f)
         , lastFrameEndTime_(0.0f)
@@ -140,5 +143,7 @@
         orxout(internal_status) << "destroying GraphicsManager..." << endl;
 
+        Ogre::MaterialManager::getSingleton().removeListener(this->glowMaterialListener_);
         Ogre::WindowEventUtilities::removeWindowEventListener(renderWindow_, ogreWindowEventListener_);
+
         ModifyConsoleCommand(__CC_printScreen_name).resetFunction();
         ModifyConsoleCommand(__CC_GraphicsManager_group, __CC_setScreenResolution_name).resetFunction();
@@ -153,4 +158,5 @@
         safeObjectDelete(&ogreLogger_);
         safeObjectDelete(&ogreWindowEventListener_);
+        safeObjectDelete(&glowMaterialListener_);
 
         orxout(internal_status) << "finished destroying GraphicsManager" << endl;
@@ -306,4 +312,7 @@
 
         Ogre::TextureManager::getSingleton().setDefaultNumMipmaps(Ogre::MIP_UNLIMITED);
+
+        this->glowMaterialListener_ = new GlowMaterialListener();
+        Ogre::MaterialManager::getSingleton().addListener(this->glowMaterialListener_);
 
         //Add program icon
Index: code/trunk/src/libraries/core/GraphicsManager.h
===================================================================
--- code/trunk/src/libraries/core/GraphicsManager.h	(revision 11083)
+++ code/trunk/src/libraries/core/GraphicsManager.h	(revision 11085)
@@ -127,8 +127,9 @@
         Ogre::LogManager*        ogreLogger_;
         Ogre::Root*              ogreRoot_;                //!< Ogre's root
-        Ogre::RenderWindow* renderWindow_;             //!< the one and only render window
-        Ogre::Viewport*     viewport_;                 //!< default full size viewport
-        float               lastFrameStartTime_;       //!< Time stamp of the beginning of the last frame
-        float               lastFrameEndTime_;         //!< Time stamp of the end of the last frame
+        Ogre::RenderWindow*      renderWindow_;            //!< the one and only render window
+        Ogre::Viewport*          viewport_;                //!< default full size viewport
+        GlowMaterialListener*    glowMaterialListener_;    //!< Material Listener for the 'Glow' compositor
+        float                    lastFrameStartTime_;      //!< Time stamp of the beginning of the last frame
+        float                    lastFrameEndTime_;        //!< Time stamp of the end of the last frame
 
         // XML files for the resources and the debug overlay
Index: code/trunk/src/orxonox/Scene.cc
===================================================================
--- code/trunk/src/orxonox/Scene.cc	(revision 11083)
+++ code/trunk/src/orxonox/Scene.cc	(revision 11085)
@@ -58,4 +58,5 @@
 #include "Level.h"
 #include "RenderQueueListener.h"
+#include "graphics/GlobalShader.h"
 
 namespace orxonox
@@ -91,4 +92,7 @@
 
             this->radar_ = new Radar();
+            this->glowShader_ = new GlobalShader(this);
+            this->glowShader_->setScene(WeakPtr<Scene>(this), this->getObjectID()); // avoid circular reference
+            this->glowShader_->getShader().setCompositorName("Glow");
         }
         else
@@ -100,4 +104,5 @@
             this->renderQueueListener_ = nullptr;
             this->radar_ = nullptr;
+            this->glowShader_ = nullptr;
         }
 
@@ -124,4 +129,6 @@
             if (this->radar_)
                 this->radar_->destroy();
+            if (this->glowShader_)
+                this->glowShader_->destroy();
 
             if (GameMode::showsGraphics())
Index: code/trunk/src/orxonox/Scene.h
===================================================================
--- code/trunk/src/orxonox/Scene.h	(revision 11083)
+++ code/trunk/src/orxonox/Scene.h	(revision 11085)
@@ -118,4 +118,5 @@
             float                    soundReferenceDistance_; //!< This holds a reference distance, which represents the distance between our scene and the listener
             Radar*                   radar_; //!< This is a pointer to a Radar object assigned with this scene
+            WeakPtr<GlobalShader>    glowShader_;
 
 
Index: code/trunk/src/orxonox/graphics/GlobalShader.h
===================================================================
--- code/trunk/src/orxonox/graphics/GlobalShader.h	(revision 11083)
+++ code/trunk/src/orxonox/graphics/GlobalShader.h	(revision 11085)
@@ -48,5 +48,5 @@
             virtual void changedVisibility() override;
 
-            inline const Shader& getShader() const
+            inline Shader& getShader()
                 { return this->shader_; }
 
