Index: /trunk/src/defs/class_id.h
===================================================================
--- /trunk/src/defs/class_id.h	(revision 6279)
+++ /trunk/src/defs/class_id.h	(revision 6280)
@@ -35,7 +35,4 @@
 //! list of all classes to be loadable in via the ObjectManager
 /**
- * inheritance is done in the following way: Classes are identified by
- * a HEX-number eg: 0xa0b18a05
- * The number has 8^4 entries.
  *
  * -------------------------------------------------------------------------------------------
Index: /trunk/src/lib/lang/base_object.cc
===================================================================
--- /trunk/src/lib/lang/base_object.cc	(revision 6279)
+++ /trunk/src/lib/lang/base_object.cc	(revision 6280)
@@ -27,5 +27,5 @@
 
 /**
- *  sets the name from a LoadXML-Element
+ * @brief sets the name from a LoadXML-Element
  * @param root the element to load from
  */
@@ -36,4 +36,5 @@
 
   this->objectName = NULL;
+  this->classList = NULL;
 
   if (root)
@@ -44,5 +45,5 @@
 
 /**
- *  standard deconstructor
+ * @brief standard deconstructor
 */
 BaseObject::~BaseObject ()
@@ -56,5 +57,5 @@
 
 /**
- *  loads parameters
+ * @brief loads parameters
  * @param root the element to load from
  */
@@ -67,5 +68,5 @@
 
 /**
- *  sets the class identifiers
+ * @brief sets the class identifiers
  * @param id a number for the class from class_id.h enumeration
  * @param className the class name
@@ -79,9 +80,10 @@
   this->className = className;
 
-  ClassList::addToClassList(this, classID, this->classID, className);
+  this->classList = ClassList::addToClassList(this, classID, this->classID, className);
 }
 
+
 /**
- * @briefbrief set the name of the Object
+ * @brief set the name of the Object
  */
 void BaseObject::setName (const char* objectName)
@@ -98,7 +100,21 @@
 }
 
+/**
+ * @brief queries for the ClassID of the Leaf Class (the last made class of this type
+ * @returns the ClassID of the Leaf Class (e.g. the ID of the Class)
+ *
+ * the returned ID can be used to generate new Objects of the same type through
+ * Factory::fabricate(Object->getLeafClassID());
+ */
+ClassID BaseObject::getLeafClassID() const
+{
+  assert (this->classList != NULL);
+  return this->classList->getLeafClassID();
+}
+
+
 
 /**
- *  checks if the class is a classID
+ * @brief checks if the class is a classID
  * @param classID the Identifier to check for
  * @returns true if it is, false otherwise
@@ -128,6 +144,8 @@
 }
 
+
+
 /**
- *  checks if the class is a classID
+ * @brief checks if the class is a classID
  * @param classID the Identifier to check for
  * @returns true if it is, false otherwise
@@ -140,6 +158,7 @@
 }
 
+
 /**
- * compares the ObjectName with an external name
+ * @brief compares the ObjectName with an external name
  * @param objectName: the name to check.
  * @returns true on match, false otherwise.
@@ -153,48 +172,9 @@
 
 /**
- *  displays everything this class is
+ * @brief displays everything this class is
  * @TODO REIMPLEMENT WITH SENSE.
  */
 void BaseObject::whatIs() const
 {
-  PRINT(0)("object %s of class %s: ", this->getName(), this->getClassName());
-  if ((this->classID & CL_MASK_SINGLETON) == CL_MASK_SINGLETON)
-    PRINT(0)("is a Singleton-Class ");
-  if (this->classID & CL_MASK_SUPER_CLASS)
-  {
-    PRINT(0)(" ->is a derived from the following superclasses:");
-    if (this->isA(CL_BASE_OBJECT))
-      PRINT(0)(" =BaseObject=");
-    if (this->isA(CL_PARENT_NODE))
-      PRINT(0)(" =PNode=");
-    if (this->isA(CL_WORLD_ENTITY))
-      PRINT(0)(" =WorldEntity=");
-    if (this->isA(CL_PHYSICS_INTERFACE))
-      PRINT(0)(" =PhysicsInterface=");
-    if (this->isA(CL_EVENT_LISTENER))
-      PRINT(0)(" =EventListener=");
-    if (this->isA(CL_STORY_ENTITY))
-      PRINT(0)(" =StoryEntity=");
-    if (this->isA(CL_ELEMENT_2D))
-      PRINT(0)(" =Element2D=");
-    PRINT(0)("\n");
-  }
-  // subsuper-classes
-  if (this->classID & CL_MASK_SUBSUPER_CLASS)
-  {
-    PRINT(0)(" ->further derivations: ");
-    if (this->isA(CL_PLAYER))
-      PRINT(0)(" -Player-");
-    if (this->isA(CL_NPC))
-      PRINT(0)(" -NPC-");
-    if (this->isA(CL_POWER_UP))
-      PRINT(0)(" -PowerUp-");
-    if (this->isA(CL_FIELD))
-      PRINT(0)(" -Field-");
-    if (this->isA(CL_PROJECTILE))
-      PRINT(0)(" -Projectile-");
-    if (this->isA(CL_WEAPON))
-      PRINT(0)(" -Weapon-");
-    PRINT(0)("\n");
+
 }
-}
Index: /trunk/src/lib/lang/base_object.h
===================================================================
--- /trunk/src/lib/lang/base_object.h	(revision 6279)
+++ /trunk/src/lib/lang/base_object.h	(revision 6280)
@@ -17,4 +17,5 @@
 
 class TiXmlElement;
