Index: code/branches/input/src/orxonox/Orxonox.cc
===================================================================
--- code/branches/input/src/orxonox/Orxonox.cc	(revision 900)
+++ code/branches/input/src/orxonox/Orxonox.cc	(revision 916)
@@ -58,6 +58,5 @@
 #include "util/Sleep.h"
 
-// loader and audio
-//#include "loader/LevelLoader.h"
+// audio
 #include "audio/AudioManager.h"
 
@@ -70,5 +69,5 @@
 #include "objects/Tickable.h"
 #include "tools/Timer.h"
-#include "objects/NPC.h"
+#include "tools/OrxListener.h"
 #include "core/ArgReader.h"
 #include "core/Factory.h"
@@ -83,46 +82,5 @@
 namespace orxonox
 {
-   // put this in a seperate Class or solve the problem in another fashion
-  class OrxListener : public Ogre::FrameListener
-  {
-    public:
-      OrxListener(OIS::Keyboard *keyboard, audio::AudioManager*  auMan, gameMode mode)
-      {
-        mKeyboard = keyboard;
-        mode_=mode;
-        auMan_ = auMan;
-      }
-
-      bool frameStarted(const Ogre::FrameEvent& evt)
-      {
-        auMan_->update();
-        updateAI();
-
-        if(mode_ == PRESENTATION)
-          server_g->tick(evt.timeSinceLastFrame);
-        else if(mode_ == CLIENT)
-          client_g->tick(evt.timeSinceLastFrame);
-
-        usleep(10);
-
-        mKeyboard->capture();
-        return !mKeyboard->isKeyDown(OIS::KC_ESCAPE);
-      }
-
-      void updateAI()
-      {
-        for(Iterator<NPC> it = ObjectList<NPC>::start(); it; ++it)
-        {
-          it->update();
-        }
-      }
-
-    private:
-      gameMode mode_;
-      OIS::Keyboard *mKeyboard;
-      audio::AudioManager*  auMan_;
-  };
-
-  // init static singleton reference of Orxonox
+  /// init static singleton reference of Orxonox
   Orxonox* Orxonox::singletonRef_ = NULL;
 
@@ -134,5 +92,4 @@
     this->ogre_ = new GraphicsEngine();
     this->dataPath_ = "";
-//    this->loader_ = 0;
     this->auMan_ = 0;
     this->singletonRef_ = 0;
@@ -143,5 +100,5 @@
     this->root_ = 0;
     // turn frame smoothing on by setting a value different from 0
-    this->frameSmoothingTime_ = 0.1f;
+    this->frameSmoothingTime_ = 0.0f;
   }
 
@@ -157,5 +114,5 @@
    * initialization of Orxonox object
    * @param argc argument counter
-   * @param argv list of arguments
+   * @param argv list of argumenst
    * @param path path to config (in home dir or something)
    */
@@ -174,5 +131,4 @@
     ar.checkArgument("data", this->dataPath_, false);
     ar.checkArgument("ip", serverIp_, false);
-    //mode = "presentation";
     if(ar.errorHandling()) die();
     if(mode == std::string("server"))
@@ -451,13 +407,5 @@
   void Orxonox::createFrameListener()
   {
-    //TickFrameListener* TickFL = new TickFrameListener();
-    //ogre_->getRoot()->addFrameListener(TickFL);
-
-    //TimerFrameListener* TimerFL = new TimerFrameListener();
-    //ogre_->getRoot()->addFrameListener(TimerFL);
-
-    //if(mode_!=CLIENT) // FIXME just a hack ------- remove this in future
-      frameListener_ = new OrxListener(keyboard_, auMan_, mode_);
-    ogre_->getRoot()->addFrameListener(frameListener_);
+    frameListener_ = new OrxListener(auMan_, mode_);
   }
 
@@ -477,5 +425,4 @@
       ms.height = height;
     }
-    //ogre_->getRoot()->startRendering();
     mainLoop();
   }
