Index: /trunk/src/lib/shell/shell.cc
===================================================================
--- /trunk/src/lib/shell/shell.cc	(revision 5244)
+++ /trunk/src/lib/shell/shell.cc	(revision 5245)
@@ -54,5 +54,6 @@
   // register the shell at the ShellBuffer
   ShellBuffer::getInstance()->registerShell(this);
-
+  // EVENT-Handler subscription of '`' to all States.
+  EventHandler::getInstance()->subscribe(this, ES_ALL, SDLK_BACKQUOTE);
 
   // Element2D and generals
@@ -72,6 +73,4 @@
   this->rebuildText();
 
-  // EVENT-Handler subscription of '`' to all States.
-  EventHandler::getInstance()->subscribe(this, ES_ALL, SDLK_BACKQUOTE);
 }
 
Index: /trunk/src/lib/shell/shell.h
===================================================================
--- /trunk/src/lib/shell/shell.h	(revision 5244)
+++ /trunk/src/lib/shell/shell.h	(revision 5245)
@@ -4,4 +4,5 @@
  *
  * @todo Buffer Display in different Colors for different debug mode.
+ * @todo move up and down in Buffer
  */
 
Index: /trunk/src/lib/shell/shell_completion.cc
===================================================================
--- /trunk/src/lib/shell/shell_completion.cc	(revision 5244)
+++ /trunk/src/lib/shell/shell_completion.cc	(revision 5245)
@@ -60,6 +60,4 @@
  * autocompletes the Shell's inputLine
  * @returns true, if a result was found, false otherwise
- *
- * @todo implement it!!
  */
 bool ShellCompletion::autoComplete(ShellInput* input)
@@ -169,5 +167,5 @@
   if (clList != NULL)
   {
-    if (!this->addToCompleteList(clList, classBegin))
+    if (!this->addToCompleteList(clList, classBegin, SHELLC_CLASS))
       return false;
   }
@@ -190,6 +188,8 @@
   if (boList != NULL)
   {
-    //printf("%s\n", boList->firstElement()->getName());
-    if (!this->addToCompleteList(boList, objectBegin))
+    SHELLC_TYPE type = SHELLC_OBJECT;
+    if (classID == CL_SHELL_COMMAND_CLASS)
+      type = SHELLC_CLASS;
+    if (!this->addToCompleteList(boList, objectBegin, type))
       return false;
   }
@@ -211,5 +211,5 @@
   ShellCommandClass::getCommandListOfClass(ClassList::IDToString(classID), &fktList);
   //printf("%s\n", boList->firstElement()->getName());
-  if (!this->addToCompleteList(&fktList, functionBegin))
+  if (!this->addToCompleteList(&fktList, functionBegin, SHELLC_FUNCTION))
     return false;
   return true;
@@ -228,5 +228,5 @@
   ShellCommandClass::getCommandListOfAlias(&aliasList);
   //printf("%s\n", boList->firstElement()->getName());
-  if (!this->addToCompleteList(&aliasList, aliasBegin))
+  if (!this->addToCompleteList(&aliasList, aliasBegin, SHELLC_ALIAS))
     return false;
   return true;
@@ -259,16 +259,25 @@
   tIterator<ShellC_Element>* charIterator = completionList->getIterator();
   ShellC_Element* charElem = charIterator->firstElement();
+  SHELLC_TYPE changeType = SHELLC_NONE;
   while (charElem != NULL)
   {
-    PRINTF(0)(displayAs, charElem->name);
+    if (charElem->type != changeType)
+    {
+      if (changeType != SHELLC_NONE)
+        PRINT(0)("\n");
+      PRINT(0)("%s: ", ShellCompletion::typeToString(charElem->type));
+      changeType = charElem->type;
+    }
+    PRINTF(0)("%s ", charElem->name);
     for (unsigned int i = inputLenght; i < addLength; i++)
       if (addString[i] != charElem->name[i])
       {
        addLength = i;
-       break;
+//       break;
       }
     charElem = charIterator->nextElement();
   }
   delete charIterator;
+  PRINT(0)("\n");
 
   if (addLength >= inputLenght)
@@ -301,5 +310,5 @@
  * !! The strings MUST NOT be deleted !!
  */
-bool ShellCompletion::addToCompleteList(const tList<const char>* inputList, const char* completionBegin)
+bool ShellCompletion::addToCompleteList(const tList<const char>* inputList, const char* completionBegin, SHELLC_TYPE type)
 {
   if (inputList == NULL || completionBegin == NULL)
@@ -317,4 +326,5 @@
       ShellC_Element* newElem = new ShellC_Element;
       newElem->name = enumString;
+      newElem->type = type;
       this->completionList->add(newElem);
     }
