Index: code/branches/pickup3/src/libraries/core/OrxonoxClass.h
===================================================================
--- code/branches/pickup3/src/libraries/core/OrxonoxClass.h	(revision 6496)
+++ code/branches/pickup3/src/libraries/core/OrxonoxClass.h	(revision 6497)
@@ -109,5 +109,5 @@
             bool isDirectParentOf(const OrxonoxClass* object);
             
-            virtual void clone(OrxonoxClass* item) {}
+            virtual void clone(OrxonoxClass*& item) {}
 
             inline unsigned int getReferenceCount() const
Index: code/branches/pickup3/src/modules/pickup/Pickup.cc
===================================================================
--- code/branches/pickup3/src/modules/pickup/Pickup.cc	(revision 6496)
+++ code/branches/pickup3/src/modules/pickup/Pickup.cc	(revision 6497)
@@ -188,4 +188,5 @@
         SUPER(Pickup, changedCarrier);
         
+        COUT(1) << "Changed Carrier: " << this->isPickedUp() << this->isImmediate() << std::endl;
         //! Sets the Pickup to used if the Pickup has activation type 'immediate' and gets picked up.
         if(this->getCarrier() != NULL && this->isPickedUp() && this->isImmediate())
@@ -201,5 +202,5 @@
         Returns the clone of this pickup as a pointer to a Pickupable.
     */
-    void Pickup::clone(OrxonoxClass* item)
+    void Pickup::clone(OrxonoxClass*& item)
     {
         if(item == NULL)
Index: code/branches/pickup3/src/modules/pickup/Pickup.h
===================================================================
--- code/branches/pickup3/src/modules/pickup/Pickup.h	(revision 6496)
+++ code/branches/pickup3/src/modules/pickup/Pickup.h	(revision 6497)
@@ -119,5 +119,5 @@
             virtual void changedCarrier(void); //!< Should be called when the pickup has transited from picked up to dropped or the other way around.
                                     
-            virtual void clone(OrxonoxClass* item); //!< Creates a duplicate of the Pickup.
+            virtual void clone(OrxonoxClass*& item); //!< Creates a duplicate of the Pickup.
                 
         protected:
Index: code/branches/pickup3/src/modules/pickup/PickupCollection.cc
===================================================================
--- code/branches/pickup3/src/modules/pickup/PickupCollection.cc	(revision 6496)
+++ code/branches/pickup3/src/modules/pickup/PickupCollection.cc	(revision 6497)
@@ -161,5 +161,5 @@
     
     //TODO: Steal description from Pickupable.
-    void PickupCollection::clone(OrxonoxClass* item)
+    void PickupCollection::clone(OrxonoxClass*& item)
     {
         if(item == NULL)
Index: code/branches/pickup3/src/modules/pickup/PickupCollection.h
===================================================================
--- code/branches/pickup3/src/modules/pickup/PickupCollection.h	(revision 6496)
+++ code/branches/pickup3/src/modules/pickup/PickupCollection.h	(revision 6497)
@@ -62,5 +62,5 @@
             virtual void changedCarrier(void);
             
-            virtual void clone(OrxonoxClass* item);
+            virtual void clone(OrxonoxClass*& item);
             
             virtual const PickupIdentifier* getPickupIdentifier(void);
Index: code/branches/pickup3/src/modules/pickup/items/HealthPickup.cc
===================================================================
--- code/branches/pickup3/src/modules/pickup/items/HealthPickup.cc	(revision 6496)
+++ code/branches/pickup3/src/modules/pickup/items/HealthPickup.cc	(revision 6497)
@@ -280,5 +280,5 @@
         A pointer to the Orxonox class.
     */
-    void HealthPickup::clone(OrxonoxClass* item)
+    void HealthPickup::clone(OrxonoxClass*& item)
     {
         if(item == NULL)
Index: code/branches/pickup3/src/modules/pickup/items/HealthPickup.h
===================================================================
--- code/branches/pickup3/src/modules/pickup/items/HealthPickup.h	(revision 6496)
+++ code/branches/pickup3/src/modules/pickup/items/HealthPickup.h	(revision 6497)
@@ -74,5 +74,5 @@
             
             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.
+            virtual void clone(OrxonoxClass*& item); //!< Creates a duplicate of the input OrxonoxClass.
             
             /**
Index: code/branches/pickup3/src/orxonox/interfaces/Pickupable.cc
===================================================================
--- code/branches/pickup3/src/orxonox/interfaces/Pickupable.cc	(revision 6496)
+++ code/branches/pickup3/src/orxonox/interfaces/Pickupable.cc	(revision 6497)
@@ -172,6 +172,6 @@
         
         COUT(4) << "Pickupable (&" << this << ") got picked up by a PickupCarrier (&" << carrier << ")." << std::endl;
+        this->setPickedUp(true);
         this->setCarrier(carrier);
-        this->setPickedUp(true);
         return true;
     }
@@ -231,6 +231,8 @@
     Pickupable* Pickupable::clone(void)
     {
-        Pickupable* pickup = NULL;
-        this->clone(pickup);
+        OrxonoxClass* item = NULL;
+        this->clone(item);
+        
+        Pickupable* pickup = dynamic_cast<Pickupable*>(item);
         
         COUT(4) << "Pickupable (&" << this << ") cloned. Clone is new Pickupable (&" << pickup << ")." << std::endl;
@@ -246,5 +248,5 @@
     */
     //TODO: Specify how the implementation must be done in detail.
-    void Pickupable::clone(OrxonoxClass* item)
+    void Pickupable::clone(OrxonoxClass*& item)
     {
         SUPER(Pickupable, clone, item);
Index: code/branches/pickup3/src/orxonox/interfaces/Pickupable.h
===================================================================
--- code/branches/pickup3/src/orxonox/interfaces/Pickupable.h	(revision 6496)
+++ code/branches/pickup3/src/orxonox/interfaces/Pickupable.h	(revision 6497)
@@ -102,5 +102,5 @@
             
             Pickupable* clone(void); //!< Creates a duplicate of the Pickupable.
-            virtual void clone(OrxonoxClass* item); //!< Creates a duplicate of the input OrxonoxClass.
+            virtual void clone(OrxonoxClass*& item); //!< Creates a duplicate of the input OrxonoxClass.
             
             /**