+class ClassList;
 
 //! A class all other classes are derived from
@@ -34,4 +35,5 @@
   /** @returns the classID of the corresponding Object */
   inline int getClassID() const { return this->classID; };
+  ClassID    getLeafClassID() const;
 
   bool isA (ClassID classID) const;
@@ -50,4 +52,6 @@
     long               classID;          //!< this is the id from the class_id.h enumeration
     char*              objectName;       //!< The name of this object
+
+    ClassList*         classList;        //!< Pointer to the ClassList this Object is inside of
 };
 
Index: /trunk/src/lib/lang/class_list.cc
===================================================================
--- /trunk/src/lib/lang/class_list.cc	(revision 6279)
+++ /trunk/src/lib/lang/class_list.cc	(revision 6280)
@@ -59,5 +59,5 @@
 
 /**
- * Adds a new Object to the ClassList (and if necessary a new Class)
+ * @brief Adds a new Object to the ClassList (and if necessary a new Class)
  * @param objectPointer Pointer to the Object at hand
  * @param classID ID of the Given ObjectType \see ClassID
@@ -67,5 +67,5 @@
  * !! Before unsing the ClassList, as it creates the ClassLits
  */
-void ClassList::addToClassList(BaseObject* objectPointer, ClassID classID, unsigned long classIDFull, const char* className)
+ClassList* ClassList::addToClassList(BaseObject* objectPointer, ClassID classID, unsigned long classIDFull, const char* className)
 {
   if (unlikely(classList == NULL))
@@ -76,9 +76,13 @@
   ClassList* regClass = ClassList::getClassList(classID);
   if (regClass != NULL)
+  {
     regClass->objectList.push_back(objectPointer);
+    return regClass;
+  }
   else
   {
     ClassList::classList->push_back(ClassList(classID, classIDFull, className));
     ClassList::classList->back().objectList.push_back(objectPointer);
+    return &ClassList::classList->back();
   }
 }
Index: /trunk/src/lib/lang/class_list.h
===================================================================
--- /trunk/src/lib/lang/class_list.h	(revision 6279)
+++ /trunk/src/lib/lang/class_list.h	(revision 6280)
@@ -36,5 +36,5 @@
 
     /* MAINTENANCE FUNCTIONS THESE ARE !!ONLY FOR BASEOBJECT !! */
-    static void                           addToClassList(BaseObject* objectPointer, ClassID classID, unsigned long classIDFull, const char* className);
+    static ClassList*                     addToClassList(BaseObject* objectPointer, ClassID classID, unsigned long classIDFull, const char* className);
     static void                           removeFromClassList(BaseObject* objectPointer);
 
@@ -58,4 +58,5 @@
     inline bool                           operator==(ClassID classID) { return (this->classID == classID); };
     bool                                  operator==(const char* className);
+    inline ClassID                        getLeafClassID() const { return this->classID; };
 
   private:
