Index: code/trunk/src/orxonox/CMakeLists.txt
===================================================================
--- code/trunk/src/orxonox/CMakeLists.txt	(revision 7502)
+++ code/trunk/src/orxonox/CMakeLists.txt	(revision 7504)
@@ -61,5 +61,4 @@
     MoodManager.h
     controllers/HumanController.h
-    interfaces/Pickupable.h
     infos/PlayerInfo.h
     sound/SoundManager.h
Index: code/trunk/src/orxonox/interfaces/CMakeLists.txt
===================================================================
--- code/trunk/src/orxonox/interfaces/CMakeLists.txt	(revision 7502)
+++ code/trunk/src/orxonox/interfaces/CMakeLists.txt	(revision 7504)
@@ -3,4 +3,5 @@
   Pickupable.cc
   PickupCarrier.cc
+  PickupListener.cc
   RadarViewable.cc
 )
Index: code/trunk/src/orxonox/interfaces/PickupListener.cc
===================================================================
--- code/trunk/src/orxonox/interfaces/PickupListener.cc	(revision 7504)
+++ code/trunk/src/orxonox/interfaces/PickupListener.cc	(revision 7504)
@@ -0,0 +1,97 @@
+/*
+ *   ORXONOX - the hottest 3D action shooter ever to exist
+ *                    > www.orxonox.net <
+ *
+ *
+ *   License notice:
+ *
+ *   This program is free software; you can redistribute it and/or
+ *   modify it under the terms of the GNU General Public License
+ *   as published by the Free Software Foundation; either version 2
+ *   of the License, or (at your option) any later version.
+ *
+ *   This program is distributed in the hope that it will be useful,
+ *   but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *   GNU General Public License for more details.
+ *
+ *   You should have received a copy of the GNU General Public License
+ *   along with this program; if not, write to the Free Software
+ *   Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
+ *
+ *   Author:
+ *      Damian 'Mozork' Frick
+ *   Co-authors:
+ *      ...
+ *
+*/
+
+/**
+    @file PickupListener.cc
+    @brief Implementation of the PickupListener class.
+*/
+
+#include "OrxonoxPrereqs.h"
+
+#include "core/CoreIncludes.h"
+
+#include "PickupListener.h"
+
+namespace orxonox
+{
+
+    /**
+    @brief
+        Constructor. Registers the object.
+    */
+    PickupListener::PickupListener()
+    {
+        RegisterRootObject(PickupListener);
+    }
+
+    /**
+    @brief
+        Destructor.
+    */
+    PickupListener::~PickupListener()
+    {
+
+    }
+
+    /**
+    @brief
+        Static method that is used to notify the PickupListener itself of the change in the used status of a Pickupable.
+        This is called in Pickupable.
+    @param pickup
+        The Pickupable that has changed its used status.
+    @param used
+        Thse value the status has changed to.
+    */
+    /*static*/ void PickupListener::broadcastPickupChangedUsed(Pickupable* pickup, bool used)
+    {
+        assert(pickup);
+
+        // Iterate through all PickupListeners and notify them by calling the method they overloaded.
+        for(ObjectList<PickupListener>::iterator it = ObjectList<PickupListener>::begin(); it != ObjectList<PickupListener>::end(); ++it)
+            it->pickupChangedUsed(pickup, used);
+    }
+
+    /**
+    @brief
+        Static method that is used to notify the PickupListener itself of the change in the pickedUp status of a Pickupable.
+        This is called in Pickupable.
+    @param pickup
+        The Pickupable that has changed its pickedUp status.
+    @param pickedUp
+        Thse value the status has changed to.
+    */
+    /*static*/ void PickupListener::broadcastPickupChangedPickedUp(Pickupable* pickup, bool pickedUp)
+    {
+        assert(pickup);
+
+        // Iterate through all PickupListeners and notify them by calling the method they overloaded.
+        for(ObjectList<PickupListener>::iterator it = ObjectList<PickupListener>::begin(); it != ObjectList<PickupListener>::end(); ++it)
+            it->pickupChangedPickedUp(pickup, pickedUp);
+    }
+
+}
Index: code/trunk/src/orxonox/interfaces/PickupListener.h
===================================================================
--- code/trunk/src/orxonox/interfaces/PickupListener.h	(revision 7504)
+++ code/trunk/src/orxonox/interfaces/PickupListener.h	(revision 7504)
@@ -0,0 +1,79 @@
+/*
+ *   ORXONOX - the hottest 3D action shooter ever to exist
+ *                    > www.orxonox.net <
+ *
+ *
+ *   License notice:
+ *
+ *   This program is free software; you can redistribute it and/or
+ *   modify it under the terms of the GNU General Public License
+ *   as published by the Free Software Foundation; either version 2
+ *   of the License, or (at your option) any later version.
+ *
+ *   This program is distributed in the hope that it will be useful,
+ *   but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *   GNU General Public License for more details.
+ *
+ *   You should have received a copy of the GNU General Public License
+ *   along with this program; if not, write to the Free Software
+ *   Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
+ *
+ *   Author:
+ *      Damian 'Mozork' Frick
+ *   Co-authors:
+ *      ...
+ *
+*/
+
+/**
+    @file PickupListener.h
+    @brief Definition of the PickupListener class.
+    @ingroup Pickup
+*/
+
+
+#ifndef _PickupListener_H__
+#define _PickupListener_H__
+
+#include "Pickupable.h"
+
+#include "core/OrxonoxClass.h"
+
+namespace orxonox
+{
+
+    /**
+    @brief
+        The PickupListener class facilitates the flow of information regarding the picking up, dropping, using and unusing of @ref orxonox::Pickupable "Pickupables" to interested parties (such as the @ref orxonox::PickupManager "PickupManager").
+
+        All you need to to do be notified is to inherit from PickupListener and implement the two methods pickupChangedUsed() and pickupChangedPickedUp().
+    @author
+        Damian 'Mozork' Frick
+    */
+    class _OrxonoxExport PickupListener : virtual public OrxonoxClass
+    {
+        public:
+            PickupListener();
+            virtual ~PickupListener();
+
+            static void broadcastPickupChangedUsed(Pickupable* pickup, bool used); //!< Static method that is used to notify the PickupListener itself of the change in the used status of a Pickupable.
+            static void broadcastPickupChangedPickedUp(Pickupable* pickup, bool pickedUp); //!< Static method that is used to notify the PickupListener itself of the change in the pickedUp status of a Pickupable.
+
+            /**
+            @brief Method that can be overloaded by any PickupListener to be notified of a change in the used status of a Pickupable.
+            @param pickup The Pickupable, whose used status has changed.
+            @param used The value the used status has changed to.
+            */
+            virtual void pickupChangedUsed(Pickupable* pickup, bool used) {}
+            /**
+            @brief Method that can be overloaded by any PickupListener to be notified of a change in the pickedUp status of a Pickupable.
+            @param pickup The Pickupable, whose pickedUp status has changed.
+            @param pickedUp The value the pickedUp status has changed to.
+            */
+            virtual void pickupChangedPickedUp(Pickupable* pickup, bool pickedUp) {}
+    };
+
+}
+
+#endif // _PickupListener_H__
Index: code/trunk/src/orxonox/interfaces/Pickupable.cc
===================================================================
--- code/trunk/src/orxonox/interfaces/Pickupable.cc	(revision 7502)
+++ code/trunk/src/orxonox/interfaces/Pickupable.cc	(revision 7504)
@@ -34,6 +34,4 @@
 #include "Pickupable.h"
 
