Index: trunk/src/util/Makefile.am
===================================================================
--- trunk/src/util/Makefile.am	(revision 5708)
+++ trunk/src/util/Makefile.am	(revision 5750)
@@ -5,4 +5,5 @@
 
 libORXutils_a_SOURCES = fast_factory.cc \
+			object_manager.cc \
                         loading/factory.cc \
 			garbage_collector.cc \
@@ -18,7 +19,8 @@
 			track/pilot_node.cc \
 			track/track_manager.cc \
-			track/track_node.cc
+			track/track_node.cc 
 
 noinst_HEADERS =        fast_factory.h \
+			object_manager.h \
 			garbage_collector.h \
 			state.h \
Index: trunk/src/util/fast_factory.cc
===================================================================
--- trunk/src/util/fast_factory.cc	(revision 5708)
+++ trunk/src/util/fast_factory.cc	(revision 5750)
@@ -13,5 +13,5 @@
 */
 
-#define DEBUG_SPECIAL_MODULE DEBUG_MODULE_OBJECT_MANAGER
+#define DEBUG_SPECIAL_MODULE DEBUG_MODULE_LOAD
 
 #include "fast_factory.h"
Index: trunk/src/util/loading/factory.cc
===================================================================
--- trunk/src/util/loading/factory.cc	(revision 5708)
+++ trunk/src/util/loading/factory.cc	(revision 5750)
@@ -34,5 +34,5 @@
    set everything to zero and define factoryName
 */
