Index: code/trunk/src/modules/pickup/items/InvisiblePickup.cc
===================================================================
--- code/trunk/src/modules/pickup/items/InvisiblePickup.cc	(revision 7163)
+++ code/trunk/src/modules/pickup/items/InvisiblePickup.cc	(revision 7208)
@@ -115,11 +115,11 @@
         if (this->isUsed())
         {
-            if(!this->getTimer()->isActive() && this->getTimer()->getRemainingTime() > 0.0f)
-            {
-                this->getTimer()->unpauseTimer();
+            if(!this->durationTimer_.isActive() && this->durationTimer_.getRemainingTime() > 0.0f)
+            {
+                this->durationTimer_.unpauseTimer();
             }
             else
             {
-                this->startPickupTimer(this->getDuration());
+                this->durationTimer_.setTimer(this->getDuration(), false, createExecutor(createFunctor(&InvisiblePickup::pickupTimerCallback, this)));
             }
 
@@ -131,5 +131,5 @@
             this->setInvisible(false);
 
-            if(!this->getTimer()->isActive() && this->getTimer()->getRemainingTime() == this->getDuration())
+            if(!this->durationTimer_.isActive() && this->durationTimer_.getRemainingTime() == this->getDuration())
             {
                 this->Pickupable::destroy();
@@ -137,5 +137,5 @@
             else
             {
-                this->getTimer()->pauseTimer();
+                this->durationTimer_.pauseTimer();
             }
         }
Index: code/trunk/src/modules/pickup/items/InvisiblePickup.h
===================================================================
--- code/trunk/src/modules/pickup/items/InvisiblePickup.h	(revision 7163)
+++ code/trunk/src/modules/pickup/items/InvisiblePickup.h	(revision 7208)
@@ -77,9 +77,12 @@
             void setDuration(float duration);
             void initializeIdentifier(void);
-            virtual void pickupTimerCallback(void); //!< Function that gets called when the timer ends.
+            void pickupTimerCallback(void); //!< Function that gets called when the timer ends.
 
         private:
             void initialize(void); //!< Initializes the member variables.
             Pawn* carrierToPawnHelper(void); //!< Helper to transform the PickupCarrier to a Pawn, and throw an error message if the conversion fails.
+
+            Timer durationTimer_; //!< Timer.
+
             bool invisible_; //!< Helper to remember wether the Pawn is invisible.
             float duration_; //! Duration of invisibility.
Index: code/trunk/src/modules/pickup/items/ShieldPickup.cc
===================================================================
--- code/trunk/src/modules/pickup/items/ShieldPickup.cc	(revision 7163)
+++ code/trunk/src/modules/pickup/items/ShieldPickup.cc	(revision 7208)
@@ -160,11 +160,11 @@
         if(this->isUsed())
         {
-            if(!this->getTimer()->isActive() && this->getTimer()->getRemainingTime() > 0.0f)
+            if(!this->durationTimer_.isActive() && this->durationTimer_.getRemainingTime() > 0.0f)
             {
-                this->getTimer()->unpauseTimer();
+                this->durationTimer_.unpauseTimer();
             }
             else
             {
-                this->startPickupTimer(this->getDuration());
+                this->durationTimer_.setTimer(this->getDuration(), false, createExecutor(createFunctor(&ShieldPickup::pickupTimerCallback, this)));
             }
             pawn->setShieldAbsorption(this->getShieldAbsorption());
@@ -179,5 +179,5 @@
             if(this->isOnce())
             {
-                if(!this->getTimer()->isActive() && this->getTimer()->getRemainingTime() == this->getDuration())
+                if(!this->durationTimer_.isActive() && this->durationTimer_.getRemainingTime() == this->getDuration())
                 {
                     this->Pickupable::destroy();
@@ -185,5 +185,5 @@
                 else
                 {
-                    this->getTimer()->pauseTimer();
+                    this->durationTimer_.pauseTimer();
                 }
             }
Index: code/trunk/src/modules/pickup/items/ShieldPickup.h
===================================================================
--- code/trunk/src/modules/pickup/items/ShieldPickup.h	(revision 7163)
+++ code/trunk/src/modules/pickup/items/ShieldPickup.h	(revision 7208)
@@ -80,5 +80,5 @@
             void initializeIdentifier(void); //!< Initializes the PickupIdentifier of this pickup.
 
-            virtual void pickupTimerCallback(void); //!< Function that gets called when timer ends.
+            void pickupTimerCallback(void); //!< Function that gets called when timer ends.
 
             void setDuration(float duration);
@@ -90,4 +90,6 @@
             Pawn* carrierToPawnHelper(void); //!< Helper to transform the PickupCarrier to a Pawn, and throw an error message if the conversion fails.
 
+            Timer durationTimer_; //!< Timer.
+
             float duration_; //!< The health that is transferred to the Pawn.
             float shieldHealth_;
Index: code/trunk/src/modules/pickup/items/SpeedPickup.cc
===================================================================
--- code/trunk/src/modules/pickup/items/SpeedPickup.cc	(revision 7163)
+++ code/trunk/src/modules/pickup/items/SpeedPickup.cc	(revision 7208)
@@ -141,11 +141,11 @@
         if(this->isUsed())
         {
-            if(!this->getTimer()->isActive() && this->getTimer()->getRemainingTime() > 0.0f)
+            if(!this->durationTimer_.isActive() && this->durationTimer_.getRemainingTime() > 0.0f)
             {
-                this->getTimer()->unpauseTimer();
+                this->durationTimer_.unpauseTimer();
             }
             else
             {
-                this->startPickupTimer(this->getDuration());
+                this->durationTimer_.setTimer(this->getDuration(), false, createExecutor(createFunctor(&SpeedPickup::pickupTimerCallback, this)));
             }
             engine->setSpeedAdd(this->getSpeedAdd());
@@ -159,5 +159,5 @@
             if(this->isOnce())
             {
-                if(!this->getTimer()->isActive() && this->getTimer()->getRemainingTime() == this->getDuration())
+                if(!this->durationTimer_.isActive() && this->durationTimer_.getRemainingTime() == this->getDuration())
                 {
                     this->Pickupable::destroy();
@@ -165,5 +165,5 @@
                 else
                 {
-                    this->getTimer()->pauseTimer();
+                    this->durationTimer_.pauseTimer();
                 }
             }
Index: code/trunk/src/modules/pickup/items/SpeedPickup.h
===================================================================
--- code/trunk/src/modules/pickup/items/SpeedPickup.h	(revision 7163)
+++ code/trunk/src/modules/pickup/items/SpeedPickup.h	(revision 7208)
@@ -79,5 +79,5 @@
             void initializeIdentifier(void); //!< Initializes the PickupIdentifier of this pickup.
 
-            virtual void pickupTimerCallback(void); //!< Function that gets called when timer ends.
+            void pickupTimerCallback(void); //!< Function that gets called when timer ends.
 
             void setDuration(float duration);
@@ -89,4 +89,6 @@
             Engine* carrierToEngineHelper(void); //!< Helper to transform the PickupCarrier to a Pawn, and throw an error message if the conversion fails.
 
+            Timer durationTimer_; //!< Timer.
+
             float duration_; //!< The health that is transferred to the Pawn.
             float speedAdd_;
