Index: code/branches/pickup3/src/modules/pickup/DroppedPickup.cc
===================================================================
--- code/branches/pickup3/src/modules/pickup/DroppedPickup.cc	(revision 6499)
+++ code/branches/pickup3/src/modules/pickup/DroppedPickup.cc	(revision 6512)
@@ -40,4 +40,7 @@
 namespace orxonox
 {
+    
+    CreateFactory(DroppedPickup);
+    
     /**
     @brief
@@ -63,5 +66,5 @@
         The distance at which the PickupSpawner triggers. Default is 10.
     */
-    DroppedPickup::DroppedPickup(BaseObject* creator, Pickupable* pickup, const Vector3& position, float triggerDistance) : PickupSpawner(creator, pickup, triggerDistance, 0, 1)
+    DroppedPickup::DroppedPickup(BaseObject* creator, Pickupable* pickup, const Vector3& position, float triggerDistance) : PickupSpawner(creator, pickup, triggerDistance, 10, 1)
     {   
         RegisterObject(DroppedPickup);
@@ -70,4 +73,6 @@
         
         this->setPosition(position);
+        this->setActive(false);
+        this->startRespawnTimer();
     }
 
Index: code/branches/pickup3/src/modules/pickup/PickupPrereqs.h
===================================================================
--- code/branches/pickup3/src/modules/pickup/PickupPrereqs.h	(revision 6499)
+++ code/branches/pickup3/src/modules/pickup/PickupPrereqs.h	(revision 6512)
@@ -76,4 +76,5 @@
     //items
     class HealthPickup;
+    class TestPickup;
     
 }
Index: code/branches/pickup3/src/modules/pickup/PickupRepresentation.cc
===================================================================
--- code/branches/pickup3/src/modules/pickup/PickupRepresentation.cc	(revision 6499)
+++ code/branches/pickup3/src/modules/pickup/PickupRepresentation.cc	(revision 6512)
@@ -154,9 +154,14 @@
     {
         StaticEntity* representation = new StaticEntity(spawner);
-        //TODO: Nicer...
-        Billboard* billboard = new Billboard(spawner);
-        billboard->setColour(ColourValue(1.0, 0.0, 0.0));
-        billboard->setMaterial("Examples/Flare");
-        representation->attach(billboard);
+        Billboard* sphere = new Billboard(spawner);
+        sphere->setColour(ColourValue(0.95, 0.85, 0.27));
+        sphere->setMaterial("Sphere2");
+        sphere->setScale(0.1);
+        Billboard* icon = new Billboard(spawner);
+        icon->setColour(ColourValue(0.89, 0.79, 0.08));
+        icon->setMaterial("Asterix");
+        icon->setScale(0.5);
+        sphere->attach(icon);
+        representation->attach(sphere);
         return representation;
     }
Index: code/branches/pickup3/src/modules/pickup/PickupSpawner.cc
===================================================================
--- code/branches/pickup3/src/modules/pickup/PickupSpawner.cc	(revision 6499)
+++ code/branches/pickup3/src/modules/pickup/PickupSpawner.cc	(revision 6512)
@@ -216,5 +216,5 @@
         {
             //TODO: Nicer? Does this even work?
-            this->respawnTimer_.setTimer(this->respawnTime_, false, createExecutor(createFunctor(&PickupSpawner::respawnTimerCallback, this)));
+            this->startRespawnTimer();
 
             this->setActive(false);
@@ -227,4 +227,13 @@
             this->destroy();
         }
+    }
+    
+    /**
+    @brief
+        Starts the respawn timer.
+    */
+    void PickupSpawner::startRespawnTimer(void)
+    {
+        this->respawnTimer_.setTimer(this->respawnTime_, false, createExecutor(createFunctor(&PickupSpawner::respawnTimerCallback, this)));
     }
     
Index: code/branches/pickup3/src/modules/pickup/PickupSpawner.h
===================================================================
--- code/branches/pickup3/src/modules/pickup/PickupSpawner.h	(revision 6499)
+++ code/branches/pickup3/src/modules/pickup/PickupSpawner.h	(revision 6512)
@@ -101,4 +101,6 @@
         protected:
             void decrementSpawnsRemaining(void); //!< Decrements the number of remaining spawns.
+                        
+            void startRespawnTimer(void);
             
             virtual Pickupable* getPickup(void); //!< Creates a new Pickupable.
Index: code/branches/pickup3/src/modules/pickup/items/CMakeLists.txt
===================================================================
--- code/branches/pickup3/src/modules/pickup/items/CMakeLists.txt	(revision 6499)
+++ code/branches/pickup3/src/modules/pickup/items/CMakeLists.txt	(revision 6512)
@@ -1,3 +1,4 @@
 ADD_SOURCE_FILES(PICKUP_SRC_FILES
   HealthPickup.cc
+  TestPickup.cc
 )
