Index: /code/branches/pickups2/src/orxonox/objects/pickup/PickupSpawner.cc
===================================================================
--- /code/branches/pickups2/src/orxonox/objects/pickup/PickupSpawner.cc	(revision 2388)
+++ /code/branches/pickups2/src/orxonox/objects/pickup/PickupSpawner.cc	(revision 2389)
@@ -16,5 +16,6 @@
 
 	this->template_ = 0;
-	this->distance_ = 50;
+	this->distance_ = 20;
+	this->respawntimer_= 0;
 }
 
@@ -28,5 +29,7 @@
 
 	XMLPortParam(PickupSpawner, "item", setItemTemplate, getItemTemplate, xmlelement, mode);
-	XMLPortParam(PickupSpawner, "distance", setDistance, getDistance, xmlelement, mode).defaultValues(50.0f);
+	XMLPortParam(PickupSpawner, "distance", setDistance, getDistance, xmlelement, mode).defaultValues(20.0f);
+	XMLPortParam(PickupSpawner, "respawntimer", setRespawnTimer, getRespawnTimer, xmlelement, mode);
+	
 }
 
@@ -54,5 +57,5 @@
 	if (this->isActive() && this->template_ && this->template_->getBaseclassIdentifier())
 	{
-		COUT(0) << "activated" << std::endl;
+		COUT(0) << "ITEM PICKED UP" << std::endl;
 		//if(player->isA(itemtemplate_->getPlayerBaseClass())) 
 		{
@@ -63,5 +66,10 @@
 			newitem->addTemplate(this->itemtemplate_);
 			if (newitem->pickedUp(player)== true)
+			{
+				if(respawntimer_!=0)
+					this->triggerRespawnTimer();
 				this->setActive(false);
+				this->fireEvent();
+			}	
 			else
 				delete newobject;
@@ -72,3 +80,41 @@
 	}
 }
+
+void PickupSpawner::triggerRespawnTimer()
+{	
+	
+	if(respawntimer_!=0)
+	{
+		ExecutorMember<BaseObject>* executor = createExecutor(createFunctor(&BaseObject::setActive));
+		executor->setDefaultValues(true);
+		RespawnTimer_.setTimer(this->respawntimer_, false, (BaseObject*)this, executor);
+		COUT(0) << "TIMER SET" << std::endl;
+	}	
 }
+void PickupSpawner::changedActivity()
+{
+/*
+	COUT(0) << "Visble?" << std::endl;
+	if(isActive())
+	{
+		setVisible(true);
+		COUT(0) << "Visble!" << std::endl;
+	}
+	if(isActive()==false)
+	{
+		setVisible(false);
+		COUT(0) << "INvisble!" << std::endl;
+	}
+		
+*/
+	SUPER(PickupSpawner, changedActivity);
+
+	for (std::set<WorldEntity*>::iterator it = this->getAttachedObjects().begin(); it != this->getAttachedObjects().end(); ++it)
+		(*it)->setVisible(this->isActive());
+}
+
+
+}
+
+
+
Index: /code/branches/pickups2/src/orxonox/objects/pickup/PickupSpawner.h
===================================================================
--- /code/branches/pickups2/src/orxonox/objects/pickup/PickupSpawner.h	(revision 2388)
+++ /code/branches/pickups2/src/orxonox/objects/pickup/PickupSpawner.h	(revision 2389)
@@ -4,5 +4,5 @@
 #include "OrxonoxPrereqs.h"
 #include "Item.h"
-
+#include "tools/Timer.h"
 #include "objects/worldentities/PositionableEntity.h"
 #include "objects/Tickable.h"
@@ -15,9 +15,14 @@
 	PickupSpawner(BaseObject* creator);
 	virtual ~PickupSpawner();
+	virtual void changedActivity();
+	virtual void tick(float dt);
+	virtual void XMLPort(Element& xmlelement, XMLPort::Mode mode);
+	virtual void triggering(Pawn* trigger); // Wenn ein Spieler in die Naehe kommt
+	void triggerRespawnTimer();
 
-	virtual void tick(float dt);
-
-    virtual void XMLPort(Element& xmlelement, XMLPort::Mode mode);
-	virtual void triggering(Pawn* trigger); // Wenn ein Spieler in die Naehe kommt
+	/*inline void setVisibility(bool visible)
+		{ this->setActive(visible); }
+	inline float getVisibility() const
+		{ return this->isActive(); }*/
 
 	void setItemTemplate(const std::string& itemtemplate);
@@ -29,4 +34,8 @@
 	inline float getDistance() const
 		{ return this->distance_; }
