Index: /code/branches/core6/src/libraries/core/CorePrereqs.h
===================================================================
--- /code/branches/core6/src/libraries/core/CorePrereqs.h	(revision 9571)
+++ /code/branches/core6/src/libraries/core/CorePrereqs.h	(revision 9572)
@@ -161,4 +161,5 @@
     class Iterator;
     class Language;
+    class Listable;
     class LuaFunctor;
     class LuaState;
Index: /code/branches/core6/src/libraries/core/class/Identifiable.cc
===================================================================
--- /code/branches/core6/src/libraries/core/class/Identifiable.cc	(revision 9571)
+++ /code/branches/core6/src/libraries/core/class/Identifiable.cc	(revision 9572)
@@ -48,5 +48,4 @@
         this->identifier_ = 0;
         this->parents_ = 0;
-        this->metaList_ = new MetaObjectList();
         // Optimisation
         this->objectPointers_.reserve(6);
@@ -58,22 +57,7 @@
     Identifiable::~Identifiable()
     {
-//        if (!this->requestedDestruction_)
-//            orxout(internal_warning) << "Destroyed object without destroy() (" << this->getIdentifier()->getName() << ')' << endl;
-
-        this->unregisterObject();
-
         // parents_ exists only if isCreatingHierarchy() of the associated Identifier returned true while creating the class
         if (this->parents_)
             delete this->parents_;
-    }
-
-    /**
-        @brief Removes this object from the object-lists.
-    */
-    void Identifiable::unregisterObject()
-    {
-        if (this->metaList_)
-            delete this->metaList_;
-        this->metaList_ = 0;
     }
 
Index: /code/branches/core6/src/libraries/core/class/Identifiable.h
===================================================================
--- /code/branches/core6/src/libraries/core/class/Identifiable.h	(revision 9571)
+++ /code/branches/core6/src/libraries/core/class/Identifiable.h	(revision 9572)
@@ -56,6 +56,4 @@
             Identifiable();
             virtual ~Identifiable();
-
-            void unregisterObject();
 
             /// Returns the Identifier of the object.
@@ -120,7 +118,6 @@
 
         private:
-            Identifier* identifier_;                                //!< The Identifier of the object
-            std::set<const Identifier*>* parents_;                  //!< List of all parents of the object
-            MetaObjectList* metaList_;                              //!< MetaObjectList, containing all ObjectLists and ObjectListElements the object is registered in
+            Identifier* identifier_;               //!< The Identifier of the object
+            std::set<const Identifier*>* parents_; //!< List of all parents of the object
 
             /// 'Fast map' that holds this-pointers of all derived types
Index: /code/branches/core6/src/libraries/core/class/Identifier.h
===================================================================
--- /code/branches/core6/src/libraries/core/class/Identifier.h	(revision 9571)
+++ /code/branches/core6/src/libraries/core/class/Identifier.h	(revision 9572)
@@ -288,4 +288,7 @@
 
             bool initialiseObject(T* object, const std::string& className, bool bRootClass);
+
+            void addObjectToList(T* object, Listable*);
+            void addObjectToList(T* object, Identifiable*);
 
             void updateConfigValues(bool updateChildren = true) const;
@@ -392,6 +395,5 @@
         else
         {
-            orxout(verbose, context::object_list) << "Added object to " << this->getName() << "-list." << endl;
-            object->metaList_->add(this->objects_, this->objects_->add(new ObjectListElement<T>(object)));
+            this->addObjectToList(object, object);
 
             // Add pointer of type T to the map in the Identifiable instance that enables "dynamic_casts"
@@ -399,4 +401,20 @@
             return false;
         }
+    }
+
+    /**
+     * @brief Only adds the object to the object list if is a @ref Listable
+     */
+    template <class T>
+    void ClassIdentifier<T>::addObjectToList(T* object, Listable*)
+    {
+        orxout(verbose, context::object_list) << "Added object to " << this->getName() << "-list." << endl;
+        object->metaList_->add(this->objects_, this->objects_->add(new ObjectListElement<T>(object)));
+    }
+
+    template <class T>
+    void ClassIdentifier<T>::addObjectToList(T*, Identifiable*)
+    {
+        // no action
     }
 
Index: /code/branches/core6/src/libraries/core/class/OrxonoxClass.h
===================================================================
--- /code/branches/core6/src/libraries/core/class/OrxonoxClass.h	(revision 9571)
+++ /code/branches/core6/src/libraries/core/class/OrxonoxClass.h	(revision 9572)
@@ -43,5 +43,5 @@
 #include "core/CorePrereqs.h"
 
-#include "Identifiable.h"
+#include "core/object/Listable.h"
 #include "core/object/Destroyable.h"
 
