Index: code/trunk/src/orxonox/worldentities/WorldEntity.cc
===================================================================
--- code/trunk/src/orxonox/worldentities/WorldEntity.cc	(revision 6501)
+++ code/trunk/src/orxonox/worldentities/WorldEntity.cc	(revision 6524)
@@ -81,4 +81,8 @@
         this->node_->setPosition(Vector3::ZERO);
         this->node_->setOrientation(Quaternion::IDENTITY);
+        
+        // Activity and visibility memory.
+        this->bActiveMem_ = true;
+        this->bVisibleMem_ = true;
 
 
@@ -201,4 +205,48 @@
         registerVariable(this->parentID_,       VariableDirection::ToClient, new NetworkCallback<WorldEntity>(this, &WorldEntity::networkcallback_parentChanged));
     }
+    
+    /**
+    @brief
+        When the activity is changed, it is changed for all attached objects as well.
+    */
+    void WorldEntity::changedActivity(void)
+    {
+        SUPER(WorldEntity, changedActivity);
+        
+        for (std::set<WorldEntity*>::const_iterator it = this->getAttachedObjects().begin(); it != this->getAttachedObjects().end(); it++)
+        {
+            if(!this->isActive())
+            {
+                (*it)->bActiveMem_ = (*it)->isActive();
+                (*it)->setActive(this->isActive());
+            }
+            else
+            {
+                (*it)->setActive((*it)->bActiveMem_);
+            }
+        }
+    }
+    
+    /**
+    @brief
+        When the visibility is changed, it is changed for all attached objects as well.
+    */
+    void WorldEntity::changedVisibility(void)
+    {
+        SUPER(WorldEntity, changedVisibility);
+        
+        for (std::set<WorldEntity*>::const_iterator it = this->getAttachedObjects().begin(); it != this->getAttachedObjects().end(); it++)
+        {
+            if(!this->isVisible())
+            {
+                (*it)->bVisibleMem_ = (*it)->isVisible();
+                (*it)->setVisible(this->isVisible());
+            }
+            else
+            {
+                (*it)->setVisible((*it)->bVisibleMem_);
+            }
+        }
+    }
 
     /**
Index: code/trunk/src/orxonox/worldentities/WorldEntity.h
===================================================================
--- code/trunk/src/orxonox/worldentities/WorldEntity.h	(revision 6501)
+++ code/trunk/src/orxonox/worldentities/WorldEntity.h	(revision 6524)
@@ -105,4 +105,7 @@
             static const Vector3 DOWN;
             static const Vector3 UP;
+            
+            virtual void changedActivity(void);
+            virtual void changedVisibility(void);
 
             virtual void setPosition(const Vector3& position) = 0;
@@ -231,4 +234,7 @@
             std::set<WorldEntity*> children_;
             bool bDeleteWithParent_;
+            
+            bool bActiveMem_;
+            bool bVisibleMem_;
 
 
Index: code/trunk/src/orxonox/worldentities/pawns/Pawn.cc
===================================================================
--- code/trunk/src/orxonox/worldentities/pawns/Pawn.cc	(revision 6501)
+++ code/trunk/src/orxonox/worldentities/pawns/Pawn.cc	(revision 6524)
@@ -71,5 +71,6 @@
         this->aimPosition_ = Vector3::ZERO;
 
-        this->getPickups().setOwner(this);
+        //TODO: Remove.
+        //this->getPickups().setOwner(this);
 
         if (GameMode::isMaster())
@@ -296,8 +297,9 @@
     }
 
-    void Pawn::dropItems()
-    {
-        this->getPickups().clear();
-    }
+//TODO: Remove.
+//     void Pawn::dropItems()
+//     {
+//         this->getPickups().clear();
+//     }
 
 
Index: code/trunk/src/orxonox/worldentities/pawns/Pawn.h
===================================================================
--- code/trunk/src/orxonox/worldentities/pawns/Pawn.h	(revision 6501)
+++ code/trunk/src/orxonox/worldentities/pawns/Pawn.h	(revision 6524)
@@ -33,11 +33,11 @@
 
 #include <string>
+#include "interfaces/PickupCarrier.h"
 #include "interfaces/RadarViewable.h"
 #include "worldentities/ControllableEntity.h"
-#include "pickup/PickupCollection.h"
 
 namespace orxonox
 {
-    class _OrxonoxExport Pawn : public ControllableEntity, public RadarViewable
+    class _OrxonoxExport Pawn : public ControllableEntity, public RadarViewable, public PickupCarrier
     {
         friend class WeaponSystem;
@@ -109,9 +109,10 @@
                 { return this->numexplosionchunks_; }
 
-            virtual void dropItems();
-            inline PickupCollection& getPickups()
-                { return this->pickups_; }
-            virtual void useItem()
-                { this->pickups_.useItem(); }
+//TODO: Remove.
+//             virtual void dropItems();
+//             inline PickupCollection& getPickups()
+//                 { return this->pickups_; }
+//             virtual void useItem()
+//                 { this->pickups_.useItem(); }
 
             virtual void startLocalHumanControl();
@@ -135,5 +136,12 @@
             bool bAlive_;
 
-            PickupCollection pickups_;
+            //TODO: Remove.
+            //PickupCollection pickups_;
+            virtual std::list<PickupCarrier*>* getCarrierChildren(void)
+                { return new std::list<PickupCarrier*>(); }
+            virtual PickupCarrier* getCarrierParent(void)
+                { return NULL; }
+            virtual const Vector3& getCarrierPosition(void)
+                { return this->getWorldPosition(); };
 
             float health_;
