Index: code/trunk/src/libraries/core/CoreConfig.cc
===================================================================
--- code/trunk/src/libraries/core/CoreConfig.cc	(revision 11020)
+++ code/trunk/src/libraries/core/CoreConfig.cc	(revision 11052)
Index: code/trunk/src/libraries/core/CoreConfig.h
===================================================================
--- code/trunk/src/libraries/core/CoreConfig.h	(revision 11020)
+++ code/trunk/src/libraries/core/CoreConfig.h	(revision 11052)
Index: code/trunk/src/libraries/core/GUIManager.cc
===================================================================
--- code/trunk/src/libraries/core/GUIManager.cc	(revision 11020)
+++ code/trunk/src/libraries/core/GUIManager.cc	(revision 11052)
@@ -36,4 +36,8 @@
 #include <OgreRenderWindow.h>
 
+extern "C" {
+#include <lua.h>
+}
+
 #if CEGUI_VERSION >= 0x000800
 #   include <CEGUI/DefaultLogger.h>
@@ -251,7 +255,26 @@
     /*static*/ const std::string GUIManager::defaultScheme_ = "TaharezGreen"; //Alternative: Orxonox (not fully complete yet, see the graphics menu)
 
-    SetConsoleCommand("showGUI", &GUIManager::showGUI).defaultValue(1, false).defaultValue(2, false);
-    SetConsoleCommand("hideGUI", &GUIManager::hideGUI);
-    SetConsoleCommand("toggleGUI", &GUIManager::toggleGUI).defaultValue(1, false).defaultValue(2, false);
+    namespace autocompletion
+    {
+        /**
+            @brief Returns the names of all currently existing OverlayGroups.
+        */
+        ARGUMENT_COMPLETION_FUNCTION_DECLARATION(guinames)();
+        ARGUMENT_COMPLETION_FUNCTION_IMPLEMENTATION(guinames)()
+        {
+            ArgumentCompletionList names;
+            const std::vector<std::string> guis = GUIManager::getInstance().getLoadedGUIs();
+            for (size_t i = 0; i < guis.size(); ++i)
+                names.push_back(ArgumentCompletionListElement(guis[i], getLowercase(guis[i])));
+            return names;
+        }
+    }
+
+    SetConsoleCommand("showGUI", &GUIManager::showGUI).defaultValue(1, false).defaultValue(2, false)
+            .argumentCompleter(0, autocompletion::guinames());
+    SetConsoleCommand("hideGUI", &GUIManager::hideGUI)
+            .argumentCompleter(0, autocompletion::guinames());
+    SetConsoleCommand("toggleGUI", &GUIManager::toggleGUI).defaultValue(1, false).defaultValue(2, false)
+            .argumentCompleter(0, autocompletion::guinames());
 
     RegisterAbstractClass(GUIManager).inheritsFrom<WindowEventListener>();
@@ -489,4 +512,26 @@
     {
         this->luaState_->doString(str, rootFileInfo_);
+    }
+
+    std::vector<std::string> GUIManager::getLoadedGUIs()
+    {
+        // TODO: is there a better way to read back a return value from lua? i.e. by using LuaState?
+        lua_State* L = this->luaState_->getInternalLuaState();
+
+        // push function
+        lua_getglobal(L, "getLoadedSheets");
+
+        // do the call (0 arguments, 1 result)
+        if (lua_pcall(L, 0, 1, 0) != 0)
+          orxout(internal_error) << "error running function: " << lua_tostring(L, -1) << endl;
+
+        // retrieve result
+        if (!lua_isstring(L, -1))
+          orxout(internal_error) << "function must return a string" << endl;
+        std::string value = lua_tostring(L, -1);
+        lua_pop(L, 1);
+
+        SubString tokens(value, ",");
+        return tokens.getAllStrings();
     }
 
Index: code/trunk/src/libraries/core/GUIManager.h
===================================================================
--- code/trunk/src/libraries/core/GUIManager.h	(revision 11020)
+++ code/trunk/src/libraries/core/GUIManager.h	(revision 11052)
@@ -107,4 +107,6 @@
         void preUpdate(const Clock& time);
 
