Index: code/trunk/src/modules/overlays/hud/HUDPickupSystem.cc
===================================================================
--- code/trunk/src/modules/overlays/hud/HUDPickupSystem.cc	(revision 11707)
+++ code/trunk/src/modules/overlays/hud/HUDPickupSystem.cc	(revision 11708)
@@ -34,9 +34,11 @@
 #include <OgrePanelOverlayElement.h>
 
+#include "HUDPickupSystem.h"
+
 #include "core/CoreIncludes.h"
 #include "core/class/Super.h"
 #include "util/Convert.h"
-#include "HUDPickupSystem.h"
 #include "pickup/PickupManager.h"
+#include "worldentities/pawns/Pawn.h"
 
 namespace orxonox
@@ -78,18 +80,25 @@
 
     }
-    
+
+    void HUDPickupSystem::changedOwner()
+    {
+        SUPER(HUDPickupSystem, changedOwner);
+
+        this->owner_ = orxonox_cast<Pawn*>(this->getOwner());
+    }
+
     void HUDPickupSystem::tick(float dt)
     {
         SUPER(HUDPickupSystem, tick, dt);
 
-        int numPickups = PickupManager::getInstance().getNumPickups();
+        std::vector<const PickupInventoryContainer*> containers = this->getPickupsForOwner();
+
         for (size_t index = 0; index < this->items_.size(); ++index)
         {
             Ogre::OverlayElement* item = this->items_[index];
 
-            if (static_cast<int>(index) < numPickups)
+            if (index < containers.size())
             {
-                const PickupInventoryContainer* container = PickupManager::getInstance().popPickup();
-                item->setMaterialName(this->getIcon(container->representationName));
+                item->setMaterialName(this->getIcon(containers[index]->representationName));
                 if (!item->getParent())
                     this->background_->addChild(item);
@@ -103,5 +112,20 @@
     }
 
-    std::string HUDPickupSystem::getIcon(std::string repName)
+    std::vector<const PickupInventoryContainer*> HUDPickupSystem::getPickupsForOwner() const
+    {
+        std::vector<const PickupInventoryContainer*> containers;
+
+        int numPickups = PickupManager::getInstance().getNumPickups();
+        for (int i = 0; i < numPickups; ++i)
+        {
+            const PickupInventoryContainer* container = PickupManager::getInstance().popPickup();
+            if (this->owner_ && this->owner_->getObjectID() == container->carrierPawnId)
+                containers.push_back(container);
+        }
+
+        return containers;
+    }
+
+    std::string HUDPickupSystem::getIcon(const std::string& repName) const
     {
         if(repName.find("invisible", 0)!=std::string::npos) return "Eye";
Index: code/trunk/src/modules/overlays/hud/HUDPickupSystem.h
===================================================================
--- code/trunk/src/modules/overlays/hud/HUDPickupSystem.h	(revision 11707)
+++ code/trunk/src/modules/overlays/hud/HUDPickupSystem.h	(revision 11708)
@@ -32,4 +32,5 @@
 
 #include "overlays/OverlaysPrereqs.h"
+#include "pickup/PickupPrereqs.h"
 
 #include <vector>
@@ -48,10 +49,14 @@
 
         virtual void tick(float dt) override;
+
         virtual void sizeChanged() override;
+        virtual void changedOwner() override;
 
     private:
-        std::string getIcon(std::string repName);
+        std::vector<const PickupInventoryContainer*> getPickupsForOwner() const;
+        std::string getIcon(const std::string& repName) const;
 
         std::vector<Ogre::OverlayElement*> items_;
+        WeakPtr<Pawn> owner_;
     };
 }
Index: code/trunk/src/modules/pickup/PickupManager.cc
===================================================================
--- code/trunk/src/modules/pickup/PickupManager.cc	(revision 11707)
+++ code/trunk/src/modules/pickup/PickupManager.cc	(revision 11708)
@@ -301,22 +301,10 @@
         if(GameMode::isStandalone() || Host::getPlayerID() == clientId)
         {
-            // If there is no PickupRepresentation registered the default representation is used.
-            if(this->representations_.find(pickup->getRepresentationName()) == this->representations_.end())
-                PickupManager::pickupChangedPickedUpNetwork(index, pickup->isUsable(), this->defaultRepresentation_->getObjectID(), pickup->getRepresentationName(), pickedUp);
-            else
-                PickupManager::pickupChangedPickedUpNetwork(index, pickup->isUsable(), this->representations_[pickup->getRepresentationName()]->getObjectID(), pickup->getRepresentationName(), pickedUp);
+            PickupManager::pickupChangedPickedUpNetwork(index, pickup->isUsable(), pickup->getRepresentationName(), pickedUp, pawn->getObjectID());
         }
         // If the concerned host is somewhere in the network, we call pickupChangedPickedUpNetwork() on its PickupManager.
         else
         {
-            // If there is no PickupRepresentation registered the default representation is used.
-            if(this->representations_.find(pickup->getRepresentationName()) == this->representations_.end())
-            {
-                callStaticNetworkFunction(&PickupManager::pickupChangedPickedUpNetwork, clientId, index, pickup->isUsable(), this->defaultRepresentation_->getObjectID(), pickedUp);
-            }
-            else
-            {
-                callStaticNetworkFunction(&PickupManager::pickupChangedPickedUpNetwork, clientId, index, pickup->isUsable(), this->representations_[pickup->getRepresentationName()]->getObjectID(), pickedUp);
-            }
+            callStaticNetworkFunction(&PickupManager::pickupChangedPickedUpNetwork, clientId, index, pickup->isUsable(), pickedUp, pawn->getObjectID());
         }
 
@@ -332,12 +320,12 @@
     @param usable
         Whether the Pickupable's used status can be changed to used in the PickupInventory.
-    @param representationObjectId
-        The objectId identifying (over the network) the PickupRepresentation that represents this Pickupable.
     @param representationName
         The name of the associated PickupRepresentation
     @param pickedUp
         The pickedUp status the Pickupable changed to.
-    */
-    /*static*/ void PickupManager::pickupChangedPickedUpNetwork(uint32_t pickup, bool usable, uint32_t representationObjectId, const std::string& representationName, bool pickedUp)
+    @param carrierPawnId
+        The objectId identifier (over the network) the Pawn that carries this Pickupable
+    */
+    /*static*/ void PickupManager::pickupChangedPickedUpNetwork(uint32_t pickup, bool usable, const std::string& representationName, bool pickedUp, uint32_t carrierPawnId)
     {
         PickupManager& manager = PickupManager::getInstance(); // Get the PickupManager singleton on this host.
@@ -352,6 +340,6 @@
             container->usable = usable;
             container->unusable = false;
-            container->representationObjectId = representationObjectId;
             container->representationName = representationName;
+            container->carrierPawnId = carrierPawnId;
             // Insert the container into the pickupInventoryContainers_ list.
             manager.pickupInventoryContainers_.insert(std::pair<uint32_t, PickupInventoryContainer*>(pickup, container));
Index: code/trunk/src/modules/pickup/PickupManager.h
===================================================================
--- code/trunk/src/modules/pickup/PickupManager.h	(revision 11707)
+++ code/trunk/src/modules/pickup/PickupManager.h	(revision 11708)
@@ -64,6 +64,6 @@
         bool usable; //!< Whether the @ref orxonox::Pickupable "Pickupable" is usable.
         bool unusable; //!< Whether the @ref orxonox::Pickupable "Pickupable" is droppable.
-        uint32_t representationObjectId; //!< The objectId of the @ref orxonox::PickupRepresentation "PickupRepresentation" that represents the @ref orxonox::Pickupable "Pickupable".
         std::string representationName; //!< The name of the associated PickupRepresentation
+        uint32_t carrierPawnId; //!< The objectId of the @ref orxonox::Pawn "Pawn" that carries the @ref orxonox::Pickupable "Pickupable".
     };
     // tolua_end
@@ -120,5 +120,5 @@
             static void pickupChangedUsedNetwork(uint32_t pickup, bool inUse, bool usable, bool unusable); //!< Helper method to react to the change in the used status of a Pickupable.
             virtual void pickupChangedPickedUp(Pickupable* pickup, bool pickedUp) override; //!< Is called by the PickupListener to notify the PickupManager, that the input Pickupable has transited to the input pickedUp state.
-            static void pickupChangedPickedUpNetwork(uint32_t pickup, bool usable, uint32_t representationObjectId, const std::string& representationName, bool pickedUp); //!< Helper method to react to the change in the pickedUp status of a Pickupable.
+            static void pickupChangedPickedUpNetwork(uint32_t pickup, bool usable, const std::string& representationName, bool pickedUp, uint32_t carrierPawnId); //!< Helper method to react to the change in the pickedUp status of a Pickupable.
 
         // Methods to be used by the PickupInventory.
Index: code/trunk/src/modules/pickup/PickupPrereqs.h
===================================================================
--- code/trunk/src/modules/pickup/PickupPrereqs.h	(revision 11707)
+++ code/trunk/src/modules/pickup/PickupPrereqs.h	(revision 11708)
@@ -72,4 +72,5 @@
     class Pickup;
     class PickupCollection;
+    class PickupInventoryContainer;
     class PickupManager;
     class PickupRepresentation;
