Index: code/branches/pickup/src/libraries/tools/CMakeLists.txt
===================================================================
--- code/branches/pickup/src/libraries/tools/CMakeLists.txt	(revision 5815)
+++ code/branches/pickup/src/libraries/tools/CMakeLists.txt	(revision 5935)
@@ -1,3 +1,10 @@
-ADD_SOURCE_FILES(TOOLS_SRC_FILES
+SET_SOURCE_FILES(TOOLS_SRC_FILES
+COMPILATION_BEGIN ResourceCompilation.cc
+  ResourceCollection.cc
+  ResourceLocation.cc
+COMPILATION_END
+  TextureGenerator.cc
+  Timer.cc
+COMPILATION_BEGIN OgreCompilation.cc
   BillboardSet.cc
   DynamicLines.cc
@@ -5,9 +12,6 @@
   Mesh.cc
   ParticleInterface.cc
-  ResourceCollection.cc
-  ResourceLocation.cc
   Shader.cc
-  TextureGenerator.cc
-  Timer.cc
+COMPILATION_END
 )
 ADD_SUBDIRECTORY(interfaces)
@@ -15,6 +19,4 @@
 ORXONOX_ADD_LIBRARY(tools
   FIND_HEADER_FILES
-  PCH_FILE
-    ToolsPrecompiledHeaders.h
   DEFINE_SYMBOL
     "TOOLS_SHARED_BUILD"
Index: code/branches/pickup/src/libraries/tools/ResourceLocation.cc
===================================================================
--- code/branches/pickup/src/libraries/tools/ResourceLocation.cc	(revision 5815)
+++ code/branches/pickup/src/libraries/tools/ResourceLocation.cc	(revision 5935)
@@ -33,6 +33,6 @@
 
 #include "util/Exception.h"
-#include "core/Core.h"
 #include "core/CoreIncludes.h"
+#include "core/PathConfig.h"
 #include "core/XMLFile.h"
 #include "core/XMLPort.h"
@@ -71,9 +71,10 @@
 
         // Find the path
-        boost::filesystem::path path;
-        if (boost::filesystem::exists(Core::getDataPath() / this->getPath()))
-            path = Core::getDataPath() / this->getPath();
-        else if (Core::isDevelopmentRun() && boost::filesystem::exists(Core::getExternalDataPath() / this->getPath()))
-            path = Core::getExternalDataPath() / this->getPath();
+        namespace bf = boost::filesystem;
+        bf::path path;
+        if (bf::exists(PathConfig::getDataPath() / this->getPath()))
+            path = PathConfig::getDataPath() / this->getPath();
+        else if (PathConfig::isDevelopmentRun() && bf::exists(PathConfig::getExternalDataPath() / this->getPath()))
+            path = PathConfig::getExternalDataPath() / this->getPath();
         else
         {
Index: code/branches/pickup/src/libraries/tools/Timer.cc
===================================================================
--- code/branches/pickup/src/libraries/tools/Timer.cc	(revision 5815)
+++ code/branches/pickup/src/libraries/tools/Timer.cc	(revision 5935)
@@ -31,8 +31,8 @@
 #include <set>
 
+#include "util/Clock.h"
 #include "core/CoreIncludes.h"
 #include "core/ConsoleCommand.h"
 #include "core/CommandExecutor.h"
-#include "core/Clock.h"
 #include "core/Functor.h"
 
@@ -42,5 +42,5 @@
     SetConsoleCommandShortcutExtern(killdelays);
 
-    static std::set<StaticTimer*> delaytimerset;
+    static std::set<Timer*> delaytimerset;
 
     /**
@@ -51,5 +51,5 @@
     void delay(float delay, const std::string& command)
     {
-        StaticTimer *delaytimer = new StaticTimer();
+        Timer* delaytimer = new Timer();
         delaytimerset.insert(delaytimer);
 
@@ -64,8 +64,8 @@
         @param command The command to execute
     */
-    void executeDelayedCommand(StaticTimer* timer, const std::string& command)
+    void executeDelayedCommand(Timer* timer, const std::string& command)
     {
         CommandExecutor::execute(command);
-        delete timer;
+        timer->destroy();
         delaytimerset.erase(timer);
     }
@@ -76,6 +76,6 @@
     void killdelays()
     {
-        for (std::set<StaticTimer*>::iterator it = delaytimerset.begin(); it != delaytimerset.end(); ++it)
-            delete (*it);
+        for (std::set<Timer*>::iterator it = delaytimerset.begin(); it != delaytimerset.end(); ++it)
+            (*it)->destroy();
 
         delaytimerset.clear();
@@ -85,5 +85,36 @@
         @brief Constructor: Sets the default-values.
     */
-    TimerBase::TimerBase()
+    Timer::Timer()
+    {
+        this->init();
+        RegisterObject(Timer);
+    }
+
+    /**
+        @brief Constructor: Initializes the Timer with given values.
+        @param interval The timer-interval in seconds
+        @param bLoop If true, the function gets called every 'interval' seconds
+        @param exeuctor A executor of the function to call
+    */
+    Timer::Timer(float interval, bool bLoop, Executor* executor, bool bKillAfterCall)
+    {
+        this->init();
+        RegisterObject(Timer);
+
+        this->setTimer(interval, bLoop, executor, bKillAfterCall);
+    }
+
+    /**
+        @brief Deletes the executor.
+    */
+    Timer::~Timer()
+    {
+        this->deleteExecutor();
+    }
+    
+    /**
+        @brief Initializes the Timer
+    */
+    void Timer::init()
     {
         this->executor_ = 0;
@@ -94,14 +125,4 @@
 
         this->time_ = 0;
-
-        RegisterObject(TimerBase);
-    }
-
-    /**
-        @brief Deletes the executor.
-    */
-    TimerBase::~TimerBase()
-    {
-        this->deleteExecutor();
     }
 
@@ -109,5 +130,5 @@
         @brief Executes the executor.
     */
-    void TimerBase::run() const
+    void Timer::run()
     {
         bool temp = this->bKillAfterCall_; // to avoid errors with bKillAfterCall_=false and an exutors which destroy the timer
@@ -116,5 +137,5 @@
 
         if (temp)
-            delete this;
+            this->destroy();
     }
 
@@ -122,5 +143,5 @@
         @brief Deletes the executor.
     */
-    void TimerBase::deleteExecutor()
+    void Timer::deleteExecutor()
     {
       if (this->executor_)
@@ -131,5 +152,5 @@
         @brief Updates the timer before the frames are rendered.
     */
-    void TimerBase::tick(const Clock& time)
+    void Timer::tick(const Clock& time)
     {
         if (this->bActive_)
Index: code/branches/pickup/src/libraries/tools/Timer.h
===================================================================
--- code/branches/pickup/src/libraries/tools/Timer.h	(revision 5815)
+++ code/branches/pickup/src/libraries/tools/Timer.h	(revision 5935)
@@ -40,5 +40,5 @@
                 ClassName();
                 void functionName();
-                Timer<ClassName> myTimer;
+                Timer myTimer;
         };
 
@@ -48,5 +48,5 @@
         ClassName::ClassName()
         {
-            myTimer.setTimer(interval_in_seconds, bLoop, this, createExecutor(createFunctor(&ClassName::functionName)));
+            myTimer.setTimer(interval_in_seconds, bLoop, createExecutor(createFunctor(&ClassName::functionName, this)));
         }
 
@@ -69,16 +69,38 @@
 namespace orxonox
 {
-    class StaticTimer;
     void delay(float delay, const std::string& command);
     void killdelays();
-    void executeDelayedCommand(StaticTimer* timer, const std::string& command);
+    void executeDelayedCommand(Timer* timer, const std::string& command);
 
-    //! TimerBase is the parent of the Timer class.
-    class _ToolsExport TimerBase : public TimeFactorListener
+    //! The Timer is a callback-object, calling a given function after a given time-interval.
+    class _ToolsExport Timer : public TimeFactorListener
     {
         public:
-            ~TimerBase();
+            Timer();
+            ~Timer();
 
-            void run() const;
+            Timer(float interval, bool bLoop, Executor* executor, bool bKillAfterCall = false);
+
+            /**
+                @brief Initializes the Timer with given values.
+                @param interval The timer-interval in seconds
+                @param bLoop If true, the function gets called every 'interval' seconds
+                @param object The object owning the timer and the function
+                @param executor A executor of the function to call
+            */
+            void setTimer(float interval, bool bLoop, Executor* executor, bool bKillAfterCall = false)
+            {
+                this->deleteExecutor();
+
+                this->setInterval(interval);
+                this->bLoop_ = bLoop;
+                this->executor_ = executor;
+                this->bActive_ = true;
+
+                this->time_ = this->interval_;
+                this->bKillAfterCall_ = bKillAfterCall;
+            }
+
+            void run();
             void deleteExecutor();
 
@@ -116,7 +138,7 @@
             void tick(const Clock& time);
 
-        protected:
-            TimerBase();
-
+        private:
+            void init();
+        
             Executor* executor_;  //!< The executor of the function that should be called when the time expires
 
@@ -128,84 +150,4 @@
             long long time_;      //!< Internal variable, counting the time till the next function-call
     };
-
-    //! The Timer is a callback-object, calling a given function after a given time-interval.
-    template <class T = BaseObject>
-    class Timer : public TimerBase
-    {
-        public:
-            Timer() {}
-
-            /**
-                @brief Constructor: Initializes the Timer with given values.
-                @param interval The timer-interval in seconds
-                @param bLoop If true, the function gets called every 'interval' seconds
-                @param object The object owning the timer and the function
-                @param exeuctor A executor of the function to call
-            */
-            Timer(float interval, bool bLoop, T* object, ExecutorMember<T>* exeuctor, bool bKillAfterCall = false)
-            {
-                this->setTimer(interval, bLoop, object, exeuctor, bKillAfterCall);
-            }
-
-            /**
-                @brief Initializes the Timer with given values.
-                @param interval The timer-interval in seconds
-                @param bLoop If true, the function gets called every 'interval' seconds
-                @param object The object owning the timer and the function
-                @param exeuctor A executor of the function to call
-            */
-            void setTimer(float interval, bool bLoop, T* object, ExecutorMember<T>* executor, bool bKillAfterCall = false)
-            {
-                this->deleteExecutor();
-
-                this->setInterval(interval);
-                this->bLoop_ = bLoop;
-                executor->setObject(object);
-                this->executor_ = static_cast<Executor*>(executor);
-                this->bActive_ = true;
-
-                this->time_ = this->interval_;
-                this->bKillAfterCall_ = bKillAfterCall;
-            }
-    };
-
-    //! The StaticTimer is a callback-object, calling a static function after a given time-interval.
-    class _ToolsExport StaticTimer : public TimerBase
-    {
-        public:
-            StaticTimer() {}
-
-            /**
-                @brief Constructor: Initializes the Timer with given values.
-                @param interval The timer-interval in seconds
-                @param bLoop If true, the function gets called every 'interval' seconds
-                @param exeuctor A executor of the function to call
-            */
-            StaticTimer(float interval, bool bLoop, ExecutorStatic* executor, bool bKillAfterCall = false)
-            {
-                this->setTimer(interval, bLoop, executor, bKillAfterCall);
-            }
-
-            /**
-                @brief Initializes the Timer with given values.
-                @param interval The timer-interval in seconds
-                @param bLoop If true, the function gets called every 'interval' seconds
-                @param object The object owning the timer and the function
-                @param executor A executor of the function to call
-            */
-            void setTimer(float interval, bool bLoop, ExecutorStatic* executor, bool bKillAfterCall = false)
-            {
-                this->deleteExecutor();
-
-                this->setInterval(interval);
-                this->bLoop_ = bLoop;
-                this->executor_ = executor;
-                this->bActive_ = true;
-
-                this->time_ = this->interval_;
-                this->bKillAfterCall_ = bKillAfterCall;
-            }
-    };
-
 }
 
Index: code/branches/pickup/src/libraries/tools/ToolsPrecompiledHeaders.h
===================================================================
--- code/branches/pickup/src/libraries/tools/ToolsPrecompiledHeaders.h	(revision 5815)
+++ 	(revision )
@@ -1,70 +1,0 @@
-/*
- *   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
-    Compilation of the most often used header files in the tools library
-@details
-    Updated: 19. September 2009
-    Total Files: 11
-*/
-
-#include "OrxonoxConfig.h"
-
-///////////////////////////////////////////
-/////          Stable Headers         /////
-///////////////////////////////////////////
-
-#include <cassert>  // 11
-#include <cstring>  // 11
-#include <fstream>  // 11
-#include <iostream> // 11
-#include <map>      // 11
-#include <set>      // 11
-#include <sstream>  // 11
-#include <string>   // 11
-#include <vector>   // 11
-#include <cmath>    // 10
-#include <deque>    // 10
-#include <list>     // 10
-#include <queue>    // 10
-
-#include <OgreMath.h>        // 10
-#include <OgreVector2.h>     // 10
-#include <OgreVector3.h>     // 10
-#include <OgreVector4.h>     // 10
-#include <OgreQuaternion.h>  // 10
-#include <OgreColourValue.h> // 10
-
-#include "util/Debug.h"      // 9
-
-
-// Just in case some header included windows.h
-#undef min
-#undef max
Index: code/branches/pickup/src/libraries/tools/ToolsPrereqs.h
===================================================================
--- code/branches/pickup/src/libraries/tools/ToolsPrereqs.h	(revision 5815)
+++ code/branches/pickup/src/libraries/tools/ToolsPrereqs.h	(revision 5935)
@@ -28,6 +28,7 @@
 
 /**
-  @file
-  @brief Contains all the necessary forward declarations for all classes and structs.
+@file
+@brief
+    Shared library macros, enums, constants and forward declarations for the tools module
 */
 
@@ -40,4 +41,5 @@
 // Shared library settings
 //-----------------------------------------------------------------------
+
 #if defined(ORXONOX_PLATFORM_WINDOWS) && !defined(ORXONOX_STATIC_BUILD)
 #  ifdef TOOLS_SHARED_BUILD
@@ -57,5 +59,5 @@
 
 //-----------------------------------------------------------------------
-// Forward declarations
+// Enums
 //-----------------------------------------------------------------------
 
@@ -72,12 +74,21 @@
         };
     }
+}
 
+//-----------------------------------------------------------------------
+// Forward declarations
+//-----------------------------------------------------------------------
+
+namespace orxonox
+{
     class BillboardSet;
     class Mesh;
     class ParticleInterface;
+    class ResourceCollection;
+    class ResourceLocation;
     class Shader;
-    template <class T>
+    class Tickable;
+    class TimeFactorListener;
     class Timer;
-    class StaticTimer;
 }
 
