Index: /code/branches/pickup/src/modules/pickup/items/ShrinkPickup.cc
===================================================================
--- /code/branches/pickup/src/modules/pickup/items/ShrinkPickup.cc	(revision 8432)
+++ /code/branches/pickup/src/modules/pickup/items/ShrinkPickup.cc	(revision 8433)
@@ -15,9 +15,13 @@
     CreateFactory(ShrinkPickup);
 
-    ShrinkPickup::ShrinkPickup(BaseObject* creator) : Pickup(creator)
+	ShrinkPickup::ShrinkPickup(BaseObject* creator) : Pickup(creator)
     {
         RegisterObject(ShrinkPickup);
 
         this->initialize();
+		shrinkFactor_ = 5.0;
+		duration_ = 5.0;
+		shrinkDelay_ = 1.0;
+		isActive_ = false;
     }
 
@@ -34,4 +38,6 @@
     void ShrinkPickup::changedUsed(void)
 	{
+		int i;	
+
 		SUPER(ShrinkPickup, changedUsed);
 
@@ -45,10 +51,21 @@
 			//this->pawn->setScale3D(this->pawn->getScale3D() / 2.0);
 			std::set<WorldEntity*> set = this->pawn->getAttachedObjects();
+			
+			i = 0;
 			for(std::set<WorldEntity*>::iterator it = set.begin(); it != set.end(); it++)
 			{
-				(*it)->setScale((*it)->getScale() / 5.0);
-				(*it)->setPosition((*it)->getPosition() / 5.0);
+				defaultScales_.push_back((*it)->getScale());
+				actualScales_.push_back((*it)->getScale());
+				defaultPositions_.push_back((*it)->getPosition());
+				actualPositions_.push_back((*it)->getPosition());
+				//(*it)->setScale((*it)->getScale() / 5.0);
+				//(*it)->setPosition((*it)->getPosition() / 5.0);
 			}
-			
+			size_ = defaultScales_.size();
+			for(i = 0; i < size_; i++)
+			{
+				smallScales_.push_back(defaultScales_.at(i) / shrinkFactor_);
+			}
+			isActive_ = true;
 			durationTimer.setTimer(10, false, createExecutor(createFunctor(&ShrinkPickup::terminate, this)));
         }
@@ -57,4 +74,43 @@
 			this->Pickupable::destroy();
         }
+	}
+
+	void ShrinkPickup::tick(float dt)
+	{
+		double temp;
+		int i;
+		double k = dt / shrinkDelay_;
+		if(isActive_)
+		{
+			for(i = 0; i < size_; i++)
+			{
+				temp = actualScales_.at(i);
+				if(temp > smallScales_.at(i))
+				{
+					actualScales_.erase(i)
+					actualScales_.insert(i, temp - (temp - smallScales_.at(i)) * k);
+				}
+				/*temp = actual;
+				if(temp > smallScales[i])
+				{
+					actualScales[i] -= (actualScales[i] - smallScales[i]) * k;
+				}*/
+
+			}
+
+			i = 0;
+			
+			std::set<WorldEntity*> set = this->pawn->getAttachedObjects();
+			for(std::set<WorldEntity*>::iterator it = set.begin(); it != set.end(); it++)
+			{
+				//defaultScales.push_back((*it)->getScale());
+				//actualScales.push_back((*it)->getScale());
+				//defaultPositions.push_back((*it)->getPosition());
+				//actualPositions.push_back((*it)->getPosition());
+				//(*it)->setScale((*it)->getScale() *0.99);
+				(*it)->setScale(actualScales_.at(i));
+				//(*it)->setPosition((*it)->getPosition() / 5.0);
+			}
+		}
 	}
 
Index: /code/branches/pickup/src/modules/pickup/items/ShrinkPickup.h
===================================================================
--- /code/branches/pickup/src/modules/pickup/items/ShrinkPickup.h	(revision 8432)
+++ /code/branches/pickup/src/modules/pickup/items/ShrinkPickup.h	(revision 8433)
@@ -25,18 +25,21 @@
             virtual void changedUsed(void); //!< Is called when the pickup has transited from used to unused or the other way around.
 			virtual void clone(OrxonoxClass*& item); //!< Creates a duplicate of the input OrxonoxClass.
+			void tick(float dt);
 
         private:
             void initialize(void);
-			const float duration;			//determines how long the pickup will be active
-    		const float shrinkFactor;		//shrink factor of the space ship
-			const float shrinkDelay;		//how long it takes to shrink to the final size
-			double factorPerCall;
-			bool isTerminating;
-			vector<float> defaultScales;
-			vector<float> smallScales;
-			vector<float> actualScales;
-			vector<float> defaultPositions;
-			vector<float> smallPositions;
-			vector<float> actualPositions;
+			
+			float duration_;			//!< determines how long the pickup will be active
+    		float shrinkFactor_;		//shrink factor of the space ship
+			float shrinkDelay_;		//how long it takes to shrink to the final size
+			bool isActive_;
+			bool isTerminating_;
+			int size_;
+			std::vector<float> defaultScales_;
+			std::vector<float> smallScales_;
+			std::vector<float> actualScales_;
+			std::vector<Vector3> defaultPositions_;
+			std::vector<Vector3> smallPositions_;
+			std::vector<Vector3> actualPositions_;
 			Pawn* carrierToPawnHelper(void);
 			Pawn* pawn;
@@ -44,5 +47,4 @@
 			void terminate(void);
 
-			
     };
 }
