Index: code/branches/core6/src/libraries/core/object/Context.cc
===================================================================
--- code/branches/core6/src/libraries/core/object/Context.cc	(revision 9607)
+++ code/branches/core6/src/libraries/core/object/Context.cc	(revision 9608)
@@ -47,5 +47,5 @@
     /*static*/ Context* Context::getRootContext()
     {
-        static Context rootContext(NULL);
+        static Context rootContext;
         return &rootContext;
     }
Index: code/branches/core6/src/libraries/core/object/Context.h
===================================================================
--- code/branches/core6/src/libraries/core/object/Context.h	(revision 9607)
+++ code/branches/core6/src/libraries/core/object/Context.h	(revision 9608)
@@ -39,6 +39,4 @@
 #include <vector>
 
-#include "ObjectListBase.h"
-
 namespace orxonox
 {
@@ -48,5 +46,5 @@
             static Context* getRootContext();
 
-            Context(Context* context);
+            Context(Context* context = NULL);
             virtual ~Context();
 
Index: code/branches/core6/src/libraries/core/object/Listable.cc
===================================================================
--- code/branches/core6/src/libraries/core/object/Listable.cc	(revision 9607)
+++ code/branches/core6/src/libraries/core/object/Listable.cc	(revision 9608)
@@ -64,3 +64,15 @@
         this->elements_.clear();
     }
+
+    /**
+     * @brief Changes the context.
+     * The object is removed from the current context and added to the new one. This also applies to all object lists the object is registered in.
+     */
+    void Listable::setContext(Context* context)
+    {
+        this->context_ = context;
+        for (size_t i = 0; i < this->elements_.size(); ++i)
+            this->elements_[i]->changeContext(context);
+    }
+
 }
Index: code/branches/core6/src/libraries/core/object/Listable.h
===================================================================
--- code/branches/core6/src/libraries/core/object/Listable.h	(revision 9607)
+++ code/branches/core6/src/libraries/core/object/Listable.h	(revision 9608)
@@ -57,6 +57,5 @@
             void unregisterObject();
 
-            inline void setContext(Context* context)
-                { this->context_ = context; }
+            void setContext(Context* context);
             inline Context* getContext() const
                 { return this->context_; }
Index: code/branches/core6/src/libraries/core/object/ObjectListBase.cc
===================================================================
--- code/branches/core6/src/libraries/core/object/ObjectListBase.cc	(revision 9607)
+++ code/branches/core6/src/libraries/core/object/ObjectListBase.cc	(revision 9608)
@@ -41,5 +41,8 @@
 namespace orxonox
 {
-    ObjectListBaseElement::~ObjectListBaseElement()
+    // ###############################
+    // ###  ObjectListBaseElement  ###
+    // ###############################
+    void ObjectListBaseElement::removeFromList()
     {
         if (this->list_)
@@ -47,4 +50,7 @@
     }
 
+    // ###############################
+    // ###     ObjectListBase      ###
+    // ###############################
     /**
         @brief Constructor: Sets default values.
Index: code/branches/core6/src/libraries/core/object/ObjectListBase.h
===================================================================
--- code/branches/core6/src/libraries/core/object/ObjectListBase.h	(revision 9607)
+++ code/branches/core6/src/libraries/core/object/ObjectListBase.h	(revision 9608)
@@ -42,4 +42,5 @@
 #include "core/CorePrereqs.h"
 #include <vector>
+#include "Context.h"
 
 namespace orxonox
@@ -57,5 +58,7 @@
             */
             ObjectListBaseElement(Listable* object) : next_(0), prev_(0), objectBase_(object), list_(0) {}
-            ~ObjectListBaseElement();
+            virtual ~ObjectListBaseElement() { this->removeFromList(); }
+
+            virtual void changeContext(Context* context) = 0;
 
             ObjectListBaseElement* next_;       //!< The next element in the list
@@ -63,4 +66,7 @@
             Listable* objectBase_;              //!< The object
             ObjectListBase* list_;              //!< The list
+
+        protected:
+            void removeFromList();
     };
 
@@ -75,4 +81,11 @@
         public:
             ObjectListElement(T* object) : ObjectListBaseElement(static_cast<Listable*>(object)), object_(object) {}
+
+            virtual void changeContext(Context* context)
+            {
+                this->removeFromList();
+                context->getObjectList<T>()->addElement(this);
+            }
+
             T* object_;              //!< The object
     };
Index: code/branches/core6/test/core/object/ListableTest.cc
===================================================================
--- code/branches/core6/test/core/object/ListableTest.cc	(revision 9607)
+++ code/branches/core6/test/core/object/ListableTest.cc	(revision 9608)
@@ -20,7 +20,8 @@
 
         template <class T>
