Index: trunk/src/util/loading/load_param.cc
===================================================================
--- trunk/src/util/loading/load_param.cc	(revision 5099)
+++ trunk/src/util/loading/load_param.cc	(revision 5100)
@@ -17,4 +17,5 @@
 
 #include "list.h"
+#include "array.h"
 #include "base_object.h"
 
@@ -354,4 +355,6 @@
 /**
  *  prints out all loadable Classes, and their parameters
+ * @param fileName prints the output to a File
+ * @todo implement it
 */
 void LoadClassDescription::printAll(const char* fileName)
@@ -380,5 +383,49 @@
 }
 
-
+/**
+ * searches for classes, which beginn with classNameBegin
+ * @param classNameBegin the beginning string of a Class
+ * @return a NEW char-array with ClassNames. The ARRAY should be deleted afterwards,
+ * !! The strings MUST NOT be deleted !!
+ */
+Array<char*>* LoadClassDescription::searchClassWithShort(const char* classNameBegin)
+{
+  unsigned int searchLength = strlen(classNameBegin);
+  Array<char*>* retVal = new Array<char*>;
+
+  tIterator<LoadClassDescription>* iterator = LoadClassDescription::classList->getIterator();
+  LoadClassDescription* enumClassDesc = iterator->nextElement();
+  while (enumClassDesc)
+  {
+    if (strlen(enumClassDesc->className)>searchLength+1 &&
+        !strncasecmp(enumClassDesc->className, classNameBegin, searchLength))
+    {
+      retVal->addEntry(enumClassDesc->className);
+    }
+    enumClassDesc = iterator->nextElement();
+  }
+  delete iterator;
+
+  retVal->finalizeArray();
+  return retVal;
+}
+
+// const LoadParamDescription* LoadParamDescription::getClass(const char* className)
+// {
+//   tIterator<LoadClassDescription>* iterator = LoadClassDescription::classList->getIterator();
+//   LoadClassDescription* enumClassDesc = iterator->nextElement();
+//   while (enumClassDesc)
+//   {
+//     if (!strcmp(enumClassDesc->className, classNameBegin, className))
+//     {
+//       delete iterator;
+//       return enumClassDesc;
+//     }
+//     enumClassDesc = iterator->nextElement();
+//   }
+//   delete iterator;
+//
+//   return NULL;
+// }
 
 /**
Index: trunk/src/util/loading/load_param.h
===================================================================
--- trunk/src/util/loading/load_param.h	(revision 5099)
+++ trunk/src/util/loading/load_param.h	(revision 5100)
@@ -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
@@ -310,6 +311,7 @@
   LoadParamDescription* addParam(const char* paramName);
 
-
   static void printAll(const char* fileName = NULL);
+  static Array<char*>* searchClassWithShort(const char* classNameBegin);
+//  static const LoadParamDescription* getClass(const char* className);
 
  private:
Index: trunk/src/util/shell.cc
===================================================================
--- trunk/src/util/shell.cc	(revision 5099)
+++ trunk/src/util/shell.cc	(revision 5100)
@@ -20,7 +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 "debug.h"
 #include <stdarg.h>
@@ -439,8 +441,48 @@
  * autocompletes the Shell's inputLine
  * @returns true, if a result was found, false otherwise
+ *
+ * @todo implement it!!
  */
 bool Shell::autoComplete()
 {
-  PRINTF(3)("AutoCompletion not implemented yet\n");
+  //PRINTF(3)("AutoCompletion not implemented yet\n");
+
+  char* completionLine = new char[strlen(inputLine)+1];
+  strcpy(completionLine, this->inputLine);
+
+   char* commandBegin = strrchr(completionLine, ' ');
+  if (commandBegin == NULL)
+    commandBegin = completionLine;
+  else
+  {
+    if(commandBegin >= completionLine + strlen(completionLine))
+      commandBegin = completionLine + strlen(completionLine);
+    else
+      commandBegin++;
+  }
+
+  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;
 }
 