-#include "core/LuaState.h"
-#include "core/GUIManager.h"
 #include "core/Identifier.h"
 #include "core/CoreIncludes.h"
@@ -45,4 +43,5 @@
 
 #include "PickupCarrier.h"
+#include "PickupListener.h"
 
 namespace orxonox
@@ -130,8 +129,11 @@
 
         this->used_ = used;
+
+        // Notify all the PickupListeners of the change.
+        PickupListener::broadcastPickupChangedUsed(this, used);
+
         this->changedUsed();
 
-        //TODO: Synchronize & make safe for dedicated server.
-        GUIManager::getInstance().getLuaState()->doString("PickupInventory.update()");
+
         return true;
     }
@@ -222,5 +224,5 @@
             return false;
         }
-        
+
         this->setPickedUp(true);
         COUT(4) << "Pickupable (&" << this << ") got picked up by a PickupCarrier (&" << carrier << ")." << std::endl;
@@ -277,10 +279,12 @@
 
         this->pickedUp_ = pickedUp;
+
+        // Notify all the PickupListeners of the change.
+        PickupListener::broadcastPickupChangedPickedUp(this, pickedUp);
+
         if(!pickedUp) // if the Pickupable has been dropped it unregisters itself with its PickupCarrier.
             this->getCarrier()->removePickup(this);
         this->changedPickedUp();
 
