Index: code/branches/cpp11_v2/src/libraries/core/ClassTreeMask.cc
===================================================================
--- code/branches/cpp11_v2/src/libraries/core/ClassTreeMask.cc	(revision 10919)
+++ code/branches/cpp11_v2/src/libraries/core/ClassTreeMask.cc	(revision 10920)
@@ -851,5 +851,5 @@
             this->objectIterator_ = Context::getRootContext()->getObjectList(this->subclassIterator_->first)->begin();
         else
-            this->objectIterator_ = ObjectList<BaseObject>::end();
+            this->objectIterator_ = ObjectList<BaseObject>().end();
 
         // Check if the iterator points on a valid object. If not, go to the next object by calling ++
Index: code/branches/cpp11_v2/src/libraries/core/Loader.cc
===================================================================
--- code/branches/cpp11_v2/src/libraries/core/Loader.cc	(revision 10919)
+++ code/branches/cpp11_v2/src/libraries/core/Loader.cc	(revision 10920)
@@ -207,5 +207,5 @@
         if (!file)
             return;
-        for (ObjectList<BaseObject>::iterator it = ObjectList<BaseObject>::begin(); it; )
+        for (ObjectList<BaseObject>::iterator it = ObjectList<BaseObject>().begin(); it; )
         {
             if ((it->getFile() == file) && mask.isIncluded(it->getIdentifier()))
Index: code/branches/cpp11_v2/src/libraries/core/class/Identifier.h
===================================================================
--- code/branches/cpp11_v2/src/libraries/core/class/Identifier.h	(revision 10919)
+++ code/branches/cpp11_v2/src/libraries/core/class/Identifier.h	(revision 10920)
@@ -415,8 +415,6 @@
     void ClassIdentifier<T>::destroyObjects(Listable*)
     {
-        ObjectListBase* objectList = Context::getRootContext()->getObjectList(this);
-        ObjectListElement<T>* begin = static_cast<ObjectListElement<T>*>(objectList->begin());
-        ObjectListElement<T>* end = static_cast<ObjectListElement<T>*>(objectList->end());
-        for (typename ObjectList<T>::iterator it = begin; it != end; )
+        ObjectList<T> list(Context::getRootContext()->getObjectList(this));
+        for (typename ObjectList<T>::iterator it = list.begin(); it != list.end(); )
             this->destroyObject(*(it++));
     }
Index: code/branches/cpp11_v2/src/libraries/core/object/ObjectList.h
===================================================================
--- code/branches/cpp11_v2/src/libraries/core/object/ObjectList.h	(revision 10919)
+++ code/branches/cpp11_v2/src/libraries/core/object/ObjectList.h	(revision 10920)
@@ -71,52 +71,28 @@
             typedef ObjectListIterator<T> iterator;
 
-            /// Returns the size of the list (for the root context)
-            inline static size_t size()
-            {   return size(Context::getRootContext());   }
+            ObjectList() : ObjectList(Context::getRootContext()) {}
+            ObjectList(Context* context) : ObjectList(context->getObjectList<T>()) {}
+            ObjectList(ObjectListBase* list) : list_(list) {}
+
             /// Returns the size of the list
-            inline static size_t size(Context* context)
-            {
-                return context->getObjectList<T>()->size();
-            }
+            inline size_t size()
+            {   return this->list_->size();   }
 
-            /// Returns an Iterator to the first element in the list (for the root context).
-            inline static ObjectListIterator<T> begin()
-            {   return begin(Context::getRootContext());   }
             /// Returns an Iterator to the first element in the list.
-            inline static ObjectListIterator<T> begin(Context* context)
-            {
-                ObjectListBase* list = context->getObjectList<T>();
-                return static_cast<ObjectListElement<T>*>(list->begin());
-            }
+            inline ObjectListIterator<T> begin()
+            {   return static_cast<ObjectListElement<T>*>(this->list_->begin());   }
+            /// Returns an Iterator to the element after the last element in the list.
+            inline ObjectListIterator<T> end()
+            {   return static_cast<ObjectListElement<T>*>(this->list_->end());   }
 
-            /// Returns an Iterator to the element after the last element in the list (for the root context).
-            inline static ObjectListIterator<T> end()
-            {   return end(Context::getRootContext());   }
-            /// Returns an Iterator to the element after the last element in the list.
-            inline static ObjectListIterator<T> end(Context* context)
-            {
-                ObjectListBase* list = context->getObjectList<T>();
-                return static_cast<ObjectListElement<T>*>(list->end());
-            }
+            /// Returns an Iterator to the last element in the list.
+            inline ObjectListIterator<T> rbegin()
+            {   return static_cast<ObjectListElement<T>*>(this->list_->rbegin());   }
+            /// Returns an Iterator to the element before the first element in the list.
+            inline ObjectListIterator<T> rend()
+            {   return static_cast<ObjectListElement<T>*>(this->list_->rend());   }
 
-            /// Returns an Iterator to the last element in the list (for the root context).
-            inline static ObjectListIterator<T> rbegin()
-            {   return rbegin(Context::getRootContext());   }
-            /// Returns an Iterator to the last element in the list.
-            inline static ObjectListIterator<T> rbegin(Context* context)
-            {
-                ObjectListBase* list = context->getObjectList<T>();
-                return static_cast<ObjectListElement<T>*>(list->rbegin());
-            }
-
-            /// Returns an Iterator to the element before the first element in the list (for the root context).
-            inline static ObjectListIterator<T> rend()
-            {   return rend(Context::getRootContext());   }
-            /// Returns an Iterator to the element before the first element in the list.
-            inline static ObjectListIterator<T> rend(Context* context)
-            {
-                ObjectListBase* list = context->getObjectList<T>();
-                return static_cast<ObjectListElement<T>*>(list->rend());
-            }
+        private:
+            ObjectListBase* list_;
     };
 }
