Index: trunk/src/lib/coord/p_node.cc
===================================================================
--- trunk/src/lib/coord/p_node.cc	(revision 5111)
+++ trunk/src/lib/coord/p_node.cc	(revision 5113)
@@ -165,4 +165,10 @@
 void PNode::setRelCoor (const Vector& relCoord)
 {
+  if (this->toCoordinate!= NULL)
+  {
+    delete this->toCoordinate;
+    this->toCoordinate = NULL;
+  }
+
   this->relCoordinate = relCoord;
   this->bRelCoorChanged = true;
@@ -213,4 +219,10 @@
 void PNode::setAbsCoor (const Vector& absCoord)
 {
+  if (this->toCoordinate!= NULL)
+  {
+    delete this->toCoordinate;
+    this->toCoordinate = NULL;
+  }
+
   if( likely(this->parentMode & PNODE_MOVEMENT))
   {
@@ -276,4 +288,9 @@
 void PNode::setRelDir (const Quaternion& relDir)
 {
+  if (this->toDirection!= NULL)
+  {
+    delete this->toDirection;
+    this->toDirection = NULL;
+  }
   this->relDirection = relDir;
   this->bRelCoorChanged = true;
@@ -327,4 +344,10 @@
 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();
Index: trunk/src/lib/coord/p_node.h
===================================================================
--- trunk/src/lib/coord/p_node.h	(revision 5111)
+++ trunk/src/lib/coord/p_node.h	(revision 5113)
@@ -66,4 +66,6 @@
   /** @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);
@@ -78,4 +80,6 @@
   /** @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/render2D/element_2d.cc
===================================================================
--- trunk/src/lib/graphics/render2D/element_2d.cc	(revision 5111)
+++ trunk/src/lib/graphics/render2D/element_2d.cc	(revision 5113)
@@ -214,4 +214,9 @@
 void Element2D::setRelCoor2D (const Vector& relCoord)
 {
+  if (this->toCoordinate!= NULL)
+  {
+    delete this->toCoordinate;
+    this->toCoordinate = NULL;
+  }
   this->relCoordinate = relCoord;
   this->bRelCoorChanged = true;
@@ -227,5 +232,5 @@
 void Element2D::setRelCoor2D (float x, float y, float z)
 {
-  this->setAbsCoor2D(Vector(x,y,z));
+  this->setRelCoor2D(Vector(x,y,z));
 }
 
@@ -288,4 +293,10 @@
 void Element2D::setAbsCoor2D (const Vector& absCoord)
 {
+  if (this->toCoordinate!= NULL)
+  {
+    delete this->toCoordinate;
+    this->toCoordinate = NULL;
+  }
+
   if( likely(this->parentMode & E2D_PARENT_MOVEMENT))
   {
@@ -362,4 +373,10 @@
 void Element2D::setRelDir2D (float relDir)
 {
+  if (this->toDirection!= NULL)
+  {
+    delete this->toDirection;
+    this->toDirection = NULL;
+  }
+
   this->relDirection = relDir;
   this->bRelDirChanged = true;
@@ -386,4 +403,10 @@
 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();
@@ -712,5 +735,4 @@
   {
     tIterator<Element2D>* iterator = this->children->getIterator();
-      //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 5111)
+++ trunk/src/lib/graphics/render2D/element_2d.h	(revision 5113)
@@ -108,4 +108,6 @@
     /** @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);
@@ -123,4 +125,6 @@
     /** @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/text_engine.cc
===================================================================
--- trunk/src/lib/graphics/text_engine.cc	(revision 5111)
+++ trunk/src/lib/graphics/text_engine.cc	(revision 5113)
@@ -592,5 +592,4 @@
           if( glyphSurf != NULL )
             {
-
               SDL_SetAlpha(glyphSurf, 0, 0);
 
@@ -598,5 +597,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;
@@ -620,14 +619,14 @@
 
               // Outputting Glyphs to BMP-files.
-              /*
-                char outname[64];
+/*
+                char outname[512];
                 if (i < 10)
-                sprintf( outname, "glyph-00%d.bmp", i );
+                sprintf( outname, "%s-glyph-00%d.bmp", this->getName(), i );
                 else if (i <100)
-                sprintf( outname, "glyph-0%d.bmp", i );
+                  sprintf( outname, "%s-glyph-0%d.bmp", this->getName(), i );
                 else
-                sprintf( outname, "glyph-%d.bmp", i );
-                SDL_SaveBMP(tmpSurf, outname);
-              */
+                  sprintf( outname, "%s-glyph-%d.bmp", this->getName(), i );
+                SDL_SaveBMP(tmpSurf, outname);*/
+
             }
         }
@@ -712,5 +711,5 @@
                   x = 0;
                   y = y + maxLineHeight;
-                  maxLineHeight = 0;
+                  //maxLineHeight = 0;
                 }
               if (y + maxLineHeight + 1 > size)
Index: trunk/src/lib/lang/base_object.cc
===================================================================
--- trunk/src/lib/lang/base_object.cc	(revision 5111)
+++ trunk/src/lib/lang/base_object.cc	(revision 5113)
@@ -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 5111)
+++ trunk/src/lib/lang/base_object.h	(revision 5113)
@@ -27,5 +27,5 @@
 
   void setName (const char* newName);