-        bool objectListContains(T* element)
+        bool objectListContains(T* element, Context* context = Context::getRootContext())
         {
-            for (typename ObjectList<T>::iterator it = ObjectList<T>::begin(); it != ObjectList<T>::end(); ++it)
+            for (typename ObjectList<T>::iterator it = static_cast<ObjectListElement<T>*>(context->getObjectList<T>()->begin());
+                    it != static_cast<ObjectListElement<T>*>(context->getObjectList<T>()->end()); ++it)
                 if (*it == element)
                     return true;
@@ -77,3 +78,32 @@
         EXPECT_EQ(0u, ObjectList<ListableSubclassTest>::size());
     }
+
+    TEST(ListableTest, CanChangeContext)
+    {
+        Context* rootContext = Context::getRootContext();
+        Context newContext;
+        ListableSubclassTest test;
+
+        EXPECT_EQ(1u, rootContext->getObjectList<ListableTest>()->size());
+        EXPECT_TRUE(objectListContains<ListableTest>(&test, rootContext));
+        EXPECT_EQ(1u, rootContext->getObjectList<ListableSubclassTest>()->size());
+        EXPECT_TRUE(objectListContains<ListableSubclassTest>(&test, rootContext));
+
+        EXPECT_EQ(0u, newContext.getObjectList<ListableTest>()->size());
+        EXPECT_FALSE(objectListContains<ListableTest>(&test, &newContext));
+        EXPECT_EQ(0u, newContext.getObjectList<ListableSubclassTest>()->size());
+        EXPECT_FALSE(objectListContains<ListableSubclassTest>(&test, &newContext));
+
+        test.setContext(&newContext);
+
+        EXPECT_EQ(0u, rootContext->getObjectList<ListableTest>()->size());
+        EXPECT_FALSE(objectListContains<ListableTest>(&test, rootContext));
+        EXPECT_EQ(0u, rootContext->getObjectList<ListableSubclassTest>()->size());
+        EXPECT_FALSE(objectListContains<ListableSubclassTest>(&test, rootContext));
+
+        EXPECT_EQ(1u, newContext.getObjectList<ListableTest>()->size());
+        EXPECT_TRUE(objectListContains<ListableTest>(&test, &newContext));
+        EXPECT_EQ(1u, newContext.getObjectList<ListableSubclassTest>()->size());
+        EXPECT_TRUE(objectListContains<ListableSubclassTest>(&test, &newContext));
+    }
 }
Index: code/branches/core6/test/core/object/ObjectListBaseTest.cc
===================================================================
--- code/branches/core6/test/core/object/ObjectListBaseTest.cc	(revision 9607)
+++ code/branches/core6/test/core/object/ObjectListBaseTest.cc	(revision 9608)
@@ -2,4 +2,5 @@
 #include <gmock/gmock.h>
 #include "core/object/ObjectListBase.h"
+#include "core/class/Identifier.h"
 
 namespace orxonox
@@ -23,5 +24,5 @@
     {
         ObjectListBase list;
-        ObjectListBaseElement* element = new ObjectListBaseElement(NULL);
+        ObjectListBaseElement* element = new ObjectListElement<Listable>(NULL);
         list.addElement(element);
         EXPECT_EQ(1u, list.size());
@@ -31,5 +32,5 @@
     {
         ObjectListBase list;
-        ObjectListBaseElement* element = new ObjectListBaseElement(NULL);
+        ObjectListBaseElement* element = new ObjectListElement<Listable>(NULL);
         list.addElement(element);
         EXPECT_EQ(1u, list.size());
@@ -51,13 +52,13 @@
         EXPECT_EQ(0u, list.size());
         {
-            ObjectListBaseElement element1(NULL);
+            ObjectListElement<Listable> element1(NULL);
             list.addElement(&element1);
             EXPECT_EQ(1u, list.size());
             {
-                ObjectListBaseElement element1(NULL);
+                ObjectListElement<Listable> element1(NULL);
                 list.addElement(&element1);
                 EXPECT_EQ(2u, list.size());
                 {
-                    ObjectListBaseElement element1(NULL);
+                    ObjectListElement<Listable> element1(NULL);
                     list.addElement(&element1);
                     EXPECT_EQ(3u, list.size());
@@ -75,5 +76,5 @@
         ObjectListElementRemovalListenerMock listener;
         list.registerRemovalListener(&listener);
-        ObjectListBaseElement* element = new ObjectListBaseElement(NULL);
+        ObjectListBaseElement* element = new ObjectListElement<Listable>(NULL);
         list.addElement(element);
         EXPECT_CALL(listener, removedElement(element));
