Index: code/branches/objecthierarchy/src/orxonox/tools/Timer.cc
===================================================================
--- code/branches/objecthierarchy/src/orxonox/tools/Timer.cc	(revision 1949)
+++ code/branches/objecthierarchy/src/orxonox/tools/Timer.cc	(revision 1968)
@@ -92,4 +92,5 @@
         this->bLoop_ = false;
         this->bActive_ = false;
+        this->bKillAfterCall_ = false;
 
         this->time_ = 0;
@@ -112,4 +113,7 @@
     {
         (*this->executor_)();
+
+        if (this->bKillAfterCall_)
+            delete this;
     }
 
@@ -136,5 +140,5 @@
             {
                 // It's time to call the function
-                if (this->bLoop_)
+                if (this->bLoop_ && !this->bKillAfterCall_)
                 {
                     this->time_ += this->interval_; // Q: Why '+=' and not '='? A: Think about it. It's more accurate like that. Seriously.
Index: code/branches/objecthierarchy/src/orxonox/tools/Timer.h
===================================================================
--- code/branches/objecthierarchy/src/orxonox/tools/Timer.h	(revision 1949)
+++ code/branches/objecthierarchy/src/orxonox/tools/Timer.h	(revision 1968)
@@ -116,11 +116,12 @@
             TimerBase();
 
-            Executor* executor_; //!< The executor of the function that should be called when the time expires
-
-            long long interval_; //!< The time-interval in micro seconds
-            bool bLoop_;         //!< If true, the function gets called every 'interval' seconds
-            bool bActive_;       //!< If true, the Timer ticks and calls the function if the time's up
-
-            long long time_;     //!< Internal variable, counting the time till the next function-call
+            Executor* executor_;  //!< The executor of the function that should be called when the time expires
+
+            long long interval_;  //!< The time-interval in micro seconds
+            bool bLoop_;          //!< If true, the function gets called every 'interval' seconds
+            bool bActive_;        //!< If true, the Timer ticks and calls the function if the time's up
+            bool bKillAfterCall_; //!< If true the timer gets deleted after it called the function
+
+            long long time_;      //!< Internal variable, counting the time till the next function-call
     };
 
@@ -139,7 +140,7 @@
                 @param exeuctor A executor of the function to call
             */
-            Timer(float interval, bool bLoop, T* object, ExecutorMember<T>* exeuctor)
-            {
-                this->setTimer(interval, bLoop, object, exeuctor);
+            Timer(float interval, bool bLoop, T* object, ExecutorMember<T>* exeuctor, bool bKillAfterCall = false)
+            {
+                this->setTimer(interval, bLoop, object, exeuctor, bKillAfterCall);
             }
 
@@ -151,5 +152,5 @@
                 @param exeuctor A executor of the function to call
             */
-            void setTimer(float interval, bool bLoop, T* object, ExecutorMember<T>* executor)
+            void setTimer(float interval, bool bLoop, T* object, ExecutorMember<T>* executor, bool bKillAfterCall = false)
             {
                 this->deleteExecutor();
@@ -162,4 +163,5 @@
 
                 this->time_ = this->interval_;
+                this->bKillAfterCall_ = bKillAfterCall;
             }
     };
@@ -177,7 +179,7 @@
                 @param exeuctor A executor of the function to call
             */
-            StaticTimer(float interval, bool bLoop, ExecutorStatic* executor)
-            {
-                this->setTimer(interval, bLoop, executor);
+            StaticTimer(float interval, bool bLoop, ExecutorStatic* executor, bool bKillAfterCall = false)
+            {
+                this->setTimer(interval, bLoop, executor, bKillAfterCall);
             }
 
@@ -189,5 +191,5 @@
                 @param executor A executor of the function to call
             */
-            void setTimer(float interval, bool bLoop, ExecutorStatic* executor)
+            void setTimer(float interval, bool bLoop, ExecutorStatic* executor, bool bKillAfterCall = false)
             {
                 this->deleteExecutor();
@@ -199,4 +201,5 @@
 
                 this->time_ = this->interval_;
+                this->bKillAfterCall_ = bKillAfterCall;
             }
     };
