Index: code/branches/objecthierarchie/src/IdentifierIncludes.h
===================================================================
--- code/branches/objecthierarchie/src/IdentifierIncludes.h	(revision 247)
+++ code/branches/objecthierarchie/src/IdentifierIncludes.h	(revision 248)
@@ -2,6 +2,4 @@
 #include "Factory.h"
 #include "ClassFactory.h"
-//#include "IdentifierList.h"
-//#include "ObjectList.h"
 #include "Iterator.h"
 #include "OrxonoxClass.h"
Index: code/branches/objecthierarchie/src/Iterator.h
===================================================================
--- code/branches/objecthierarchie/src/Iterator.h	(revision 247)
+++ code/branches/objecthierarchie/src/Iterator.h	(revision 248)
@@ -10,53 +10,21 @@
             Iterator()
             {
-                this->elementForwards_ = ClassIdentifier<T>::getIdentifier()->objects_->first_;
-                this->elementBackwards_ = ClassIdentifier<T>::getIdentifier()->objects_->last_;
-                this->iteratingForwards_ = true;
+                this->element_ = 0;
             }
 
-            Iterator<T> operator++(int step)
+            Iterator(ObjectListElement<T>* element)
             {
-                Iterator<T> copy = *this;
-
-                if (step < 1)
-                    step = 1;
-
-                for (int i = 0; i < step; i++)
-                    this->elementForwards_ = this->elementForwards_->next_;
-
-                return copy;
+                this->element_ = element;
             }
 
             Iterator<T> operator++()
             {
-                this->elementForwards_ = this->elementForwards_->next_;
+                this->element_ = this->element_->next_;
                 return *this;
-            }
-
-            Iterator<T> operator--(int step)
-            {
-                Iterator<T> copy = *this;
-
-                if (this->iteratingForwards_)
-                {
-                    this->iteratingForwards_ = false;
-                }
-                else
-                {
-                    if (step < 1)
-                        step = 1;
-
-                    for (int i = 0; i < step; i++)
-                        this->elementBackwards_ = this->elementBackwards_->prev_;
-                }
             }
 
             Iterator<T> operator--()
             {
-                if (this->iteratingForwards_)
-                    this->iteratingForwards_ = false;
-                else
-                    this->elementBackwards_ = this->elementBackwards_->prev_;
-
+                this->element_ = this->element_->prev_;
                 return *this;
             }
@@ -64,16 +32,10 @@
             T* operator*()
             {
-                if (this->iteratingForwards_)
-                    return this->elementForwards_->object_;
-                else
-                    return this->elementBackwards_->object_;
+                return this->element_->object_;
             }
 
             T* operator->() const
             {
-                if (this->iteratingForwards_)
-                    return this->elementForwards_->object_;
-                else
-                    return this->elementBackwards_->object_;
+                return this->element_->object_;
 
             }
@@ -81,8 +43,5 @@
             operator bool()
             {
-                if (this->iteratingForwards_)
-                    return (this->elementForwards_ != 0);
-                else
-                    return (this->elementBackwards_->prev_ != 0);
+                return (this->element_ != 0);
             }
 
@@ -92,15 +51,9 @@
                     std::cout << "Warning: Comparing the " << ClassIdentifier<T>::getIdentifier()->getName() << "-List-Iterator with " << compare << " has no effect. Only comparison with 0 works.\n";
 
-                if (this->iteratingForwards_)
-                    return (this->elementForwards_ != 0);
-                else
-                    return (this->elementBackwards_->prev_ != 0);
+                return (this->element_ != 0);
             }
 
-
         private:
-            ObjectListElement<T>* elementForwards_;
-            ObjectListElement<T>* elementBackwards_;
-            bool iteratingForwards_;
+            ObjectListElement<T>* element_;
     };
 }
Index: code/branches/objecthierarchie/src/ObjectList.h
===================================================================
--- code/branches/objecthierarchie/src/ObjectList.h	(revision 247)
+++ code/branches/objecthierarchie/src/ObjectList.h	(revision 248)
@@ -39,4 +39,7 @@
     // ###############################
     template <class T>
+    class Iterator;
+
+    template <class T>
     class ObjectList
     {
@@ -47,7 +50,18 @@
             void remove(OrxonoxClass* object, bool bIterateForwards = true);
 
+            inline static Iterator<T> start()
+                { Iterator<T>(pointer_s->first_); }
+            inline static Iterator<T> end()
+                { Iterator<T>(pointer_s->last_); }
+
             ObjectListElement<T>* first_;
             ObjectListElement<T>* last_;
+
+        private:
+            static ObjectList<T>* pointer_s;
     };
+
+    template <class T>
+    ObjectList<T>* ObjectList<T>::pointer_s = 0;
 
     template <class T>
@@ -56,4 +70,6 @@
         this->first_ = 0;
         this->last_ = 0;
