Index: code/branches/presentation3/src/modules/pickup/items/DronePickup.cc
===================================================================
--- code/branches/presentation3/src/modules/pickup/items/DronePickup.cc	(revision 7150)
+++ code/branches/presentation3/src/modules/pickup/items/DronePickup.cc	(revision 7162)
@@ -131,5 +131,5 @@
                 Pawn* pawn = this->carrierToPawnHelper();
                 if(pawn == NULL) //!< If the PickupCarrier is no Pawn, then this pickup is useless and therefore is destroyed.
-                    this->destroy();
+                    this->Pickupable::destroy();
 
                 //Attach to pawn
@@ -155,5 +155,5 @@
             if(this->isOnce() || (this->isContinuous() ))
             {
-                this->destroy();
+                this->Pickupable::destroy();
             }
         }
Index: code/branches/presentation3/src/modules/pickup/items/HealthPickup.cc
===================================================================
--- code/branches/presentation3/src/modules/pickup/items/HealthPickup.cc	(revision 7150)
+++ code/branches/presentation3/src/modules/pickup/items/HealthPickup.cc	(revision 7162)
@@ -143,5 +143,5 @@
             Pawn* pawn = this->carrierToPawnHelper();
             if(pawn == NULL) //!< If the PickupCarrier is no Pawn, then this pickup is useless and therefore is destroyed.
-                this->destroy();
+                this->Pickupable::destroy();
 
             //! Calculate the health that is added this tick.
@@ -191,5 +191,5 @@
 
         //! If the pickup is not picked up nothing must be done.
-        if(!this->isPickedUp())
+        if(!this->isPickedUp()) //TODO: Needed?
             return;
 
@@ -201,5 +201,5 @@
                 Pawn* pawn = this->carrierToPawnHelper();
                 if(pawn == NULL) //!< If the PickupCarrier is no Pawn, then this pickup is useless and therefore is destroyed.
-                    this->destroy();
+                    this->Pickupable::destroy();
 
                 float health = 0;
@@ -241,5 +241,5 @@
                 {
                     COUT(1) << "Something went horribly wrong in Health Pickup. PickupCarrier is no Pawn." << std::endl;
-                    this->destroy();
+                    this->Pickupable::destroy();
                     return;
                 }
@@ -256,5 +256,5 @@
             if(this->isOnce() || (this->isContinuous() && this->getHealth() == 0))
             {
-                this->destroy();
+                this->Pickupable::destroy();
             }
         }
Index: code/branches/presentation3/src/modules/pickup/items/InvisiblePickup.cc
===================================================================
--- code/branches/presentation3/src/modules/pickup/items/InvisiblePickup.cc	(revision 7150)
+++ code/branches/presentation3/src/modules/pickup/items/InvisiblePickup.cc	(revision 7162)
@@ -133,5 +133,5 @@
             if(!this->getTimer()->isActive() && this->getTimer()->getRemainingTime() == this->getDuration())
             {
-                this->destroy();
+                this->Pickupable::destroy();
             }
             else
Index: code/branches/presentation3/src/modules/pickup/items/MetaPickup.cc
===================================================================
--- code/branches/presentation3/src/modules/pickup/items/MetaPickup.cc	(revision 7150)
+++ code/branches/presentation3/src/modules/pickup/items/MetaPickup.cc	(revision 7162)
@@ -34,4 +34,5 @@
 #include "core/CoreIncludes.h"
 #include "core/XMLPort.h"
+#include "worldentities/pawns/Pawn.h"
 #include "interfaces/PickupCarrier.h"
 #include "pickup/PickupIdentifier.h"
@@ -47,4 +48,6 @@
     /*static*/ const std::string MetaPickup::metaTypeUse_s = "use";
     /*static*/ const std::string MetaPickup::metaTypeDrop_s = "drop";
