Index: code/branches/mergeFS18/src/libraries/core/BaseObject.cc
===================================================================
--- code/branches/mergeFS18/src/libraries/core/BaseObject.cc	(revision 12027)
+++ code/branches/mergeFS18/src/libraries/core/BaseObject.cc	(revision 12028)
@@ -77,5 +77,5 @@
         {
             this->setFile(this->creator_->getFile());
-
+            
             // store strong-pointers on all four base objects by default (can be overwritten with weak-ptr after the constructor if necessary)
             this->setNamespace(this->creator_->namespace_.createStrongPtr());
Index: code/branches/mergeFS18/src/libraries/core/BaseObject.h
===================================================================
--- code/branches/mergeFS18/src/libraries/core/BaseObject.h	(revision 12027)
+++ code/branches/mergeFS18/src/libraries/core/BaseObject.h	(revision 12028)
@@ -58,4 +58,5 @@
     class Gametype;
     class Level;
+    class ScriptableController;
 
     /// The BaseObject is the parent of all classes representing an instance in the game.
@@ -191,4 +192,5 @@
 
             static void loadAllEventStates(Element& xmlelement, XMLPort::Mode mode, BaseObject* object, Identifier* identifier);
+
 
         protected:
Index: code/branches/mergeFS18/src/libraries/tools/Timer.cc
===================================================================
--- code/branches/mergeFS18/src/libraries/tools/Timer.cc	(revision 12027)
+++ code/branches/mergeFS18/src/libraries/tools/Timer.cc	(revision 12028)
@@ -158,4 +158,12 @@
     }
 
+    Timer::Timer(float interval, bool bLoop, std::function<void ()> func, bool bKillAfterCall)
+    {
+        this->init();
+        RegisterObject(Timer);
+
+        this->setTimer(interval, bLoop, func, bKillAfterCall);
+    }
+
     /**
         @brief Initializes the Timer
@@ -193,9 +201,20 @@
         this->executor_ = executor;
         this->bActive_ = true;
+        this->isStdFunction_ = false;
 
         this->time_ = this->interval_;
         this->bKillAfterCall_ = bKillAfterCall;
 
-        executor->getFunctor()->setSafeMode(true);
+        if(executor != nullptr)
+            executor->getFunctor()->setSafeMode(true);
+    }
+
+    void Timer::setTimer(float interval, bool bLoop, std::function<void ()> func, bool bKillAfterCall)
+    {
+        // Without the cast, the call would be ambiguous, because nullptr is castable to
+        // both, ExecutorPtr and std::function.
+        this->setTimer(interval, bLoop, static_cast<ExecutorPtr>(nullptr), bKillAfterCall);
+        this->function_ = func;
+        this->isStdFunction_ = true;
     }
 
@@ -207,5 +226,8 @@
         bool temp = this->bKillAfterCall_; // to avoid errors with bKillAfterCall_=false and an exutors which destroy the timer
 
-        (*this->executor_)();
+        if(this->isStdFunction_)
+            this->function_();
+        else
+            (*this->executor_)();
 
         if (temp)
Index: code/branches/mergeFS18/src/libraries/tools/Timer.h
===================================================================
--- code/branches/mergeFS18/src/libraries/tools/Timer.h	(revision 12027)
+++ code/branches/mergeFS18/src/libraries/tools/Timer.h	(revision 12028)
@@ -108,6 +108,8 @@
 
             Timer(float interval, bool bLoop, const ExecutorPtr& executor, bool bKillAfterCall = false);
+            Timer(float interval, bool bLoop, std::function<void (void)> func, bool bKillAfterCall = false);
 
             void setTimer(float interval, bool bLoop, const ExecutorPtr& executor, bool bKillAfterCall = false);
+            void setTimer(float interval, bool bLoop, std::function<void (void)> func, bool bKillAfterCall = false);
 
             void run();
@@ -153,5 +155,7 @@
 
             ExecutorPtr executor_;  //!< The executor of the function that will be called when the time expires
+            std::function<void (void)> function_;
 
+            bool isStdFunction_;
             long long interval_;    //!< The time-interval in micro seconds
             bool bLoop_;            //!< If true, the executor gets called every @a interval seconds
