Index: /code/branches/pickup3/data/levels/includes/pickups.oxi
===================================================================
--- /code/branches/pickup3/data/levels/includes/pickups.oxi	(revision 6518)
+++ /code/branches/pickup3/data/levels/includes/pickups.oxi	(revision 6519)
@@ -38,2 +38,12 @@
     </pickup>
 </PickupRepresentation>
+
+<PickupRepresentation
+    name = "Double Pickup"
+    description = "Does stuff."
+    spawnerTemplate = "crazyhealthpickupRepresentation"
+>
+    <pickup>
+        <PickupCollection template=doublepickup />
+    </pickup>
+</PickupRepresentation>
Index: /code/branches/pickup3/data/levels/pickup.oxw
===================================================================
--- /code/branches/pickup3/data/levels/pickup.oxw	(revision 6518)
+++ /code/branches/pickup3/data/levels/pickup.oxw	(revision 6519)
@@ -37,5 +37,5 @@
     <PickupSpawner position="-50,0,-100" triggerDistance="10" respawnTime="30" maxSpawnedItems="10">
         <pickup>
-            <HealthPickup health=50 healthRate=5 durationType=continuous activationType=onUse healthType=limited />
+            <HealthPickup health=50 healthRate=5 durationType=continuous activationType=onUse healthType=permanent />
         </pickup>
     </PickupSpawner>
@@ -64,4 +64,10 @@
         </pickup>
     </PickupSpawner>
+    
+    <PickupSpawner position="75,0,-100" triggerDistance="10" respawnTime="30" maxSpawnedItems="10">
+        <pickup>
+            <PickupCollection template=doublepickup />
+        </pickup>
+    </PickupSpawner>
 
     <!--PickupSpawner position="100,100,100" triggerDistance="10" respawnTime="30" maxSpawnedItems="10">
Index: /code/branches/pickup3/data/levels/templates/pickup_representation_templates.oxt
===================================================================
--- /code/branches/pickup3/data/levels/templates/pickup_representation_templates.oxt	(revision 6518)
+++ /code/branches/pickup3/data/levels/templates/pickup_representation_templates.oxt	(revision 6519)
@@ -98,2 +98,12 @@
   />
 </Template>