-  /** \brief returns the Name of this Object */
+  /** 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 5111)
+++ trunk/src/lib/lang/class_list.cc	(revision 5113)
@@ -48,4 +48,9 @@
 {
   delete this->objectList;
+  if(ClassList::classList != NULL)
+  {
+    delete ClassList::classList;
+    ClassList::classList = NULL;
+  }
   --ClassList::classCount;
 }
@@ -56,4 +61,7 @@
 //! 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;
 
 /**
@@ -109,4 +117,38 @@
 }
 
+/**
+ * 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))
+  {
+    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)
 {
@@ -119,4 +161,25 @@
     {
       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;
@@ -205,5 +268,4 @@
 }
 
-
 /**
  * prints out a string of all the types this Object matches
@@ -222,4 +284,46 @@
   }
 }
+
+/**
+ * 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;
+}
+
+
 
 /**
Index: trunk/src/lib/lang/class_list.h
===================================================================
--- trunk/src/lib/lang/class_list.h	(revision 5111)
+++ trunk/src/lib/lang/class_list.h	(revision 5113)
@@ -35,25 +35,32 @@
 
     // 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 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 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 void               whatIs(const BaseObject* object);
-    static void debug(unsigned int debugLevel = 0, 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);
+
 
   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 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 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)
 };
 
Index: trunk/src/lib/util/list.h
===================================================================
--- trunk/src/lib/util/list.h	(revision 5111)
+++ trunk/src/lib/util/list.h	(revision 5113)
@@ -135,10 +135,10 @@
   void removeLast();
   void flush();
-  T* firstElement();
-  T* lastElement();
-  bool isEmpty();
-  unsigned int getSize();
+  T* firstElement() const;
+  T* lastElement() const;
+  bool isEmpty() const;
+  unsigned int getSize() const;
   bool inList(T* entity);
-  tIterator<T>* getIterator();
+  tIterator<T>* getIterator() const;
   T* nextElement(T* toEntity);
   T* toArray();
@@ -303,5 +303,5 @@
 */
 template<class T>
-inline T* tList<T>::firstElement()
+inline T* tList<T>::firstElement() const
 {
   return this->first->curr;
@@ -314,5 +314,5 @@
 */
 template<class T>
-inline T* tList<T>::lastElement()
+inline T* tList<T>::lastElement() const
 {
   return this->last->curr;
@@ -325,5 +325,5 @@
 */
 template<class T>
-inline bool tList<T>::isEmpty()
+inline bool tList<T>::isEmpty() const
 {
   return (this->size==0)?true:false;
@@ -359,5 +359,5 @@
 */
 template<class T>
-inline unsigned int tList<T>::getSize()
+inline unsigned int tList<T>::getSize() const
 {
   return this->size;
@@ -372,5 +372,5 @@
 */
 template<class T>
-inline tIterator<T>* tList<T>::getIterator()
+inline tIterator<T>* tList<T>::getIterator() const
 {
   tIterator<T>* iterator = new tIterator<T>(this->first);