+    /*static*/ const std::string MetaPickup::metaTypeDestroy_s = "destroy";
+    /*static*/ const std::string MetaPickup::metaTypeDestroyCarrier_s = "destroyCarrier";
 
     /**
@@ -120,6 +123,12 @@
             if(this->getMetaTypeDirect() != pickupMetaType::none && carrier != NULL)
             {
+                if(this->getMetaTypeDirect() == pickupMetaType::destroyCarrier)
+                {
+                    Pawn* pawn = orxonox_cast<Pawn*>(carrier);
+                    pawn->kill();
+                    return;
+                }
                 std::set<Pickupable*> pickups = carrier->getPickups();
-                //! Set all Pickupables carried by the PickupCarrier either to used or drop them, depending o the meta type.
+                //! Set all Pickupables carried by the PickupCarrier either to used or drop them, depending on the meta type.
                 for(std::set<Pickupable*>::iterator it = pickups.begin(); it != pickups.end(); it++)
                 {
@@ -136,10 +145,17 @@
                         if(pickup != NULL && pickup != this)
                         {
-                            pickup->drop(carrier);
+                            pickup->drop();
+                        }
+                    }
+                    if(this->getMetaTypeDirect() == pickupMetaType::destroy)
+                    {
+                        if(pickup != NULL && pickup != this)
+                        {
+                            pickup->Pickupable::destroy();
                         }
                     }
                 }
             }
-            this->destroy();
+            this->Pickupable::destroy();
         }
     }
@@ -180,4 +196,8 @@
             case pickupMetaType::drop:
                 return MetaPickup::metaTypeDrop_s;
+            case pickupMetaType::destroy:
+                return MetaPickup::metaTypeDestroy_s;
+            case pickupMetaType::destroyCarrier:
+                return MetaPickup::metaTypeDestroyCarrier_s;
             default:
                 return BLANKSTRING;
@@ -205,4 +225,14 @@
             this->setMetaTypeDirect(pickupMetaType::drop);
         }
+        else if(type == MetaPickup::metaTypeDestroy_s)
+        {
+            this->setMetaTypeDirect(pickupMetaType::destroy);
+        }
+        else if(type == MetaPickup::metaTypeDestroyCarrier_s)
+        {
+            this->setMetaTypeDirect(pickupMetaType::destroyCarrier);
+        }
+        else
+            COUT(2) << "Invalid metaType '" << type << "' in MetaPickup." << std::endl;
     }
 
Index: code/branches/presentation3/src/modules/pickup/items/MetaPickup.h
===================================================================
--- code/branches/presentation3/src/modules/pickup/items/MetaPickup.h	(revision 7150)
+++ code/branches/presentation3/src/modules/pickup/items/MetaPickup.h	(revision 7162)
@@ -48,5 +48,7 @@
             none,
             use,
-            drop
+            drop,
+            destroy,
+            destroyCarrier
         };
     }
@@ -54,5 +56,9 @@
     /**
     @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'.
+        The MetaPickup is a pickup that can, depending on the parameter 'metaType', do different things. If the 'metaType' is set to
+        1) 'use', all the pickups, the PickupCarrier has, are immediately set to used upon pickup of the MetaPickup.
+        2) 'drop', all the pickups, the PickupCarrier has, are immediately dropped upon pickup of the MetaPickup.
+        3) 'destroy', all the pickups, the PickupCarrier has, are immediately destroyed upon pickup of the MetaPickup.
+        4) 'destroyCarrier', the PickupCarrier is immediately destroyed upon pickup of the MetaPickup.
     @author
         Damian 'Mozork' Frick
@@ -98,4 +104,6 @@
             static const std::string metaTypeUse_s;
             static const std::string metaTypeDrop_s;
+            static const std::string metaTypeDestroy_s;
+            static const std::string metaTypeDestroyCarrier_s;
 
 
Index: code/branches/presentation3/src/modules/pickup/items/ShieldPickup.cc
===================================================================
--- code/branches/presentation3/src/modules/pickup/items/ShieldPickup.cc	(revision 7150)
+++ code/branches/presentation3/src/modules/pickup/items/ShieldPickup.cc	(revision 7162)
@@ -155,5 +155,5 @@
         Pawn* pawn = this->carrierToPawnHelper();
         if(pawn == NULL)
-            this->destroy();
+            this->Pickupable::destroy();
 
         //! If the pickup has transited to used.
@@ -181,5 +181,5 @@
                 if(!this->getTimer()->isActive() && this->getTimer()->getRemainingTime() == this->getDuration())
                 {
-                    this->destroy();
+                    this->Pickupable::destroy();
                 }
                 else
Index: code/branches/presentation3/src/modules/pickup/items/SpeedPickup.cc
===================================================================
--- code/branches/presentation3/src/modules/pickup/items/SpeedPickup.cc	(revision 7150)
+++ code/branches/presentation3/src/modules/pickup/items/SpeedPickup.cc	(revision 7162)
@@ -136,5 +136,5 @@
         Engine* engine = this->carrierToEngineHelper();
         if(engine == NULL) //!< If the PickupCarrier is no Engine, then this pickup is useless and therefore is destroyed.
-            this->destroy();
+            this->Pickupable::destroy();
 
         //! If the pickup has transited to used.
@@ -161,5 +161,5 @@
                 if(!this->getTimer()->isActive() && this->getTimer()->getRemainingTime() == this->getDuration())
                 {
-                    this->destroy();
+                    this->Pickupable::destroy();
                 }
                 else