-Factory::Factory (const char* factoryName)
+Factory::Factory (const char* factoryName, ClassID classID)
 {
   this->setClassID(CL_FACTORY, "Factory");
@@ -40,4 +40,5 @@
 
   this->next = NULL;
+  this->classID = classID;
 
   Factory::registerFactory(this);
Index: trunk/src/util/loading/factory.h
===================================================================
--- trunk/src/util/loading/factory.h	(revision 5708)
+++ trunk/src/util/loading/factory.h	(revision 5750)
@@ -33,6 +33,6 @@
  * this should be used at the beginning of all the Classes that should be loadable (in the cc-file)
 */
-#define CREATE_FACTORY(CLASS_NAME) \
-    tFactory<CLASS_NAME>* global_##CLASS_NAME##_Factory = new tFactory<CLASS_NAME>(#CLASS_NAME)
+#define CREATE_FACTORY(CLASS_NAME, CLASS_ID) \
+    tFactory<CLASS_NAME>* global_##CLASS_NAME##_Factory = new tFactory<CLASS_NAME>(#CLASS_NAME, CLASS_ID)
 
 //! The Factory is a loadable object handler
@@ -40,8 +40,9 @@
 
  public:
-  Factory (const char* factoryName = NULL);
+  Factory (const char* factoryName = NULL, ClassID classID = CL_NULL);
   virtual ~Factory ();
 
   void fabricate(const char* className, const char* entityName);
+  virtual BaseObject* fabricate(ClassID classID) = NULL;
   virtual BaseObject* fabricate(const TiXmlElement* root) = NULL;
   virtual BaseObject* fabricateDirect() = NULL;
@@ -57,4 +58,8 @@
     Factory* getNext() const { return this->next; };
 
+
+  protected:
+    ClassID           classID;              //!< The CLass-Identifyer of the Factory.
+
   private:
     Factory*          next;                 //!< pointer to the next factory.
@@ -64,15 +69,16 @@
 /**
  *  a factory that is able to load any kind of Object
-   (this is a Functor)
-*/
+ * (this is a Functor)
+ */
 template<class T> class tFactory : public Factory
 {
- public:
-  tFactory(const char* factoryName);
-  virtual ~tFactory();
+  public:
+    tFactory(const char* factoryName, ClassID classID);
+    virtual ~tFactory();
 
   private:
-  virtual BaseObject* fabricate(const TiXmlElement* root);
-  virtual BaseObject* fabricateDirect();
+    virtual BaseObject* fabricate(ClassID classID);
+    virtual BaseObject* fabricate(const TiXmlElement* root);
+    virtual BaseObject* fabricateDirect();
 };
 
@@ -82,16 +88,23 @@
 */
 template<class T>
-tFactory<T>::tFactory(const char* factoryName) : Factory(factoryName)
+    tFactory<T>::tFactory(const char* factoryName, ClassID classID) : Factory(factoryName, classID)
 {
   PRINTF(4)("Class: %s loadable\n", this->getName());
 }
 
-
+/**
+ * destructs the type-Factory
+ */
 template<class T>
-tFactory<T>::~tFactory()
+    tFactory<T>::~tFactory()
 {}
 
+/**
+ * fabricates an Object of type T, with the constructor T::T(const TiXmlElemnt*)
+ * @param root the TiXmlElement T should load parameters from.
+ * @return the newly fabricated T, NULL otherwise.
+ */
 template<class T>
-BaseObject* tFactory<T>::fabricate(const TiXmlElement* root)
+    BaseObject* tFactory<T>::fabricate(const TiXmlElement* root)
 {
   if (root == NULL)
@@ -106,4 +119,24 @@
 }
 
+
+/**
+ * fabricates an Object of type T, with the constructor T::T(const TiXmlElemnt*)
+ * @param classID the ClassID of T that should be created.
+ * @return the newly fabricated T if fabricated NULL otherwise.
+ */
+template<class T>
+    BaseObject* tFactory<T>::fabricate(ClassID classID)
+{
+  if(classID == this->classID)
+    return this->fabricateDirect();
+  else if( getNext() != NULL)
+    return getNext()->fabricate( classID);
+  else
+    return NULL;
+}
+
+/**
+ * directly fabricate an Entity of this factory.
+ */
 template<class T>
     BaseObject* tFactory<T>::fabricateDirect()
Index: trunk/src/util/object_manager.cc
===================================================================
--- trunk/src/util/object_manager.cc	(revision 5750)
+++ trunk/src/util/object_manager.cc	(revision 5750)
@@ -0,0 +1,43 @@
+/*
+   orxonox - the future of 3D-vertical-scrollers
+
+   Copyright (C) 2004 orx
+
+   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, or (at your option)
+   any later version.
+
+   ### File Specific:
+   main-programmer: ...
+   co-programmer: ...
+*/
+
+//#define DEBUG_SPECIAL_MODULE DEBUG_MODULE_WORLD_ENTITY
+
+#include "object_manager.h"
+
+using namespace std;
+
+
+/**
+ * standard constructor
+ */
+ObjectManager::ObjectManager ()
+{
+   this->setClassID(CL_OBJECT_MANAGER, "ObjectManager");
+   this->setName("ObjectManager");
+}
+
+/**
+ *  the singleton reference to this class
+ */
+ObjectManager* ObjectManager::singletonRef = NULL;
+
+/**
+   @brief standard deconstructor
+ */
+ObjectManager::~ObjectManager ()
+{
+  ObjectManager::singletonRef = NULL;
+}
Index: trunk/src/util/object_manager.h
===================================================================
--- trunk/src/util/object_manager.h	(revision 5750)
+++ trunk/src/util/object_manager.h	(revision 5750)
@@ -0,0 +1,43 @@
+/*!
+ * @file object_manager.h
+ * @brief Definition of the ... singleton Class
+*/
+
+#ifndef _OBJECT_MANAGER_H
+#define _OBJECT_MANAGER_H
+
+#include "base_object.h"
+#include <list>
+
+// FORWARD DECLARATION
+
+
+class ObjectGroupList
+{
+
+
+
+};
+
+
+//! A default singleton class.
+class ObjectManager : public BaseObject {
+
+ public:
+  virtual ~ObjectManager(void);
+  /** @returns a Pointer to the only object of this Class */
+  inline static ObjectManager* getInstance(void) { if (!ObjectManager::singletonRef) ObjectManager::singletonRef = new ObjectManager();  return ObjectManager::singletonRef; };
+
+
+  ObjectGroupList* getGroupList( );
+
+ private:
+  ObjectManager(void);
+  static ObjectManager* singletonRef;
+
+  std::list<ObjectGroupList>           groupList;
+
+
+};
+
+#endif /* _OBJECT_MANAGER_H */