+        std::vector<std::string> getLoadedGUIs();
+
         void loadGUI(const std::string& name);
         static void showGUI(const std::string& name, bool bHidePrevious = false, bool bNoInput = false);
Index: code/trunk/src/libraries/core/GameConfig.cc
===================================================================
--- code/trunk/src/libraries/core/GameConfig.cc	(revision 11020)
+++ code/trunk/src/libraries/core/GameConfig.cc	(revision 11052)
Index: code/trunk/src/libraries/core/GameConfig.h
===================================================================
--- code/trunk/src/libraries/core/GameConfig.h	(revision 11020)
+++ code/trunk/src/libraries/core/GameConfig.h	(revision 11052)
Index: code/trunk/src/libraries/core/command/ArgumentCompletionFunctions.h
===================================================================
--- code/trunk/src/libraries/core/command/ArgumentCompletionFunctions.h	(revision 11020)
+++ code/trunk/src/libraries/core/command/ArgumentCompletionFunctions.h	(revision 11052)
@@ -161,6 +161,6 @@
 */
 #define ARGUMENT_COMPLETION_FUNCTION_DECLARATION(functionname) \
-    _CoreExport ArgumentCompleter* functionname(); \
-    _CoreExport ArgumentCompletionList acf_##functionname
+    ArgumentCompleter* functionname(); \
+    ArgumentCompletionList acf_##functionname
 
 /**
@@ -196,14 +196,14 @@
     namespace autocompletion
     {
-        ARGUMENT_COMPLETION_FUNCTION_DECLARATION(fallback)();
-        ARGUMENT_COMPLETION_FUNCTION_DECLARATION(groupsandcommands)(const std::string& fragment);
-        ARGUMENT_COMPLETION_FUNCTION_DECLARATION(subcommands)(const std::string& fragment, const std::string& group);
-        ARGUMENT_COMPLETION_FUNCTION_DECLARATION(command)(const std::string& fragment);
-        ARGUMENT_COMPLETION_FUNCTION_DECLARATION(hiddencommand)(const std::string& fragment);
-        ARGUMENT_COMPLETION_FUNCTION_DECLARATION(files)(const std::string& fragment);
-        ARGUMENT_COMPLETION_FUNCTION_DECLARATION(settingssections)();
-        ARGUMENT_COMPLETION_FUNCTION_DECLARATION(settingsentries)(const std::string& fragment, const std::string& section);
-        ARGUMENT_COMPLETION_FUNCTION_DECLARATION(settingsvalue)(const std::string& fragment, const std::string& entry, const std::string& section);
-        ARGUMENT_COMPLETION_FUNCTION_DECLARATION(tclthreads)();
+        _CoreExport ARGUMENT_COMPLETION_FUNCTION_DECLARATION(fallback)();
+        _CoreExport ARGUMENT_COMPLETION_FUNCTION_DECLARATION(groupsandcommands)(const std::string& fragment);
+        _CoreExport ARGUMENT_COMPLETION_FUNCTION_DECLARATION(subcommands)(const std::string& fragment, const std::string& group);
+        _CoreExport ARGUMENT_COMPLETION_FUNCTION_DECLARATION(command)(const std::string& fragment);
+        _CoreExport ARGUMENT_COMPLETION_FUNCTION_DECLARATION(hiddencommand)(const std::string& fragment);
+        _CoreExport ARGUMENT_COMPLETION_FUNCTION_DECLARATION(files)(const std::string& fragment);
+        _CoreExport ARGUMENT_COMPLETION_FUNCTION_DECLARATION(settingssections)();
+        _CoreExport ARGUMENT_COMPLETION_FUNCTION_DECLARATION(settingsentries)(const std::string& fragment, const std::string& section);
+        _CoreExport ARGUMENT_COMPLETION_FUNCTION_DECLARATION(settingsvalue)(const std::string& fragment, const std::string& entry, const std::string& section);
+        _CoreExport ARGUMENT_COMPLETION_FUNCTION_DECLARATION(tclthreads)();
     }
 }
Index: code/trunk/src/libraries/core/command/ConsoleCommandIncludes.cc
===================================================================
--- code/trunk/src/libraries/core/command/ConsoleCommandIncludes.cc	(revision 11020)
+++ code/trunk/src/libraries/core/command/ConsoleCommandIncludes.cc	(revision 11052)
Index: code/trunk/src/libraries/core/command/ConsoleCommandManager.cc
===================================================================
--- code/trunk/src/libraries/core/command/ConsoleCommandManager.cc	(revision 11020)
+++ code/trunk/src/libraries/core/command/ConsoleCommandManager.cc	(revision 11052)
Index: code/trunk/src/libraries/core/commandline/CMakeLists.txt
===================================================================
--- code/trunk/src/libraries/core/commandline/CMakeLists.txt	(revision 11020)
+++ code/trunk/src/libraries/core/commandline/CMakeLists.txt	(revision 11052)
Index: code/trunk/src/libraries/core/input/KeyBinder.cc
===================================================================
--- code/trunk/src/libraries/core/input/KeyBinder.cc	(revision 11020)
+++ code/trunk/src/libraries/core/input/KeyBinder.cc	(revision 11052)
@@ -359,4 +359,44 @@
     /**
     @brief
+        Return the first key name for a specific command in a human readable form
+    */
+    const std::string& KeyBinder::getBindingReadable(const std::string& commandName)
+    {
+        const std::string& binding = this->getBinding(commandName);
+
+        SubString substring = SubString(binding, ".");
+        std::string name;
+        std::string group;
+        switch(substring.size())
+        {
+            case 0:
+                return binding;
+            case 1:
+                return binding;
+            case 2:
+                group = substring[0];
+            default:
+                name = substring.subSet(1).join(".");
+        }
+
+        std::stringstream stream;
+        if(group.compare("Keys") == 0)
+            stream << "Key " << name.substr(3);
+        else if(group.compare("MouseButtons") == 0)
+            stream << "Mouse " << name;
+        else if(group.compare("JoyStickButtons") == 0)
+            stream << "Joystick " << name;
+        else if(group.compare("JoyStickAxes") == 0)
+            stream << "Joystick Axis" << name.substr(5, 6) << name.substr(name.find("Axis")+6);
+        else if(group.compare("MouseAxes") == 0)
+            stream << "Mouse " << name.substr(1,3) << " " << name.substr(0, 1) << "-Axis";
+        else
+            return binding;
+
+        return *(new std::string(stream.str()));
+    }
+
+    /**
+    @brief
         Get the number of different key bindings of a specific command.
     @param commandName
Index: code/trunk/src/libraries/core/input/KeyBinder.h
===================================================================
--- code/trunk/src/libraries/core/input/KeyBinder.h	(revision 11020)
+++ code/trunk/src/libraries/core/input/KeyBinder.h	(revision 11052)
@@ -68,4 +68,5 @@
         const std::string& getBinding(const std::string& commandName); //tolua_export
         const std::string& getBinding(const std::string& commandName, unsigned int index); //tolua_export
+        const std::string& getBindingReadable(const std::string& commandName); //tolua_export
         unsigned int getNumberOfBindings(const std::string& commandName); //tolua_export
 
Index: code/trunk/src/libraries/core/singleton/ScopedSingletonIncludes.cc
===================================================================
--- code/trunk/src/libraries/core/singleton/ScopedSingletonIncludes.cc	(revision 11020)
+++ code/trunk/src/libraries/core/singleton/ScopedSingletonIncludes.cc	(revision 11052)
Index: code/trunk/src/libraries/core/singleton/ScopedSingletonIncludes.h
===================================================================
--- code/trunk/src/libraries/core/singleton/ScopedSingletonIncludes.h	(revision 11020)
+++ code/trunk/src/libraries/core/singleton/ScopedSingletonIncludes.h	(revision 11052)