+
+        this->pointer_s = this;
     }
 
Index: code/branches/objecthierarchie/src/orxonox.cc
===================================================================
--- code/branches/objecthierarchie/src/orxonox.cc	(revision 247)
+++ code/branches/objecthierarchie/src/orxonox.cc	(revision 248)
@@ -435,5 +435,5 @@
         delete test9_06;
 */
-/*
+
         std::cout << "Test 10\n";
         Identifier* test10_01 = Class(A1B2);
@@ -451,13 +451,14 @@
         std::cout << "1\n";
         int count;
-        count = 0; for (Iterator<BaseObject> it; it != 0; ++it) { count++; }
+
+        count = 0; for (Iterator<BaseObject> it = ObjectList<BaseObject>::start(); it != 0; ++it) { count++; }
         std::cout << "Anzahl BaseObjects: " << count << "\n";
-        count = 0; for (Iterator<A1> it; it != 0; ++it) { count++; }
+        count = 0; for (Iterator<A1> it = ObjectList<A1>::start(); it != 0; ++it) { count++; }
         std::cout << "Anzahl A1: " << count << "\n";
-        count = 0; for (Iterator<A1B1> it; it; ++it) { count++; }
+        count = 0; for (Iterator<A1B1> it = ObjectList<A1B1>::start(); it; ++it) { count++; }
         std::cout << "Anzahl A1B1: " << count << "\n";
-        count = 0; for (Iterator<A1B1C1> it; it; ++it) { count++; }
+        count = 0; for (Iterator<A1B1C1> it = ObjectList<A1B1C1>::start(); it; ++it) { count++; }
         std::cout << "Anzahl A1B1C1: " << count << "\n";
-        count = 0; for (Iterator<A2> it; it; ++it) { count++; }
+        count = 0; for (Iterator<A2> it = ObjectList<A2>::start(); it; ++it) { count++; }
         std::cout << "Anzahl A2: " << count << "\n";
 
@@ -479,20 +480,20 @@
         }
 
-        count = 0; for (Iterator<BaseObject> it; it != 0; ++it) { count++; }
+        count = 0; for (Iterator<BaseObject> it = ObjectList<BaseObject>::start(); it != 0; ++it) { count++; }
         std::cout << "Anzahl BaseObjects: " << count << "\n";
-        count = 0; for (Iterator<A1> it; it != 0; ++it) { count++; }
+        count = 0; for (Iterator<A1> it = ObjectList<A1>::start(); it != 0; ++it) { count++; }
         std::cout << "Anzahl A1: " << count << "\n";
-        count = 0; for (Iterator<A1B1> it; it; ++it) { count++; }
+        count = 0; for (Iterator<A1B1> it = ObjectList<A1B1>::start(); it; ++it) { count++; }
         std::cout << "Anzahl A1B1: " << count << "\n";
-        count = 0; for (Iterator<A1B1C1> it; it; ++it) { count++; }
+        count = 0; for (Iterator<A1B1C1> it = ObjectList<A1B1C1>::start(); it; ++it) { count++; }
         std::cout << "Anzahl A1B1C1: " << count << "\n";
-        count = 0; for (Iterator<A2> it; it; ++it) { count++; }
+        count = 0; for (Iterator<A2> it = ObjectList<A2>::start(); it; ++it) { count++; }
         std::cout << "Anzahl A2: " << count << "\n";
 
-        for (Iterator<A2B1C1> it; it; ++it)
+        for (Iterator<A2B1C1> it = ObjectList<A2B1C1>::start(); it; ++it)
             std::cout << "Name: " << it->name_ << "\n";
 
         std::cout << "3\n";
-        for (Iterator<A2B1C1> it; it; --it)
+        for (Iterator<A2B1C1> it = ObjectList<A2B1C1>::end(); it; --it)
             std::cout << "Name: " << it->name_ << "\n";
 
@@ -500,21 +501,21 @@
         delete test10_08;
 
-        count = 0; for (Iterator<BaseObject> it; it != 0; ++it) { count++; }
+        count = 0; for (Iterator<BaseObject> it = ObjectList<BaseObject>::start(); it != 0; ++it) { count++; }
         std::cout << "Anzahl BaseObjects: " << count << "\n";
-        count = 0; for (Iterator<A1> it; it != 0; ++it) { count++; }
+        count = 0; for (Iterator<A1> it = ObjectList<A1>::start(); it != 0; ++it) { count++; }
         std::cout << "Anzahl A1: " << count << "\n";
-        count = 0; for (Iterator<A1B1> it; it; ++it) { count++; }
+        count = 0; for (Iterator<A1B1> it = ObjectList<A1B1>::start(); it; ++it) { count++; }
         std::cout << "Anzahl A1B1: " << count << "\n";
-        count = 0; for (Iterator<A1B1C1> it; it; ++it) { count++; }
+        count = 0; for (Iterator<A1B1C1> it = ObjectList<A1B1C1>::start(); it; ++it) { count++; }
         std::cout << "Anzahl A1B1C1: " << count << "\n";
-        count = 0; for (Iterator<A2> it; it; ++it) { count++; }
+        count = 0; for (Iterator<A2> it = ObjectList<A2>::start(); it; ++it) { count++; }
         std::cout << "Anzahl A2: " << count << "\n";
 
         std::cout << "5\n";
-        for (Iterator<A2B1C1> it; it; ++it)
+        for (Iterator<A2B1C1> it = ObjectList<A2B1C1>::start(); it; ++it)
             std::cout << "Name: " << it->name_ << "\n";
 
         std::cout << "6\n";
-        for (Iterator<A2B1C1> it; it; --it)
+        for (Iterator<A2B1C1> it = ObjectList<A2B1C1>::end(); it; --it)
             std::cout << "Name: " << it->name_ << "\n";
 
@@ -522,21 +523,21 @@
         delete test10_09;
 
-        count = 0; for (Iterator<BaseObject> it; it != 0; ++it) { count++; }
+        count = 0; for (Iterator<BaseObject> it = ObjectList<BaseObject>::end(); it != 0; --it) { count++; }
         std::cout << "Anzahl BaseObjects: " << count << "\n";
-        count = 0; for (Iterator<A1> it; it != 0; ++it) { count++; }
+        count = 0; for (Iterator<A1> it = ObjectList<A1>::end(); it != 0; --it) { count++; }
         std::cout << "Anzahl A1: " << count << "\n";
-        count = 0; for (Iterator<A1B1> it; it; ++it) { count++; }
+        count = 0; for (Iterator<A1B1> it = ObjectList<A1B1>::end(); it; --it) { count++; }
         std::cout << "Anzahl A1B1: " << count << "\n";
-        count = 0; for (Iterator<A1B1C1> it; it; ++it) { count++; }
+        count = 0; for (Iterator<A1B1C1> it = ObjectList<A1B1C1>::end(); it; --it) { count++; }
         std::cout << "Anzahl A1B1C1: " << count << "\n";
-        count = 0; for (Iterator<A2> it; it; ++it) { count++; }
+        count = 0; for (Iterator<A2> it = ObjectList<A2>::end(); it; --it) { count++; }
         std::cout << "Anzahl A2: " << count << "\n";
 
         std::cout << "8\n";
-        for (Iterator<A2B1C1> it; it; ++it)
+        for (Iterator<A2B1C1> it = ObjectList<A2B1C1>::start(); it; ++it)
             std::cout << "Name: " << it->name_ << "\n";
 
         std::cout << "9\n";
-        for (Iterator<A2B1C1> it; it; --it)
+        for (Iterator<A2B1C1> it = ObjectList<A2B1C1>::end(); it; --it)
             std::cout << "Name: " << it->name_ << "\n";
 
@@ -544,23 +545,23 @@
         delete test10_10;
 
-        count = 0; for (Iterator<BaseObject> it; it != 0; ++it) { count++; }
+        count = 0; for (Iterator<BaseObject> it = ObjectList<BaseObject>::start(); it != 0; ++it) { count++; }
         std::cout << "Anzahl BaseObjects: " << count << "\n";
-        count = 0; for (Iterator<A1> it; it != 0; ++it) { count++; }
+        count = 0; for (Iterator<A1> it = ObjectList<A1>::start(); it != 0; ++it) { count++; }
         std::cout << "Anzahl A1: " << count << "\n";
-        count = 0; for (Iterator<A1B1> it; it; ++it) { count++; }
+        count = 0; for (Iterator<A1B1> it = ObjectList<A1B1>::start(); it; ++it) { count++; }
         std::cout << "Anzahl A1B1: " << count << "\n";
-        count = 0; for (Iterator<A1B1C1> it; it; ++it) { count++; }
+        count = 0; for (Iterator<A1B1C1> it = ObjectList<A1B1C1>::start(); it; ++it) { count++; }
         std::cout << "Anzahl A1B1C1: " << count << "\n";
-        count = 0; for (Iterator<A2> it; it; ++it) { count++; }
+        count = 0; for (Iterator<A2> it = ObjectList<A2>::start(); it; ++it) { count++; }
         std::cout << "Anzahl A2: " << count << "\n";
 
         std::cout << "11\n";
-        for (Iterator<A2B1C1> it; it; ++it)
+        for (Iterator<A2B1C1> it = ObjectList<A2B1C1>::start(); it; ++it)
             std::cout << "Name: " << it->name_ << "\n";
 
         std::cout << "12\n";
-        for (Iterator<A2B1C1> it; it; --it)
+        for (Iterator<A2B1C1> it = ObjectList<A2B1C1>::end(); it; --it)
             std::cout << "Name: " << it->name_ << "\n";
-*/
+
 
       }