@@ -53,5 +53,5 @@
         The BaseObject and Interfaces are derived with @c virtual @c public @c OrxonoxClass from OrxonoxClass.
     */
-    class _CoreExport OrxonoxClass : public Identifiable, public Destroyable
+    class _CoreExport OrxonoxClass : virtual public Listable, virtual public Destroyable
     {
         public:
Index: /code/branches/core6/src/libraries/core/object/CMakeLists.txt
===================================================================
--- /code/branches/core6/src/libraries/core/object/CMakeLists.txt	(revision 9571)
+++ /code/branches/core6/src/libraries/core/object/CMakeLists.txt	(revision 9572)
@@ -3,4 +3,5 @@
   ContextObject.cc
   Destroyable.cc
+  Listable.cc
   MetaObjectList.cc
   ObjectListBase.cc
Index: /code/branches/core6/src/libraries/core/object/Listable.cc
===================================================================
--- /code/branches/core6/src/libraries/core/object/Listable.cc	(revision 9572)
+++ /code/branches/core6/src/libraries/core/object/Listable.cc	(revision 9572)
@@ -0,0 +1,65 @@
+/*
+ *   ORXONOX - the hottest 3D action shooter ever to exist
+ *                    > www.orxonox.net <
+ *
+ *
+ *   License notice:
+ *
+ *   This program is free software; you can redistribute it and/or
+ *   modify it under the terms of the GNU General Public License
+ *   as published by the Free Software Foundation; either version 2
+ *   of the License, or (at your option) any later version.
+ *
+ *   This program is distributed in the hope that it will be useful,
+ *   but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *   GNU General Public License for more details.
+ *
+ *   You should have received a copy of the GNU General Public License
+ *   along with this program; if not, write to the Free Software
+ *   Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
+ *
+ *   Author:
+ *      Fabian 'x3n' Landau
+ *   Co-authors:
+ *      ...
+ *
+ */
+
+/**
+    @file
+    @brief Implementation of Listable.
+*/
+
+#include "Listable.h"
+
+#include "core/object/MetaObjectList.h"
+
+namespace orxonox
+{
+    /**
+        @brief Constructor: creates the meta-object-list.
+    */
+    Listable::Listable()
+    {
+        this->metaList_ = new MetaObjectList();
+    }
+
+    /**
+        @brief Destructor: Removes the object from the object-lists
+    */
+    Listable::~Listable()
+    {
+        this->unregisterObject();
+    }
+
+    /**
+        @brief Removes this object from the object-lists.
+    */
+    void Listable::unregisterObject()
+    {
+        if (this->metaList_)
+            delete this->metaList_;
+        this->metaList_ = 0;
+    }
+}
Index: /code/branches/core6/src/libraries/core/object/Listable.h
===================================================================
--- /code/branches/core6/src/libraries/core/object/Listable.h	(revision 9572)
+++ /code/branches/core6/src/libraries/core/object/Listable.h	(revision 9572)
@@ -0,0 +1,62 @@
+/*
+ *   ORXONOX - the hottest 3D action shooter ever to exist
+ *                    > www.orxonox.net <
+ *
+ *
+ *   License notice:
+ *
+ *   This program is free software; you can redistribute it and/or
+ *   modify it under the terms of the GNU General Public License
+ *   as published by the Free Software Foundation; either version 2
+ *   of the License, or (at your option) any later version.
+ *
+ *   This program is distributed in the hope that it will be useful,
+ *   but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *   GNU General Public License for more details.
+ *
+ *   You should have received a copy of the GNU General Public License
+ *   along with this program; if not, write to the Free Software
+ *   Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
+ *
+ *   Author:
+ *      Fabian 'x3n' Landau
+ *   Co-authors:
+ *      ...
+ *
+ */
+
+/**
+    @file
+    @ingroup Object ObjectList
+    @brief Declaration of Listable, the base of all classes whose instances can be stored in object lists.
+*/
+
+#ifndef _Listable_H__
+#define _Listable_H__
+
+#include "core/CorePrereqs.h"
+#include "core/class/Identifiable.h"
+
+namespace orxonox
+{
+    /**
+        @brief Listable stores the MetaObjectList which is used when storing instances in object lists.
+    */
+    class _CoreExport Listable : virtual public Identifiable
+    {
+        template <class T>
+        friend class ClassIdentifier;
+
+        public:
+            Listable();
+            virtual ~Listable();
+
+            void unregisterObject();
+
+        private:
+            MetaObjectList* metaList_; //!< MetaObjectList, containing all ObjectLists and ObjectListElements the object is registered in
+    };
+}
+
+#endif /* _Listable_H__ */