Index: code/branches/pickup3/src/modules/pickup/items/TestPickup.cc
===================================================================
--- code/branches/pickup3/src/modules/pickup/items/TestPickup.cc	(revision 6512)
+++ code/branches/pickup3/src/modules/pickup/items/TestPickup.cc	(revision 6512)
@@ -0,0 +1,153 @@
+/*
+ *   ORXONOX - the hottest 3D action shooter ever to exist
+ *                    > www.orxonox.net <
+ *
+ *
+ *   License notice:
+ *
+ *   This program is free software; you can redistribute it and/or
+ *   modify it under the terms of the GNU General Public License
+ *   as published by the Free Software Foundation; either version 2
+ *   of the License, or (at your option) any later version.
+ *
+ *   This program is distributed in the hope that it will be useful,
+ *   but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *   GNU General Public License for more details.
+ *
+ *   You should have received a copy of the GNU General Public License
+ *   along with this program; if not, write to the Free Software
+ *   Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
+ *
+ *   Author:
+ *      Damian 'Mozork' Frick
+ *   Co-authors:
+ *      ...
+ *
+*/
+
+#include "core/CoreIncludes.h"
+#include "core/XMLPort.h"
+#include "interfaces/PickupCarrier.h"
+#include "worldentities/pawns/Pawn.h"
+#include "pickup/PickupIdentifier.h"
+
+#include "TestPickup.h"
+
+namespace orxonox {
+ 
+    CreateFactory(TestPickup);
+    
+    /*static*/ const std::string TestPickup::testTypeNone_s = "none";
+    /*static*/ const std::string TestPickup::testTypeUse_s = "use";
+    /*static*/ const std::string TestPickup::testTypeDrop_s = "drop";
+    
+    TestPickup::TestPickup(BaseObject* creator) : Pickup(creator)
+    {
+        RegisterObject(TestPickup);
+        
+        this->addTarget(ClassIdentifier<Pawn>::getIdentifier());
+        this->setActivationTypeDirect(pickupActivationType::immediate);
+        this->setDurationTypeDirect(pickupDurationType::once);
+        this->testType_ = pickupTestType::none;
+    }
+    
+    TestPickup::~TestPickup()
+    {
+        
+    }
+    
+    void TestPickup::initializeIdentifier(void)
+    {
+        std::string val = this->getTestType();
+        std::string type = "testType";
+        this->pickupIdentifier_->addParameter(type, val);
+    }
+    
+    void TestPickup::XMLPort(Element& xmlelement, orxonox::XMLPort::Mode mode)
+    {
+        SUPER(TestPickup, XMLPort, xmlelement, mode);
+        
+        XMLPortParam(TestPickup, "testType", setTestType, getTestType, xmlelement, mode);
+        
+        this->initializeIdentifier();
+    }
+    
+    void TestPickup::changedUsed(void)
+    {
+        SUPER(TestPickup, changedUsed);
+        
+        if(this->isUsed())
+        {
+            PickupCarrier* carrier = this->getCarrier();
+            if(this->getTestTypeDirect() != pickupTestType::none && carrier != NULL)
+            {
+                std::set<Pickupable*> pickups = carrier->getPickups();
+                for(std::set<Pickupable*>::iterator it = pickups.begin(); it != pickups.end(); it++)
+                {
+                    Pickup* pickup = dynamic_cast<Pickup*>(*it);
+                    if(this->getTestTypeDirect() == pickupTestType::use)
+                    {
+                        if(pickup != NULL && pickup != this && pickup->isOnUse() && !pickup->isUsed())
+                        {
+                            pickup->setUsed(true);
+                        }
+                    }
+                    if(this->getTestTypeDirect() == pickupTestType::drop)
+                    {
+                        if(pickup != NULL && pickup != this)
+                        {
+                            carrier->drop(pickup);
+                        }
+                    }
+                }
+            }
+            this->destroy();
+        }
+    }
+    
+    const std::string& TestPickup::getTestType(void)
+    {
+        switch(this->getTestTypeDirect())
+        {
+            case pickupTestType::none:
+                return TestPickup::testTypeNone_s;
+            case pickupTestType::use:
+                return TestPickup::testTypeUse_s;
+            case pickupTestType::drop:
+                return TestPickup::testTypeDrop_s;
+            default:
+                return BLANKSTRING;
+        }
+    }
+    
+    void TestPickup::setTestType(const std::string& type)
+    {
+        if(type == TestPickup::testTypeNone_s)
+        {
+            this->setTestTypeDirect(pickupTestType::none);
+        }
+        else if(type == TestPickup::testTypeUse_s)
+        {
+            this->setTestTypeDirect(pickupTestType::use);
+        }
+        else if(type == TestPickup::testTypeDrop_s)
+        {
+            this->setTestTypeDirect(pickupTestType::drop);
+        }
+    }
+    
+    void TestPickup::clone(OrxonoxClass*& item)
+    {
+        if(item == NULL)
+            item = new TestPickup(this);
+        
+        SUPER(TestPickup, clone, item);
+        
+        TestPickup* pickup = dynamic_cast<TestPickup*>(item);
+        pickup->setTestTypeDirect(this->getTestTypeDirect());
+        
+        pickup->initializeIdentifier();
+    }
+    
+}
Index: code/branches/pickup3/src/modules/pickup/items/TestPickup.h
===================================================================
--- code/branches/pickup3/src/modules/pickup/items/TestPickup.h	(revision 6512)
+++ code/branches/pickup3/src/modules/pickup/items/TestPickup.h	(revision 6512)
@@ -0,0 +1,85 @@
+/*
+ *   ORXONOX - the hottest 3D action shooter ever to exist
+ *                    > www.orxonox.net <
+ *
+ *
+ *   License notice:
+ *
+ *   This program is free software; you can redistribute it and/or
+ *   modify it under the terms of the GNU General Public License
+ *   as published by the Free Software Foundation; either version 2
+ *   of the License, or (at your option) any later version.
+ *
+ *   This program is distributed in the hope that it will be useful,
+ *   but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *   GNU General Public License for more details.
+ *
+ *   You should have received a copy of the GNU General Public License
+ *   along with this program; if not, write to the Free Software
+ *   Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
+ *
+ *   Author:
+ *      Damian 'Mozork' Frick
+ *   Co-authors:
+ *      ...
+ *
+*/
+
+#ifndef _TestPickup_H__
+#define _TestPickup_H__
+
+#include "pickup/PickupPrereqs.h"
+
+#include "pickup/Pickup.h"
+
+namespace orxonox {
+
+    namespace pickupTestType
+    {
+        enum Value
+        {
+            none,
+            use,
+            drop
+        };
+    }
+    
+    class _PickupExport TestPickup : public Pickup
+    {
+        friend class PickupCarrier;
+        
+        public:
+            TestPickup(BaseObject* creator);
+            virtual ~TestPickup();
+            
+            virtual void XMLPort(Element& xmlelement, orxonox::XMLPort::Mode mode); //!< Method for creating a HealthPickup object through XML.
+            
+            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.
+            
+            inline pickupTestType::Value getTestTypeDirect(void)
+                { return this->testType_; }
+            const std::string& getTestType(void);
+            
+        protected:
+            void initializeIdentifier(void); //!< Initializes the PickupIdentifier of this pickup.
+            
+            inline void setTestTypeDirect(pickupTestType::Value type)
+                { this->testType_ =  type; }
+            void setTestType(const std::string& type);
+            
+        private:
+            void initialize(void); //!< Initializes the member variables.
+            
+            pickupTestType::Value testType_;
+            static const std::string testTypeNone_s;
+            static const std::string testTypeUse_s;
+            static const std::string testTypeDrop_s;
+            
+        
+    };
+
+}
+
+#endif // _TestPickup_H__
Index: code/branches/pickup3/src/orxonox/interfaces/PickupCarrier.h
===================================================================
--- code/branches/pickup3/src/orxonox/interfaces/PickupCarrier.h	(revision 6499)
+++ code/branches/pickup3/src/orxonox/interfaces/PickupCarrier.h	(revision 6512)
@@ -40,4 +40,5 @@
 #include <set>
 #include "Pickupable.h"