Index: code/branches/cpp11_v2/src/libraries/core/object/ObjectListIterator.h
===================================================================
--- code/branches/cpp11_v2/src/libraries/core/object/ObjectListIterator.h	(revision 10919)
+++ code/branches/cpp11_v2/src/libraries/core/object/ObjectListIterator.h	(revision 10920)
@@ -41,5 +41,6 @@
     Usage:
     @code
-    for (ObjectListIterator<myClass> it = ObjectList<myClass>::begin(); it != ObjectList<myClass>::end(); ++it)
+    ObjectList<myClass> list;
+    for (ObjectListIterator<myClass> it = list.begin(); it != list.end(); ++it)
     {
         it->someFunction(...);
Index: code/branches/cpp11_v2/src/libraries/network/packet/Gamestate.cc
===================================================================
--- code/branches/cpp11_v2/src/libraries/network/packet/Gamestate.cc	(revision 10919)
+++ code/branches/cpp11_v2/src/libraries/network/packet/Gamestate.cc	(revision 10920)
@@ -126,5 +126,5 @@
   mem += GamestateHeader::getSize();
   ObjectList<Synchronisable>::iterator it;
-  for(it = ObjectList<Synchronisable>::begin(); it; ++it)
+  for(it = ObjectList<Synchronisable>().begin(); it; ++it)
   {
 
Index: code/branches/cpp11_v2/src/modules/gametypes/SpaceRaceController.cc
===================================================================
--- code/branches/cpp11_v2/src/modules/gametypes/SpaceRaceController.cc	(revision 10919)
+++ code/branches/cpp11_v2/src/modules/gametypes/SpaceRaceController.cc	(revision 10920)
@@ -59,6 +59,6 @@
 
         virtualCheckPointIndex = -2;
-        if (ObjectList<SpaceRaceManager>::size() != 1)
-            orxout(internal_warning) << "Expected 1 instance of SpaceRaceManager but found " << ObjectList<SpaceRaceManager>::size() << endl;
+        if (ObjectList<SpaceRaceManager>().size() != 1)
+            orxout(internal_warning) << "Expected 1 instance of SpaceRaceManager but found " << ObjectList<SpaceRaceManager>().size() << endl;
         for (SpaceRaceManager* manager : ObjectList<SpaceRaceManager>())
         {
@@ -299,5 +299,6 @@
         orxout()<<"add VCP at"<<virtualCheckPointPosition.x<<", "<<virtualCheckPointPosition.y<<", "<<virtualCheckPointPosition.z<<endl;
         RaceCheckPoint* newTempRaceCheckPoint;
-        for (ObjectList<SpaceRaceManager>::iterator it = ObjectList<SpaceRaceManager>::begin(); it!= ObjectList<SpaceRaceManager>::end(); ++it)
+        ObjectList<SpaceRaceManager> list;
+        for (ObjectList<SpaceRaceManager>::iterator it = list.begin(); it!= list.end(); ++it)
         {
             newTempRaceCheckPoint = new RaceCheckPoint((*it));
@@ -488,5 +489,6 @@
         std::vector<StaticEntity*> problematicObjects;
 
-        for (ObjectList<StaticEntity>::iterator it = ObjectList<StaticEntity>::begin(); it!= ObjectList<StaticEntity>::end(); ++it)
+        ObjectList<StaticEntity> list;
+        for (ObjectList<StaticEntity>::iterator it = list.begin(); it!= list.end(); ++it)
         {
 
Index: code/branches/cpp11_v2/src/modules/jump/Jump.cc
===================================================================
--- code/branches/cpp11_v2/src/modules/jump/Jump.cc	(revision 10919)
+++ code/branches/cpp11_v2/src/modules/jump/Jump.cc	(revision 10920)
@@ -141,10 +141,9 @@
         }
 
-        ObjectList<JumpPlatform>::iterator beginPlatform = ObjectList<JumpPlatform>::begin();
-        ObjectList<JumpPlatform>::iterator endPlatform = ObjectList<JumpPlatform>::end();
-        ObjectList<JumpPlatform>::iterator itPlatform = beginPlatform;
+        ObjectList<JumpPlatform> listPlatform;
+        ObjectList<JumpPlatform>::iterator itPlatform = listPlatform.begin();
         Vector3 platformPosition;
 
-        while (itPlatform != endPlatform)
+        while (itPlatform != listPlatform.end())
         {
             platformPosition = itPlatform->getPosition();
@@ -163,9 +162,8 @@
 
         // Deleted deactivated platforms
-        ObjectList<JumpPlatformDisappear>::iterator beginDisappear = ObjectList<JumpPlatformDisappear>::begin();
-        ObjectList<JumpPlatformDisappear>::iterator endDisappear = ObjectList<JumpPlatformDisappear>::end();
-        ObjectList<JumpPlatformDisappear>::iterator itDisappear = beginDisappear;
-
-        while (itDisappear != endDisappear)
+        ObjectList<JumpPlatformDisappear> listDisappear;
+        ObjectList<JumpPlatformDisappear>::iterator itDisappear = listDisappear.begin();
+
+        while (itDisappear != listDisappear.end())
         {
             if (!itDisappear->isActive())
@@ -182,9 +180,8 @@
         }
 
-        ObjectList<JumpPlatformTimer>::iterator beginTimer = ObjectList<JumpPlatformTimer>::begin();
-        ObjectList<JumpPlatformTimer>::iterator endTimer = ObjectList<JumpPlatformTimer>::end();
-        ObjectList<JumpPlatformTimer>::iterator itTimer = beginTimer;
-
-        while (itTimer != endTimer)
+        ObjectList<JumpPlatformTimer> listTimer;
+        ObjectList<JumpPlatformTimer>::iterator itTimer = listTimer.begin();
+
+        while (itTimer != listTimer.end())
         {
             if (!itTimer->isActive())
@@ -201,10 +198,9 @@
         }
 
-        ObjectList<JumpProjectile>::iterator beginProjectile = ObjectList<JumpProjectile>::begin();
-        ObjectList<JumpProjectile>::iterator endProjectile = ObjectList<JumpProjectile>::end();
-        ObjectList<JumpProjectile>::iterator itProjectile = beginProjectile;
+        ObjectList<JumpProjectile> listProjectile;
+        ObjectList<JumpProjectile>::iterator itProjectile = listProjectile.begin();
         Vector3 projectilePosition;
 
-        while (itProjectile != endProjectile)
+        while (itProjectile != listProjectile.end())
         {
             projectilePosition = itProjectile->getPosition();
@@ -222,10 +218,9 @@
         }
 
-        ObjectList<JumpEnemy>::iterator beginEnemy = ObjectList<JumpEnemy>::begin();
-        ObjectList<JumpEnemy>::iterator endEnemy = ObjectList<JumpEnemy>::end();
-        ObjectList<JumpEnemy>::iterator itEnemy = beginEnemy;
+        ObjectList<JumpEnemy> listEnemy;
+        ObjectList<JumpEnemy>::iterator itEnemy = listEnemy.begin();
         Vector3 enemyPosition;
 
-        while (itEnemy != endEnemy)
+        while (itEnemy != listEnemy.end())
         {
             enemyPosition = itEnemy->getPosition();
@@ -243,10 +238,9 @@
         }
 
-        ObjectList<JumpItem>::iterator beginItem = ObjectList<JumpItem>::begin();
-        ObjectList<JumpItem>::iterator endItem = ObjectList<JumpItem>::end();
-        ObjectList<JumpItem>::iterator itItem = beginItem;
+        ObjectList<JumpItem> listItem;
+        ObjectList<JumpItem>::iterator itItem = listItem.begin();
         Vector3 itemPosition;
 
-        while (itItem != endItem)
+        while (itItem != listItem.end())
         {
             itemPosition = itItem->getPosition();
Index: code/branches/cpp11_v2/src/modules/mini4dgame/Mini4Dgame.cc
===================================================================
--- code/branches/cpp11_v2/src/modules/mini4dgame/Mini4Dgame.cc	(revision 10919)
+++ code/branches/cpp11_v2/src/modules/mini4dgame/Mini4Dgame.cc	(revision 10920)
@@ -183,5 +183,5 @@
     void Mini4Dgame::undoStone()//Vector4 move, const int playerColor)
     {
-        ObjectList<Mini4DgameBoard>::iterator it = ObjectList<Mini4DgameBoard>::begin();
+        ObjectList<Mini4DgameBoard>::iterator it = ObjectList<Mini4DgameBoard>().begin();
         it->undoMove();
     }
@@ -191,5 +191,5 @@
     {
         Mini4DgamePosition move = Mini4DgamePosition(x,y,z,w);
-        ObjectList<Mini4DgameBoard>::iterator it = ObjectList<Mini4DgameBoard>::begin();
+        ObjectList<Mini4DgameBoard>::iterator it = ObjectList<Mini4DgameBoard>().begin();
         it->makeMove(move);
     }
Index: code/branches/cpp11_v2/src/modules/overlays/debugging/DebugPositionText.cc
===================================================================
--- code/branches/cpp11_v2/src/modules/overlays/debugging/DebugPositionText.cc	(revision 10919)
+++ code/branches/cpp11_v2/src/modules/overlays/debugging/DebugPositionText.cc	(revision 10920)
@@ -52,5 +52,5 @@
         SUPER(DebugPositionText, tick, dt);
         
-        ObjectList<NewHumanController>::iterator it = ObjectList<NewHumanController>::begin();
+        ObjectList<NewHumanController>::iterator it = ObjectList<NewHumanController>().begin();
         if (it && it->getControllableEntity() )
         {
Index: code/branches/cpp11_v2/src/orxonox/Radar.cc
===================================================================
--- code/branches/cpp11_v2/src/orxonox/Radar.cc	(revision 10919)
+++ code/branches/cpp11_v2/src/orxonox/Radar.cc	(revision 10920)
@@ -138,5 +138,6 @@
     void Radar::cycleFocus()
     {
-        if (ObjectList<RadarViewable>::begin() == ObjectList<RadarViewable>::end())
+        ObjectList<RadarViewable> listRadarViewable;
+        if (listRadarViewable.size() == 0)
         {
             // list is empty
@@ -158,5 +159,5 @@
             ObjectList<RadarViewable>::iterator itFallback = nullptr;
 
-            for (ObjectList<RadarViewable>::iterator it = ObjectList<RadarViewable>::begin(); it; ++it)
+            for (ObjectList<RadarViewable>::iterator it = listRadarViewable.begin(); it; ++it)
             {
                 if (*it == static_cast<RadarViewable*>(HumanController::getLocalControllerEntityAsPawn()))
Index: code/branches/cpp11_v2/src/orxonox/gamestates/GSLevel.cc
===================================================================
--- code/branches/cpp11_v2/src/orxonox/gamestates/GSLevel.cc	(revision 10919)
+++ code/branches/cpp11_v2/src/orxonox/gamestates/GSLevel.cc	(revision 10920)
@@ -215,12 +215,15 @@
     void GSLevel::unloadLevelAsClient()
     {
-        for (ObjectList<Level>::iterator it = ObjectList<Level>::begin(); it != ObjectList<Level>::end(); )
+        ObjectList<Level> listLevel;
+        for (ObjectList<Level>::iterator it = listLevel.begin(); it != listLevel.end(); )
         {
             StrongPtr<Level> level = *(it++); // StrongPtr prevents that the Level gets destroyed while we loop over it
-            for (ObjectList<BaseObject>::iterator it = ObjectList<BaseObject>::begin(level); it != ObjectList<BaseObject>::end(level); )
+            ObjectList<BaseObject> listBaseObject(level);
+            for (ObjectList<BaseObject>::iterator it = listBaseObject.begin(); it != listBaseObject.end(); )
                 (it++)->destroy();
         }
 
-        for (ObjectList<Synchronisable>::iterator it = ObjectList<Synchronisable>::begin(); it != ObjectList<Synchronisable>::end(); )
+        ObjectList<Synchronisable> listSynchronisable;
+        for (ObjectList<Synchronisable>::iterator it = listSynchronisable.begin(); it != listSynchronisable.end(); )
         {
             if (it->getSyncMode() != 0x0)
Index: code/branches/cpp11_v2/src/orxonox/gamestates/GSRoot.cc
===================================================================
--- code/branches/cpp11_v2/src/orxonox/gamestates/GSRoot.cc	(revision 10919)
+++ code/branches/cpp11_v2/src/orxonox/gamestates/GSRoot.cc	(revision 10920)
@@ -113,5 +113,6 @@
         }
 
-        for (ObjectList<Timer>::iterator it = ObjectList<Timer>::begin(); it; )
+        ObjectList<Timer> listTimer;
+        for (ObjectList<Timer>::iterator it = listTimer.begin(); it; )
         {
             Timer* object = *it;
@@ -129,5 +130,6 @@
         }
         float realdt = leveldt * TimeFactorListener::getTimeFactor();
-        for (ObjectList<Tickable>::iterator it = ObjectList<Tickable>::begin(); it; )
+        ObjectList<Tickable> listTickable;
+        for (ObjectList<Tickable>::iterator it = listTickable.begin(); it; )
         {
             Tickable* object = *it;
Index: code/branches/cpp11_v2/src/orxonox/gametypes/Gametype.cc
===================================================================
--- code/branches/cpp11_v2/src/orxonox/gametypes/Gametype.cc	(revision 10919)
+++ code/branches/cpp11_v2/src/orxonox/gametypes/Gametype.cc	(revision 10920)
@@ -492,5 +492,6 @@
     {
         unsigned int i = 0;
-        for (ObjectList<Bot>::iterator it = ObjectList<Bot>::begin(); (it != ObjectList<Bot>::end()) && ((amount == 0) || (i < amount)); )
+        ObjectList<Bot> list;
+        for (ObjectList<Bot>::iterator it = list.begin(); (it != list.end()) && ((amount == 0) || (i < amount)); )
         {
             if (it->getGametype() == this)
Index: code/branches/cpp11_v2/test/core/object/IteratorTest.cc
===================================================================
--- code/branches/cpp11_v2/test/core/object/IteratorTest.cc	(revision 10919)
+++ code/branches/cpp11_v2/test/core/object/IteratorTest.cc	(revision 10920)
@@ -55,5 +55,6 @@
     TEST_F(IteratorTest, CanAssignIterator)
     {
-        Iterator<TestInterface> it = ObjectList<TestInterface>::begin();
+        ObjectList<TestInterface> list;
+        Iterator<TestInterface> it = list.begin();
     }
 
@@ -61,5 +62,6 @@
     {
         size_t i = 0;
-        for (Iterator<TestInterface> it = ObjectList<TestInterface>::begin(); it != ObjectList<TestInterface>::end(); ++it)
+        ObjectList<TestInterface> list;
+        for (Iterator<TestInterface> it = list.begin(); it != list.end(); ++it)
             ++i;
         EXPECT_EQ(0u, i);
@@ -77,5 +79,6 @@
 
         // iterate over interfaces but use a TestClass iterator - now we can call TestClass::test()
-        for (Iterator<TestClass> it = ObjectList<TestInterface>::begin(); it != ObjectList<TestInterface>::end(); ++it)
+        ObjectList<TestInterface> list;
+        for (Iterator<TestClass> it = list.begin(); it != list.end(); ++it)
             it->test();
     }
@@ -87,5 +90,6 @@
 
         size_t i = 0;
-        for (Iterator<TestInterface> it = ObjectList<TestInterface>::begin(); it != ObjectList<TestInterface>::end(); ++it)
+        ObjectList<TestInterface> list;
+        for (Iterator<TestInterface> it = list.begin(); it != list.end(); ++it)
         {
             ++i;
@@ -102,5 +106,6 @@
 
         size_t i = 0;
-        for (Iterator<TestClass> it = ObjectList<TestClass>::begin(); it != ObjectList<TestClass>::end(); ++it)
+        ObjectList<TestClass> list;
+        for (Iterator<TestClass> it = list.begin(); it != list.end(); ++it)
         {
             ++i;
@@ -116,5 +121,6 @@
 
         size_t i = 0;
-        for (Iterator<TestClass> it = ObjectList<TestInterface>::begin(); it != ObjectList<TestInterface>::end(); ++it)
+        ObjectList<TestInterface> list;
+        for (Iterator<TestClass> it = list.begin(); it != list.end(); ++it)
         {
             ++i;
@@ -131,5 +137,6 @@
 
         size_t i = 0;
-        for (Iterator<TestInterface> it = ObjectList<TestClass>::begin(); it != ObjectList<TestClass>::end(); ++it)
+        ObjectList<TestClass> list;
+        for (Iterator<TestInterface> it = list.begin(); it != list.end(); ++it)
         {
             ++i;
Index: code/branches/cpp11_v2/test/core/object/ListableTest.cc
===================================================================
--- code/branches/cpp11_v2/test/core/object/ListableTest.cc	(revision 10919)
+++ code/branches/cpp11_v2/test/core/object/ListableTest.cc	(revision 10920)
@@ -63,5 +63,5 @@
     {
         ListableClassTest test;
-        EXPECT_EQ(1u, ObjectList<ListableClassTest>::size());
+        EXPECT_EQ(1u, ObjectList<ListableClassTest>().size());
         EXPECT_TRUE(objectListContains<ListableClassTest>(&test));
     }
@@ -70,7 +70,7 @@
     {
         ListableSubclassTest test;
-        EXPECT_EQ(1u, ObjectList<ListableClassTest>::size());
+        EXPECT_EQ(1u, ObjectList<ListableClassTest>().size());
         EXPECT_TRUE(objectListContains<ListableClassTest>(&test));
-        EXPECT_EQ(1u, ObjectList<ListableSubclassTest>::size());
+        EXPECT_EQ(1u, ObjectList<ListableSubclassTest>().size());
         EXPECT_TRUE(objectListContains<ListableSubclassTest>(&test));
     }
@@ -78,26 +78,26 @@
     TEST_F(ListableTest, RemovesFromObjectList)
     {
-        EXPECT_EQ(0u, ObjectList<ListableClassTest>::size());
+        EXPECT_EQ(0u, ObjectList<ListableClassTest>().size());
         {
             ListableClassTest test;
-            EXPECT_EQ(1u, ObjectList<ListableClassTest>::size());
+            EXPECT_EQ(1u, ObjectList<ListableClassTest>().size());
             EXPECT_TRUE(objectListContains<ListableClassTest>(&test));
         }
-        EXPECT_EQ(0u, ObjectList<ListableClassTest>::size());
+        EXPECT_EQ(0u, ObjectList<ListableClassTest>().size());
     }
 
     TEST_F(ListableTest, RemovesFromAllObjectLists)
     {
-        EXPECT_EQ(0u, ObjectList<ListableClassTest>::size());
-        EXPECT_EQ(0u, ObjectList<ListableSubclassTest>::size());
+        EXPECT_EQ(0u, ObjectList<ListableClassTest>().size());
+        EXPECT_EQ(0u, ObjectList<ListableSubclassTest>().size());
         {
             ListableSubclassTest test;
-            EXPECT_EQ(1u, ObjectList<ListableClassTest>::size());
+            EXPECT_EQ(1u, ObjectList<ListableClassTest>().size());
             EXPECT_TRUE(objectListContains<ListableClassTest>(&test));
-            EXPECT_EQ(1u, ObjectList<ListableSubclassTest>::size());
+            EXPECT_EQ(1u, ObjectList<ListableSubclassTest>().size());
             EXPECT_TRUE(objectListContains<ListableSubclassTest>(&test));
         }
-        EXPECT_EQ(0u, ObjectList<ListableClassTest>::size());
-        EXPECT_EQ(0u, ObjectList<ListableSubclassTest>::size());
+        EXPECT_EQ(0u, ObjectList<ListableClassTest>().size());
+        EXPECT_EQ(0u, ObjectList<ListableSubclassTest>().size());
     }
 
Index: code/branches/cpp11_v2/test/core/object/ObjectListIteratorTest.cc
===================================================================
--- code/branches/cpp11_v2/test/core/object/ObjectListIteratorTest.cc	(revision 10919)
+++ code/branches/cpp11_v2/test/core/object/ObjectListIteratorTest.cc	(revision 10920)
@@ -55,5 +55,6 @@
     TEST_F(ObjectListIteratorTest, CanAssignIterator)
     {
-        ObjectListIterator<TestClass> it = ObjectList<TestClass>::begin();
+        ObjectList<TestClass> list;
+        ObjectListIterator<TestClass> it = list.begin();
     }
 
@@ -61,5 +62,6 @@
     {
         size_t i = 0;
-        for (ObjectListIterator<TestClass> it = ObjectList<TestClass>::begin(); it != ObjectList<TestClass>::end(); ++it)
+        ObjectList<TestClass> list;
+        for (ObjectListIterator<TestClass> it = list.begin(); it != list.end(); ++it)
             ++i;
         EXPECT_EQ(0u, i);
@@ -74,5 +76,6 @@
 
         size_t i = 0;
-        for (ObjectListIterator<TestClass> it = ObjectList<TestClass>::begin(); it != ObjectList<TestClass>::end(); ++it)
+        ObjectList<TestClass> list;
+        for (ObjectListIterator<TestClass> it = list.begin(); it != list.end(); ++it)
         {
             ++i;
@@ -92,5 +95,6 @@
 
         size_t i = 0;
-        for (ObjectListIterator<TestClass> it = ObjectList<TestClass>::rbegin(); it != ObjectList<TestClass>::rend(); --it)
+        ObjectList<TestClass> list;
+        for (ObjectListIterator<TestClass> it = list.rbegin(); it != list.rend(); --it)
         {
             ++i;
@@ -113,5 +117,6 @@
         EXPECT_CALL(test3, test());
 
-        for (ObjectListIterator<TestClass> it = ObjectList<TestClass>::begin(); it != ObjectList<TestClass>::end(); ++it)
+        ObjectList<TestClass> list;
+        for (ObjectListIterator<TestClass> it = list.begin(); it != list.end(); ++it)
             it->test();
     }
Index: code/branches/cpp11_v2/test/core/object/ObjectListTest.cc
===================================================================
--- code/branches/cpp11_v2/test/core/object/ObjectListTest.cc	(revision 10919)
+++ code/branches/cpp11_v2/test/core/object/ObjectListTest.cc	(revision 10920)
@@ -15,4 +15,5 @@
             public:
                 ListableTest() { RegisterObject(ListableTest); }
+                ListableTest(Context* context) : Listable(context) { RegisterObject(ListableTest); }
                 MOCK_METHOD0(test, void());
         };
@@ -103,3 +104,47 @@
             object->test();
     }
+
+    TEST_F(ObjectListTest, UsesCorrectContext)
+    {
+        Context context1(Context::getRootContext());
+        Context context2(Context::getRootContext());
+
+        ListableTest test1(&context1);
+        ListableTest test2(&context1);
+        ListableTest test3(&context2);
+
+        EXPECT_EQ(3, ObjectList<ListableTest>().size());
+        EXPECT_EQ(2, ObjectList<ListableTest>(&context1).size());
+        EXPECT_EQ(1, ObjectList<ListableTest>(&context2).size());
+    }
+
+    TEST_F(ObjectListTest, CanIterateOverCorrectContext)
+    {
+        Context context1(Context::getRootContext());
+        Context context2(Context::getRootContext());
+
+        ListableTest test1(&context1);
+        ListableTest test2(&context1);
+        ListableTest test3(&context2);
+
+        {
+            size_t i = 0;
+            for (ListableTest* object : ObjectList<ListableTest>(&context1))
+            {
+                ++i;
+                if (i == 1u) EXPECT_EQ(&test1, object);
+                if (i == 2u) EXPECT_EQ(&test2, object);
+            }
+            EXPECT_EQ(2u, i);
+        }
+        {
+            size_t i = 0;
+            for (ListableTest* object : ObjectList<ListableTest>(&context2))
+            {
+                ++i;
+                if (i == 1u) EXPECT_EQ(&test3, object);
+            }
+            EXPECT_EQ(1u, i);
+        }
+    }
 }
