Index: code/branches/input/src/orxonox/tools/BillboardSet.cc
===================================================================
--- code/branches/input/src/orxonox/tools/BillboardSet.cc	(revision 1546)
+++ code/branches/input/src/orxonox/tools/BillboardSet.cc	(revision 1629)
@@ -46,5 +46,32 @@
     }
 
-    void BillboardSet::setBillboardSet(const std::string& file, const ColourValue& colour, int count, const Vector3& position)
+    void BillboardSet::setBillboardSet(const std::string& file, int count)
+    {
+        std::ostringstream name;
+        name << (BillboardSet::billboardSetCounter_s++);
+        this->billboardSet_ = GraphicsEngine::getSingleton().getSceneManager()->createBillboardSet("Billboard" + name.str(), count);
+        this->billboardSet_->createBillboard(Vector3::ZERO);
+        this->billboardSet_->setMaterialName(file);
+    }
+
+    void BillboardSet::setBillboardSet(const std::string& file, const ColourValue& colour, int count)
+    {
+        std::ostringstream name;
+        name << (BillboardSet::billboardSetCounter_s++);
+        this->billboardSet_ = GraphicsEngine::getSingleton().getSceneManager()->createBillboardSet("Billboard" + name.str(), count);
+        this->billboardSet_->createBillboard(Vector3::ZERO, colour);
+        this->billboardSet_->setMaterialName(file);
+    }
+
+    void BillboardSet::setBillboardSet(const std::string& file, const Vector3& position, int count)
+    {
+        std::ostringstream name;
+        name << (BillboardSet::billboardSetCounter_s++);
+        this->billboardSet_ = GraphicsEngine::getSingleton().getSceneManager()->createBillboardSet("Billboard" + name.str(), count);
+        this->billboardSet_->createBillboard(position);
+        this->billboardSet_->setMaterialName(file);
+    }
+
+    void BillboardSet::setBillboardSet(const std::string& file, const ColourValue& colour, const Vector3& position, int count)
     {
         std::ostringstream name;
Index: code/branches/input/src/orxonox/tools/BillboardSet.h
===================================================================
--- code/branches/input/src/orxonox/tools/BillboardSet.h	(revision 1546)
+++ code/branches/input/src/orxonox/tools/BillboardSet.h	(revision 1629)
@@ -33,6 +33,6 @@
 
 #include <string>
+#include <OgreBillboardSet.h>
 
-#include <OgreBillboardSet.h>
 #include "util/Math.h"
 
@@ -44,5 +44,8 @@
             BillboardSet();
             ~BillboardSet();
-            void setBillboardSet(const std::string& file, const ColourValue& colour = ColourValue(1.0, 1.0, 1.0), int count = 1, const Vector3& position = Vector3::ZERO);
+            void setBillboardSet(const std::string& file, int count = 1);
+            void setBillboardSet(const std::string& file, const ColourValue& colour, int count = 1);
+            void setBillboardSet(const std::string& file, const Vector3& position, int count = 1);
+            void setBillboardSet(const std::string& file, const ColourValue& colour, const Vector3& position, int count = 1);
 
             inline Ogre::BillboardSet* getBillboardSet()
@@ -51,4 +54,9 @@
             inline const std::string& getName() const
                 { return this->billboardSet_->getName(); }
+
+            inline void setVisible(bool visible)
+                { this->billboardSet_->setVisible(visible); }
+            inline bool getVisible() const
+                { return this->billboardSet_->getVisible(); }
 
         private:
Index: code/branches/input/src/orxonox/tools/Mesh.h
===================================================================
--- code/branches/input/src/orxonox/tools/Mesh.h	(revision 1546)
+++ code/branches/input/src/orxonox/tools/Mesh.h	(revision 1629)
@@ -51,4 +51,9 @@
                 { return this->entity_->getName(); }
 
+            inline void setVisible(bool visible)
+                { if (this->entity_) this->entity_->setVisible(visible); }
+            inline bool getVisible() const
+                { if (this->entity_) return this->entity_->getVisible(); else return false; }
+
         private:
             static unsigned int meshCounter_s;
Index: code/branches/input/src/orxonox/tools/ParticleInterface.cc
===================================================================
--- code/branches/input/src/orxonox/tools/ParticleInterface.cc	(revision 1629)
+++ code/branches/input/src/orxonox/tools/ParticleInterface.cc	(revision 1629)
@@ -0,0 +1,188 @@
+/*
+*   ORXONOX - the hottest 3D action shooter ever to exist
+*
+*
+*   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:
+*      ...
+*   Co-authors:
+*      ...
+*
+*/
+
+/**
+* @file ParticleInterface.cc
+* @brief class to control praticle effects
+*/
+
+#include "OrxonoxStableHeaders.h"
+#include "ParticleInterface.h"
+
+#include <OgreParticleSystem.h>
+#include <OgreParticleEmitter.h>
+#include <OgreSceneManager.h>
+
+#include "GraphicsEngine.h"
+#include "Orxonox.h"
+#include "core/CoreIncludes.h"
+#include "util/Convert.h"
+
+namespace orxonox
+{
+  unsigned int ParticleInterface::counter_s = 0;
+  ParticleInterface* ParticleInterface::currentParticleInterface_s = 0;
+
+  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;
+    }
+  }
+
+  ParticleInterface::~ParticleInterface()
+  {
+    this->particleSystem_->removeAllEmitters();
+    GraphicsEngine::getSingleton().getSceneManager()->destroyParticleSystem(particleSystem_);
+  }
+
+  void ParticleInterface::addToSceneNode(Ogre::SceneNode* sceneNode)
+  {
+    this->sceneNode_ = sceneNode;
+    this->sceneNode_->attachObject(this->particleSystem_);
+  }
+
+  void ParticleInterface::detachFromSceneNode()
+  {
+    if (this->sceneNode_)
+    {
+      this->sceneNode_->detachObject(this->particleSystem_);
+      this->sceneNode_ = 0;
+    }
+  }
+
+  Ogre::ParticleEmitter* ParticleInterface::createNewEmitter()
+  {
+    if (this->particleSystem_->getNumEmitters() > 0)
+    {
+      Ogre::ParticleEmitter* newemitter = this->particleSystem_->addEmitter(this->particleSystem_->getEmitter(0)->getType());
+      this->particleSystem_->getEmitter(0)->copyParametersTo(newemitter);
+      return newemitter;
+    }
+    else
+      return 0;
+  }
+  Ogre::ParticleEmitter* ParticleInterface::getEmitter(unsigned int emitterNr) const
+  {
+    if (emitterNr < this->particleSystem_->getNumEmitters())
+      return this->particleSystem_->getEmitter(emitterNr);
+    else
+      return 0;
+  }
+  void ParticleInterface::removeEmitter(unsigned int emitterNr)
+  {
+    if (emitterNr < this->particleSystem_->getNumEmitters())
+      this->particleSystem_->removeEmitter(emitterNr);
+  }
+  void ParticleInterface::removeAllEmitters()
+  {
+    this->particleSystem_->removeAllEmitters();
+  }
+  unsigned int ParticleInterface::getNumEmitters() const
+  {
+    return this->particleSystem_->getNumEmitters();
+  }
+
+  Ogre::ParticleAffector* ParticleInterface::addAffector(const std::string& name)
+  {
+    return this->particleSystem_->addAffector(name);
+  }
+  Ogre::ParticleAffector* ParticleInterface::getAffector(unsigned int affectorNr) const
+  {
+    if (affectorNr < this->particleSystem_->getNumAffectors())
+      return this->particleSystem_->getAffector(affectorNr);
+    else
+      return 0;
+  }
+  void ParticleInterface::removeAffector(unsigned int affectorNr)
+  {
+    if (affectorNr < this->particleSystem_->getNumAffectors())
+      this->particleSystem_->removeAffector(affectorNr);
+  }
+  void ParticleInterface::removeAllAffectors()
+  {
+    this->particleSystem_->removeAllAffectors();
+  }
+  unsigned int ParticleInterface::getNumAffectors() const
+  {
+    return this->particleSystem_->getNumAffectors();
+  }
+
+  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(this->bEnabled_ && this->bVisible_);
+  }
+
+  void ParticleInterface::setSpeedFactor(float factor)
+  {
+    this->particleSystem_->setSpeedFactor(Orxonox::getSingleton()->getTimeFactor() * factor);
+  }
+  float ParticleInterface::getSpeedFactor() const
+  {
+    return (this->particleSystem_->getSpeedFactor() / Orxonox::getSingleton()->getTimeFactor());
+  }
+
+  bool ParticleInterface::getKeepParticlesInLocalSpace() const
+  {
+    return this->particleSystem_->getKeepParticlesInLocalSpace();
+  }
+  void ParticleInterface::setKeepParticlesInLocalSpace(bool keep)
+  {
+    this->particleSystem_->setKeepParticlesInLocalSpace(keep);
+  }
+}
Index: code/branches/input/src/orxonox/tools/ParticleInterface.h
===================================================================
--- code/branches/input/src/orxonox/tools/ParticleInterface.h	(revision 1629)
+++ code/branches/input/src/orxonox/tools/ParticleInterface.h	(revision 1629)
@@ -0,0 +1,97 @@
+/*
+ *   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:
+ *      ...
+ *   Co-authors:
+ *      ...
+ *
+ */
+
+#ifndef _ParticleInterface_H__
+#define _ParticleInterface_H__
+
+#include "OrxonoxPrereqs.h"
+
+#include <string>
+#include <OgreParticleEmitter.h>
+
+#include "core/OrxonoxClass.h"
+#include "util/Math.h"
+
+#define getAllEmitters() \
+  storeThisAsCurrentParticleInterface(); \
+  for (unsigned int i = 0; i < ParticleInterface::getCurrentParticleInterface()->getNumEmitters(); ++i) \
+    ParticleInterface::getCurrentParticleInterface()->getEmitter(i)
+
+namespace orxonox
+{
+  class _OrxonoxExport ParticleInterface : public OrxonoxClass
+  {
+    public:
+      ParticleInterface(const std::string& templateName, LODParticle::LOD detaillevel);
+      ~ParticleInterface();
+
+      inline Ogre::ParticleSystem* getParticleSystem() const
+        { return this->particleSystem_; }
+
+      void addToSceneNode(Ogre::SceneNode* sceneNode);
+      void detachFromSceneNode();
+
+      Ogre::ParticleEmitter* createNewEmitter();
+      Ogre::ParticleEmitter* getEmitter(unsigned int emitterNr) const;
+      void removeEmitter(unsigned int emitterNr);
+      void removeAllEmitters();
+      unsigned int getNumEmitters() const;
+
+      Ogre::ParticleAffector* addAffector(const std::string& name);
+      Ogre::ParticleAffector* getAffector(unsigned int affectorNr) const;
+      void removeAffector(unsigned int affectorNr);
+      void removeAllAffectors();
+      unsigned int getNumAffectors() const;
+
+      float getSpeedFactor() const;
+      void setSpeedFactor(float factor);
+      bool getKeepParticlesInLocalSpace() const;
+      void setKeepParticlesInLocalSpace(bool keep);
+
+      void setEnabled(bool enable);
+      void detailLevelChanged(unsigned int newlevel);
+
+      inline void storeThisAsCurrentParticleInterface()
+        { ParticleInterface::currentParticleInterface_s = this; }
+      inline static ParticleInterface* getCurrentParticleInterface()
+        { return ParticleInterface::currentParticleInterface_s; }
+
+    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)
+  };
+}
+
+#endif /* _ParticleInterface_H__ */
Index: code/branches/input/src/orxonox/tools/TextureGenerator.cc
===================================================================
--- code/branches/input/src/orxonox/tools/TextureGenerator.cc	(revision 1629)
+++ code/branches/input/src/orxonox/tools/TextureGenerator.cc	(revision 1629)
@@ -0,0 +1,86 @@
+/*
+ *   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:
+ *      ...
+ *
+ */
+
+/**
+    @file
+    @brief Implementation of the TextureGenerator.
+*/
+
+#include "OrxonoxStableHeaders.h"
+#include "TextureGenerator.h"
+#include <OgreMaterialManager.h>
+#include <OgreTechnique.h>
+#include "util/Convert.h"
+
+namespace std
+{
+    template <>
+    bool less<orxonox::ColourValue>::operator()(const orxonox::ColourValue& __x, const orxonox::ColourValue& __y) const
+    {
+        if (__x.r == __y.r)
+        {
+            if (__x.g == __y.g)
+            {
+                if (__x.b == __y.b)
+                {
+                    return __x.a < __y.a;
+                }
+                return __x.b < __y.b;
+            }
+            return __x.g < __y.g;
+        }
+        return __x.r < __y.r;
+    }
+}
+
+namespace orxonox
+{
+    std::map<std::string, std::map<ColourValue, std::string> > TextureGenerator::materials_s;
+    unsigned int TextureGenerator::materialCount_s = 0;
+
+    /*static*/ const std::string& TextureGenerator::getMaterialName(std::string textureName, const ColourValue& colour)
+    {
+        std::map<ColourValue, std::string>& colourMap = materials_s[textureName];
+        std::map<ColourValue, std::string>::const_iterator it = colourMap.find(colour);
+
+        if (it == colourMap.end())
+        {
+            std::string materialName = textureName + "_Material_" + convertToString(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);
+            textureUnitState->setColourOperationEx(Ogre::LBX_MODULATE, Ogre::LBS_MANUAL, Ogre::LBS_CURRENT, colour);
+            return (colourMap[colour] = materialName);
+        }
+        else
+        {
+            return (*it).second;
+        }
+    }
+}
Index: code/branches/input/src/orxonox/tools/TextureGenerator.h
===================================================================
--- code/branches/input/src/orxonox/tools/TextureGenerator.h	(revision 1629)
+++ code/branches/input/src/orxonox/tools/TextureGenerator.h	(revision 1629)
@@ -0,0 +1,59 @@
+/*
+ *   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:
+ *      Reto Grieder
+ *
+ */
+
+/**
+    @file
+    @brief
+*/
+
+#ifndef _TextureGenerator_H__
+#define _TextureGenerator_H__
+
+#include "OrxonoxPrereqs.h"
+#include <string>
+#include <map>
+#include "util/Math.h"
+
+namespace orxonox
+{
+    class _OrxonoxExport TextureGenerator
+    {
+    public:
+        static const std::string& getMaterialName(std::string textureName, const ColourValue& colour);
+
+    private:
+        TextureGenerator();
+        TextureGenerator(const TextureGenerator&);
+        ~TextureGenerator();
+
+        static std::map<std::string, std::map<ColourValue, std::string> > materials_s;
+        static unsigned int materialCount_s;
+    };
+}
+
+#endif /* _TextureGenerator_H__ */
Index: code/branches/input/src/orxonox/tools/Timer.cc
===================================================================
--- code/branches/input/src/orxonox/tools/Timer.cc	(revision 1546)
+++ code/branches/input/src/orxonox/tools/Timer.cc	(revision 1629)
@@ -102,6 +102,5 @@
     TimerBase::~TimerBase()
     {
-      if (this->executor_)
-          delete this->executor_;
+        this->deleteExecutor();
     }
 
