Index: code/trunk/src/orxonox/CMakeLists.txt
===================================================================
--- code/trunk/src/orxonox/CMakeLists.txt	(revision 1534)
+++ code/trunk/src/orxonox/CMakeLists.txt	(revision 1535)
@@ -3,4 +3,5 @@
   Main.cc
   Orxonox.cc
+  Settings.cc
 
   console/InGameConsole.cc
@@ -29,4 +30,5 @@
   objects/SpaceShip.cc
   objects/SpaceShipAI.cc
+  objects/Tickable.cc
   objects/WorldEntity.cc
 
Index: code/trunk/src/orxonox/GraphicsEngine.cc
===================================================================
--- code/trunk/src/orxonox/GraphicsEngine.cc	(revision 1534)
+++ code/trunk/src/orxonox/GraphicsEngine.cc	(revision 1535)
@@ -21,7 +21,7 @@
  *
  *   Author:
- *      Benjamin Knecht <beni_at_orxonox.net>, (C) 2007
+ *      Reto Grieder
  *   Co-authors:
- *      Reto Grieder
+ *      Benjamin Knecht <beni_at_orxonox.net>, (C) 2007, Felix Schulthess
  *
  */
@@ -35,21 +35,22 @@
 #include "GraphicsEngine.h"
 
+#include <OgreConfigFile.h>
+#include <OgreException.h>
+#include <OgreLogManager.h>
 #include <OgreRoot.h>
-#include <OgreException.h>
-#include <OgreConfigFile.h>
-#include <OgreLogManager.h>
+#include <OgreSceneManager.h>
 #include <OgreTextureManager.h>
-#include "core/InputManager.h"
+#include <OgreViewport.h>
+
 #include "core/CoreIncludes.h"
 #include "core/ConfigValueIncludes.h"
 #include "core/Debug.h"
 #include "core/CommandExecutor.h"
-#include "core/TclBind.h"
+#include "core/ConsoleCommand.h"
+#include "core/input/InputManager.h"
+
 #include "console/InGameConsole.h"