+
+<Template name=doublepickup>
+    <PickupCollection>
+        <pickupables>
+            <HealthPickup template=smallhealthpickup />
+            <HealthPickup health=50 healthRate=5 durationType=continuous activationType=immediate healthType=limited />
+        </pickupables>
+    </PickupCollection>
+</Template>
+    
Index: /code/branches/pickup3/src/modules/pickup/PickupCollection.cc
===================================================================
--- /code/branches/pickup3/src/modules/pickup/PickupCollection.cc	(revision 6518)
+++ /code/branches/pickup3/src/modules/pickup/PickupCollection.cc	(revision 6519)
@@ -45,4 +45,6 @@
 {
  
+    CreateFactory(PickupCollection);
+
     /**
     @brief
@@ -77,6 +79,5 @@
         SUPER(PickupCollection, XMLPort, xmlelement, mode);
         
-        //TODO: Does this work? Problem could be, that Pickupable itself cannot be instantiated through XML, doubt that, though.
-        XMLPortObject(PickupCollection, PickupCollection, "pickupables", addPickupable, getPickupable, xmlelement, mode);
+        XMLPortObject(PickupCollection, Pickupable, "pickupables", addPickupable, getPickupable, xmlelement, mode);
         
         this->initializeIdentifier();
@@ -103,5 +104,5 @@
     bool PickupCollection::createSpawner(const Vector3& position)
     {
-        DroppedPickup::DroppedPickup(this, this, position);
+        new DroppedPickup(this, this, position);
         return true;
     }
@@ -178,4 +179,15 @@
     }
     
+    bool PickupCollection::isTarget(Identifier* identifier) const
+    {
+        for(std::vector<Pickupable*>::const_iterator it = this->pickups_.begin(); it != this->pickups_.end(); it++)
+        {
+            if(!(*it)->isTarget(identifier))
+                return false;
+        }
+        
+        return true;
+    }
+    
     const PickupIdentifier* PickupCollection::getPickupIdentifier(void)
     {
Index: /code/branches/pickup3/src/modules/pickup/PickupCollection.h
===================================================================
--- /code/branches/pickup3/src/modules/pickup/PickupCollection.h	(revision 6518)
+++ /code/branches/pickup3/src/modules/pickup/PickupCollection.h	(revision 6519)
@@ -47,5 +47,4 @@
         Damian 'Mozork' Frick
     */
-    //TODO: Isn't private inheritance sufficient?
     class _PickupExport PickupCollection : public Pickupable, public BaseObject
     {
@@ -63,4 +62,6 @@
             
             virtual void clone(OrxonoxClass*& item);
+            
+            virtual bool isTarget(Identifier* identifier) const;
             
             virtual const PickupIdentifier* getPickupIdentifier(void);
Index: /code/branches/pickup3/src/modules/pickup/PickupCollectionIdentifier.cc
===================================================================
--- /code/branches/pickup3/src/modules/pickup/PickupCollectionIdentifier.cc	(revision 6518)
+++ /code/branches/pickup3/src/modules/pickup/PickupCollectionIdentifier.cc	(revision 6519)
@@ -50,5 +50,5 @@
         if(collectionIdentifier == NULL)
         {
-            return this->compare(identifier);
+            return this->PickupIdentifier::compare(identifier);
         }
         
Index: /code/branches/pickup3/src/modules/pickup/PickupCollectionIdentifier.h
===================================================================
--- /code/branches/pickup3/src/modules/pickup/PickupCollectionIdentifier.h	(revision 6518)
+++ /code/branches/pickup3/src/modules/pickup/PickupCollectionIdentifier.h	(revision 6519)
@@ -38,5 +38,5 @@
 {
 
-    class PickupCollectionIdentifier : public PickupIdentifier
+    class _PickupExport PickupCollectionIdentifier : public PickupIdentifier
     {
         
Index: /code/branches/pickup3/src/modules/pickup/items/MetaPickup.cc
===================================================================
--- /code/branches/pickup3/src/modules/pickup/items/MetaPickup.cc	(revision 6518)
+++ /code/branches/pickup3/src/modules/pickup/items/MetaPickup.cc	(revision 6519)
@@ -27,4 +27,9 @@
 */
 
+/**
+    @file
+    @brief Implementation of the MetaPickup class.
+*/
+
 #include "core/CoreIncludes.h"
 #include "core/XMLPort.h"
@@ -42,4 +47,8 @@
     /*static*/ const std::string MetaPickup::metaTypeDrop_s = "drop";
     
+    /**
+    @brief
+        Constructor. 
+    */
     MetaPickup::MetaPickup(BaseObject* creator) : Pickup(creator)
     {
Index: /code/branches/pickup3/src/modules/pickup/items/MetaPickup.h
===================================================================
--- /code/branches/pickup3/src/modules/pickup/items/MetaPickup.h	(revision 6518)
+++ /code/branches/pickup3/src/modules/pickup/items/MetaPickup.h	(revision 6519)
@@ -27,4 +27,9 @@
 */
 
+/**
+    @file
+    @brief Definition of the MetaPickup class.
+*/
+
 #ifndef _MetaPickup_H__
 #define _MetaPickup_H__
@@ -36,4 +41,5 @@
 namespace orxonox {
 
+    //! The meta type, deciding what the pickup does exactly.
     namespace pickupMetaType
     {
@@ -46,7 +52,12 @@
     }
     
+    /**
+    @brief
+        The MetaPickup is a pickup that can, depending on the parameters, either drop all pickups of the PickupCarrier that picks it up, or use all the unused pickups of the PickupCarrier, that picks it up. The parameter to set for this is the metaType and it can be used with the values 'none', 'drop' and 'use'.
+    @author
+        Damian 'Mozork' Frick
+    */
     class _PickupExport MetaPickup : public Pickup
     {
-        friend class PickupCarrier;
         
         public:
Index: /code/branches/pickup3/src/orxonox/interfaces/Pickupable.h
===================================================================
--- /code/branches/pickup3/src/orxonox/interfaces/Pickupable.h	(revision 6518)
+++ /code/branches/pickup3/src/orxonox/interfaces/Pickupable.h	(revision 6519)
@@ -83,5 +83,5 @@
             
             bool isTarget(const PickupCarrier* carrier) const; //!< Get whether the given PickupCarrier is a target of this pickup.
-            bool isTarget(Identifier* identifier) const; //!< Get whether a given class, represented by the input Identifier, is a target of this pickup.
+            virtual bool isTarget(Identifier* identifier) const; //!< Get whether a given class, represented by the input Identifier, is a target of this pickup.
             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.