+#include "core/Identifier.h"
 
 #include "core/OrxonoxClass.h"
@@ -45,4 +46,8 @@
 namespace orxonox
 {
+    
+    class Pickup;
+    class HealthPickup;
+    class TestPickup;
 
     /**
@@ -55,4 +60,8 @@
     {
         friend class Pickupable; //!< The Pickupable has full acces to its PickupCarrier.
+        //TODO: Ugly workaround.
+        friend class Pickup;
+        friend class HealthPickup;
+        friend class TestPickup;
         
         public:
@@ -69,5 +78,8 @@
                     bool pickedUp = this->pickups_.insert(pickup).second;
                     if(pickedUp)
+                    {
+                        COUT(4) << "Picked up Pickupable " << pickup->getIdentifier()->getName() << "(&" << pickup << ")." << std::endl;
                         pickup->pickedUp(this);
+                    }
                     return pickedUp;
                 }
@@ -81,10 +93,11 @@
             bool drop(Pickupable* pickup, bool drop = true)
                 { 
-                   bool dropped = this->pickups_.erase(pickup) == 1;
-                   if(dropped && drop)
-                   {
-                       pickup->dropped();
-                   }
-                   return dropped;
+                    bool dropped = this->pickups_.erase(pickup) == 1;
+                    if(dropped && drop)
+                    {
+                        COUT(4) << "Dropping Pickupable " << pickup->getIdentifier()->getName() << "(&" << pickup << ")." << std::endl;
+                        pickup->dropped();
+                    }
+                    return dropped;
                 }
                 
@@ -161,4 +174,8 @@
             */
             virtual const Vector3& getCarrierPosition(void) = 0;
+                            
+            //TODO: Remove.
+            std::set<Pickupable*>& getPickups(void)
+                { return this->pickups_; }
         
         private:
Index: code/branches/pickup3/src/orxonox/interfaces/Pickupable.cc
===================================================================
--- code/branches/pickup3/src/orxonox/interfaces/Pickupable.cc	(revision 6499)
+++ code/branches/pickup3/src/orxonox/interfaces/Pickupable.cc	(revision 6512)
@@ -198,5 +198,7 @@
         //TODO: possible problem.
         if(!created)
+        {
             this->destroy();
+        }
         
         return true;