-
-#include "core/ConsoleCommand.h"
-#include <OgreSceneManager.h>
-#include <OgreCompositorManager.h>
-#include <OgreViewport.h>
+#include "Settings.h"
+
 
 namespace orxonox {
@@ -70,8 +71,5 @@
     root_(0),
     scene_(0),
-    renderWindow_(0),
-    //configPath_(""),
-    dataPath_(""),
-    ogreLogfile_("")
+    renderWindow_(0)
   {
     RegisterObject(GraphicsEngine);
@@ -83,11 +81,12 @@
   void GraphicsEngine::setConfigValues()
   {
-    SetConfigValue(dataPath_, "../../Media/").description("relative path to media data");
-    SetConfigValue(ogreLogfile_, "ogre.log").description("Logfile for messages from Ogre. Use \"\" to suppress log file creation.");
+    SetConfigValue(resourceFile_,    "resources.cfg").description("Location of the resources file in the data path.");
+    SetConfigValue(ogreConfigFile_,  "ogre.cfg").description("Location of the Ogre config file");
+    SetConfigValue(ogrePluginsFile_, "plugins.cfg").description("Location of the Ogre plugins file");
+    SetConfigValue(ogreLogFile_,     "ogre.log").description("Logfile for messages from Ogre. \
+                                                             Use \"\" to suppress log file creation.");
     SetConfigValue(ogreLogLevelTrivial_ , 5).description("Corresponding orxonox debug level for ogre Trivial");
     SetConfigValue(ogreLogLevelNormal_  , 4).description("Corresponding orxonox debug level for ogre Normal");
     SetConfigValue(ogreLogLevelCritical_, 2).description("Corresponding orxonox debug level for ogre Critical");
-
-    TclBind::getInstance().setDataPath(this->dataPath_);
   }
 
@@ -126,21 +125,8 @@
     @brief Creates the Ogre Root object and sets up the ogre log.
   */
-  bool GraphicsEngine::setup(std::string& dataPath)
+  bool GraphicsEngine::setup()
   {
     CCOUT(3) << "Setting up..." << std::endl;
     // temporary overwrite of dataPath, change ini file for permanent change
-    if (dataPath != "")
-      dataPath_ = dataPath;
-    if (dataPath_ == "")
-      return false;
-    if (dataPath_[dataPath_.size() - 1] != '/')
-      dataPath_ += "/";
-
-    //TODO: Check if file exists (maybe not here)
-#if ORXONOX_COMPILER == ORXONOX_COMPILER_MSVC && defined(_DEBUG)
-    std::string plugin_filename = "plugins_d.cfg";
-#else
-    std::string plugin_filename = "plugins.cfg";
-#endif
 
 // TODO: LogManager doesn't work on specific systems. The why is unknown yet.
@@ -154,8 +140,8 @@
     // create our own log that we can listen to
     Ogre::Log *myLog;
-    if (this->ogreLogfile_ == "")
+    if (this->ogreLogFile_ == "")
       myLog = logger->createLog("ogre.log", true, false, true);
     else
-      myLog = logger->createLog(this->ogreLogfile_, true, false, false);
+      myLog = logger->createLog(this->ogreLogFile_, true, false, false);
     CCOUT(4) << "Ogre Log created" << std::endl;
 
@@ -167,5 +153,36 @@
     CCOUT(4) << "Creating Ogre Root..." << std::endl;
 
-    root_ = new Ogre::Root(plugin_filename, "ogre.cfg", this->ogreLogfile_);
+    if (ogrePluginsFile_ == "")
+    {
+      COUT(1) << "Error: Ogre plugins file set to \"\". Cannot load." << std::endl;
+      return false;
+    }
+    if (ogreConfigFile_ == "")
+    {
+      COUT(1) << "Error: Ogre config file set to \"\". Cannot load." << std::endl;
+      return false;
+    }
+    if (ogreLogFile_ == "")
+    {
+      COUT(1) << "Error: Ogre log file set to \"\". Cannot load." << std::endl;
+      return false;
+    }
+
+    try
+    {
+      root_ = new Ogre::Root(ogrePluginsFile_, ogreConfigFile_, ogreLogFile_);
+    }
+    catch (Ogre::Exception ex)
+    {
+      COUT(2) << "Error: There was an exception when creating Ogre Root." << std::endl;
+      return false;
+    }
+
+    if (!root_->getInstalledPlugins().size())
+    {
+      COUT(1) << "Error: No plugins declared. Cannot load Ogre." << std::endl;
+      COUT(0) << "Is the plugins file correctly declared?" << std::endl;
+      return false;
+    }
 
 #if 0
@@ -180,5 +197,6 @@
 
     // specify where Ogre has to look for resources. This call doesn't parse anything yet!
-    declareRessourceLocations();
+    if (!declareRessourceLocations())
+      return false;
 
     CCOUT(3) << "Set up done." << std::endl;
@@ -186,12 +204,28 @@
   }
 
-  void GraphicsEngine::declareRessourceLocations()
+  bool GraphicsEngine::declareRessourceLocations()
   {
     CCOUT(4) << "Declaring Resources" << std::endl;
     //TODO: Specify layout of data file and maybe use xml-loader
     //TODO: Work with ressource groups (should be generated by a special loader)
+
+    if (resourceFile_ == "")
+    {
+      COUT(1) << "Error: Resource file set to \"\". Cannot load." << std::endl;
+      return false;
+    }
+
     // Load resource paths from data file using configfile ressource type
     Ogre::ConfigFile cf;
-    cf.load(dataPath_ + "resources.cfg");
+    try
+    {
+      cf.load(Settings::getDataPath() + resourceFile_);
+    }
+    catch (Ogre::Exception ex)
+    {
+      COUT(1) << "Error: Could not load resources.cfg in path " << Settings::getDataPath() << std::endl;
+      COUT(0) << "Have you forgotten to set the data path in orxnox.ini?" << std::endl;
+      return false;
+    }
 
     // Go through all sections & settings in the file
@@ -201,17 +235,24 @@
     while (seci.hasMoreElements())
     {
-      secName = seci.peekNextKey();
-      Ogre::ConfigFile::SettingsMultiMap *settings = seci.getNext();
-      Ogre::ConfigFile::SettingsMultiMap::iterator i;
-      for (i = settings->begin(); i != settings->end(); ++i)
+      try
       {
-        typeName = i->first; // for instance "FileSystem" or "Zip"
-        archName = i->second; // name (and location) of archive
-
-        Ogre::ResourceGroupManager::getSingleton().addResourceLocation(
-                                           std::string(dataPath_ + archName),
-                                           typeName, secName);
+        secName = seci.peekNextKey();
+        Ogre::ConfigFile::SettingsMultiMap *settings = seci.getNext();
+        Ogre::ConfigFile::SettingsMultiMap::iterator i;
+        for (i = settings->begin(); i != settings->end(); ++i)
+        {
+          typeName = i->first; // for instance "FileSystem" or "Zip"
+          archName = i->second; // name (and location) of archive
+
+          Ogre::ResourceGroupManager::getSingleton().addResourceLocation(
+              std::string(Settings::getDataPath() + archName), typeName, secName);
+        }
       }
-    }
+      catch (Ogre::Exception ex)
+      {
+        COUT(2) << "Exception while reading resources.cfg. Proceeding.." << ex.getDescription() << std::endl;
+      }
+    }
+    return true;
   }
 
@@ -223,8 +264,17 @@
 
     CCOUT(4) << "Creating render window" << std::endl;
-    this->renderWindow_ = root_->initialise(true, "OrxonoxV2");
+    try
+    {
+      this->renderWindow_ = root_->initialise(true, "OrxonoxV2");
+    }
+    catch (Ogre::Exception ex)
+    {
+      COUT(2) << "Error: There was an exception when initialising Ogre Root." << std::endl;
+      return false;
+    }
+
     if (!root_->isInitialised())
     {
-      CCOUT(2) << "Error: Creating Ogre root object failed" << std::endl;
+      CCOUT(2) << "Error: Initialising Ogre root object failed." << std::endl;
       return false;
     }
Index: code/trunk/src/orxonox/GraphicsEngine.h
===================================================================
--- code/trunk/src/orxonox/GraphicsEngine.h	(revision 1534)
+++ code/trunk/src/orxonox/GraphicsEngine.h	(revision 1535)
@@ -21,7 +21,7 @@
  *
  *   Author:
- *      Benjamin Knecht <beni_at_orxonox.net>, (C) 2007
+ *      Reto Grieder
  *   Co-authors:
- *      Reto Grieder
+ *      Benjamin Knecht <beni_at_orxonox.net>, (C) 2007, Felix Schulthess
  *
  */
@@ -56,6 +56,6 @@
         public:
             void setConfigValues();
-            bool setup(std::string& dataPath);
-            void declareRessourceLocations();
+            bool setup();
+            bool declareRessourceLocations();
             bool loadRenderer();
             bool initialiseResources();
@@ -65,5 +65,4 @@
 
             Ogre::SceneManager* getSceneManager() { return scene_; }
-            std::string& getDataPath() { return dataPath_; }
 
             // several window properties
@@ -95,14 +94,14 @@
                              bool, const std::string&);
 
