Index: code/branches/HUD_HS16/src/modules/overlays/hud/HUDPickupItem.cc
===================================================================
--- code/branches/HUD_HS16/src/modules/overlays/hud/HUDPickupItem.cc	(revision 11314)
+++ code/branches/HUD_HS16/src/modules/overlays/hud/HUDPickupItem.cc	(revision 11323)
@@ -44,5 +44,4 @@
 {
     RegisterClass(HUDPickupItem);
-    Ogre::PanelOverlayElement* overlayElement_;
 
     HUDPickupItem::HUDPickupItem(Context* context) : OrxonoxOverlay(context)
@@ -50,6 +49,9 @@
         RegisterObject(HUDPickupItem);
 
-        overlayElement_ = static_cast<Ogre::PanelOverlayElement* >(Ogre::OverlayManager::getSingleton().createOverlayElement("Panel", "HUDPickupItem" + getUniqueNumberString()));
-        
+        std::string name = "HUDPickupItem" + getUniqueNumberString();
+
+        overlayElement_ = static_cast<Ogre::PanelOverlayElement* >(Ogre::OverlayManager::getSingleton().createOverlayElement("Panel", name ));
+        // overlayElement_->setName(name);
+
         overlayElement_->setDimensions(0.1f,0.1f);
         
@@ -73,10 +75,19 @@
     }
 
-    void HUDPickupItem::hideMe()
-    {
-        orxout() << this << " has called hide" << endl;
+    void HUDPickupItem::hideMe(Pickupable* p)
+    {
+        assert(overlayElement_);
+        assert(this->background_);
+        // if(p->isBeingDestroyed()) //if the pickup is being destroyed, we do nothing
+        // {
+        //     orxout() << "now i didnt repaint" << endl;
+        //     return;
+        // } 
+        orxout() << "name overlay element: " << overlayElement_->getName() << endl;
+        // orxout() << this << " has called hide" << endl;
         overlayElement_->hide();
-        overlayElement_->_update();
-        orxout() << "after the call the element is visible: " << overlayElement_->isVisible() << endl;
+        this->background_->removeChild(overlayElement_->getName());
+        // this->background_->_update();
+        // orxout() << "after the call the element is visible: " << overlayElement_->isVisible() << endl;
     }
 
Index: code/branches/HUD_HS16/src/modules/overlays/hud/HUDPickupItem.h
===================================================================
--- code/branches/HUD_HS16/src/modules/overlays/hud/HUDPickupItem.h	(revision 11314)
+++ code/branches/HUD_HS16/src/modules/overlays/hud/HUDPickupItem.h	(revision 11323)
@@ -24,4 +24,5 @@
     public:
         HUDPickupItem(Context* context);
+        Ogre::PanelOverlayElement* overlayElement_;
         virtual ~HUDPickupItem();
 
@@ -37,5 +38,5 @@
         // void setPickup(Pickup* pickup);  
         void initializeMaterial(const std::string& s, float x, float y);  
-        void hideMe(); 
+        void hideMe(Pickupable* p); 
 
     private:
@@ -47,4 +48,5 @@
         // void updatePosition();
 
+        
         WeakPtr<Pawn> owner_;
         WeakPtr<Pickup> pickup_;
Index: code/branches/HUD_HS16/src/modules/overlays/hud/HUDPickupSystem.cc
===================================================================
--- code/branches/HUD_HS16/src/modules/overlays/hud/HUDPickupSystem.cc	(revision 11314)
+++ code/branches/HUD_HS16/src/modules/overlays/hud/HUDPickupSystem.cc	(revision 11323)
@@ -59,5 +59,5 @@
         if (this->isInitialized())
         {
-            //TODO: Destroy me
+            this->picks.clear();
         }
     }
