Index: code/branches/cpp11_v2/test/core/CMakeLists.txt
===================================================================
--- code/branches/cpp11_v2/test/core/CMakeLists.txt	(revision 10732)
+++ code/branches/cpp11_v2/test/core/CMakeLists.txt	(revision 10736)
@@ -25,4 +25,5 @@
     object/ListableTest.cc
     object/ObjectListBaseTest.cc
+    object/ObjectListTest.cc
     object/ObjectListIteratorTest.cc
     object/StrongPtrTest.cc
Index: code/branches/cpp11_v2/test/core/object/IteratorTest.cc
===================================================================
--- code/branches/cpp11_v2/test/core/object/IteratorTest.cc	(revision 10732)
+++ code/branches/cpp11_v2/test/core/object/IteratorTest.cc	(revision 10736)
@@ -80,3 +80,61 @@
             it->test();
     }
+
+    TEST_F(IteratorTest, CanIterateOverInterfaceListWithInterfaceIterator)
+    {
+        TestClass testClass;
+        TestInterface testInterface;
+
+        size_t i = 0;
+        for (Iterator<TestInterface> it = ObjectList<TestInterface>::begin(); it != ObjectList<TestInterface>::end(); ++it)
+        {
+            ++i;
+            if (i == 1u) EXPECT_EQ(&testClass, *it);
+            if (i == 2u) EXPECT_EQ(&testInterface, *it);
+        }
+        EXPECT_EQ(2u, i);
+    }
+
+    TEST_F(IteratorTest, CanIterateOverClassListWithClassIterator)
+    {
+        TestClass testClass;
+        TestInterface testInterface;
+
+        size_t i = 0;
+        for (Iterator<TestClass> it = ObjectList<TestClass>::begin(); it != ObjectList<TestClass>::end(); ++it)
+        {
+            ++i;
+            if (i == 1u) EXPECT_EQ(&testClass, *it);
+        }
+        EXPECT_EQ(1u, i);
+    }
+
+    TEST_F(IteratorTest, CanIterateOverInterfaceListWithClassIterator)
+    {
+        TestClass testClass;
+        TestInterface testInterface;
+
+        size_t i = 0;
+        for (Iterator<TestClass> it = ObjectList<TestInterface>::begin(); it != ObjectList<TestInterface>::end(); ++it)
+        {
+            ++i;
+            if (i == 1u) EXPECT_EQ(&testClass, *it);
+            if (i == 2u) EXPECT_EQ(NULL, *it);
+        }
+        EXPECT_EQ(2u, i);
+    }
+
+    TEST_F(IteratorTest, CanIterateOverClassListWithInterfaceIterator)
+    {
+        TestClass testClass;
+        TestInterface testInterface;
+
+        size_t i = 0;
+        for (Iterator<TestInterface> it = ObjectList<TestClass>::begin(); it != ObjectList<TestClass>::end(); ++it)
+        {
+            ++i;
+            if (i == 1u) EXPECT_EQ(&testClass, *it);
+        }
+        EXPECT_EQ(1u, i);
+    }
 }
Index: code/branches/cpp11_v2/test/core/object/ObjectListIteratorTest.cc
===================================================================
--- code/branches/cpp11_v2/test/core/object/ObjectListIteratorTest.cc	(revision 10732)
+++ code/branches/cpp11_v2/test/core/object/ObjectListIteratorTest.cc	(revision 10736)
@@ -3,5 +3,6 @@
 
 #include "core/object/ObjectListIterator.h"
-#include "core/object/Listable.h"
+#include "core/class/OrxonoxClass.h"
+#include "core/class/OrxonoxInterface.h"
 #include "core/CoreIncludes.h"
 #include "core/module/ModuleInstance.h"
@@ -11,12 +12,19 @@
     namespace
     {
-        class ListableTest : public Listable
+        class TestInterface : virtual public OrxonoxInterface
         {
             public:
-                ListableTest() { RegisterObject(ListableTest); }
+            TestInterface() { RegisterObject(TestInterface); }
+        };
+
+        class TestClass : public OrxonoxClass, public TestInterface
+        {
+            public:
+                TestClass() { RegisterObject(TestClass); }
                 MOCK_METHOD0(test, void());
         };
 
-        RegisterClassNoArgs(ListableTest);
+        RegisterClassNoArgs(TestInterface);
+        RegisterClassNoArgs(TestClass);
 
         // Fixture
@@ -42,10 +50,10 @@
     TEST_F(ObjectListIteratorTest, CanCreateIterator)
     {
-        ObjectListIterator<ListableTest> it;
+        ObjectListIterator<TestClass> it;
     }
 
     TEST_F(ObjectListIteratorTest, CanAssignIterator)
     {
-        ObjectListIterator<ListableTest> it = ObjectList<ListableTest>::begin();
+        ObjectListIterator<TestClass> it = ObjectList<TestClass>::begin();
     }
 
@@ -53,5 +61,5 @@
     {
         size_t i = 0;
-        for (ObjectListIterator<ListableTest> it = ObjectList<ListableTest>::begin(); it != ObjectList<ListableTest>::end(); ++it)
+        for (ObjectListIterator<TestClass> it = ObjectList<TestClass>::begin(); it != ObjectList<TestClass>::end(); ++it)
             ++i;
         EXPECT_EQ(0u, i);
@@ -60,10 +68,11 @@
     TEST_F(ObjectListIteratorTest, CanIterateOverFullList)
     {
-        ListableTest test1;
-        ListableTest test2;
-        ListableTest test3;
+        TestClass test1;
+        TestClass test2;
+        TestClass test3;
+        TestInterface interface;
 
         size_t i = 0;
-        for (ObjectListIterator<ListableTest> it = ObjectList<ListableTest>::begin(); it != ObjectList<ListableTest>::end(); ++it)
+        for (ObjectListIterator<TestClass> it = ObjectList<TestClass>::begin(); it != ObjectList<TestClass>::end(); ++it)
         {
             ++i;
@@ -77,10 +86,11 @@
     TEST_F(ObjectListIteratorTest, CanIterateReverseOverFullList)
     {
-        ListableTest test1;
-        ListableTest test2;
-        ListableTest test3;
+        TestClass test1;
+        TestClass test2;
+        TestClass test3;
+        TestInterface interface;
 
         size_t i = 0;
-        for (ObjectListIterator<ListableTest> it = ObjectList<ListableTest>::rbegin(); it != ObjectList<ListableTest>::rend(); --it)
+        for (ObjectListIterator<TestClass> it = ObjectList<TestClass>::rbegin(); it != ObjectList<TestClass>::rend(); --it)
         {
             ++i;
@@ -94,7 +104,8 @@
     TEST_F(ObjectListIteratorTest, CanCallObjects)
     {
-        ListableTest test1;
-        ListableTest test2;
-        ListableTest test3;
+        TestClass test1;
+        TestClass test2;
+        TestClass test3;
+        TestInterface interface;
 
         EXPECT_CALL(test1, test());
@@ -102,5 +113,5 @@
         EXPECT_CALL(test3, test());
 
-        for (ObjectListIterator<ListableTest> it = ObjectList<ListableTest>::begin(); it != ObjectList<ListableTest>::end(); ++it)
+        for (ObjectListIterator<TestClass> it = ObjectList<TestClass>::begin(); it != ObjectList<TestClass>::end(); ++it)
             it->test();
     }
Index: code/branches/cpp11_v2/test/core/object/ObjectListTest.cc
===================================================================
--- code/branches/cpp11_v2/test/core/object/ObjectListTest.cc	(revision 10736)
+++ code/branches/cpp11_v2/test/core/object/ObjectListTest.cc	(revision 10736)
@@ -0,0 +1,105 @@
+#include <gtest/gtest.h>
+#include <gmock/gmock.h>
+
+#include "core/object/ObjectListIterator.h"
+#include "core/object/Listable.h"
+#include "core/CoreIncludes.h"
+#include "core/module/ModuleInstance.h"
+
+namespace orxonox
+{
+    namespace
+    {
+        class ListableTest : public Listable
+        {
+            public:
+                ListableTest() { RegisterObject(ListableTest); }
+                MOCK_METHOD0(test, void());
+        };
+
+        RegisterClassNoArgs(ListableTest);
+
+        // Fixture
+        class ObjectListTest : public ::testing::Test
+        {
+            public:
+                virtual void SetUp()
+                {
+                    new IdentifierManager();
+                    ModuleInstance::getCurrentModuleInstance()->loadAllStaticallyInitializedInstances(StaticInitialization::IDENTIFIER);
+                    Context::setRootContext(new Context(NULL));
+                }
+
+                virtual void TearDown()
+                {
+                    Context::destroyRootContext();
+                    ModuleInstance::getCurrentModuleInstance()->unloadAllStaticallyInitializedInstances(StaticInitialization::IDENTIFIER);
+                    delete &IdentifierManager::getInstance();
+                }
+        };
+    }
+    
+    TEST_F(ObjectListTest, CanIterateOverEmptyList)
+    {
+        size_t i = 0;
+        for (ListableTest* object : ObjectList<ListableTest>())
+        {
+            ++i;
+            ((void*)object); // avoid warning about unused variable
+        }
+        EXPECT_EQ(0u, i);
+    }
+
+    TEST_F(ObjectListTest, CanIterateOverFullList)
+    {
+        ListableTest test1;
+        ListableTest test2;
+        ListableTest test3;
+
+        size_t i = 0;
+        for (ListableTest* object : ObjectList<ListableTest>())
+        {
+            ++i;
+            if (i == 1u) EXPECT_EQ(&test1, object);
+            if (i == 2u) EXPECT_EQ(&test2, object);
+            if (i == 3u) EXPECT_EQ(&test3, object);
+        }
+        EXPECT_EQ(3u, i);
+    }
+    
+    TEST_F(ObjectListTest, CanIterateOverFullList_Expanded)
+    {
+        ListableTest test1;
+        ListableTest test2;
+        ListableTest test3;
+
+        size_t i = 0;
+        ObjectList<ListableTest>&& __range = ObjectList<ListableTest>();
+        ObjectListIterator<ListableTest> __begin = __range.begin();
+        ObjectListIterator<ListableTest>__end = __range.end();
+        for (; __begin != __end; ++__begin)
+        {
+            ListableTest* object = *__begin;
+
+            ++i;
+            if (i == 1u) EXPECT_EQ(&test1, object);
+            if (i == 2u) EXPECT_EQ(&test2, object);
+            if (i == 3u) EXPECT_EQ(&test3, object);
+        }
+        EXPECT_EQ(3u, i);
+    }
+    
+    TEST_F(ObjectListTest, CanCallObjects)
+    {
+        ListableTest test1;
+        ListableTest test2;
+        ListableTest test3;
+
+        EXPECT_CALL(test1, test());
+        EXPECT_CALL(test2, test());
+        EXPECT_CALL(test3, test());
+
+        for (ListableTest* object : ObjectList<ListableTest>())
+            object->test();
+    }
+}