-            Ogre::Root*         root_;        //!< Ogre's root
-            Ogre::SceneManager* scene_;       //!< scene manager of the game
-            Ogre::RenderWindow* renderWindow_;//!< the current render window
-            //bool               bOverwritePath_; //!< overwrites path
-            //std::string         configPath_;  //!< path to config file
-            std::string         dataPath_;    //!< path to data file
-            std::string         ogreLogfile_; //!< log file name for Ogre log messages
-            int ogreLogLevelTrivial_;         //!< Corresponding Orxonx debug level for LL_TRIVIAL
-            int ogreLogLevelNormal_;          //!< Corresponding Orxonx debug level for LL_NORMAL
-            int ogreLogLevelCritical_;        //!< Corresponding Orxonx debug level for LL_CRITICAL
+            Ogre::Root*         root_;              //!< Ogre's root
+            Ogre::SceneManager* scene_;             //!< scene manager of the game
+            Ogre::RenderWindow* renderWindow_;      //!< the current render window
+            std::string         resourceFile_;      //!< resources file name
+            std::string         ogreConfigFile_;    //!< ogre config file name
+            std::string         ogrePluginsFile_;   //!< ogre plugins file name
+            std::string         ogreLogFile_;       //!< log file name for Ogre log messages
+            int ogreLogLevelTrivial_;               //!< Corresponding Orxonx debug level for LL_TRIVIAL
+            int ogreLogLevelNormal_;                //!< Corresponding Orxonx debug level for LL_NORMAL
+            int ogreLogLevelCritical_;              //!< Corresponding Orxonx debug level for LL_CRITICAL
     };
 }