@@ -80,11 +80,13 @@
             {
                 // orxout() << "actual pick is: " << p << endl;
-                if(i%4==0)
+                if(i%5==0)
                 {
                     offsetY+=0.04f;
                     i=0;
                 }   
-                HUDPickupItem* item = new HUDPickupItem(this->getContext());
-                // item->initializeMaterial(((Pickup*)p)->getRepresentationName(), offsetX+i*x, offsetY);
+                if(this->picks.count(p)==0)
+                {
+                    HUDPickupItem* item = new HUDPickupItem(this->getContext());
+                    // item->initializeMaterial(((Pickup*)p)->getRepresentationName(), offsetX+i*x, offsetY);
                 if(i%2==0)
                     item->initializeMaterial("Shield", offsetX+i*x, offsetY);
@@ -93,4 +95,6 @@
                 item->setOverlayGroup(this->getOverlayGroup());
                 this->picks[p] = item;
+                }
+                
                 ++i;
             }
@@ -104,10 +108,15 @@
     void HUDPickupSystem::removePickup(Pickupable* pickup)
     {
+        assert(pickup);
         HUDPickupItem* item = this->picks.find(pickup)->second;
         orxout() << "removePickup: pickup= " << pickup << " item= " << item << endl;
         assert(item);
-        item->setOverlayGroup(nullptr); 
-        item->hideMe();
-        overlayElement_->_update();
+        // item->setOverlayGroup(nullptr);
+        item->hideMe(pickup);
+        assert(overlayElement_);
+        // overlayElement_->_update();
+        assert(this->background_);
+        // this->background_->_update();
+        this->picks.erase(pickup);
     }
 
Index: code/branches/HUD_HS16/src/modules/pickup/PickupManager.cc
===================================================================
--- code/branches/HUD_HS16/src/modules/pickup/PickupManager.cc	(revision 11314)
+++ code/branches/HUD_HS16/src/modules/pickup/PickupManager.cc	(revision 11323)
@@ -266,9 +266,8 @@
         assert(pickup);
 
-        if(!pickupSystem)
-        {
-            for (HUDPickupSystem* hud : ObjectList<HUDPickupSystem>())
-                pickupSystem = hud;
-        }
+
+        for (HUDPickupSystem* hud : ObjectList<HUDPickupSystem>())
+            pickupSystem = hud;
+        
         assert(pickupSystem); //pickupSystem HAS to be there!
 
@@ -321,5 +320,4 @@
 
             pickupSystem->removePickup(pickup);
-            pickupSystem->updatePickupList(picks);
         }
 
@@ -366,8 +364,9 @@
         orxout() << "The pickup is being used: " << pickup->isUsed() << endl;
 
-        if(pickup->isUsed())
-            manager.usePickup(index, false);
-        else
-            manager.usePickup(index, true);
+        pickup->drop(true);
+        // if(pickup->isUsed())
+        //     manager.usePickup(index, false);
+        // else
+        //     manager.usePickup(index, true);
     }
 
Index: code/branches/HUD_HS16/src/orxonox/interfaces/Pickupable.h
===================================================================
--- code/branches/HUD_HS16/src/orxonox/interfaces/Pickupable.h	(revision 11314)
+++ code/branches/HUD_HS16/src/orxonox/interfaces/Pickupable.h	(revision 11323)
@@ -96,4 +96,11 @@
 
             /**
+            @brief Check whether the Pickupable is in the process of being destroyed.
+            @return Returns true if so.
+            */
+            inline bool isBeingDestroyed(void)
+                { return this->beingDestroyed_; }
+                
+            /**
             @brief Returns whether the Pickupable is currently picked up.
             @return Returns true if the Pickupable is currently picked up, false if not.
@@ -155,11 +162,4 @@
 
             /**
-            @brief Check whether the Pickupable is in the process of being destroyed.
-            @return Returns true if so.
-            */
-            inline bool isBeingDestroyed(void)
-                { return this->beingDestroyed_; }
-
-            /**
             @brief Facilitates the creation of a PickupSpawner upon dropping of the Pickupable.
                    This method must be implemented by any class directly inheriting from Pickupable.
