Index: trunk/src/lib/collision_detection/cd_engine.cc
===================================================================
--- trunk/src/lib/collision_detection/cd_engine.cc	(revision 5110)
+++ trunk/src/lib/collision_detection/cd_engine.cc	(revision 5111)
@@ -80,8 +80,8 @@
   tIterator<WorldEntity>* iterator1 = entityList->getIterator();
   tIterator<WorldEntity>* iterator2 = entityList->getIterator();
-  WorldEntity* entity1 = iterator1->firstElement();
+  WorldEntity* entity1 = iterator1->nextElement();
   WorldEntity* entity2 = iterator2->seekElement(entity1);
   PRINTF(3)("checking for collisions\n");
-/*  while( entity1 != NULL)
+  while( entity1 != NULL)
   {
     if( likely(entity1 != this->terrain))
@@ -101,5 +101,5 @@
     entity2 = iterator2->seekElement(entity1);
 
-  }*/
+  }
   delete iterator1;
   delete iterator2;
@@ -133,5 +133,5 @@
 
   tIterator<WorldEntity>* iterator = entityList->getIterator();
-  WorldEntity* entity = iterator->firstElement();
+  WorldEntity* entity = iterator->nextElement();
   while( entity != NULL)
   {
Index: trunk/src/lib/collision_detection/obb_tree_node.cc
===================================================================
--- trunk/src/lib/collision_detection/obb_tree_node.cc	(revision 5110)
+++ trunk/src/lib/collision_detection/obb_tree_node.cc	(revision 5111)
@@ -574,5 +574,5 @@
 
   iterator = partition1.getIterator();
-  element = iterator->firstElement();
+  element = iterator->nextElement();
   index = 0;
   while( element != NULL)
@@ -592,5 +592,5 @@
 
   iterator = partition2.getIterator();
-  element = iterator->firstElement();
+  element = iterator->nextElement();
   index = 0;
   while( element != NULL)
Index: trunk/src/lib/coord/p_node.cc
===================================================================
--- trunk/src/lib/coord/p_node.cc	(revision 5110)
+++ trunk/src/lib/coord/p_node.cc	(revision 5111)
@@ -79,5 +79,5 @@
 {
   tIterator<PNode>* iterator = this->children->getIterator();
-  PNode* pn = iterator->firstElement();
+  PNode* pn = iterator->nextElement();
   while( pn != NULL)
     {
@@ -165,10 +165,4 @@
 void PNode::setRelCoor (const Vector& relCoord)
 {
-  if (this->toCoordinate!= NULL)
-  {
-    delete this->toCoordinate;
-    this->toCoordinate = NULL;
-  }
-
   this->relCoordinate = relCoord;
   this->bRelCoorChanged = true;
@@ -219,10 +213,4 @@
 void PNode::setAbsCoor (const Vector& absCoord)
 {
-  if (this->toCoordinate!= NULL)
-  {
-    delete this->toCoordinate;
-    this->toCoordinate = NULL;
-  }
-
   if( likely(this->parentMode & PNODE_MOVEMENT))
   {
@@ -288,9 +276,4 @@
 void PNode::setRelDir (const Quaternion& relDir)
 {
-  if (this->toDirection!= NULL)
-  {
-    delete this->toDirection;
-    this->toDirection = NULL;
-  }
   this->relDirection = relDir;
   this->bRelCoorChanged = true;
@@ -344,10 +327,4 @@
 void PNode::setAbsDir (const Quaternion& absDir)
 {
-  if (this->toDirection!= NULL)
-  {
-    delete this->toDirection;
-    this->toDirection = NULL;
-  }
-
   if (likely(this->parent != NULL))
     this->relDirection = absDir / this->parent->getAbsDir();
@@ -435,5 +412,5 @@
 
   tIterator<PNode>* iterator = this->children->getIterator();
-  PNode* pn = iterator->firstElement();
+  PNode* pn = iterator->nextElement();
 
   while( pn != NULL)
@@ -605,5 +582,5 @@
     {
       tIterator<PNode>* iterator = this->children->getIterator();
-      PNode* pn = iterator->firstElement();
+      PNode* pn = iterator->nextElement();
       while( pn != NULL)
       {
@@ -615,4 +592,5 @@
 
         pn->update(dt);
+          //pn = this->children->nextElement();
         pn = iterator->nextElement();
       }
@@ -655,5 +633,5 @@
     tIterator<PNode>* iterator = this->children->getIterator();
       //PNode* pn = this->children->enumerate ();
-    PNode* pn = iterator->firstElement();
+    PNode* pn = iterator->nextElement();
     while( pn != NULL)
     {
@@ -721,8 +699,8 @@
   if (depth >= 2 || depth == 0)
   {
+    tIterator<PNode>* iterator = this->children->getIterator();
+      //PNode* pn = this->children->enumerate ();
     Vector childColor =  Color::HSVtoRGB(Color::RGBtoHSV(color)+Vector(20,0,.0));
-
-    tIterator<PNode>* iterator = this->children->getIterator();
-    PNode* pn = iterator->firstElement();
+    PNode* pn = iterator->nextElement();
     while( pn != NULL)
     {
Index: trunk/src/lib/coord/p_node.h
===================================================================
--- trunk/src/lib/coord/p_node.h	(revision 5110)
+++ trunk/src/lib/coord/p_node.h	(revision 5111)
@@ -66,6 +66,4 @@
   /** @returns the relative position */
   inline const Vector& getRelCoor () const { return this->prevRelCoordinate; };
-  /** @returns the Relative Coordinate Destination */
-  inline const Vector& getRelCoorSoft2D() const { return (this->toCoordinate)?*this->toCoordinate:this->relCoordinate; };
   void setAbsCoor (const Vector& absCoord);
   void setAbsCoor (float x, float y, float z);
@@ -80,6 +78,4 @@
   /** @returns the relative Direction */
   inline const Quaternion& getRelDir () const { return this->prevRelDirection; };
-  /** @returns the Relative Directional Destination */
-  inline const Quaternion& getRelDirSoft2D() const { return (this->toDirection)?*this->toDirection:this->relDirection; };
   /** @returns a Vector pointing into the relative Direction */
   inline Vector getRelDirV() const { return this->prevRelDirection.apply(Vector(0,1,0)); };
Index: trunk/src/lib/graphics/importer/model.cc
===================================================================
--- trunk/src/lib/graphics/importer/model.cc	(revision 5110)
+++ trunk/src/lib/graphics/importer/model.cc	(revision 5111)
@@ -192,5 +192,5 @@
 
     tIterator<Material>* tmpIt = this->materialList->getIterator();
-    Material* material = tmpIt->firstElement();
+    Material* material = tmpIt->nextElement();
   //! @todo do we really have to delete this material??
     while(material)
@@ -413,5 +413,5 @@
 {
   tIterator<Material>* tmpIt = this->materialList->getIterator();
-  Material* material = tmpIt->firstElement();
+  Material* material = tmpIt->nextElement();
   while(material)
     {
Index: trunk/src/lib/graphics/render2D/element_2d.cc
===================================================================
--- trunk/src/lib/graphics/render2D/element_2d.cc	(revision 5110)
+++ trunk/src/lib/graphics/render2D/element_2d.cc	(revision 5111)
@@ -55,5 +55,5 @@
 
   tIterator<Element2D>* iterator = this->children->getIterator();
-  Element2D* pn = iterator->firstElement();
+  Element2D* pn = iterator->nextElement();
   while( pn != NULL)
   {
@@ -214,9 +214,4 @@
 void Element2D::setRelCoor2D (const Vector& relCoord)
 {
-  if (this->toCoordinate!= NULL)
-  {
-    delete this->toCoordinate;
-    this->toCoordinate = NULL;
-  }
   this->relCoordinate = relCoord;
   this->bRelCoorChanged = true;
@@ -232,5 +227,5 @@
 void Element2D::setRelCoor2D (float x, float y, float z)
 {
-  this->setRelCoor2D(Vector(x,y,z));
+  this->setAbsCoor2D(Vector(x,y,z));
 }
 
@@ -293,10 +288,4 @@
 void Element2D::setAbsCoor2D (const Vector& absCoord)
 {
-  if (this->toCoordinate!= NULL)
-  {
-    delete this->toCoordinate;
-    this->toCoordinate = NULL;
-  }
-
   if( likely(this->parentMode & E2D_PARENT_MOVEMENT))
   {
@@ -373,10 +362,4 @@
 void Element2D::setRelDir2D (float relDir)
 {
-  if (this->toDirection!= NULL)
-  {
-    delete this->toDirection;
-    this->toDirection = NULL;
-  }
-
   this->relDirection = relDir;
   this->bRelDirChanged = true;
@@ -403,10 +386,4 @@
 void Element2D::setAbsDir2D (float absDir)
 {
-  if (this->toDirection!= NULL)
-  {
-    delete this->toDirection;
-    this->toDirection = NULL;
-  }
-
   if (likely(this->parent != NULL))
     this->relDirection = absDir - this->parent->getAbsDir2D();
@@ -479,5 +456,5 @@
 {
   tIterator<Element2D>* iterator = this->children->getIterator();
-  Element2D* pn = iterator->firstElement();
+  Element2D* pn = iterator->nextElement();
 
   while( pn != NULL)
@@ -687,5 +664,5 @@
   {
     tIterator<Element2D>* iterator = this->children->getIterator();
-    Element2D* pn = iterator->firstElement();
+    Element2D* pn = iterator->nextElement();
     while( pn != NULL)
     {
@@ -697,4 +674,5 @@
 
       pn->update2D(dt);
+          //pn = this->children->nextElement();
       pn = iterator->nextElement();
     }
@@ -734,5 +712,6 @@
   {
     tIterator<Element2D>* iterator = this->children->getIterator();
-    Element2D* pn = iterator->firstElement();
+      //PNode* pn = this->children->enumerate ();
+    Element2D* pn = iterator->nextElement();
     while( pn != NULL)
     {
Index: trunk/src/lib/graphics/render2D/element_2d.h
===================================================================
--- trunk/src/lib/graphics/render2D/element_2d.h	(revision 5110)
+++ trunk/src/lib/graphics/render2D/element_2d.h	(revision 5111)
@@ -108,6 +108,4 @@
     /** @returns the relative position */
     inline const Vector& getRelCoor2D () const { return this->prevRelCoordinate; };
-    /** @returns the Relative Coordinate Destination */
-    inline const Vector& getRelCoorSoft2D() const { return (this->toCoordinate)?*this->toCoordinate:this->relCoordinate; };
     const Vector& getRelCoor2Dpx() const;
     void setAbsCoor2D (const Vector& absCoord);
@@ -125,6 +123,4 @@
     /** @returns the relative Direction */
     inline float getRelDir2D () const { return this->prevRelDirection; };
-    /** @returns the Relative Directional Destination */
-    inline float getRelDirSoft2D() const { return (this->toDirection)?*this->toDirection:this->relDirection; };
     void setAbsDir2D (float absDir);
     /** @returns the absolute Direction */
Index: trunk/src/lib/graphics/render2D/render_2d.cc
===================================================================
--- trunk/src/lib/graphics/render2D/render_2d.cc	(revision 5110)
+++ trunk/src/lib/graphics/render2D/render_2d.cc	(revision 5111)
@@ -105,5 +105,5 @@
   {
     tIterator<Element2D>* iterator = this->element2DList[i]->getIterator();
-    Element2D* elem = iterator->firstElement();
+    Element2D* elem = iterator->nextElement();
     while (elem != NULL)
     {
@@ -131,5 +131,5 @@
     {
       tIterator<Element2D>* iterator = this->element2DList[i]->getIterator();
-      Element2D* elem = iterator->firstElement();
+      Element2D* elem = iterator->nextElement();
       while (elem != NULL)
       {
Index: trunk/src/lib/graphics/spatial_separation/quadtree_node.cc
===================================================================
--- trunk/src/lib/graphics/spatial_separation/quadtree_node.cc	(revision 5110)
+++ trunk/src/lib/graphics/spatial_separation/quadtree_node.cc	(revision 5111)
@@ -253,5 +253,5 @@
   counter = 0;
   iterator = listA->getIterator();
-  tempTri = iterator->firstElement();
+  tempTri = iterator->nextElement();
   while( tempTri)
   {
@@ -262,5 +262,5 @@
   counter = 0;
   iterator = listB->getIterator();
-  tempTri = iterator->firstElement();
+  tempTri = iterator->nextElement();
   while( tempTri)
   {
@@ -271,5 +271,5 @@
   counter = 0;
   iterator = listC->getIterator();
-  tempTri = iterator->firstElement();
+  tempTri = iterator->nextElement();
   while( tempTri)
   {
@@ -280,5 +280,5 @@
   counter = 0;
   iterator = listD->getIterator();
-  tempTri = iterator->firstElement();
+  tempTri = iterator->nextElement();
   while( tempTri)
   {
Index: trunk/src/lib/graphics/text_engine.cc
===================================================================
--- trunk/src/lib/graphics/text_engine.cc	(revision 5110)
+++ trunk/src/lib/graphics/text_engine.cc	(revision 5111)
@@ -592,4 +592,5 @@
           if( glyphSurf != NULL )
             {
+
               SDL_SetAlpha(glyphSurf, 0, 0);
 
@@ -597,5 +598,5 @@
               TexCoord tmpTexCoord;
               tmpTexCoord.minU = (float)tmpRect.x/(float)tmpSurf->w;
-              tmpTexCoord.maxU = (float)(tmpRect.x +1 + tmpGlyph->width)/(float)tmpSurf->w;
+              tmpTexCoord.maxU = (float)(tmpRect.x +1 +tmpGlyph->width)/(float)tmpSurf->w;
               tmpTexCoord.minV = (float)tmpRect.y/(float)tmpSurf->w;
               tmpTexCoord.maxV = (float)(tmpRect.y+tmpGlyph->height)/(float)tmpSurf->w;
@@ -619,14 +620,14 @@
 
               // Outputting Glyphs to BMP-files.
-/*
-                char outname[512];
+              /*
+                char outname[64];
                 if (i < 10)
-                sprintf( outname, "%s-glyph-00%d.bmp", this->getName(), i );
+                sprintf( outname, "glyph-00%d.bmp", i );
                 else if (i <100)
-                  sprintf( outname, "%s-glyph-0%d.bmp", this->getName(), i );
+                sprintf( outname, "glyph-0%d.bmp", i );
                 else
-                  sprintf( outname, "%s-glyph-%d.bmp", this->getName(), i );
-                SDL_SaveBMP(tmpSurf, outname);*/
-
+                sprintf( outname, "glyph-%d.bmp", i );
+                SDL_SaveBMP(tmpSurf, outname);
+              */
             }
         }
@@ -711,5 +712,5 @@
                   x = 0;
                   y = y + maxLineHeight;
-                  //maxLineHeight = 0;
+                  maxLineHeight = 0;
                 }
               if (y + maxLineHeight + 1 > size)
@@ -845,5 +846,5 @@
 
   tIterator<BaseObject>* textIterator = ClassList::getList(CL_TEXT)->getIterator();
-  Text* text = dynamic_cast<Text*>(textIterator->firstElement());
+  Text* text = dynamic_cast<Text*>(textIterator->nextElement());
   while( text != NULL)
     {
Index: trunk/src/lib/lang/base_object.cc
===================================================================
--- trunk/src/lib/lang/base_object.cc	(revision 5110)
+++ trunk/src/lib/lang/base_object.cc	(revision 5111)
@@ -52,5 +52,5 @@
   //  delete []this->className;
   if (this->objectName)
-    delete[] this->objectName;}
+    delete []this->objectName;}
 
 /**
@@ -84,5 +84,5 @@
 {
   if (this->objectName)
-    delete[] this->objectName;
+    delete []this->objectName;
   if (objectName)
   {
Index: trunk/src/lib/lang/base_object.h
===================================================================
--- trunk/src/lib/lang/base_object.h	(revision 5110)
+++ trunk/src/lib/lang/base_object.h	(revision 5111)
@@ -27,5 +27,5 @@
 
   void setName (const char* newName);
-  /** returns the Name of this Object */
+  /** \brief returns the Name of this Object */
   inline const char* getName ()const { return this->objectName; };
 
Index: trunk/src/lib/lang/class_list.cc
===================================================================
--- trunk/src/lib/lang/class_list.cc	(revision 5110)
+++ trunk/src/lib/lang/class_list.cc	(revision 5111)
@@ -48,9 +48,4 @@
 {
   delete this->objectList;
-  if(ClassList::classList != NULL)
-  {
-    delete ClassList::classList;
-    ClassList::classList = NULL;
-  }
   --ClassList::classCount;
 }
@@ -61,7 +56,4 @@
 //! the Count of classes
 unsigned int ClassList::classCount = 0;
-
-//! a List of all strings of all classes, that have registered so far.
-tList<const char>* ClassList::classList = NULL;
 
 /**
@@ -117,69 +109,14 @@
 }
 
-/**
- * grabs the names of all Classes, and injects it into a List of const chars
- * @return the generated List
- *
- * This function first looks, if the List has been changed (by the ListSize)
- * befor it changes anything.
- */
-const tList<const char>* ClassList::getClassList()
-{
-  if (unlikely(ClassList::classList != NULL && ClassList::classList->getSize() != ClassList::classCount))
-  {
-    delete ClassList::classList;
-    ClassList::classList = NULL;
-  }
-  if (unlikely(ClassList::classList == NULL))
-    ClassList::classList = new tList<const char>;
-
-  if(likely(ClassList::first != NULL))
+tList<BaseObject>* ClassList::getList(long classID)
+{
+  if(unlikely(ClassList::first == NULL))
+    return NULL;
+  else
   {
     ClassList* tmpCL = ClassList::first;
     while (likely(tmpCL != NULL))
     {
-      ClassList::classList->add(tmpCL->className);
-      tmpCL = tmpCL->next;
-    }
-  }
-  return ClassList::classList;
-}
-
-/**
- * searches for classID and returns the list of Entities
- * @param classID the ID of the class to get the list from
- * @return the List accessed by classID, or NULL if not found
- */
-tList<BaseObject>* ClassList::getList(long classID)
-{
-  if(unlikely(ClassList::first == NULL))
-    return NULL;
-  else
-  {
-    ClassList* tmpCL = ClassList::first;
-    while (likely(tmpCL != NULL))
-    {
       if (unlikely(tmpCL->classID == classID))
-        return tmpCL->objectList;
-      tmpCL = tmpCL->next;
-    }
-  }
-  return NULL;
-}
-
-/**
- * searches for className and returns the list of Entities
- * @param className the name of the class to get the list from
- * @return the List accessed by classID, or NULL if not found
- */tList<BaseObject>* ClassList::getList(const char* className)
-{
-  if(unlikely(ClassList::first == NULL))
-    return NULL;
-  else
-  {
-    ClassList* tmpCL = ClassList::first;
-    while (likely(tmpCL != NULL))
-    {
-      if (unlikely(!strcmp(tmpCL->className, className)))
         return tmpCL->objectList;
       tmpCL = tmpCL->next;
@@ -208,5 +145,5 @@
       {
         tIterator<BaseObject>* iterator = tmp->objectList->getIterator();
-        BaseObject* enumBO = iterator->firstElement();
+        BaseObject* enumBO = iterator->nextElement();
         const char* tmpName;
         while (enumBO != NULL)
@@ -249,5 +186,5 @@
       {
         tIterator<BaseObject>* iterator = tmp->objectList->getIterator();
-        BaseObject* enumBO = iterator->firstElement();
+        BaseObject* enumBO = iterator->nextElement();
         while (enumBO != NULL)
         {
@@ -268,4 +205,5 @@
 }
 
+
 /**
  * prints out a string of all the types this Object matches
@@ -284,46 +222,4 @@
   }
 }
-
-/**
- * converts a ClassID into a string
- * @param classID the ClassID to search for
- * @return a String containing the name of the Class, NULL if the Class was not found
- */
-const char* ClassList::IDToString(ClassID classID)
-{
-  if(likely(ClassList::first != NULL))
-  {
-    ClassList* tmpCL = ClassList::first;
-    while (likely(tmpCL != NULL))
-    {
-      if (tmpCL->classID == classID)
-        return tmpCL->className;
-      tmpCL = tmpCL->next;
-    }
-  }
-  return NULL;
-}
-
-/**
- * converts a String into a ClassID
- * @param className the name of the class to search for
- * @return the ClassID. CL_NULL, if the class was not found.
- */
-long ClassList::StringToID(const char* className)
-{
-  if(likely(ClassList::first != NULL))
-  {
-    ClassList* tmpCL = ClassList::first;
-    while (likely(tmpCL != NULL))
-    {
-      if (!strcasecmp(tmpCL->className, className))
-        return tmpCL->classID;
-      tmpCL = tmpCL->next;
-    }
-  }
-  return CL_NULL;
-}
-
-
 
 /**
@@ -362,5 +258,5 @@
         PRINT(0)("|  Listing Instances:\n");
         tIterator<BaseObject>* iterator = tmp->objectList->getIterator();
-        BaseObject* enumBO = iterator->firstElement();
+        BaseObject* enumBO = iterator->nextElement();
         while (enumBO)
         {
Index: trunk/src/lib/lang/class_list.h
===================================================================
--- trunk/src/lib/lang/class_list.h	(revision 5110)
+++ trunk/src/lib/lang/class_list.h	(revision 5111)
@@ -35,32 +35,25 @@
 
     // STATIC FUNCTIONS
-    static void                     addToClassList(BaseObject* objectPointer, const long& classID, const char* className);
-    static void                     removeFromClassList(BaseObject* objectPointer);
+    static void               addToClassList(BaseObject* objectPointer, const long& classID, const char* className);
+    static void               removeFromClassList(BaseObject* objectPointer);
 
-    static tList<BaseObject>*       getList(long classID = CL_NULL);
-    static tList<BaseObject>*       getList(const char* className);
-    static const tList<const char>* getClassList();
-    static BaseObject*              getObject(const char* name, long classID = CL_NULL);
-    static bool                     exists(const BaseObject* object, long classID = CL_NULL);
+    static tList<BaseObject>* getList(long classID = CL_NULL);
+    static BaseObject*        getObject(const char* name, long classID = CL_NULL);
+    static bool               exists(const BaseObject* object, long classID = CL_NULL);
 
-    static void                     whatIs(const BaseObject* object);
-
-    static const char*              IDToString(ClassID classID = CL_NULL);
-    static long                     StringToID(const char* className);
-    static void                     debug(unsigned int debugLevel = 0, long classID = CL_NULL);
-
+    static void               whatIs(const BaseObject* object);
+    static void debug(unsigned int debugLevel = 0, long classID = CL_NULL);
 
   private:
-    tList<BaseObject>*              objectList;             //!< A list of Objects belonging to this Class
+    tList<BaseObject>*       objectList;             //!< A list of Objects belonging to this Class
 
-    long                            classID;                //!< ClassID stored in this ClassList \see ClassID
-    const char*                     className;              //!< Name of the Class Stored here
+    long                     classID;                //!< ClassID stored in this ClassList \see ClassID
+    const char*              className;              //!< Name of the Class Stored here
 
-    ClassList*                      next;                   //!< Pointer to the next class in the List
+    ClassList*               next;                   //!< Pointer to the next class in the List
 
     // STATIC MEMBERS
-    static ClassList*               first;                  //!< The first Class in the List
-    static tList<const char>*       classList;              //!< a List of all Names of all classes, that have registered so far.
-    static unsigned int             classCount;             //!< The Count of classes that have been registered (should match the lower description)
+    static ClassList*        first;                  //!< The first Class in the List
+    static unsigned int      classCount;             //!< The Count of classes that have been registered (should match the lower description)
 };
 
Index: trunk/src/lib/particles/particle_engine.cc
===================================================================
--- trunk/src/lib/particles/particle_engine.cc	(revision 5110)
+++ trunk/src/lib/particles/particle_engine.cc	(revision 5111)
@@ -53,5 +53,5 @@
   // delete all remaining systems
   tIterator<ParticleSystem>* sysIt = this->systemList->getIterator();
-  ParticleSystem* tmpSys = sysIt->firstElement();
+  ParticleSystem* tmpSys = sysIt->nextElement();
   while(tmpSys)
     {
@@ -64,5 +64,5 @@
   // delete all remaining emitters
   tIterator<ParticleEmitter>* emitIt = this->emitterList->getIterator();
-  ParticleEmitter* tmpEmit = emitIt->firstElement();
+  ParticleEmitter* tmpEmit = emitIt->nextElement();
   while(tmpEmit)
     {
@@ -147,5 +147,5 @@
   // look, if we have already added this connection
   tIterator<ParticleConnection>* tmpConIt = connectionList->getIterator();
-  ParticleConnection* tmpConnection = tmpConIt->firstElement();
+  ParticleConnection* tmpConnection = tmpConIt->nextElement();
   while(tmpConnection)
     {
@@ -178,5 +178,5 @@
   // remove any connections, that have this system within
   tIterator<ParticleConnection>* tmpConIt = connectionList->getIterator();
-  ParticleConnection* tmpConnection = tmpConIt->firstElement();
+  ParticleConnection* tmpConnection = tmpConIt->nextElement();
   while(tmpConnection)
     {
@@ -199,5 +199,5 @@
   // remove any connections, that have this emitter within
   tIterator<ParticleConnection>* tmpConIt = connectionList->getIterator();
-  ParticleConnection* tmpConnection = tmpConIt->firstElement();
+  ParticleConnection* tmpConnection = tmpConIt->nextElement();
   while(tmpConnection)
     {
@@ -224,5 +224,5 @@
   // look, if we have already added this connection
   tIterator<ParticleConnection>* tmpConIt = connectionList->getIterator();
-  ParticleConnection* tmpConnection = tmpConIt->firstElement();
+  ParticleConnection* tmpConnection = tmpConIt->nextElement();
   while(tmpConnection)
     {
@@ -260,5 +260,5 @@
   // ticks all the ParticleSystems
   tIterator<ParticleSystem>* tmpIt = systemList->getIterator();
-  ParticleSystem* tmpSys = tmpIt->firstElement();
+  ParticleSystem* tmpSys = tmpIt->nextElement();
   while(tmpSys)
     {
@@ -270,5 +270,5 @@
   // add new Particles to each System connected to an Emitter.
   tIterator<ParticleConnection>* tmpConIt = connectionList->getIterator();
-  ParticleConnection* tmpConnection = tmpConIt->firstElement();
+  ParticleConnection* tmpConnection = tmpConIt->nextElement();
   while(tmpConnection)
     {
@@ -285,5 +285,5 @@
 {
   tIterator<ParticleSystem>* tmpIt = systemList->getIterator();
-  ParticleSystem* tmpSys = tmpIt->firstElement();
+  ParticleSystem* tmpSys = tmpIt->nextElement();
   while(tmpSys)
     {
@@ -302,5 +302,5 @@
 {
   tIterator<ParticleSystem>* tmpIt = systemList->getIterator();
-  ParticleSystem* tmpSys = tmpIt->firstElement();
+  ParticleSystem* tmpSys = tmpIt->nextElement();
   while(tmpSys)
     {
@@ -324,5 +324,5 @@
   int count = 0;
   tIterator<ParticleSystem>* tmpIt = systemList->getIterator();
-  ParticleSystem* tmpSys = tmpIt->firstElement();
+  ParticleSystem* tmpSys = tmpIt->nextElement();
   while(tmpSys)
     {
@@ -346,5 +346,5 @@
 {
   tIterator<ParticleEmitter>* tmpIt = emitterList->getIterator();
-  ParticleEmitter* tmpEmit = tmpIt->firstElement();
+  ParticleEmitter* tmpEmit = tmpIt->nextElement();
   while(tmpEmit)
     {
@@ -369,5 +369,5 @@
   int count = 0;
   tIterator<ParticleEmitter>* tmpIt = emitterList->getIterator();
-  ParticleEmitter* tmpEmit = tmpIt->firstElement();
+  ParticleEmitter* tmpEmit = tmpIt->nextElement();
   while(tmpEmit)
     {
@@ -402,5 +402,5 @@
 
     tIterator<ParticleConnection>* tmpConIt = connectionList->getIterator();
-    ParticleConnection* tmpConnection = tmpConIt->firstElement();
+    ParticleConnection* tmpConnection = tmpConIt->nextElement();
     while(tmpConnection)
     {
@@ -414,5 +414,5 @@
   {
     tIterator<ParticleSystem>* tmpIt = systemList->getIterator();
-    ParticleSystem* tmpSys = tmpIt->firstElement();
+    ParticleSystem* tmpSys = tmpIt->nextElement();
     while(tmpSys)
     {
@@ -429,5 +429,5 @@
   {
     tIterator<ParticleEmitter>* tmpIt = emitterList->getIterator();
-    ParticleEmitter* tmpEmit = tmpIt->firstElement();
+    ParticleEmitter* tmpEmit = tmpIt->nextElement();
     while(tmpEmit)
     {
Index: trunk/src/lib/physics/physics_engine.cc
===================================================================
--- trunk/src/lib/physics/physics_engine.cc	(revision 5110)
+++ trunk/src/lib/physics/physics_engine.cc	(revision 5111)
@@ -52,37 +52,37 @@
 {
   // delete all PhysicsConnections that are still in existence
-//   tIterator<PhysicsConnection>* itPC = this->connections->getIterator();
-//   PhysicsConnection* enumPC = itPC->firstElement();
-//   while (enumPC)
-//   {
-//     delete enumPC;
-//     enumPC = itPC->nextElement();
-//   }
-//   delete itPC;
-//   delete this->connections;
-//
-//   // delete all PhysicsInterfaces, still in existence (this could be dangerous)
-//   tIterator<PhysicsInterface>* itPI = this->interfaces->getIterator();
-//   PhysicsInterface* enumPI = itPI->firstElement();
-//   while (enumPI)
-//   {
-//     delete enumPI;
-//
-//     enumPI = itPI->nextElement();
-//   }
-//   delete itPI;
-//   delete this->interfaces;
-//
-//   // delete all PhysicsFields, still in existence (this could be dangerous)
-//   tIterator<Field>* itF = this->fields->getIterator();
-//   Field* enumF = itF->firstElement();
-//   while (enumF)
-//   {
-//     delete enumF;
-//
-//     enumF = itF->nextElement();
-//   }
-//   delete itF;
-//   delete this->fields;
+  tIterator<PhysicsConnection>* itPC = this->connections->getIterator();
+  PhysicsConnection* enumPC = itPC->nextElement();
+  while (enumPC)
+  {
+    delete enumPC;
+    enumPC = itPC->nextElement();
+  }
+  delete itPC;
+  delete this->connections;
+
+  // delete all PhysicsInterfaces, still in existence (this could be dangerous)
+  tIterator<PhysicsInterface>* itPI = this->interfaces->getIterator();
+  PhysicsInterface* enumPI = itPI->nextElement();
+  while (enumPI)
+  {
+    delete enumPI;
+
+    enumPI = itPI->nextElement();
+  }
+  delete itPI;
+  delete this->interfaces;
+
+  // delete all PhysicsFields, still in existence (this could be dangerous)
+  tIterator<Field>* itF = this->fields->getIterator();
+  Field* enumF = itF->nextElement();
+  while (enumF)
+  {
+    delete enumF;
+
+    enumF = itF->nextElement();
+  }
+  delete itF;
+  delete this->fields;
 
 
@@ -163,5 +163,5 @@
 {
   tIterator<PhysicsInterface>* tmpIt = interfaces->getIterator();
-  PhysicsInterface* tmpInt = tmpIt->firstElement();
+  PhysicsInterface* tmpInt = tmpIt->nextElement();
   while(tmpInt)
   {
@@ -206,5 +206,5 @@
 {
   tIterator<Field>* tmpIt = fields->getIterator();
-  Field* tmpField = tmpIt->firstElement();
+  Field* tmpField = tmpIt->nextElement();
   while(tmpField)
   {
@@ -251,5 +251,5 @@
 {
   tIterator<PhysicsConnection>* tmpIt = connections->getIterator();
-  PhysicsConnection* tmpConn = tmpIt->firstElement();
+  PhysicsConnection* tmpConn = tmpIt->nextElement();
   while(tmpConn)
   {
@@ -278,5 +278,5 @@
   meaning let the fields work */
   tIterator<PhysicsConnection>* itPC = this->connections->getIterator();
-  PhysicsConnection* enumPC = itPC->firstElement();
+  PhysicsConnection* enumPC = itPC->nextElement();
   while (enumPC)
     {
@@ -289,5 +289,5 @@
   /* actually tick all the PhysicsInterfaces. Move the objects around */
   tIterator<PhysicsInterface>* itPI = this->interfaces->getIterator();
-  PhysicsInterface* enumPI = itPI->firstElement();
+  PhysicsInterface* enumPI = itPI->nextElement();
   while (enumPI)
     {
Index: trunk/src/lib/physics/physics_interface.cc
===================================================================
--- trunk/src/lib/physics/physics_interface.cc	(revision 5110)
+++ trunk/src/lib/physics/physics_interface.cc	(revision 5111)
@@ -68,5 +68,5 @@
 
     tIterator<PNode>* iterator = massCalcPNode->children->getIterator();
-    PNode* pn = iterator->firstElement();
+    PNode* pn = iterator->nextElement();
     while( pn != NULL)
     {
Index: trunk/src/lib/sound/sound_engine.cc
===================================================================
--- trunk/src/lib/sound/sound_engine.cc	(revision 5110)
+++ trunk/src/lib/sound/sound_engine.cc	(revision 5111)
@@ -215,5 +215,5 @@
   {
     tIterator<BaseObject>* sourceIterator = this->sourceList->getIterator();
-    SoundSource* enumSource = (SoundSource*)sourceIterator->firstElement();
+    SoundSource* enumSource = (SoundSource*)sourceIterator->nextElement();
     while (enumSource)
     {
@@ -228,5 +228,5 @@
   {
     tIterator<BaseObject>* bufferIterator = this->bufferList->getIterator();
-    SoundBuffer* enumBuffer = (SoundBuffer*)bufferIterator->firstElement();
+    SoundBuffer* enumBuffer = (SoundBuffer*)bufferIterator->nextElement();
     while (enumBuffer)
     {
@@ -298,5 +298,5 @@
   // look if there are any sources that have the buffer still loaded
   tIterator<BaseObject>* sourceIterator = this->sourceList->getIterator();
-  SoundSource* enumSource = (SoundSource*)sourceIterator->firstElement();
+  SoundSource* enumSource = (SoundSource*)sourceIterator->nextElement();
   while (enumSource)
     {
@@ -345,5 +345,5 @@
   {
     tIterator<BaseObject>* iterator = this->sourceList->getIterator();
-    SoundSource* enumSource = (SoundSource*)iterator->firstElement();
+    SoundSource* enumSource = (SoundSource*)iterator->nextElement();
     while (enumSource)
     {
@@ -373,9 +373,9 @@
   {
     tIterator<BaseObject>* bufferIterator = this->bufferList->getIterator();
-    SoundBuffer* enumBuffer = (SoundBuffer*)bufferIterator->firstElement();
+    SoundBuffer* enumBuffer = (SoundBuffer*)bufferIterator->nextElement();
     while (enumBuffer)
     {
       tIterator<BaseObject>* sourceIterator = this->sourceList->getIterator();
-      SoundSource* enumSource = (SoundSource*)sourceIterator->firstElement();
+      SoundSource* enumSource = (SoundSource*)sourceIterator->nextElement();
       while (enumSource)
       {
@@ -401,5 +401,5 @@
   {
     tIterator<BaseObject>* bufferIterator = this->bufferList->getIterator();
-    SoundBuffer* enumBuffer = (SoundBuffer*)bufferIterator->firstElement();
+    SoundBuffer* enumBuffer = (SoundBuffer*)bufferIterator->nextElement();
     while (enumBuffer)
     {
@@ -419,5 +419,5 @@
   {
     tIterator<BaseObject>* Iterator = this->sourceList->getIterator();
-    SoundSource* enumSource = (SoundSource*)Iterator->firstElement();
+    SoundSource* enumSource = (SoundSource*)Iterator->nextElement();
     while (enumSource)
     {
Index: trunk/src/lib/util/ini_parser.cc
===================================================================
--- trunk/src/lib/util/ini_parser.cc	(revision 5110)
+++ trunk/src/lib/util/ini_parser.cc	(revision 5111)
@@ -58,9 +58,9 @@
   {
     tIterator<IniSection>* sectionIt = this->sections->getIterator();
-    IniSection* sectionEnum = sectionIt->firstElement();
+    IniSection* sectionEnum = sectionIt->nextElement();
     while (sectionEnum)
     {
       tIterator<IniEntry>* entryIt = sectionEnum->entries->getIterator();
-      IniEntry* entryEnum = entryIt->firstElement();
+      IniEntry* entryEnum = entryIt->nextElement();
       while (entryEnum)
       {
@@ -192,5 +192,5 @@
     {
       tIterator<IniSection>* sectionIt = this->sections->getIterator();
-      IniSection* sectionEnum = sectionIt->firstElement();
+      IniSection* sectionEnum = sectionIt->nextElement();
       while (sectionEnum)
       {
@@ -198,5 +198,5 @@
 
         tIterator<IniEntry>* entryIt = sectionEnum->entries->getIterator();
-        IniEntry* entryEnum = entryIt->firstElement();
+        IniEntry* entryEnum = entryIt->nextElement();
         while (entryEnum)
         {
@@ -246,5 +246,5 @@
 {
   tIterator<IniSection>* sectionIt = this->sections->getIterator();
-  IniSection* sectionEnum = sectionIt->firstElement();
+  IniSection* sectionEnum = sectionIt->nextElement();
   while (sectionEnum)
   {
@@ -347,5 +347,5 @@
   {
     tIterator<IniSection>* sectionIt = this->sections->getIterator();
-    IniSection* sectionEnum = sectionIt->firstElement();
+    IniSection* sectionEnum = sectionIt->nextElement();
     while (sectionEnum)
     {
@@ -395,5 +395,5 @@
   {
     tIterator<IniSection>* sectionIt = this->sections->getIterator();
-    IniSection* sectionEnum = sectionIt->firstElement();
+    IniSection* sectionEnum = sectionIt->nextElement();
     while (sectionEnum)
     {
@@ -401,5 +401,5 @@
       {
         tIterator<IniEntry>* entryIt = sectionEnum->entries->getIterator();
-        IniEntry* entryEnum = entryIt->firstElement();
+        IniEntry* entryEnum = entryIt->nextElement();
         while (entryEnum)
         {
@@ -452,5 +452,5 @@
   {
     tIterator<IniSection>* sectionIt = this->sections->getIterator();
-    IniSection* sectionEnum = sectionIt->firstElement();
+    IniSection* sectionEnum = sectionIt->nextElement();
     while (sectionEnum)
     {
@@ -458,5 +458,5 @@
 
       tIterator<IniEntry>* entryIt = sectionEnum->entries->getIterator();
-      IniEntry* entryEnum = entryIt->firstElement();
+      IniEntry* entryEnum = entryIt->nextElement();
       while (entryEnum)
       {
Index: trunk/src/lib/util/list.h
===================================================================
--- trunk/src/lib/util/list.h	(revision 5110)
+++ trunk/src/lib/util/list.h	(revision 5111)
@@ -12,5 +12,5 @@
 #endif
 
-template<class T> class tIterator;
+
 
 //! a list element of the tList,
@@ -23,4 +23,101 @@
 
 /**
+ *  an iterator class
+
+   this enables the user to iterate through a list very easely
+*/
+template<class T> class tIterator
+{
+ public:
+  tIterator(listElement<T>* startElement);
+  ~tIterator();
+
+  T* nextElement();
+  T* seekElement(T* element);
+
+ private:
+  listElement<T>*    currentEl;                      //!< pointer to the current list element in the iterator
+  listElement<T>*    tmpEl;                          //!< temp listElemnt pointer
+  listElement<T>*    startElement;                   //!< pointer to the start of the list
+};
+
+
+/**
+ *  iterator constructor
+ * @param startElement:  the first list element from the tList
+
+   normaly you will use it like this:
+
+   tIterator<char>* nameIterator = nameList->getIterator();
+   char name* = nameIterator->nextElement();
+   while( name != NULL)
+   {
+     PRINTF(3)("found name: %s in list\n", name);
+     name = nameIterator->nextElement();
+   }
+   delete nameIterator;
+*/
+template<class T>
+inline tIterator<T>::tIterator (listElement<T>* startElement)
+{
+  this->currentEl = startElement;
+  this->tmpEl = NULL;
+  this->startElement = startElement;
+}
+
+
+/**
+ *  the destructor
+*/
+template<class T>
+inline tIterator<T>::~tIterator ()
+{
+  this->currentEl = NULL;
+}
+
+
+/**
+ *  use it to iterate through the list
+ * @returns next list element
+*/
+template<class T>
+inline T* tIterator<T>::nextElement ()
+{
+  if( this->currentEl == NULL)
+    return NULL;
+
+  this->tmpEl = this->currentEl;
+  this->currentEl = this->currentEl->next;
+  return this->tmpEl->curr;
+}
+
+/**
+ *  gets the element after the selected one, sets the iterator to this point in the list
+ * @param element the element to seek
+ * @returns next list element
+
+  Attention: if you seek an element, the iterator pointer will point to the NEXT listelement after the argument!
+ */
+template<class T>
+inline T* tIterator<T>::seekElement (T* element)
+{
+  for(this->tmpEl = this->startElement; this->tmpEl != NULL; this->tmpEl = this->tmpEl->next)
+  {
+    if( unlikely(this->tmpEl->curr == element))
+    {
+      if( this->tmpEl->next != NULL)
+      {
+        this->currentEl = this->tmpEl->next->next;
+        return this->tmpEl->next->curr;
+      }
+      return NULL;
+    }
+  }
+  return NULL;
+}
+
+
+
+/**
  *  the list template class
 
@@ -29,6 +126,4 @@
 template<class T> class tList
 {
-  friend class tIterator<T>;
-
  public:
   tList ();
@@ -40,10 +135,10 @@
   void removeLast();
   void flush();
-  T* firstElement() const;
-  T* lastElement() const;
-  bool isEmpty() const;
-  unsigned int getSize() const;
+  T* firstElement();
+  T* lastElement();
+  bool isEmpty();
+  unsigned int getSize();
   bool inList(T* entity);
-  tIterator<T>* getIterator() const;
+  tIterator<T>* getIterator();
   T* nextElement(T* toEntity);
   T* toArray();
@@ -208,5 +303,5 @@
 */
 template<class T>
-inline T* tList<T>::firstElement() const
+inline T* tList<T>::firstElement()
 {
   return this->first->curr;
@@ -219,5 +314,5 @@
 */
 template<class T>
-inline T* tList<T>::lastElement() const
+inline T* tList<T>::lastElement()
 {
   return this->last->curr;
@@ -230,5 +325,5 @@
 */
 template<class T>
-inline bool tList<T>::isEmpty() const
+inline bool tList<T>::isEmpty()
 {
   return (this->size==0)?true:false;
@@ -264,5 +359,5 @@
 */
 template<class T>
-inline unsigned int tList<T>::getSize() const
+inline unsigned int tList<T>::getSize()
 {
   return this->size;
@@ -277,7 +372,8 @@
 */
 template<class T>
-inline tIterator<T>* tList<T>::getIterator() const
-{
-  return new tIterator<T>(this);
+inline tIterator<T>* tList<T>::getIterator()
+{
+  tIterator<T>* iterator = new tIterator<T>(this->first);
+  return iterator;
 }
 
@@ -318,114 +414,3 @@
 }
 
-
-
-
-/**
- *  an iterator class
-
-   this enables the user to iterate through a list very easely
- */
-template<class T> class tIterator
-{
-  public:
-    tIterator(const tList<T>* list);
-    ~tIterator();
-
-    T* firstElement();
-    T* nextElement();
-    T* seekElement(T* element);
-
-  private:
-    listElement<T>*    currentEl;                      //!< pointer to the current list element in the iterator
-    listElement<T>*    tmpEl;                          //!< temp listElemnt pointer
-    const tList<T>*    list;                           //!< The List, that we want to iterate through
-};
-
-
-/**
- *  iterator constructor
- * @param startElement:  the first list element from the tList
-
-   normaly you will use it like this:
-
-   tIterator<char>* nameIterator = nameList->getIterator();
-                char name* = nameIterator->nextElement();
-                while( name != NULL)
-{
-                PRINTF(3)("found name: %s in list\n", name);
-                name = nameIterator->nextElement();
-}
-                delete nameIterator;
- */
-                template<class T>
-                inline tIterator<T>::tIterator (const tList<T>* list)
-{
-  this->currentEl = list->first;
-  this->tmpEl = NULL;
-  this->list = list;
-}
-
-
-/**
- *  the destructor
- */
-template<class T>
-    inline tIterator<T>::~tIterator ()
-{
-  this->currentEl = NULL;
-}
-
-template<class T>
-    inline T* tIterator<T>::firstElement ()
-{
-  this->currentEl = this->list->first;
-  if (this->currentEl == NULL)
-    return NULL;
-  else
-    return this->currentEl->curr;
-}
-
-
-/**
- *  use it to iterate through the list
- * @returns next list element
- */
-template<class T>
-    inline T* tIterator<T>::nextElement ()
-{
-  if( this->currentEl == NULL || this->currentEl->next == NULL)
-  {
-    this->currentEl = NULL;
-    return NULL;
-  }
-
-  this->currentEl = this->currentEl->next;
-  return this->currentEl->curr;
-}
-
-/**
- *  gets the element after the selected one, sets the iterator to this point in the list
- * @param element the element to seek
- * @returns next list element
-
-  Attention: if you seek an element, the iterator pointer will point to the NEXT listelement after the argument!
- */
-template<class T>
-    inline T* tIterator<T>::seekElement (T* element)
-{
-  for(this->tmpEl = this->list->first; this->tmpEl != NULL; this->tmpEl = this->tmpEl->next)
-  {
-    if( unlikely(this->tmpEl->curr == element))
-    {
-      if( this->tmpEl->next != NULL)
-      {
-        this->currentEl = this->tmpEl;
-        return this->tmpEl->next->curr;
-      }
-      return NULL;
-    }
-  }
-  return NULL;
-}
-
 #endif /* _LIST_H */
Index: trunk/src/story_entities/campaign.cc
===================================================================
--- trunk/src/story_entities/campaign.cc	(revision 5110)
+++ trunk/src/story_entities/campaign.cc	(revision 5111)
@@ -154,5 +154,5 @@
     */
     tIterator<StoryEntity>* it = this->entities->getIterator();
-    se = it->firstElement();
+    se = it->nextElement();
     while( se != NULL)
     {
@@ -284,5 +284,5 @@
 
   tIterator<StoryEntity>* iterator = this->entities->getIterator();
-  StoryEntity* entity = iterator->firstElement();
+  StoryEntity* entity = iterator->nextElement();
   while( entity != NULL)
     {
Index: trunk/src/story_entities/world.cc
===================================================================
--- trunk/src/story_entities/world.cc	(revision 5110)
+++ trunk/src/story_entities/world.cc	(revision 5111)
@@ -864,5 +864,5 @@
 
       tIterator<WorldEntity>* iterator = this->entities->getIterator();
-      WorldEntity* entity = iterator->firstElement();
+      WorldEntity* entity = iterator->nextElement();
       while( entity != NULL)
         {
@@ -951,5 +951,5 @@
   glLoadIdentity();
   tIterator<WorldEntity>* iterator = this->entities->getIterator();
-  entity = iterator->firstElement();
+  entity = iterator->nextElement();
   while( entity != NULL )
   {
Index: trunk/src/subprojects/benchmark.cc
===================================================================
--- trunk/src/subprojects/benchmark.cc	(revision 5110)
+++ trunk/src/subprojects/benchmark.cc	(revision 5111)
@@ -352,5 +352,5 @@
       /*give list out */
       tIterator<char>* iterator = list->getIterator();
-      name = iterator->firstElement();
+      name = iterator->nextElement();
       printf("  List Elements: \t\t");
       while( name != NULL)
@@ -373,5 +373,5 @@
       /*give list out */
       iterator = list->getIterator();
-      name = iterator->firstElement();
+      name = iterator->nextElement();
       printf("  List Elements: \t\t");
       while( name != NULL)
@@ -433,5 +433,5 @@
       /*give list out */
       iterator = list->getIterator();
-      name = iterator->firstElement();
+      name = iterator->nextElement();
       printf("  List Elements: \t\t");
       while( name != NULL)
Index: trunk/src/subprojects/collision_detection/collision_detection.cc
===================================================================
--- trunk/src/subprojects/collision_detection/collision_detection.cc	(revision 5110)
+++ trunk/src/subprojects/collision_detection/collision_detection.cc	(revision 5111)
@@ -235,5 +235,5 @@
 
   tIterator<WorldEntity>* iterator = entityList->getIterator();
-  WorldEntity* entity = iterator->firstElement();
+  WorldEntity* entity = iterator->nextElement();
   while( entity != NULL)
   {
@@ -251,5 +251,5 @@
 
   tIterator<WorldEntity>* iterator = entityList->getIterator();
-  WorldEntity* entity = iterator->firstElement();
+  WorldEntity* entity = iterator->nextElement();
   while( entity != NULL)
   {
Index: trunk/src/util/animation/animation3d.cc
===================================================================
--- trunk/src/util/animation/animation3d.cc	(revision 5110)
+++ trunk/src/util/animation/animation3d.cc	(revision 5111)
@@ -58,5 +58,5 @@
   // delete all the KeyFrames
   tIterator<KeyFrame3D>* itKF = keyFrameList->getIterator();
-  KeyFrame3D*  enumKF = itKF->firstElement();
+  KeyFrame3D*  enumKF = itKF->nextElement();
   while (enumKF)
     {
Index: trunk/src/util/animation/animation_player.cc
===================================================================
--- trunk/src/util/animation/animation_player.cc	(revision 5110)
+++ trunk/src/util/animation/animation_player.cc	(revision 5111)
@@ -86,5 +86,5 @@
   // deleting the Animation List AND all the elements of the List
   tIterator<Animation>* animIt = this->animationList->getIterator();
-  Animation* anim = animIt->firstElement();
+  Animation* anim = animIt->nextElement();
   while( anim != NULL)
     {
@@ -109,5 +109,5 @@
       // iterate through all the animations and tick them.
       tIterator<Animation>* animIt = this->animationList->getIterator();
-      Animation* anim = animIt->firstElement();
+      Animation* anim = animIt->nextElement();
       while( anim != NULL)
         {
@@ -147,5 +147,5 @@
 {
   tIterator<Animation>* animIt = this->animationList->getIterator();
-  Animation* anim = animIt->firstElement();
+  Animation* anim = animIt->nextElement();
   while( anim != NULL)
     {
@@ -176,5 +176,5 @@
   // Per ANIMATION DEBUG
   tIterator<Animation>* animIt = this->animationList->getIterator();
-  Animation* anim = animIt->firstElement();
+  Animation* anim = animIt->nextElement();
   while( anim != NULL)
     {
Index: trunk/src/util/animation/t_animation.h
===================================================================
--- trunk/src/util/animation/t_animation.h	(revision 5110)
+++ trunk/src/util/animation/t_animation.h	(revision 5111)
@@ -108,5 +108,5 @@
   // delete all the KeyFrames
   tIterator<KeyFrameF>* itKF = keyFrameList->getIterator();
-  KeyFrameF*  enumKF = itKF->firstElement();
+  KeyFrameF*  enumKF = itKF->nextElement();
   while (enumKF)
     {
Index: trunk/src/util/garbage_collector.cc
===================================================================
--- trunk/src/util/garbage_collector.cc	(revision 5110)
+++ trunk/src/util/garbage_collector.cc	(revision 5111)
@@ -156,5 +156,5 @@
 //
 //   tIterator<WorldEntity>* iterator = list->getIterator();
-//   WorldEntity* entity = iterator->firstElement();
+//   WorldEntity* entity = iterator->nextElement();
 //   while( entity != NULL)
 //     {
Index: trunk/src/util/loading/load_param.cc
===================================================================
--- trunk/src/util/loading/load_param.cc	(revision 5110)
+++ trunk/src/util/loading/load_param.cc	(revision 5111)
@@ -17,4 +17,5 @@
 
 #include "list.h"
+#include "array.h"
 #include "base_object.h"
 
@@ -295,5 +296,5 @@
 
   tIterator<LoadParamDescription>* iterator = this->paramList->getIterator();
-  LoadParamDescription* enumParamDesc = iterator->firstElement();
+  LoadParamDescription* enumParamDesc = iterator->nextElement();
   while (enumParamDesc)
     {
@@ -314,5 +315,5 @@
 {
   tIterator<LoadClassDescription>* iterator = LoadClassDescription::classList->getIterator();
-  LoadClassDescription* enumClassDesc = iterator->firstElement();
+  LoadClassDescription* enumClassDesc = iterator->nextElement();
   while (enumClassDesc)
     {
@@ -336,5 +337,5 @@
 {
   tIterator<LoadParamDescription>* iterator = this->paramList->getIterator();
-  LoadParamDescription* enumParamDesc = iterator->firstElement();
+  LoadParamDescription* enumParamDesc = iterator->nextElement();
   while (enumParamDesc)
     {
@@ -362,10 +363,10 @@
   PRINT(3)(" Listing all the Loadable Options (loaded since Game started).\n\n");
   tIterator<LoadClassDescription>* classIT = LoadClassDescription::classList->getIterator();
-  LoadClassDescription* enumClassDesc = classIT->firstElement();
+  LoadClassDescription* enumClassDesc = classIT->nextElement();
   while (enumClassDesc)
     {
       PRINT(3)("<%s>\n", enumClassDesc->className);
       tIterator<LoadParamDescription>* paramIT = enumClassDesc->paramList->getIterator();
-      LoadParamDescription* enumParamDesc = paramIT->firstElement();
+      LoadParamDescription* enumParamDesc = paramIT->nextElement();
       while (enumParamDesc)
         {
@@ -385,14 +386,14 @@
  * searches for classes, which beginn with classNameBegin
  * @param classNameBegin the beginning string of a Class
- * @return a NEW char-array with ClassNames. The LIST should be deleted afterwards,
+ * @return a NEW char-array with ClassNames. The ARRAY should be deleted afterwards,
  * !! The strings MUST NOT be deleted !!
  */
-tList<const char>* LoadClassDescription::searchClassWithShort(const char* classNameBegin)
+Array<char*>* LoadClassDescription::searchClassWithShort(const char* classNameBegin)
 {
   unsigned int searchLength = strlen(classNameBegin);
-  tList<const char>* retVal = new tList<const char>;
+  Array<char*>* retVal = new Array<char*>;
 
   tIterator<LoadClassDescription>* iterator = LoadClassDescription::classList->getIterator();
-  LoadClassDescription* enumClassDesc = iterator->firstElement();
+  LoadClassDescription* enumClassDesc = iterator->nextElement();
   while (enumClassDesc)
   {
@@ -400,5 +401,5 @@
         !strncasecmp(enumClassDesc->className, classNameBegin, searchLength))
     {
-      retVal->add(enumClassDesc->className);
+      retVal->addEntry(enumClassDesc->className);
     }
     enumClassDesc = iterator->nextElement();
@@ -406,4 +407,5 @@
   delete iterator;
 
+  retVal->finalizeArray();
   return retVal;
 }
@@ -412,5 +414,5 @@
 // {
 //   tIterator<LoadClassDescription>* iterator = LoadClassDescription::classList->getIterator();
-//   LoadClassDescription* enumClassDesc = iterator->firstElement();
+//   LoadClassDescription* enumClassDesc = iterator->nextElement();
 //   while (enumClassDesc)
 //   {
Index: trunk/src/util/loading/load_param.h
===================================================================
--- trunk/src/util/loading/load_param.h	(revision 5110)
+++ trunk/src/util/loading/load_param.h	(revision 5111)
@@ -31,4 +31,5 @@
 // Forward Declaration //
 template<class T> class tList;
+template<class T> class Array;
 
 //! macro that makes it even more easy to load a Parameter
@@ -311,5 +312,5 @@
 
   static void printAll(const char* fileName = NULL);
-  static tList<const char>* searchClassWithShort(const char* classNameBegin);
+  static Array<char*>* searchClassWithShort(const char* classNameBegin);
 //  static const LoadParamDescription* getClass(const char* className);
 
Index: trunk/src/util/resource_manager.cc
===================================================================
--- trunk/src/util/resource_manager.cc	(revision 5110)
+++ trunk/src/util/resource_manager.cc	(revision 5111)
@@ -74,5 +74,5 @@
   // deleting the Directorie Lists
   tIterator<char>* tmpIt = imageDirs->getIterator();
-  char* tmpDir = tmpIt->firstElement();
+  char* tmpDir = tmpIt->nextElement();
   while(tmpDir)
     {
@@ -99,11 +99,11 @@
       this->dataDir = new char[strlen(realDir)+1];
       strcpy(this->dataDir, realDir);
-      delete[] realDir;
+      delete realDir;
       return true;
     }
   else
     {
-      PRINTF(1)("%s is not a Directory, and can not be the Data Directory, leaving as %s \n", realDir, this->dataDir);
-      delete[] realDir;
+      PRINTF(1)("%s is not a Directory, and can not be the Data Directory, leaving as %s \n", dataDir, this->dataDir);
+      delete realDir;
       return false;
     }
@@ -144,5 +144,5 @@
       // check if the Directory has been added before
       tIterator<char>* tmpImageDirs = imageDirs->getIterator();
-      char* tmpDir = tmpImageDirs->firstElement();
+      char* tmpDir = tmpImageDirs->nextElement();
       while(tmpDir)
         {
@@ -363,5 +363,6 @@
             {
               tIterator<char>* iterator = imageDirs->getIterator();
-              tmpDir = iterator->firstElement();
+              tmpDir = iterator->nextElement();
+              //tmpDir = imageDirs->enumerate();
               while(tmpDir)
                 {
@@ -491,5 +492,5 @@
 {
   tIterator<Resource>* iterator = resourceList->getIterator();
-  Resource* enumRes = iterator->firstElement();
+  Resource* enumRes = iterator->nextElement();
   while (enumRes)
     {
@@ -520,5 +521,5 @@
   //  Resource* enumRes = resourceList->enumerate();
   tIterator<Resource>* iterator = resourceList->getIterator();
-  Resource* enumRes = iterator->firstElement();
+  Resource* enumRes = iterator->nextElement();
   while (enumRes)
     {
@@ -602,5 +603,5 @@
   //  Resource* enumRes = resourceList->enumerate();
   tIterator<Resource>* iterator = resourceList->getIterator();
-  Resource* enumRes = iterator->firstElement();
+  Resource* enumRes = iterator->nextElement();
   while (enumRes)
     {
@@ -630,6 +631,5 @@
 
   // checking for the termination of the string given. If there is a "/" at the end cut it away
-  if (directoryName[strlen(directoryName)-1] == '/' ||
-      directoryName[strlen(directoryName)-1] == '\\')
+  if (directoryName[strlen(directoryName)-1] == '/')
     {
       tmpDirName = new char[strlen(directoryName)+1];
@@ -651,5 +651,5 @@
                             ))
         {
-          delete[] tmpDirName;
+          delete tmpDirName;
           return true;
         }
@@ -798,5 +798,5 @@
   PRINT(0)(" List of Image-Directories: ");
   tIterator<char>* tmpIt = imageDirs->getIterator();
-  char* tmpDir = tmpIt->firstElement();
+  char* tmpDir = tmpIt->nextElement();
   while(tmpDir)
     {
@@ -809,5 +809,5 @@
   PRINT(0)("List of all stored Resources:\n");
   tIterator<Resource>* iterator = resourceList->getIterator();
-  Resource* enumRes = iterator->firstElement();
+  Resource* enumRes = iterator->nextElement();
   while (enumRes)
     {
Index: trunk/src/util/shell.cc
===================================================================
--- trunk/src/util/shell.cc	(revision 5110)
+++ trunk/src/util/shell.cc	(revision 5111)
@@ -20,11 +20,9 @@
 #include "text_engine.h"
 #include "list.h"
+#include "array.h"
 #include "graphics_engine.h"
 #include "event_handler.h"
 
 #include "load_param.h"
-#include "class_list.h"
-
-#include "key_names.h"
 #include "debug.h"
 #include <stdarg.h>
@@ -42,29 +40,25 @@
   this->setName("Shell");
 
-  this->shellHeight = 400;
-  this->bActive = false;
   this->buffer = new tList<char>;
 
-  this->textSize = 15;
-  this->lineSpacing = 5;
+  this->textSize = 10;
 
   //this->bufferSize = 0;
   this->bufferText = NULL;
   this->setBufferSize(100);
-  this->bufferDisplaySize = 10;
   this->setBufferDisplaySize(10);
-  this->setAbsCoor2D(3, -400);
+  this->setAbsCoor2D(3, GraphicsEngine::getInstance()->getResolutionY());
   this->delayed = 0;
   this->setRepeatDelay(.3, .05);
   this->pressedKey = SDLK_FIRST;
 
-  this->inputLineText = NULL;
+  this->inputLineText = TextEngine::getInstance()->createText("fonts/earth.ttf", 10, TEXT_DYNAMIC, 255, 0, 0);
+  this->inputLineText->setAlignment(TEXT_ALIGN_LEFT);
+  this->inputLineText->setText(NULL);
   this->inputLine = new char[1];
   this->inputLine[0] = '\0';
-
-  this->rebuildText();
-  this->completionList = NULL;
-
-  // EVENT-Handler subscription of '`' to all States, and all other keyboard commands to ES_SEHLL
+  this->inputLineText->setParent2D(this);
+
+
   EventHandler* evh = EventHandler::getInstance();
   evh->subscribe(this, ES_ALL, SDLK_BACKQUOTE);
@@ -83,5 +77,5 @@
   for (int i = 0; i < this->bufferDisplaySize; i++)
     delete this->bufferText[i];
-  delete[] this->bufferText;
+  delete this->bufferText;
 
   // delete the inputLine
@@ -91,5 +85,5 @@
   // delete all the Chars in the Buffers
   tIterator<char>* charIterator = this->buffer->getIterator();
-  char* charElem = charIterator->firstElement();
+  char* charElem = charIterator->nextElement();
   while (charElem != NULL)
   {
@@ -99,53 +93,6 @@
   delete charIterator;
 
-//  if (this->completionList != NULL)
-    //delete this->completionList;
-
   Shell::singletonRef = NULL;
 }
-
-
-void Shell::activate()
-{
-  if (this->bActive == true)
-    PRINTF(3)("The shell is already active\n");
-  this->bActive = true;
-
-  EventHandler::getInstance()->setState(ES_SHELL);
-  this->setRelCoorSoft2D(0, 0, 1, 5);
-}
-
-void Shell::deactivate()
-{
-  if (this->bActive == false)
-    PRINTF(3)("The shell is already inactive\n");
-  this->bActive = false;
-
-  EventHandler::getInstance()->setState(ES_GAME);
-  this->setRelCoorSoft2D(0, -400, 1, 5);
-}
-
-void Shell::setTextSize(unsigned int textSize, unsigned int lineSpacing)
-{
-  this->textSize = textSize;
-  this->lineSpacing = lineSpacing;
-
-  this->rebuildText();
-}
-
-void Shell::rebuildText()
-{
-  if (this->inputLineText == NULL)
-    delete this->inputLineText;
-  this->inputLineText = TextEngine::getInstance()->createText("fonts/Aniron_Bold.ttf", this->textSize, TEXT_DYNAMIC, 255, 0, 0);
-  this->inputLineText->setAlignment(TEXT_ALIGN_LEFT);
-  this->inputLineText->setText(NULL);
-  this->inputLineText->setParent2D(this);
-  this->inputLineText->setRelCoor2D(5, (this->textSize + this->lineSpacing)*this->bufferDisplaySize);
-
-  this->setBufferDisplaySize(this->bufferDisplaySize);
-}
-
-
 
 /**
@@ -159,5 +106,5 @@
     for (unsigned int i = 0; i < this->bufferDisplaySize; i++)
       delete this->bufferText[i];
-    delete[] this->bufferText;
+    delete this->bufferText;
   }
 
@@ -165,13 +112,13 @@
   for (unsigned int i = 0; i < bufferDisplaySize; i++)
   {
-    this->bufferText[i] = TextEngine::getInstance()->createText("fonts/Aniron_Bold.ttf", this->textSize, TEXT_DYNAMIC, 255, 0, 0);
+    this->bufferText[i] = TextEngine::getInstance()->createText("fonts/earth.ttf", this->textSize, TEXT_DYNAMIC, 255, 0, 0);
     this->bufferText[i]->setAlignment(TEXT_ALIGN_LEFT);
-    this->bufferText[i]->setRelCoor2D(5, (this->textSize + this->lineSpacing)*(bufferDisplaySize - i -1));
+    this->bufferText[i]->setRelCoor2D(5, 12+12*i);
     this->bufferText[i]->setText(NULL);
     this->bufferText[i]->setParent2D(this);
   }
+
+
   this->bufferDisplaySize = bufferDisplaySize;
-
-  this->shellHeight = (this->textSize + this->lineSpacing) * (bufferDisplaySize+1);
 }
 
@@ -191,5 +138,5 @@
   // delete all the Chars in the Buffers
   tIterator<char>* charIterator = this->buffer->getIterator();
-  char* charElem = charIterator->firstElement();
+  char* charElem = charIterator->nextElement();
 
   while (charElem != NULL)
@@ -206,4 +153,6 @@
  * @param line the Line as in the first argument in printf
  * @param args the arguments as a va_list
+ *
+ * @todo optimize
  */
 bool Shell::addBufferLineStatic(const char* line, ...)
@@ -225,4 +174,5 @@
   return true;
 }
+int curr = 0;
 
 /**
@@ -249,25 +199,16 @@
    }
 
-   if (this->bActive && likely(bufferText != NULL))
+   if (likely(bufferText != NULL))
    {
-     Text* lastText = this->bufferText[this->bufferDisplaySize-1];
-     Vector firstCoord = this->bufferText[0]->getRelCoorSoft2D();
-
-     Text* swapText;
-     Text* moveText = this->bufferText[0];
-     this->bufferText[0]->setRelCoorSoft2D(this->bufferText[1]->getRelCoorSoft2D(), 5);
-     for (unsigned int i = 1; i < this->bufferDisplaySize; i++)
+     Text* moveText = this->bufferText[this->bufferDisplaySize-1];
+     for (int i = this->bufferDisplaySize-1; i > 0; i--)
      {
-       if ( i < this->bufferDisplaySize-1)
-         this->bufferText[i]->setRelCoorSoft2D(this->bufferText[i+1]->getRelCoorSoft2D(),5);
-       swapText = this->bufferText[i];
-       this->bufferText[i] = moveText;
-       moveText = swapText;
+       this->bufferText[i] = this->bufferText[i-1];
      }
-     lastText->setRelCoor2D(firstCoord);
-     this->bufferText[0] = lastText;
-
-     this->bufferText[0]->setText(newLine);
+     this->bufferText[0] = moveText;
    }
+   this->bufferText[0]->setText(newLine);
+   // this->bufferText->
+//  this->inputLineText->setText(newLine);
 }
 
@@ -289,5 +230,5 @@
 {
   tIterator<char>* charIterator = this->buffer->getIterator();
-  char* charElem = charIterator->firstElement();
+  char* charElem = charIterator->nextElement();
 
   int i = 1;
@@ -305,4 +246,5 @@
 }
 
+
 /**
  * deletes the InputLine
@@ -316,4 +258,5 @@
   this->inputLine = new char[1];
   *this->inputLine = '\0';
+
 }
 
@@ -373,4 +316,5 @@
 bool Shell::executeCommand()
 {
+
   this->addBufferLineStatic("Execute Command: %s\n", this->inputLine);
   delete this->inputLine;
@@ -393,4 +337,6 @@
 }
 
+
+#include "key_names.h"
 /**
  * listens for some event
@@ -406,10 +352,12 @@
       if (EventHandler::getInstance()->getState() == ES_GAME)
       {
-        this->activate();
+        EventHandler::getInstance()->setState(ES_SHELL);
+        this->setRelCoorSoft2D(0, GraphicsEngine::getInstance()->getResolutionY()-150, 1, 5);
       }
 
       else
       {
-        this->deactivate();
+        EventHandler::getInstance()->setState(ES_GAME);
+        this->setRelCoorSoft2D(0, GraphicsEngine::getInstance()->getResolutionY()+10, 1, 5);
       }
     }
@@ -434,8 +382,6 @@
   {
     if (this->pressedKey == event.type)
-    {
       this->pressedKey = SDLK_FIRST;
-      this->delayed = 0.0;
-    }
+    this->delayed = 0.0;
   }
 }
@@ -480,11 +426,11 @@
 
 //  glTexCoord2f(this->texCoord.maxU, this->texCoord.minV);
-  glVertex2f(GraphicsEngine::getInstance()->getResolutionX() - this->getAbsCoor2D().x, this->getAbsCoor2D().y  );
+  glVertex2f(this->getAbsCoor2D().x + 800, this->getAbsCoor2D().y  );
 
 //  glTexCoord2f(this->texCoord.maxU, this->texCoord.maxV);
-  glVertex2f(GraphicsEngine::getInstance()->getResolutionX() - this->getAbsCoor2D().x, this->getAbsCoor2D().y + this->shellHeight);
+  glVertex2f(this->getAbsCoor2D().x + 800, this->getAbsCoor2D().y + 150);
 
 //  glTexCoord2f(this->texCoord.minU, this->texCoord.maxV);
-  glVertex2f(this->getAbsCoor2D().x, this->getAbsCoor2D().y + this->shellHeight);
+  glVertex2f(this->getAbsCoor2D().x, this->getAbsCoor2D().y + 150);
 
   glEnd();
@@ -505,5 +451,5 @@
   strcpy(completionLine, this->inputLine);
 
-  char* commandBegin = strrchr(completionLine, ' ');
+   char* commandBegin = strrchr(completionLine, ' ');
   if (commandBegin == NULL)
     commandBegin = completionLine;
@@ -516,189 +462,27 @@
   }
 
-  char* objectStart;
-  if (objectStart = strstr(commandBegin, "::"))
-  {
-    char* classIdentity = new char[objectStart - commandBegin +1];
-    strncpy(classIdentity, commandBegin, objectStart - commandBegin);
-    classIdentity[objectStart - commandBegin] = '\0';
-    this->objectComplete(objectStart+2, ClassList::StringToID(classIdentity));
-    delete[] classIdentity;
-  }
-  else
-    this->classComplete(commandBegin);
-
-  delete[] completionLine;
-}
-
-/**
- * autocompletes a className
- * @param classBegin the Beginning of a String to autoComplete
- * @return true on success, false otherwise
- */
-bool Shell::classComplete(const char* classBegin)
-{
-  if (unlikely(classBegin == NULL))
-    return false;
-  const tList<const char>* clList = ClassList::getClassList();
-  if (clList != NULL)
-  {
-    const tList<const char>* classList = this->createCompleteList(clList, classBegin);
-    if (classList != NULL)
-      this->generalComplete(classList, classBegin, "%s::", "::");
-    else
-      return false;
-  }
-  else
-    return false;
-  return true;
-}
-
-/**
- * autocompletes an ObjectName
- * @param objectBegin the beginning string of a Object
- * @param classID the ID of the Class to search for.
- * @return true on success, false otherwise
- */
-bool Shell::objectComplete(const char* objectBegin, long classID)
-{
-  printf("%s\n", objectBegin);
-
-  if (unlikely(objectBegin == NULL))
-    return false;
-  tList<BaseObject>* boList = ClassList::getList(classID);
-  if (boList != NULL)
-  {
-    printf("\n", boList->firstElement()->getName());
-    const tList<const char>* objectList = this->createCompleteList(boList, objectBegin);
-    if (objectList != NULL)
-      this->generalComplete(objectList, objectBegin, "%s");
-    else
-      return false;
-  }
-  else
-    return false;
-  return true;
-}
-
-bool Shell::functionComplete(const char* functionBegin)
-{
-}
-
-/**
- * completes the inputline on grounds of an inputList
- * @param stringList the List to parse through
- * @param begin the String to search in the inputList, and to extend with it.
- * @param displayAs how to display the found value to the user, printf-style, !!with only one %s!! ex.: "::%s::"
- * @param addBack what should be added at the end of the completion
- * @param addFront what should be added to the front of one finished completion
- * @return true if ok, false otherwise
- */
-bool Shell::generalComplete(const tList<const char>* stringList, const char* begin, const char* displayAs, const char* addBack, const char* addFront)
-{
-  if (stringList->getSize() == 0)
-    return false;
-
-  const char* addString = stringList->firstElement();
-  unsigned int addLength = 0;
-  unsigned int inputLenght = strlen(begin);
-
-  if (addString != NULL)
-    addLength = strlen(addString);
-  tIterator<const char>* charIterator = stringList->getIterator();
-  const char* charElem = charIterator->firstElement();
-  while (charElem != NULL)
-  {
-    PRINTF(0)(displayAs, charElem);
-    for (unsigned int i = inputLenght; i < addLength; i++)
-      if (addString[i] != charElem[i])
-    {
-      addLength = i;
-      break;
-    }
-    charElem = charIterator->nextElement();
-  }
-  delete charIterator;
-
-  if (addLength >= inputLenght)
-  {
-    char* adder = new char[addLength+1];
-    strncpy(adder, addString, addLength);
-    adder[addLength] = '\0';
-    this->removeCharacters(inputLenght);
-    this->addCharacters(adder);
-    if (addBack != NULL && stringList->getSize() == 1)
-      this->addCharacters("::");
-    delete[] adder;
-  }
-  return true;
-}
-
-
-
-/**
- * searches for classes, which beginn with classNameBegin
- * @param inputList the List to parse through
- * @param classNameBegin the beginning string
- * @return a NEW char-array with ClassNames. The LIST should be deleted afterwards,
- * !! The strings MUST NOT be deleted !!
- */
-const tList<const char>* Shell::createCompleteList(const tList<const char>* inputList, const char* classNameBegin)
-{
-  if (inputList == NULL || classNameBegin == NULL)
-    return NULL;
-  unsigned int searchLength = strlen(classNameBegin);
-  if (this->completionList != NULL)
-    delete this->completionList;
-  this->completionList = new tList<const char>;
-
-//  tList<const char>* classList = ClassList::getClassList();
-
-  tIterator<const char>* iterator = inputList->getIterator();
-  const char* enumString = iterator->firstElement();
-  while (enumString != NULL)
-  {
-    if (strlen(enumString)>searchLength+1 &&
-        !strncasecmp(enumString, classNameBegin, searchLength))
-    {
-      this->completionList->add(enumString);
-    }
-    enumString = iterator->nextElement();
-  }
-  delete iterator;
-
-  return this->completionList;
-}
-
-/**
- * searches for classes, which beginn with classNameBegin
- * @param inputList the List to parse through
- * @param classNameBegin the beginning string
- * @return a NEW char-array with ClassNames. The LIST should be deleted afterwards,
- * !! The strings MUST NOT be deleted !!
- */
-const tList<const char>* Shell::createCompleteList(const tList<BaseObject>* inputList, const char* classNameBegin)
-{
-  if (inputList == NULL || classNameBegin == NULL)
-    return NULL;
-  unsigned int searchLength = strlen(classNameBegin);
-  if (this->completionList != NULL)
-    delete this->completionList;
-  this->completionList = new tList<const char>;
-
-  tIterator<BaseObject>* iterator = inputList->getIterator();
-  BaseObject* enumBO = iterator->firstElement();
-  while (enumBO != NULL)
-  {
-    if (enumBO->getName() != NULL &&
-        strlen(enumBO->getName())>searchLength+1 &&
-        !strncasecmp(enumBO->getName(), classNameBegin, searchLength))
-    {
-      this->completionList->add(enumBO->getName());
-    }
-    enumBO = iterator->nextElement();
-  }
-  delete iterator;
-
-  return this->completionList;
+  printf("%s\n",commandBegin);
+   Array<char*>* classArray = LoadClassDescription::searchClassWithShort(commandBegin);
+   if (classArray->getCount() == 0)
+   {
+     delete[] completionLine;
+     delete classArray;
+     //PRINTF(0)("no completion found for %s\n", commandBegin);
+     return false;
+   }
+
+   for (unsigned int i = 0; i < classArray->getCount(); i++)
+   {
+     PRINTF(0)("%s\n", classArray->getEntry(i));
+   }
+   if (classArray->getCount() == 1)
+   {
+     this->removeCharacters(strlen(commandBegin));
+     this->addCharacters(classArray->getEntry(0));
+     this->addCharacter(' ');
+   }
+
+   delete[] completionLine;
+   delete classArray;
 }
 
@@ -710,3 +494,4 @@
   if (this->pressedKey != SDLK_FIRST)
     printf("%s::%f %f\n", SDLKToKeyname(this->pressedKey), this->delayed, this->repeatDelay);
-}
+
+}
Index: trunk/src/util/shell.h
===================================================================
--- trunk/src/util/shell.h	(revision 5110)
+++ trunk/src/util/shell.h	(revision 5111)
@@ -36,13 +36,9 @@
 
 
-    void activate();
-    void deactivate();
+    void setBufferSize(unsigned int bufferSize) { this->bufferSize = bufferSize; };
 
-    void setTextSize(unsigned int textSize, unsigned int lineSpacing = 1);
-    void rebuildText();
+    void setBufferDisplaySize(unsigned int bufferDisplaySize);
 
     // BUFFER //
-    void setBufferSize(unsigned int bufferSize) { this->bufferSize = bufferSize; };
-    void setBufferDisplaySize(unsigned int bufferDisplaySize);
     void flushBuffers();
     static bool addBufferLineStatic(const char* line, ...);
@@ -71,12 +67,4 @@
   private:
     bool autoComplete();
-    bool classComplete(const char* classBegin);
-    bool objectComplete(const char* objectBegin, long classID);
-    bool functionComplete(const char* functionBegin);
-
-    bool generalComplete(const tList<const char>* stringList, const char* begin, const char* displayAs = "%s", const char* addBack = NULL, const char* addFront = NULL);
-
-    const tList<const char>* Shell::createCompleteList(const tList<const char>* inputList, const char* classNameBegin);
-    const tList<const char>* Shell::createCompleteList(const tList<BaseObject>* inputList, const char* classNameBegin);
 
 
@@ -100,11 +88,6 @@
     unsigned int           textSize;               //!< The size of the text.
     unsigned int           lineSpacing;            //!< The Spacing between lines.
-    unsigned int           shellHeight;            //!< The hight of the Shell in Pixels
-    bool                   bActive;                //!< if the shell is active;
 
     char                   bufferArray[10000];     //!< a BUFFER for fast writing
-
-    // completion
-    tList<const char>*    completionList;          //!< A list of completions, that are io.
 };
 
Index: trunk/src/util/track/track_manager.cc
===================================================================
--- trunk/src/util/track/track_manager.cc	(revision 5110)
+++ trunk/src/util/track/track_manager.cc	(revision 5111)
@@ -79,5 +79,5 @@
     {
       tIterator<TrackElement>* iterator = this->children->getIterator();
-      TrackElement* enumElem = iterator->firstElement();
+      TrackElement* enumElem = iterator->nextElement();
       while (enumElem)
         {
@@ -104,5 +104,5 @@
     {
       tIterator<TrackElement>* iterator = this->children->getIterator();
-      TrackElement* enumElem = iterator->firstElement();
+      TrackElement* enumElem = iterator->nextElement();
       TrackElement* tmpElem;
       while (enumElem)
@@ -133,5 +133,5 @@
     {
       tIterator<TrackElement>* iterator = this->children->getIterator();
-      TrackElement* enumElem = iterator->firstElement();
+      TrackElement* enumElem = iterator->nextElement();
       TrackElement* tmpElem;
       while (enumElem)
@@ -179,5 +179,5 @@
     {
       tIterator<TrackElement>* iterator = this->children->getIterator();
-      TrackElement* enumElem = iterator->firstElement();
+      TrackElement* enumElem = iterator->nextElement();
       while (enumElem)
         {
@@ -206,5 +206,5 @@
 
   tIterator<TrackElement>* iterator = this->children->getIterator();
-  TrackElement* enumElem = iterator->firstElement();
+  TrackElement* enumElem = iterator->nextElement();
   for (int i = 0; i < childCount; i++)
     enumElem = iterator->nextElement();
@@ -234,5 +234,5 @@
       //TrackElement* enumElem = this->children->enumerate();
       tIterator<TrackElement>* iterator = this->children->getIterator();
-      TrackElement* enumElem = iterator->firstElement();
+      TrackElement* enumElem = iterator->nextElement();
       while (enumElem)
         {
@@ -331,5 +331,5 @@
   //TrackElement* enumElem = this->children->enumerate();
   tIterator<TrackElement>* iterator = this->children->getIterator();
-  TrackElement* enumElem = iterator->firstElement();
+  TrackElement* enumElem = iterator->nextElement();
   while (enumElem)
     {
@@ -975,5 +975,5 @@
       //TrackElement* enumElem = firstJoint->children->enumerate();
       tIterator<TrackElement>* iterator = firstJoint->children->getIterator();
-      TrackElement* enumElem = iterator->firstElement();
+      TrackElement* enumElem = iterator->nextElement();
       while (enumElem)
         {
@@ -1001,5 +1001,5 @@
         {
           tIterator<TrackElement>* iterator = tmpElem->children->getIterator();
-          TrackElement* enumElem = iterator->firstElement();
+          TrackElement* enumElem = iterator->nextElement();
           //TrackElement* enumElem = tmpElem->children->enumerate();
           while (enumElem)