Index: code/trunk/src/orxonox/Main.cc
===================================================================
--- code/trunk/src/orxonox/Main.cc	(revision 1534)
+++ code/trunk/src/orxonox/Main.cc	(revision 1535)
@@ -82,5 +82,5 @@
     res = orx->init(argc, argv, macBundlePath());
 #else
-    res = orx->init(argc, argv, "");
+    res = orx->init(argc, argv);
 #endif
 
Index: code/trunk/src/orxonox/Orxonox.cc
===================================================================
--- code/trunk/src/orxonox/Orxonox.cc	(revision 1534)
+++ code/trunk/src/orxonox/Orxonox.cc	(revision 1535)
@@ -21,7 +21,7 @@
  *
  *   Author:
+ *      Reto Grieder
+ *   Co-authors:
  *      Benjamin Knecht <beni_at_orxonox.net>, (C) 2007
- *   Co-authors:
- *      ...
  *
  */
@@ -57,7 +57,7 @@
 #include "core/Debug.h"
 #include "core/Loader.h"
-#include "core/Tickable.h"
-#include "core/InputManager.h"
+#include "core/input/InputManager.h"
 #include "core/TclBind.h"
+#include "core/Core.h"
 
 // audio
@@ -70,12 +70,13 @@
 // objects and tools
 #include "hud/HUD.h"
-#include <Ogre.h>
+#include "objects/Tickable.h"
 
 #include "GraphicsEngine.h"
+#include "Settings.h"
 
 // FIXME: is this really file scope?
 // globals for the server or client
-network::Client *client_g;
-network::Server *server_g;
+network::Client *client_g = 0;
+network::Server *server_g = 0;
 
 namespace orxonox
@@ -166,19 +167,29 @@
    * @param path path to config (in home dir or something)
    */
-  bool Orxonox::init(int argc, char **argv, std::string path)
-  {
-    //TODO: find config file (assuming executable directory)
-    //TODO: read config file
-    //TODO: give config file to Ogre
+  bool Orxonox::init(int argc, char **argv)
+  {
+#ifdef _DEBUG
+    ConfigFileManager::getSingleton()->setFile(CFT_Settings, "orxonox_d.ini");
+#else
+    ConfigFileManager::getSingleton()->setFile(CFT_Settings, "orxonox.ini");
+#endif
+    Factory::createClassHierarchy();
+
     std::string mode;
-    std::string dataPath;
+    std::string tempDataPath;
 
     ArgReader ar(argc, argv);
-    ar.checkArgument("mode", mode, false);
-    ar.checkArgument("data", dataPath, false);
-    ar.checkArgument("ip", serverIp_, false);
-    ar.checkArgument("port", serverPort_, false);
+    ar.checkArgument("mode", &mode, false);
+    ar.checkArgument("data", &tempDataPath, false);
+    ar.checkArgument("ip",   &serverIp_, false);
+    ar.checkArgument("port", &serverPort_, false);
     if(ar.errorHandling())
+    {
+      COUT(1) << "Error while parsing command line arguments" << std::endl;
+      COUT(1) << ar.getErrorString();
+      COUT(0) << "Usage:" << std::endl << "orxonox [mode client|server|dedicated|standalone] "
+        << "[--data PATH] [--ip IP] [--port PORT]" << std::endl;
       return false;
+    }
 
     if (mode == "client")
@@ -190,8 +201,25 @@
     else
     {
-      mode = "standalone";
+      if (mode == "")
+        mode = "standalone";
+      if (mode != "standalone")
+      {
+        COUT(2) << "Warning: mode \"" << mode << "\" doesn't exist. "
+          << "Defaulting to standalone" << std::endl;
+        mode = "standalone";
+      }
       mode_ = STANDALONE;
     }
     COUT(3) << "Orxonox: Mode is " << mode << "." << std::endl;
+
+    if (tempDataPath != "")
+    {
+      if (tempDataPath[tempDataPath.size() - 1] != '/')
+        tempDataPath += "/";
+      Settings::tsetDataPath(tempDataPath);
+    }
+
+    // initialise TCL
+    TclBind::getInstance().setDataPath(Settings::getDataPath());
 
     //if (mode_ == DEDICATED)
@@ -202,9 +230,6 @@
     // procedure until the GUI is identical
 
-    ConfigFileManager::getSingleton()->setFile(CFT_Settings, "orxonox.ini");
-    Factory::createClassHierarchy();
-
     ogre_ = &GraphicsEngine::getSingleton();
-    if (!ogre_->setup(path))       // creates ogre root and other essentials
+    if (!ogre_->setup())       // creates ogre root and other essentials
       return false;
 
@@ -421,4 +446,6 @@
       }
 
+      // tick the core
+      Core::tick((float)evt.timeSinceLastFrame);
       // Call those objects that need the real time
       for (Iterator<TickableReal> it = ObjectList<TickableReal>::start(); it; ++it)
@@ -427,4 +454,9 @@
       for (Iterator<Tickable> it = ObjectList<Tickable>::start(); it; ++it)
         it->tick((float)evt.timeSinceLastFrame * this->timefactor_);
+      //AudioManager::tick();
+      if (client_g)
+        client_g->tick((float)evt.timeSinceLastFrame);
+      if (server_g)
+        server_g->tick((float)evt.timeSinceLastFrame);
 
       // don't forget to call _fireFrameStarted in ogre to make sure
Index: code/trunk/src/orxonox/Orxonox.h
===================================================================
--- code/trunk/src/orxonox/Orxonox.h	(revision 1534)
+++ code/trunk/src/orxonox/Orxonox.h	(revision 1535)
@@ -21,7 +21,7 @@
  *
  *   Author:
- *      ...
+ *      Reto Grieder
  *   Co-authors:
- *      ...
+ *      Benjamin Knecht <beni_at_orxonox.net>, (C) 2007
  *
  */
@@ -58,5 +58,5 @@
   {
     public:
-      bool init(int argc, char **argv, std::string path);
+      bool init(int argc, char **argv);
       bool start();
 
Index: code/trunk/src/orxonox/OrxonoxStableHeaders.h
===================================================================
--- code/trunk/src/orxonox/OrxonoxStableHeaders.h	(revision 1534)
+++ code/trunk/src/orxonox/OrxonoxStableHeaders.h	(revision 1535)
@@ -104,5 +104,4 @@
 #include "core/Debug.h"
 //#include "core/Executor.h"
-#include "core/Tickable.h"
 //#include "core/XMLPort.h"
 
@@ -111,4 +110,5 @@
 #include "OrxonoxPrereqs.h"
 #include "tools/Timer.h"
+#include "objects/Tickable.h"
 #include "objects/Model.h"
 #include "objects/WorldEntity.h"
Index: code/trunk/src/orxonox/Settings.cc
===================================================================
--- code/trunk/src/orxonox/Settings.cc	(revision 1535)
+++ code/trunk/src/orxonox/Settings.cc	(revision 1535)
@@ -0,0 +1,105 @@
+/*
+ *   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:
+ *      ...
+ *
+ */
+
+/**
+    @file
+    @brief Implementation of the Settings class.
+*/
+
+#include "OrxonoxStableHeaders.h"
+#include "Settings.h"
+
+#include "core/CoreIncludes.h"
+#include "core/ConfigValueIncludes.h"
+
+namespace orxonox
+{
+  /**
+    @brief Constructor: Registers the object and sets the config-values.
+  */
+  Settings::Settings()
+  {
+    RegisterRootObject(Settings);
+    setConfigValues();
+  }
+
+  Settings::~Settings()
+  {
+  }
+
+  /**
+    @brief Returns a unique instance of Core.
+    @return The instance
+  */
+  Settings& Settings::getSingleton()
+  {
+    static Settings instance;
+    return instance;
+  }
+
+  /**
+    @brief Function to collect the SetConfigValue-macro calls.
+  */
+  void Settings::setConfigValues()
+  {
+    SetConfigValue(dataPath_, "../../Media/").description("Relative path to the game data.");
+    if (dataPath_ != "" && dataPath_[dataPath_.size() - 1] != '/')
+    {
+      ModifyConfigValue(dataPath_, set, dataPath_ + "/");
+    }
+
+    if (dataPath_ == "")
+    {
+      ModifyConfigValue(dataPath_, set, "/");
+      COUT(2) << "Warning: Data path set to \"/\", is that really correct?" << std::endl;
+    }
+  }
+
+  /**
+    @brief Temporary sets the data path
+    @param path The new data path
+  */
+  void Settings::_tsetDataPath(const std::string& path)
+  {
+    ModifyConfigValue(dataPath_, tset, path);
+  }
+
+  /*static*/ void Settings::tsetDataPath(const std::string& path)
+  {
+    getSingleton()._tsetDataPath(path);
+  }
+
+  /**
+    @brief Returns the relative path to the game data.
+    @return The path to the game data
+  */
+  /*static*/ const std::string& Settings::getDataPath()
+  {
+    return getSingleton().dataPath_;
+  }
+}
Index: code/trunk/src/orxonox/Settings.h
===================================================================
--- code/trunk/src/orxonox/Settings.h	(revision 1535)
+++ code/trunk/src/orxonox/Settings.h	(revision 1535)
@@ -0,0 +1,67 @@
+/*
+ *   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:
+ *      ...
+ *
+ */
+
+/**
+    @file Core.h
+    @brief Definition of the Settings class.
+
+    The static Settings class is only used to configure some variables
+    through the config-file.
+*/
+
+#ifndef _Settings_H__
+#define _Settings_H__
+
+#include "OrxonoxPrereqs.h"
+#include <string>
+#include "core/OrxonoxClass.h"
+
+namespace orxonox
+{
+  class _OrxonoxExport Settings : public OrxonoxClass
+  {
+    public:
+      void setConfigValues();
+
+      static const std::string& getDataPath();
+
+      static void tsetDataPath(const std::string& path);
+
+    private:
+      Settings();
+      Settings(const Settings& instance);
+      ~Settings();
+      static Settings& getSingleton();
+
+      void _tsetDataPath(const std::string& path);
+
+      std::string dataPath_;               //!< Path to the game data
+  };
+}
+
+#endif /* _Settings_H__ */
Index: code/trunk/src/orxonox/console/InGameConsole.cc
===================================================================
--- code/trunk/src/orxonox/console/InGameConsole.cc	(revision 1534)
+++ code/trunk/src/orxonox/console/InGameConsole.cc	(revision 1535)
@@ -42,5 +42,5 @@
 #include "core/ConfigValueIncludes.h"
 #include "core/ConsoleCommand.h"
-#include "core/InputManager.h"
+#include "core/input/InputManager.h"
 #include "util/Math.h"
 #include "GraphicsEngine.h"
Index: code/trunk/src/orxonox/console/InGameConsole.h
===================================================================
--- code/trunk/src/orxonox/console/InGameConsole.h	(revision 1534)
+++ code/trunk/src/orxonox/console/InGameConsole.h	(revision 1535)
@@ -36,6 +36,6 @@
 #include <OgreTextAreaOverlayElement.h>
 
-#include "core/Tickable.h"
 #include "core/Shell.h"
+#include "objects/Tickable.h"
 
 
Index: code/trunk/src/orxonox/hud/HUD.h
===================================================================
--- code/trunk/src/orxonox/hud/HUD.h	(revision 1534)
+++ code/trunk/src/orxonox/hud/HUD.h	(revision 1535)
@@ -36,10 +36,10 @@
 #include <OgreTextAreaOverlayElement.h>
 #include <OgreSceneNode.h>
-#include "core/Tickable.h"
+#include "objects/Tickable.h"
 #include "util/Math.h"
 
 namespace orxonox
 {
-    class _OrxonoxExport HUD : public Tickable
+    class _OrxonoxExport HUD : public TickableReal
     {
       private:
Index: code/trunk/src/orxonox/hud/RadarOverlayElement.cc
===================================================================
--- code/trunk/src/orxonox/hud/RadarOverlayElement.cc	(revision 1534)
+++ code/trunk/src/orxonox/hud/RadarOverlayElement.cc	(revision 1535)
@@ -35,6 +35,6 @@
 
 #include "GraphicsEngine.h"
-#include "core/Tickable.h"
 #include "core/ConsoleCommand.h"
+#include "objects/Tickable.h"
 #include "objects/SpaceShip.h"
 #include "RadarObject.h"
Index: code/trunk/src/orxonox/objects/SpaceShip.cc
===================================================================
--- code/trunk/src/orxonox/objects/SpaceShip.cc	(revision 1534)
+++ code/trunk/src/orxonox/objects/SpaceShip.cc	(revision 1535)
@@ -42,5 +42,5 @@
 #include "core/Debug.h"
 #include "GraphicsEngine.h"
-#include "core/InputManager.h"
+#include "core/input/InputManager.h"
 #include "particle/ParticleInterface.h"
 #include "Projectile.h"
Index: code/trunk/src/orxonox/objects/SpaceShip.h
===================================================================
--- code/trunk/src/orxonox/objects/SpaceShip.h	(revision 1534)
+++ code/trunk/src/orxonox/objects/SpaceShip.h	(revision 1535)
@@ -34,8 +34,7 @@
 
 #include "util/Math.h"
-#include "core/InputInterfaces.h"
 #include "Camera.h"
 #include "Model.h"
-#include "../tools/BillboardSet.h"
+#include "tools/BillboardSet.h"
 
 namespace orxonox
Index: code/trunk/src/orxonox/objects/Tickable.cc
===================================================================
--- code/trunk/src/orxonox/objects/Tickable.cc	(revision 1535)
+++ code/trunk/src/orxonox/objects/Tickable.cc	(revision 1535)
@@ -0,0 +1,51 @@
+/*
+ *   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 "Tickable.h"
+#include "core/CoreIncludes.h"
+#include "core/ConsoleCommand.h"
+
+namespace orxonox
+{
+    /**
+        @brief Constructor: Registers the object in the Tickable-list
+    */
+    Tickable::Tickable()
+    {
+        RegisterRootObject(Tickable);
+    }
+
+    /**
+        @brief Constructor: Registers the object in the TickableReal-list
+    */
+    TickableReal::TickableReal()
+    {
+        RegisterRootObject(TickableReal);
+    }
+}
Index: code/trunk/src/orxonox/objects/Tickable.h
===================================================================
--- code/trunk/src/orxonox/objects/Tickable.h	(revision 1535)
+++ code/trunk/src/orxonox/objects/Tickable.h	(revision 1535)
@@ -0,0 +1,80 @@
+/*
+ *   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 Tickable.h
+    @brief Definition of the Tickable interface.
+
+    The Tickable interface provides a tick(dt) function, that gets called every frame.
+    float dt is the time since the last frame in seconds.
+
+    Attention:
+    Classes derived from a Tickable that want to have a tick(dt) function on their part, MUST call the
+    parent::tick(dt) function explicitly in their implementation of tick(dt) because it's a virtual function.
+*/
+
+#ifndef _Tickable_H__
+#define _Tickable_H__
+
+#include "OrxonoxPrereqs.h"
+
+#include "core/OrxonoxClass.h"
+
+namespace orxonox
+{
+    //! The Tickable interface provides a tick(dt) function, that gets called every frame.
+    class _OrxonoxExport Tickable : virtual public OrxonoxClass
+    {
+        public:
+            /**
+                @brief Gets called every frame.
+                @param dt The time since the last frame in seconds
+            */
+            virtual void tick(float dt) = 0;
+
+        protected:
+            Tickable();
+    };
+
+    //! The Tickable interface provides a tick(dt) function, that gets called every frame.
+    class _OrxonoxExport TickableReal : virtual public OrxonoxClass
+    {
+        public:
+            /**
+                @brief Gets called every frame.
+                @param dt The time since the last frame in seconds
+            */
+            virtual void tick(float dt) = 0;
+
+        protected:
+            TickableReal();
+    };
+
+}
+
+#endif /* _Tickable_H__ */
Index: code/trunk/src/orxonox/objects/WorldEntity.h
===================================================================
--- code/trunk/src/orxonox/objects/WorldEntity.h	(revision 1534)
+++ code/trunk/src/orxonox/objects/WorldEntity.h	(revision 1535)
@@ -39,5 +39,5 @@
 #include "network/Synchronisable.h"
 #include "core/BaseObject.h"
-#include "core/Tickable.h"
+#include "Tickable.h"
 #include "../tools/Mesh.h"
 
Index: code/trunk/src/orxonox/tools/Timer.h
===================================================================
--- code/trunk/src/orxonox/tools/Timer.h	(revision 1534)
+++ code/trunk/src/orxonox/tools/Timer.h	(revision 1535)
@@ -62,6 +62,5 @@
 
 #include "OrxonoxPrereqs.h"
-#include "core/CorePrereqs.h"
-#include "core/Tickable.h"
+#include "objects/Tickable.h"
 
 namespace orxonox