@@ -509,5 +456,5 @@
 	  while (true)
 	  {
-		  //Pump messages in all registered RenderWindows
+		  // Pump messages in all registered RenderWindows
       Ogre::WindowEventUtilities::messagePump();
 
@@ -531,7 +478,4 @@
       for (Iterator<Tickable> it = ObjectList<Tickable>::start(); it; )
         (it++)->tick((float)evt.timeSinceLastFrame);
-
-      // Update the timers
-      updateTimers((float)evt.timeSinceLastFrame);
 
       if (mode_ != SERVER)
@@ -554,38 +498,4 @@
   }
 
-  /**
-    Timer updater function.
-    Updates all timers with the current dt.
-    Timers have been tested since their displacement.
-    @param dt The delta time
-  */
-  void Orxonox::updateTimers(float dt)
-  {
-    // 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_ -= dt;
-
-        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;
-    }
-
-  }
   /**
     Method for calculating the average time between recently fired events.
Index: code/branches/input/src/orxonox/objects/Tickable.h
===================================================================
--- code/branches/input/src/orxonox/objects/Tickable.h	(revision 900)
+++ code/branches/input/src/orxonox/objects/Tickable.h	(revision 916)
@@ -41,6 +41,4 @@
 #define _Tickable_H__
 
-#include <OgreFrameListener.h>
-
 #include "../OrxonoxPrereqs.h"
 #include "core/OrxonoxClass.h"
@@ -64,20 +62,4 @@
     };
 
-#if 0
-    //! The TickFrameListener calls the tick(dt) function of all Tickables every frame.
-    class _OrxonoxExport TickFrameListener : public Ogre::FrameListener
-    {
-        private:
-            /** @brief Gets called before a frame gets rendered. */
-            bool frameStarted(const Ogre::FrameEvent &evt)
-            {
-                // Iterate through all Tickables and call their tick(dt) function
-                for (Iterator<Tickable> it = ObjectList<Tickable>::start(); it; )
-                    (it++)->tick(evt.timeSinceLastFrame);
-
-                return FrameListener::frameStarted(evt);
-            }
-    };
-#endif
 }
 
Index: code/branches/input/src/orxonox/tools/OrxListener.cc
===================================================================
--- code/branches/input/src/orxonox/tools/OrxListener.cc	(revision 916)
+++ code/branches/input/src/orxonox/tools/OrxListener.cc	(revision 916)
@@ -0,0 +1,56 @@
+/*
+ *   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 "OrxListener.h"
+
+namespace orxonox
+{
+  OrxListener::OrxListener(audio::AudioManager*  auMan, gameMode mode)
+  {
+    mode_=mode;
+    auMan_ = auMan;
+  }
+
+  void OrxListener::tick(float dt)
+  {
+    auMan_->update();
+    updateAI();
+  }
+
+  void OrxListener::updateAI()
+  {
+    for(Iterator<NPC> it = ObjectList<NPC>::start(); it; ++it)
+    {
+      it->update();
+    }
+  }
+}
Index: code/branches/input/src/orxonox/tools/OrxListener.h
===================================================================
--- code/branches/input/src/orxonox/tools/OrxListener.h	(revision 916)
+++ code/branches/input/src/orxonox/tools/OrxListener.h	(revision 916)
@@ -0,0 +1,57 @@
+/*
+ *   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 "../OrxonoxPrereqs.h"
+#include "audio/AudioPrereqs.h"
+#include "Orxonox.h"
+#include "objects/Tickable.h"
+
+namespace orxonox
+{
+  class OrxListener : public Tickable
+  {
+    public:
+      OrxListener(audio::AudioManager*  auMan, gameMode mode);
+
+      void tick(float dt);
+      void updateAI();
+
+    private:
+      gameMode mode_;
+      audio::AudioManager* auMan_;
+  };
+}
+
+#endif /* _OrxListener_H__ */
Index: code/branches/input/src/orxonox/tools/Timer.cc
===================================================================
--- code/branches/input/src/orxonox/tools/Timer.cc	(revision 900)
+++ code/branches/input/src/orxonox/tools/Timer.cc	(revision 916)
@@ -46,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/input/src/orxonox/tools/Timer.h
===================================================================
--- code/branches/input/src/orxonox/tools/Timer.h	(revision 900)
+++ code/branches/input/src/orxonox/tools/Timer.h	(revision 916)
@@ -58,15 +58,12 @@
 #define _Timer_H__
 
-#include <OgreFrameListener.h>
 #include "../OrxonoxPrereqs.h"
