Index: code/branches/network/src/orxonox/tools/OrxListener.cc
===================================================================
--- code/branches/network/src/orxonox/tools/OrxListener.cc	(revision 917)
+++ code/branches/network/src/orxonox/tools/OrxListener.cc	(revision 917)
@@ -0,0 +1,62 @@
+/*
+ *   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:
+ *      Fabian 'x3n' Landau
+ *   Co-authors:
+ *      ...
+ *
+ */
+
+#include "OrxonoxStableHeaders.h"
+
+#include "core/CoreIncludes.h"
+#include "objects/NPC.h"
+#include "audio/AudioManager.h"
+#include "Orxonox.h"
+#include "OrxListener.h"
+
+namespace orxonox
+{
+  OrxListener::OrxListener(OIS::Keyboard *keyboard, audio::AudioManager*  auMan, gameMode mode)
+  {
+    keyboard_ = keyboard;
+    mode_=mode;
+    auMan_ = auMan;
+  }
+
+  void OrxListener::tick(float dt)
+  {
+    auMan_->update();
+    updateAI();
+
+    keyboard_->capture();
+    if (keyboard_->isKeyDown(OIS::KC_ESCAPE))
+      Orxonox::getSingleton()->abortRequest();
+  }
+
+  void OrxListener::updateAI()
+  {
+    for(Iterator<NPC> it = ObjectList<NPC>::start(); it; ++it)
+    {
+      it->update();
+    }
+  }
+}
Index: code/branches/network/src/orxonox/tools/OrxListener.h
===================================================================
--- code/branches/network/src/orxonox/tools/OrxListener.h	(revision 917)
+++ code/branches/network/src/orxonox/tools/OrxListener.h	(revision 917)
@@ -0,0 +1,60 @@
+/*
+ *   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:
+ *      Fabian 'x3n' Landau
+ *   Co-authors:
+ *      ...
+ *
+ */
+
+/*!
+    @file
+    Hack for the AI and server/client update.
+*/
+
+#ifndef _OrxListener_H__
+#define _OrxListener_H__
+
+#include <OIS/OISPrereqs.h>
+
+#include "../OrxonoxPrereqs.h"
+#include "audio/AudioPrereqs.h"
+#include "Orxonox.h"
+#include "core/Tickable.h"
+
+namespace orxonox
+{
+  class OrxListener : public Tickable
+  {
+    public:
+      OrxListener(OIS::Keyboard *keyboard, audio::AudioManager*  auMan, gameMode mode);
+
+      void tick(float dt);
+      void updateAI();
+
+    private:
+      gameMode mode_;
+      audio::AudioManager* auMan_;
+      OIS::Keyboard *keyboard_;
+  };
+}
+
+#endif /* _OrxListener_H__ */
Index: code/branches/network/src/orxonox/tools/Timer.cc
===================================================================
--- code/branches/network/src/orxonox/tools/Timer.cc	(revision 885)
+++ code/branches/network/src/orxonox/tools/Timer.cc	(revision 917)
@@ -1,2 +1,31 @@
+/*
+ *   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:
+ *      Fabian 'x3n' Landau
+ *   Co-authors:
+ *      ...
+ *
+ */
+
+#include "OrxonoxStableHeaders.h"
+
 #include "core/CoreIncludes.h"
 #include "Timer.h"
@@ -17,3 +46,28 @@
         this->time_ = 0;
     }
+
+    /**
+        @brief Updates the timer before the frames are rendered.
+    */
+    void TimerBase::tick(float dt)
+    {
+        if (this->bActive_)
+        {
+            // If active: Decrease the timer by the duration of the last frame
+            this->time_ -= dt;
+
+            if (this->time_ <= 0)
+            {
+                // It's time to call the function
+                if (this->bLoop_)
+                    // Q: Why '+=' and not '='? A: Think about it. It's more accurate like that. Seriously.
+                    this->time_ += this->interval_;
+                else
+                    this->stopTimer(); // Stop the timer if we don't want to loop
+
+                this->run();
+            }
+        }
+    }
+
 }
Index: code/branches/network/src/orxonox/tools/Timer.h
===================================================================
--- code/branches/network/src/orxonox/tools/Timer.h	(revision 885)
+++ code/branches/network/src/orxonox/tools/Timer.h	(revision 917)
@@ -58,14 +58,12 @@
 #define _Timer_H__
 
-#include <OgreFrameListener.h>
 #include "../OrxonoxPrereqs.h"
+#include "core/Tickable.h"
 
 namespace orxonox
 {
     //! TimerBase is the parent of the Timer class.
-    class _OrxonoxExport TimerBase : public OrxonoxClass
+    class _OrxonoxExport TimerBase : public Tickable
     {
-        friend class TimerFrameListener;
-
         public:
             TimerBase();
@@ -83,4 +81,6 @@
             /** @brief Returns true if the Timer is active (= not stoped, not paused). @return True = Time is active */
             inline bool isActive() const { return this->bActive_; }
+
+            void tick(float dt);
 
         protected:
@@ -145,39 +145,4 @@
     };
 
-    //! The TimerFrameListener manages all Timers in the game.
-    class TimerFrameListener : public Ogre::FrameListener
-    {
-        private:
-            /** @brief Gets called before a frame gets rendered. */
-            bool frameStarted(const Ogre::FrameEvent &evt)
-            {
-                // Iterate through all Timers
-                for (Iterator<TimerBase> it = ObjectList<TimerBase>::start(); it; )
-                {
-                    if (it->isActive())
-                    {
-                        // If active: Decrease the timer by the duration of the last frame
-                        it->time_ -= evt.timeSinceLastFrame;
-
-                        if (it->time_ <= 0)
-                        {
-                            // It's time to call the function
-                            if (it->bLoop_)
-                                it->time_ += it->interval_; // Q: Why '+=' and not '='? A: Think about it. It's more accurate like that. Seriously.
-                            else
-                                it->stopTimer(); // Stop the timer if we don't want to loop
-
-                            (it++)->run();
-                        }
-                        else
-                            ++it;
-                    }
-                    else
-                        ++it;
-                }
-
-                return FrameListener::frameStarted(evt);
-            }
-    };
 }
 