-        //TODO: Synchronize & make safe for dedicated server.
-        GUIManager::getInstance().getLuaState()->doString("PickupInventory.update()");
         return true;
     }
Index: code/trunk/src/orxonox/interfaces/Pickupable.h
===================================================================
--- code/trunk/src/orxonox/interfaces/Pickupable.h	(revision 7502)
+++ code/trunk/src/orxonox/interfaces/Pickupable.h	(revision 7504)
@@ -44,6 +44,6 @@
 #include "Rewardable.h"
 
-namespace orxonox // tolua_export
-{ // tolua_export
+namespace orxonox
+{
 
     /**
@@ -58,7 +58,6 @@
         Damian 'Mozork' Frick
     */
-    class _OrxonoxExport Pickupable  // tolua_export
-        : virtual public OrxonoxClass, public Rewardable
-    {  // tolua_export
+    class _OrxonoxExport Pickupable : virtual public OrxonoxClass, public Rewardable
+    {
         protected:
             Pickupable(); //!< Default constructor.
@@ -71,5 +70,6 @@
             @return Returns true if the Pickupable is currently in use.
             */
-            inline bool isUsed(void) { return this->used_; }  // tolua_export
+            inline bool isUsed(void)
+                { return this->used_; }
             /**
             @brief  Should be called when the Pickupable has transited from used to unused or the other way around.
@@ -94,5 +94,6 @@
             @return Returns true if the Pickupable is currently picked up, false if not.
             */
-            inline bool isPickedUp(void) { return this->pickedUp_; }  // tolua_export
+            inline bool isPickedUp(void)
+                { return this->pickedUp_; }
             /**
             @brief  Should be called when the Pickupable has transited from picked up to dropped or the other way around.
@@ -105,11 +106,13 @@
             @return Returns true if it can be used.
             */
-            inline bool isUsable(void) { return this->enabled_; } // tolua_export
-            
+            inline bool isUsable(void)
+                { return this->enabled_; }
+
             /**
             @brief Returns whether the Pickupable can be unused.
             @return Returns true if it can be unused.
             */
-            inline bool isUnusable(void) { return this->enabled_; } // tolua_export
+            inline bool isUnusable(void)
+                { return this->enabled_; }
 
             /**
@@ -190,5 +193,5 @@
             virtual bool reward(PlayerInfo* player); //!< Method to transcribe a Pickupable as a Rewardable to the player.
 
-    };  // tolua_export
+    };
 
     //! SUPER functions.
@@ -196,5 +199,5 @@
     SUPER_FUNCTION(12, Pickupable, changedCarrier, false);
     SUPER_FUNCTION(13, Pickupable, changedPickedUp, false);
-}  // tolua_export
+}
 
 #endif /* _Pickupable_H__ */
