Index: trunk/src/lib/shell/shell_command.cc
===================================================================
--- trunk/src/lib/shell/shell_command.cc	(revision 5194)
+++ trunk/src/lib/shell/shell_command.cc	(revision 5195)
@@ -41,4 +41,5 @@
   this->classID = CL_NULL;
   this->commandList = new tList<ShellCommandBase>;
+  this->aliasList = new tList<ShellCommandAlias>;
 
   ShellCommandClass::commandClassList->add(this);
@@ -88,4 +89,21 @@
 }
 
+bool ShellCommandClass::getCommandListOfAlias(tList<const char>* stringList)
+{
+  if (stringList == NULL)
+    return false;
+
+  tIterator<ShellCommandAlias>* iterator = ShellCommandClass::aliasList->getIterator();
+  ShellCommandAlias* elem = iterator->firstElement();
+  while(elem != NULL)
+  {
+    stringList->add(elem->getName());
+    elem = iterator->nextElement();
+  }
+  delete iterator;
+  return true;
+}
+
+
 /**
  * unregisters all Commands that exist
@@ -93,4 +111,5 @@
 void ShellCommandClass::unregisterAllCommands()
 {
+  // unregister all commands
   tIterator<ShellCommandClass>* iterator = ShellCommandClass::commandClassList->getIterator();
   ShellCommandClass* elem = iterator->firstElement();
@@ -105,4 +124,16 @@
   delete ShellCommandClass::commandClassList;
   ShellCommandClass::commandClassList = NULL;
+
+  // unregister all aliases (there should be nothing to do here :))
+  tIterator<ShellCommandAlias>* itAL = ShellCommandClass::aliasList->getIterator();
+  ShellCommandAlias* elemAL = itAL->firstElement();
+  while(elemAL != NULL)
+  {
+    delete elemAL;
+    elemAL = itAL->nextElement();
+  }
+  delete itAL;
+  delete ShellCommandClass::aliasList;
+  ShellCommandClass::aliasList = NULL;
 }
 
@@ -168,4 +199,5 @@
 
 tList<ShellCommandClass>* ShellCommandClass::commandClassList = NULL;
+tList<ShellCommandAlias>* ShellCommandClass::aliasList = NULL;
 
 /**
@@ -428,4 +460,10 @@
 }
 
+ShellCommandBase* ShellCommandBase::setAlias(const char* alias)
+{
+  ShellCommandAlias* aliasCMD = new ShellCommandAlias(alias, this);
+  ShellCommandClass::aliasList->add(aliasCMD);
+}
+
 /**
  * see ShellCommandBase::debug()
Index: trunk/src/lib/shell/shell_command.h
===================================================================
--- trunk/src/lib/shell/shell_command.h	(revision 5194)
+++ trunk/src/lib/shell/shell_command.h	(revision 5195)
@@ -52,5 +52,6 @@
   public:
     static const tList<ShellCommandClass>* getCommandClassList() { return ShellCommandClass::commandClassList; };
-    static bool ShellCommandClass::getCommandListOfClass(const char* className, tList<const char>* stringList);
+    static bool getCommandListOfClass(const char* className, tList<const char>* stringList);
+    static bool getCommandListOfAlias(tList<const char>* aliasList);
 
     static ShellCommandClass* getCommandClass(const char* className);
@@ -69,5 +70,5 @@
     tList<ShellCommandBase>*         commandList;               //!< A list of Commands from this Class
     static tList<ShellCommandClass>* commandClassList;          //!< A list of Classes
-    static tList<ShellCommandAlias>* aliasesList;               //!< An Alias to A Command. (only for classes with one Instance)
+    static tList<ShellCommandAlias>* aliasList;                 //!< An Alias to A Command. (only for classes with one Instance)
 };
 
@@ -320,4 +321,7 @@
   public:
     ShellCommandAlias(const char* aliasName, ShellCommandBase* command) { this->aliasName = aliasName; this->command = command; };
+
+    const char* getName() const { return this->aliasName; };
+    ShellCommandBase* getCommand() const { return this->command; };
   private:
     const char*         aliasName;
Index: trunk/src/lib/shell/shell_completion.cc
===================================================================
--- trunk/src/lib/shell/shell_completion.cc	(revision 5194)
+++ trunk/src/lib/shell/shell_completion.cc	(revision 5195)
@@ -108,11 +108,12 @@
   if (inputSplits.getCount() == 0)
   {
-    PRINTF(5)("Listing all Classes\n");
     completeType |= SHELLC_CLASS;
+    completeType |= SHELLC_ALIAS;
+
   }
   else if (inputSplits.getCount() == 1 && emptyComplete == false)
   {
-    printf("trying to complete a Class with '%s'\n", inputSplits.getString(0));
     completeType |= SHELLC_CLASS;
+    completeType |= SHELLC_ALIAS;
   }
 
@@ -148,4 +149,6 @@
   if (completeType & SHELLC_FUNCTION)
     this->functionComplete(completeString, classID);
+  if (completeType & SHELLC_ALIAS)
+    this->aliasComplete(completeString);
 
 
@@ -211,4 +214,17 @@
   return true;
 }
+
+bool ShellCompletion::aliasComplete(const char* aliasBegin)
+{
+  if (unlikely(aliasBegin == NULL))
+    return false;
+  tList<const char> aliasList;
+  ShellCommandClass::getCommandListOfAlias(&aliasList);
+  //printf("%s\n", boList->firstElement()->getName());
+  if (!this->addToCompleteList(&aliasList, aliasBegin))
+    return false;
+  return true;
+}
+
 
 /**
Index: trunk/src/lib/shell/shell_completion.h
===================================================================
--- trunk/src/lib/shell/shell_completion.h	(revision 5194)
+++ trunk/src/lib/shell/shell_completion.h	(revision 5195)
@@ -42,4 +42,5 @@
   bool functionComplete(const char* functionBegin, long classID);
   bool functionMatch(const char* functionBegin, long classID, unsigned int* length);
+  bool aliasComplete(const char* aliasBegin);
 
   bool generalComplete(const char* begin, const char* displayAs = "%s", const char* addBack = NULL, const char* addFront = NULL);
@@ -48,6 +49,4 @@
   bool addToCompleteList(const tList<BaseObject>* inputList, const char* completionBegin);
   void emptyCompletionList();
-//    const tList<const char>* createCompleteList(const tList<ShellCommandBase>* inputList, const char* completionBegin);
-
 
  private:
