Index: code/branches/core3/src/core/MetaObjectList.h
===================================================================
--- code/branches/core3/src/core/MetaObjectList.h	(revision 1573)
+++ code/branches/core3/src/core/MetaObjectList.h	(revision 1574)
@@ -41,67 +41,26 @@
 #include "CorePrereqs.h"
 
-#include "ObjectList.h"
+#include "ObjectListBase.h"
 #include "Identifier.h"
-#include "Debug.h"
 
 namespace orxonox
 {
-    //! Base-class of MetaObjectListElement, because those is a template
-    class BaseMetaObjectListElement
-    {
-        public:
-            /** @brief Default destructor */
-            virtual ~BaseMetaObjectListElement() {};
-
-            BaseMetaObjectListElement* next_;       //!< The next Element in the list
-    };
-
     // ###############################
     // ###  MetaObjectListElement  ###
     // ###############################
     //! The list-element of the MetaObjectList
-    template <class T>
-    class MetaObjectListElement : public BaseMetaObjectListElement
+    class _CoreExport MetaObjectListElement
     {
         public:
-            MetaObjectListElement(ObjectList<T>* list, ObjectListElement<T>* element);
-            virtual ~MetaObjectListElement();
+            /**
+                @brief Constructor: Creates the list-element with given list and element.
+            */
+            MetaObjectListElement(ObjectListBase* list, ObjectListBaseElement* element) : next_(0), element_(element), list_(list) {}
+            ~MetaObjectListElement();
 
-            ObjectListElement<T>* element_;         //!< The list element, containing the object
-            ObjectList<T>* list_;                   //!< The list, containing the element
+            MetaObjectListElement* next_;       //!< The next Element in the list
+            ObjectListBaseElement* element_;    //!< The list element, containing the object
+            ObjectListBase* list_;              //!< The list, containing the element
     };
-
-    /**
-        @brief Constructor: Creates the list-element with given list and element.
-    */
-    template <class T>
-    MetaObjectListElement<T>::MetaObjectListElement(ObjectList<T>* list, ObjectListElement<T>* element)
-    {
-        this->element_ = element;
-        this->list_ = list;
-        this->next_ = 0;
-    }
-
-    /**
-        @brief Destructor: Removes the ObjectListElement from the ObjectList by linking next_ and prev_ of the ObjectListElement.
-    */
-    template <class T>
-    MetaObjectListElement<T>::~MetaObjectListElement()
-    {
-        COUT(5) << "*** MetaObjectList: Removing Object from " << ClassIdentifier<T>::getIdentifier()->getName() << "-list." << std::endl;
-        this->list_->notifyIterators(this->element_);
-
-        if (this->element_->next_)
-            this->element_->next_->prev_ = this->element_->prev_;
-        else
-            this->list_->last_ = this->element_->prev_; // If there is no next_, we deleted the last object and have to update the last_ pointer of the list
-
-        if (this->element_->prev_)
-            this->element_->prev_->next_ = this->element_->next_;
-        else
-            this->list_->first_ = this->element_->next_; // If there is no prev_, we deleted the first object and have to update the first_ pointer of the list
-
-        delete this->element_;
-    }
 
 
@@ -109,5 +68,5 @@
     // ###     MetaObjectList      ###
     // ###############################
-    //!  The MetaObjectList contains ObjectListElements and their ObjectLists.
+    //!  The MetaObjectList contains ObjectListBaseElements and their ObjectListBases.
     /**
         The MetaObjectList is a single-linked list, containing all list-elements and their
@@ -120,22 +79,8 @@
             MetaObjectList();
             ~MetaObjectList();
-            template <class T>
-            void add(ObjectList<T>* list, ObjectListElement<T>* element);
+            void add(ObjectListBase* list, ObjectListBaseElement* element);
 
-            BaseMetaObjectListElement* first_;      //!< The first element in the list
+            MetaObjectListElement* first_;      //!< The first element in the list
     };
-
-    /**
-        @brief Adds an ObjectList and an element of that list to the MetaObjectList.
-        @param list The ObjectList wherein the element is
-        @param element The element wherein the object is
-    */
-    template <class T>
-    void MetaObjectList::add(ObjectList<T>* list, ObjectListElement<T>* element)
-    {
-        BaseMetaObjectListElement* temp = this->first_;
-        this->first_ = new MetaObjectListElement<T>(list, element);
-        this->first_->next_ = temp;
-    }
 }
 