+	inline void setRespawnTimer (float respawntimer)
+		{ this->respawntimer_ = respawntimer; }
+	inline float getRespawnTimer() const
+		{ return this->respawntimer_; }
 
 	private:
@@ -34,4 +43,6 @@
 	Template* template_;
 	float distance_;
+	float respawntimer_;
+	Timer<BaseObject> RespawnTimer_;
 	};
 }
Index: /code/branches/pickups2/src/orxonox/objects/pickup/ShipEquipment.cc
===================================================================
--- /code/branches/pickups2/src/orxonox/objects/pickup/ShipEquipment.cc	(revision 2388)
+++ /code/branches/pickups2/src/orxonox/objects/pickup/ShipEquipment.cc	(revision 2389)
@@ -9,11 +9,20 @@
 	bool ShipEquipment::insert(Item* item)
 	{
-	if(checkSlot(item)==true)
+	if(checkSlot(item)==NULL)
 	{
 		Equipment.insert ( std::pair<std::string, Item*>(item->getName(),item) );
 		return true;
 	}
-		COUT(3) << "swap?" << std::endl;
+	else
+	{
+		COUT(3) << "SWAP?" <<  endl;
+		if((checkSlot(item)->dropped(player))==true);
+		{
+			Equipment.insert ( std::pair<std::string, Item*>(item->getName(),item) );
+			COUT(3) << "SWAPPED!" <<  endl;
+			return true;
+		}
 		return false;
+	}
 
 	return false;
@@ -48,5 +57,5 @@
 	}
 
-	bool ShipEquipment::checkSlot(Item* item)
+	Item* ShipEquipment::checkSlot(Item* item)
 	{
 	std::multimap<std::string,Item*>::iterator it;
@@ -55,7 +64,8 @@
 		//if((*it).second->getPlayerBaseClass()==item->getPlayerBaseClass())
 		if(item->isExactlyA((*it).second->getIdentifier()))
-		return false;
+		return (*it).second;
 	}
-	return true;
+	return NULL;
 	};
+	
 }
Index: /code/branches/pickups2/src/orxonox/objects/pickup/ShipEquipment.h
===================================================================
--- /code/branches/pickups2/src/orxonox/objects/pickup/ShipEquipment.h	(revision 2388)
+++ /code/branches/pickups2/src/orxonox/objects/pickup/ShipEquipment.h	(revision 2389)
@@ -30,5 +30,6 @@
 	//void print(std::multimap<std::string, Item*> eut);
 	void eraseAll();
-	bool checkSlot(Item* item);
+	//bool checkSlot(Item* item);
+	Item* checkSlot(Item* item);
 //	const std::multimap<std::string, Item*>& getEquipment() const { return this->Equipment; }
 	inline std::multimap<std::string, Item*>& getEquipment() {return this->Equipment;}
Index: /code/branches/pickups2/src/orxonox/objects/pickup/Turbo.cc
===================================================================
--- /code/branches/pickups2/src/orxonox/objects/pickup/Turbo.cc	(revision 2388)
+++ /code/branches/pickups2/src/orxonox/objects/pickup/Turbo.cc	(revision 2389)
@@ -39,11 +39,15 @@
 	bool Turbo::pickedUp(Pawn* player)
 	{
+		
 		if(player-> isA(this->getPlayerBaseClass()))
 			{
 			SpaceShip* ship = dynamic_cast <SpaceShip*>(player);
+			COUT(3)<<"Speed:"<< ship->getMaxSpeed()<<std::endl;
 			if(duration_==0 )
 			{	if(addTo(player))
-					{
+					{	
+						COUT(3)<<"ITEM EQUIPPED"<<std::endl;
 						this->setSpeedBoost(ship);
+						COUT(3)<<"Speed:"<< ship->getMaxSpeed()<<std::endl;
 						return true;
 					}
@@ -52,4 +56,5 @@
 			{
 				this->setSpeedBoost(ship);
+				COUT(3)<<"Speed:"<< ship->getMaxSpeed()<<std::endl;
 				return true;
 			}
@@ -67,5 +72,5 @@
 	ship->setMaxRotation( ship->getMaxRotation()-this->rotacc_);
 	ship->setRotAcc( ship->getRotAcc()-this->rotacc_);
-	COUT(3)<<"PickUp Timer expired"<<std::endl;
+	COUT(3)<<"BOOST UNSET"<<std::endl;
 	}
 
@@ -88,5 +93,5 @@
 		if (this->duration_ == 0)
 		{
-			COUT(0) << "dropped" << std::endl;
+			COUT(0) << "ITEM DROPPED" << std::endl;
 			if(remove(player)==true);
 			{