@@ -332,5 +342,5 @@
  * !! The strings MUST NOT be deleted !!
  */
-bool ShellCompletion::addToCompleteList(const tList<BaseObject>* inputList, const char* completionBegin)
+bool ShellCompletion::addToCompleteList(const tList<BaseObject>* inputList, const char* completionBegin, SHELLC_TYPE type)
 {
   if (inputList == NULL || completionBegin == NULL)
@@ -348,6 +358,6 @@
       ShellC_Element* newElem = new ShellC_Element;
       newElem->name = enumBO->getName();
+      newElem->type = type;
       this->completionList->add(newElem);
-      printf("%s\n",enumBO->getName());
     }
     enumBO = iterator->nextElement();
@@ -378,2 +388,19 @@
   this->completionList = new tList<ShellC_Element>;
 }
+
+const char* ShellCompletion::typeToString(SHELLC_TYPE type)
+{
+  switch (type)
+  {
+    default:// SHELLC_NONE
+      return "error";
+    case  SHELLC_CLASS:
+      return "class";
+    case SHELLC_OBJECT:
+      return "object";
+    case SHELLC_FUNCTION:
+      return "function";
+    case SHELLC_ALIAS:
+      return "alias";
+  }
+}
Index: /trunk/src/lib/shell/shell_completion.h
===================================================================
--- /trunk/src/lib/shell/shell_completion.h	(revision 5244)
+++ /trunk/src/lib/shell/shell_completion.h	(revision 5245)
@@ -48,7 +48,9 @@
   bool generalComplete(const char* begin, const char* displayAs = "%s", const char* addBack = NULL, const char* addFront = NULL);
 
-  bool addToCompleteList(const tList<const char>* inputList, const char* completionBegin);
-  bool addToCompleteList(const tList<BaseObject>* inputList, const char* completionBegin);
+  bool addToCompleteList(const tList<const char>* inputList, const char* completionBegin, SHELLC_TYPE type);
+  bool addToCompleteList(const tList<BaseObject>* inputList, const char* completionBegin, SHELLC_TYPE type);
   void emptyCompletionList();
+
+  static const char* ShellCompletion::typeToString(SHELLC_TYPE type);
 
  private:
Index: /trunk/src/lib/shell/shell_input.cc
===================================================================
--- /trunk/src/lib/shell/shell_input.cc	(revision 5244)
+++ /trunk/src/lib/shell/shell_input.cc	(revision 5245)
@@ -50,5 +50,5 @@
   this->history = new tList<char>;
   this->historyIT = this->history->getIterator();
-  this->historyLength = 10;
+  this->setHistoryLength(50);
   this->historyScrolling = false;
   this->delayed = 0;
Index: /trunk/src/lib/shell/shell_input.h
===================================================================
--- /trunk/src/lib/shell/shell_input.h	(revision 5244)
+++ /trunk/src/lib/shell/shell_input.h	(revision 5245)
@@ -1,8 +1,5 @@
 /*!
  * @file shell_input.h
- * @brief Definition of ...
- * @todo AutoCompletion should print nice output
- * @todo move up and down in Buffer
- * @todo display old shell Commands
+ * @brief Shell Input is an InputLine for the Shell.
 */
 
@@ -18,6 +15,11 @@
 class ShellCompletion;
 
-
-//! A class for ...
+//! An InputLine for the Shell
+/**
+ * The ShellInput has the ability to catch and display user input.
+ * The ShellInput is auto-completed after the user presses [TAB]
+ * The ShellInput is executed (and sent back to the Application) on Pressing [ENTER]
+ * [UP] and [DOWN] move through the history of allready given commands.
+ */
 class ShellInput : public Text,  public EventListener {
 
@@ -38,4 +40,6 @@
   bool executeCommand();
 
+  /** sets the count of the History's entries */
+  void setHistoryLength(unsigned int historyLength) { this->historyLength = historyLength; };
   void historyMoveUp();
   void historyMoveDown();
@@ -50,6 +54,5 @@
    ShellCompletion*         completion;             //!< The Completion Interface.
 
-
-   char*                    inputLine;              //!< the Char-Array of the Buffer @todo not needed anymore
+   char*                    inputLine;              //!< the Char-Array of the Buffer
    float                    repeatRate;             //!< The Repeat-Delay.
    float                    repeatDelay;            //!< The delay of the first Character of a given Character.