@@ -112,4 +111,13 @@
     {
         (*this->executor_)();
+    }
+
+    /**
+        @brief Deletes the executor.
+    */
+    void TimerBase::deleteExecutor()
+    {
+      if (this->executor_)
+          delete this->executor_;
     }
 
Index: code/branches/input/src/orxonox/tools/Timer.h
===================================================================
--- code/branches/input/src/orxonox/tools/Timer.h	(revision 1546)
+++ code/branches/input/src/orxonox/tools/Timer.h	(revision 1629)
@@ -78,4 +78,5 @@
 
             void run() const;
+            void deleteExecutor();
 
             /** @brief Starts the Timer: Function-call after 'interval' seconds. */
@@ -94,4 +95,7 @@
             inline bool isActive() const
                 { return this->bActive_; }
+            /** @brief Returns the remaining time until the Timer calls the function. @return The remaining time */
+            inline float getRemainingTime() const
+                { return this->time_; }
             /** @brief Gives the Timer some extra time. @param time The amount of extra time in seconds */
             inline void addTime(float time)
@@ -149,4 +153,6 @@
             void setTimer(float interval, bool bLoop, T* object, ExecutorMember<T>* executor)
             {
+                this->deleteExecutor();
+
                 this->interval_ = interval;
                 this->bLoop_ = bLoop;
@@ -185,4 +191,6 @@
             void setTimer(float interval, bool bLoop, ExecutorStatic* executor)
             {
+                this->deleteExecutor();
+
                 this->interval_ = interval;
                 this->bLoop_ = bLoop;
Index: code/branches/input/src/orxonox/tools/WindowEventListener.cc
===================================================================
--- code/branches/input/src/orxonox/tools/WindowEventListener.cc	(revision 1629)
+++ code/branches/input/src/orxonox/tools/WindowEventListener.cc	(revision 1629)
@@ -0,0 +1,42 @@
+/*
+ *   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:
+ *      Reto Grieder
+ *   Co-authors:
+ *      ...
+ *
+ */
+
+#include "OrxonoxStableHeaders.h"
+#include "WindowEventListener.h"
+#include "core/CoreIncludes.h"
+
+namespace orxonox
+{
+    /**
+        @brief Constructor for the WindowEventListener.
+    */
+    WindowEventListener::WindowEventListener()
+    {
+        RegisterObject(WindowEventListener);
+    }
+}
Index: code/branches/input/src/orxonox/tools/WindowEventListener.h
===================================================================
--- code/branches/input/src/orxonox/tools/WindowEventListener.h	(revision 1629)
+++ code/branches/input/src/orxonox/tools/WindowEventListener.h	(revision 1629)
@@ -0,0 +1,58 @@
+/*
+ *   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:
+ *      Reto Grieder
+ *   Co-authors:
+ *      ...
+ *
+ */
+
+#ifndef _WindowEventListener_H__
+#define _WindowEventListener_H__
+
+#include "OrxonoxPrereqs.h"
+#include "core/OrxonoxClass.h"
+
+
+namespace orxonox
+{
+    /**
+        @brief Interface for receiving window events.
+    */
+    class _OrxonoxExport WindowEventListener : virtual public OrxonoxClass
+    {
+    public:
+        WindowEventListener();
+        virtual ~WindowEventListener() { }
+
+		    /** Window has moved position */
+		    virtual void windowMoved() { }
+
+		    /** Window has resized */
+		    virtual void windowResized(int newWidth, int newHeight) { }
+
+		    /** Window has lost/gained focus */
+		    virtual void windowFocusChanged() { }
+    };
+}
+
+#endif /* _WindowEventListener_H__ */
