Index: code/branches/pickup3/src/orxonox/interfaces/PickupCarrier.h
===================================================================
--- code/branches/pickup3/src/orxonox/interfaces/PickupCarrier.h	(revision 6519)
+++ code/branches/pickup3/src/orxonox/interfaces/PickupCarrier.h	(revision 6521)
@@ -46,5 +46,5 @@
 namespace orxonox
 {
-    
+
     class Pickup;
     class HealthPickup;
@@ -175,5 +175,8 @@
             virtual const Vector3& getCarrierPosition(void) = 0;
                             
-            //TODO: Remove.
+            /**
+            @brief Get all Pickupables this PickupCarrier has.
+            @return  Returns the set of all Pickupables this PickupCarrier has.
+            */
             std::set<Pickupable*>& getPickups(void)
                 { return this->pickups_; }
Index: code/branches/pickup3/src/orxonox/interfaces/Pickupable.cc
===================================================================
--- code/branches/pickup3/src/orxonox/interfaces/Pickupable.cc	(revision 6519)
+++ code/branches/pickup3/src/orxonox/interfaces/Pickupable.cc	(revision 6521)
@@ -172,6 +172,44 @@
         
         COUT(4) << "Pickupable (&" << this << ") got picked up by a PickupCarrier (&" << carrier << ")." << std::endl;
+        this->setCarrier(carrier);
         this->setPickedUp(true);
-        this->setCarrier(carrier);
+        return true;
+    }
+    
+    /**
+    @brief
+        Helper method to set the Pickupable to either picked up or not picked up.
+    @param pickedUp
+        The value this->pickedUp_ should be set to.
+    @return
+        Returns true if the pickedUp status was changed, false if not.
+    */
+    bool Pickupable::setPickedUp(bool pickedUp)
+    {
+        if(this->pickedUp_ == pickedUp)
+            return false;
+        
+        COUT(4) << "Pickupable (&" << this << ") set to pickedUp " << pickedUp << "." << std::endl;
+        
+        this->pickedUp_ = pickedUp;
+        this->changedPickedUp();
+        return true;
+    }
+        
+    /**
+    @brief
+        Sets the carrier of the pickup.
+    @param carrier
+        Sets the input PickupCarrier as the carrier of the pickup.
+    */
+    inline bool Pickupable::setCarrier(PickupCarrier* carrier)
+    {
+        if(this->carrier_ == carrier)
+            return false;
+        
+        COUT(4) << "Pickupable (&" << this << ") changed Carrier (& " << carrier << ")." << std::endl;
+        
+        this->carrier_ = carrier;
+        this->changedCarrier();
         return true;
     }
@@ -205,23 +243,4 @@
     }
     
-        
-    /**
-    @brief
-        Sets the carrier of the pickup.
-    @param carrier
-        Sets the input PickupCarrier as the carrier of the pickup.
-    @return
-        Returns true if the carrier was changed, false if not.
-    */
-    bool Pickupable::setCarrier(PickupCarrier* carrier)
-    {
-        if(this->getCarrier() == carrier)
-            return false;
-        
-        this->carrier_ = carrier;
-        this->changedCarrier();
-        return true;
-    }
-    
     /**
     @brief
@@ -230,5 +249,4 @@
         Returns the clone of this pickup as a pointer to a Pickupable.
     */
-    //TODO: Does this work?
     Pickupable* Pickupable::clone(void)
     {
Index: code/branches/pickup3/src/orxonox/interfaces/Pickupable.h
===================================================================
--- code/branches/pickup3/src/orxonox/interfaces/Pickupable.h	(revision 6519)
+++ code/branches/pickup3/src/orxonox/interfaces/Pickupable.h	(revision 6521)
@@ -70,5 +70,16 @@
             */
             virtual void changedUsed(void) {}
-            bool setUsed(bool used); //!< Sets the Pickupable to used or unused, depending on the input.
+            
+            /**
+            @brief Get the carrier of the pickup.
+            @return Returns a pointer to the carrier of the pickup.
+            */
+            inline PickupCarrier* getCarrier(void)
+                { return this->carrier_; }
+            /**
+            @brief Should be called when the pickup has changed its PickupCarrier.
+                   Any Class overwriting this method must call its SUPER function by adding SUPER(Classname, changedCarrier); to their changedCarrier method.
+            */
+            virtual void changedCarrier(void) {}
             
             /**
@@ -78,4 +89,10 @@
             inline bool isPickedUp(void)
                 { return this->pickedUp_; }
+            /**
+            @brief  Should be called when the pickup has transited from picked up to dropped or the other way around.
+                    Any Class overwriting this method must call its SUPER function by adding SUPER(Classname, changedPickedUp); to their changedPickedUp method.
+            */
+            virtual void changedPickedUp(void) {}    
+            
             //TODO: Better private, or protected?
             bool pickedUp(PickupCarrier* carrier); //!< Sets the Pickupable to picked up.
@@ -86,18 +103,4 @@
             bool addTarget(PickupCarrier* target); //!< Add a PickupCarrier as target of this pickup.
             bool addTarget(Identifier* identifier); //!< Add a class, representetd by the input Identifier, as target of this pickup.
-            
-            /**
-            @brief Get the carrier of the pickup.
-            @return Returns a pointer to the carrier of the pickup.
-            */
-            inline PickupCarrier* getCarrier(void)
-                { return this->carrier_; }
-            /**
-            @brief  Should be called when the pickup has transited from picked up to dropped or the other way around.
-                    Any Class overwriting this method must call its SUPER function by adding SUPER(Classname, changedCarrier); to their changedCarrier method.
-            */
-            virtual void changedCarrier(void) {}
-            //TODO: Maybe private?
-            bool setCarrier(PickupCarrier* carrier); //!< Sets the carrier of the pickup.
             
             Pickupable* clone(void); //!< Creates a duplicate of the Pickupable.
@@ -113,4 +116,9 @@
             virtual void destroy(void)
                 { delete this; }
+                
+            //TODO: Make them work as protected.
+            bool setUsed(bool used); //!< Sets the Pickupable to used or unused, depending on the input.
+            bool setPickedUp(bool pickedUp); //!< Helper method to set the Pickupable to either picked up or not picked up.
+            bool setCarrier(PickupCarrier* carrier); //!< Sets the carrier of the pickup.
             
         protected:
@@ -134,10 +142,4 @@
             
         private:
-            /**
-            @brief Helper method to set the Pickupable to either picked up or not picked up.
-            @param pickedUp The value this->pickedUp_ should be set to.
-            */
-            inline void setPickedUp(bool pickedUp)
-                { this->pickedUp_ = pickedUp; }
             
             bool used_; //!< Whether the pickup is currently in use or not.
@@ -151,4 +153,5 @@
     SUPER_FUNCTION(10, Pickupable, changedUsed, false);
     SUPER_FUNCTION(12, Pickupable, changedCarrier, false);
+    SUPER_FUNCTION(13, Pickupable, changedPickedUp, false);
 }
 