+#include "objects/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;
-        friend class Orxonox;
-
         public:
             TimerBase();
@@ -84,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:
@@ -146,41 +145,4 @@
     };
 
-#if 0
-    //! 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);
-            }
-    };
-#endif
 }
 
Index: code/branches/input/visual_studio/orxonox_vc8.sln
===================================================================
--- code/branches/input/visual_studio/orxonox_vc8.sln	(revision 900)
+++ code/branches/input/visual_studio/orxonox_vc8.sln	(revision 916)
@@ -19,13 +19,4 @@
 		{2240ECD7-2F48-4431-8E1B-25466A384CCC} = {2240ECD7-2F48-4431-8E1B-25466A384CCC}
 		{F101C2F0-1CB9-4A57-827B-6C399A99B28F} = {F101C2F0-1CB9-4A57-827B-6C399A99B28F}
-	EndProjectSection
-EndProject
-Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "loader", "vc8\loader.vcproj", "{E283910F-F911-40FB-A09D-D025CA821912}"
-	ProjectSection(WebsiteProperties) = preProject
-		Debug.AspNetCompiler.Debug = "True"
-		Release.AspNetCompiler.Debug = "False"
-	EndProjectSection
-	ProjectSection(ProjectDependencies) = postProject
-		{2240ECD7-2F48-4431-8E1B-25466A384CCC} = {2240ECD7-2F48-4431-8E1B-25466A384CCC}
 	EndProjectSection
 EndProject
@@ -89,8 +80,4 @@
 		{271715F3-5B90-4110-A552-70C788084A86}.Release|Win32.ActiveCfg = Release|Win32
 		{271715F3-5B90-4110-A552-70C788084A86}.Release|Win32.Build.0 = Release|Win32
-		{E283910F-F911-40FB-A09D-D025CA821912}.Debug|Win32.ActiveCfg = Debug|Win32
-		{E283910F-F911-40FB-A09D-D025CA821912}.Release_SSE|Win32.ActiveCfg = Release_SSE|Win32
-		{E283910F-F911-40FB-A09D-D025CA821912}.Release_SSE2|Win32.ActiveCfg = Release_SSE2|Win32
-		{E283910F-F911-40FB-A09D-D025CA821912}.Release|Win32.ActiveCfg = Release|Win32
 		{35575B59-E1AE-40E8-89C4-2862B5B09B68}.Debug|Win32.ActiveCfg = Debug|Win32
 		{35575B59-E1AE-40E8-89C4-2862B5B09B68}.Debug|Win32.Build.0 = Debug|Win32
Index: code/branches/input/visual_studio/vc8/orxonox.vcproj
===================================================================
--- code/branches/input/visual_studio/vc8/orxonox.vcproj	(revision 900)
+++ code/branches/input/visual_studio/vc8/orxonox.vcproj	(revision 916)
@@ -287,4 +287,12 @@
 				RelativePath="..\..\src\orxonox\InputManager.cc"
 				>
+				<FileConfiguration
+					Name="Debug|Win32"
+					ExcludedFromBuild="true"
+					>
+					<Tool
+						Name="VCCLCompilerTool"
+					/>
+				</FileConfiguration>
 			</File>
 			<File
@@ -632,13 +640,9 @@
 				</File>
 				<File
+					RelativePath="..\..\src\orxonox\tools\OrxListener.cc"
+					>
+				</File>
+				<File
 					RelativePath="..\..\src\orxonox\tools\Timer.cc"
-					>
-				</File>
-			</Filter>
-			<Filter
-				Name="loader"
-				>
-				<File
-					RelativePath="..\..\src\loader\LevelLoader.cc"
 					>
 				</File>
@@ -806,17 +810,9 @@
 				</File>
 				<File
+					RelativePath="..\..\src\orxonox\tools\OrxListener.h"
+					>
+				</File>
+				<File
 					RelativePath="..\..\src\orxonox\tools\Timer.h"
-					>
-				</File>
-			</Filter>
-			<Filter
-				Name="loader"
-				>
-				<File
-					RelativePath="..\..\src\loader\LevelLoader.h"
-					>
-				</File>
-				<File
-					RelativePath="..\..\src\loader\LoaderPrereqs.h"
 					>
 				</File>
