Index: /code/branches/core4/src/core/CommandLine.cc
===================================================================
--- /code/branches/core4/src/core/CommandLine.cc	(revision 3254)
+++ /code/branches/core4/src/core/CommandLine.cc	(revision 3255)
@@ -29,4 +29,5 @@
 #include "CommandLine.h"
 
+#include <sstream>
 #include <boost/filesystem.hpp>
 
@@ -231,5 +232,5 @@
         {
             COUT(0) << "Could not parse command line (including additional files): " << ex.what() << std::endl;
-            COUT(0) << "Usage:" << std::endl << "orxonox " << CommandLine::getUsageInformation() << std::endl;
+            COUT(0) << CommandLine::getUsageInformation() << std::endl;
             throw GeneralException("");
         }
@@ -272,12 +273,36 @@
     std::string CommandLine::getUsageInformation()
     {
-        CommandLine* inst = &_getInstance();
-        std::string infoStr;
-        for (std::map<std::string, CommandLineArgument*>::const_iterator it = inst->cmdLineArgs_.begin();
-            it != inst->cmdLineArgs_.end(); ++it)
-        {
-            infoStr += "[--" + it->second->getName() + " " + it->second->getInformation() + "] ";
-        }
-        return infoStr;
+        CommandLine& inst = _getInstance();
+        std::ostringstream infoStr;
+
+        // determine maximum name size
+        size_t maxNameSize = 0;
+        for (std::map<std::string, CommandLineArgument*>::const_iterator it = inst.cmdLineArgs_.begin();
+            it != inst.cmdLineArgs_.end(); ++it)
+        {
+            maxNameSize = std::max(it->second->getName().size(), maxNameSize);
+        }
+
+        infoStr << "Usage: orxonox [options]" << std::endl;
+        infoStr << "Available options:" << std::endl;
+
+        for (std::map<std::string, CommandLineArgument*>::const_iterator it = inst.cmdLineArgs_.begin();
+            it != inst.cmdLineArgs_.end(); ++it)
+        {
+            if (it->second->getShortcut() != "")
+                infoStr << " [-" << it->second->getShortcut() << "] ";
+            else
+                infoStr << "      ";
+            infoStr << "--" << it->second->getName() << " ";
+            if (it->second->getValue().getType() != MT_bool)
+                infoStr << "ARG ";
+            else
+                infoStr << "    ";
+            // fill with the necessary amount of blanks
+            infoStr << std::string(maxNameSize - it->second->getName().size(), ' ');
+            infoStr << ": " << it->second->getInformation();
+            infoStr << std::endl;
+        }
+        return infoStr.str();
     }
 
Index: /code/branches/core4/src/core/CommandLine.h
===================================================================
--- /code/branches/core4/src/core/CommandLine.h	(revision 3254)
+++ /code/branches/core4/src/core/CommandLine.h	(revision 3255)
@@ -80,5 +80,5 @@
 
         //! Returns the shortcut (example: "-p 22" for "--port 22") of the argument.
-        //! Evaluates to "" if none there is none.
+        //! Evaluates to "" if there is none.
         const std::string& getShortcut() const { return shortcut_; }
         //! Sets the shortcut for the argument
@@ -213,4 +213,7 @@
         OrxAssert(!_getInstance().existsArgument(name),
             "Cannot add a command line argument with name '" + name + "' twice.");
+        OrxAssert(MultiType(defaultValue).getType() != MT_bool || MultiType(defaultValue).getBool() != true,
+               "Boolean command line arguments with positive default values are not supported." << std::endl
+            << "Please use SetCommandLineSwitch and adjust your argument: " << name);
 
         return *(_getInstance().cmdLineArgs_[name] = new CommandLineArgument(name, defaultValue, bCommandLineOnly));
Index: /code/branches/core4/src/core/Core.cc
===================================================================
--- /code/branches/core4/src/core/Core.cc	(revision 3254)
+++ /code/branches/core4/src/core/Core.cc	(revision 3255)
@@ -80,8 +80,10 @@
     Core* Core::singletonRef_s  = 0;
 
-    SetCommandLineArgument(mediaPath, "").information("PATH");
-    SetCommandLineOnlyArgument(writingPathSuffix, "").information("DIR");
-    SetCommandLineArgument(settingsFile, "orxonox.ini");
-    SetCommandLineArgument(limitToCPU, 0).information("0: off | #cpu");
+    SetCommandLineArgument(mediaPath, "").information("Path to the media/data files");
+    SetCommandLineOnlyArgument(writingPathSuffix, "").information("Additional subfolder for config and log files");
+    SetCommandLineArgument(settingsFile, "orxonox.ini").information("THE configuration file");
+#ifdef ORXONOX_PLATFORM_WINDOWS
+    SetCommandLineArgument(limitToCPU, 0).information("Limits the program to one cpu/core (1, 2, 3, etc.). 0 turns it off (default)");
+#endif
 
     /**
@@ -263,4 +265,5 @@
         CommandLine::parseFile();
 
+#ifdef ORXONOX_PLATFORM_WINDOWS
         // limit the main thread to the first core so that QueryPerformanceCounter doesn't jump
         // do this after ogre has initialised. Somehow Ogre changes the settings again (not through
@@ -269,4 +272,5 @@
         if (limitToCPU > 0)
             setThreadAffinity(static_cast<unsigned int>(limitToCPU));
+#endif
 
         // Manage ini files and set the default settings file (usually orxonox.ini)
@@ -423,8 +427,9 @@
     void Core::setThreadAffinity(int limitToCPU)
     {
+#ifdef ORXONOX_PLATFORM_WINDOWS
+
         if (limitToCPU <= 0)
             return;
 
-#ifdef ORXONOX_PLATFORM_WINDOWS
         unsigned int coreNr = limitToCPU - 1;
         // Get the current process core mask
Index: /code/branches/core4/src/core/input/InputManager.cc
===================================================================
--- /code/branches/core4/src/core/input/InputManager.cc	(revision 3254)
+++ /code/branches/core4/src/core/input/InputManager.cc	(revision 3255)
@@ -70,5 +70,5 @@
     SetConsoleCommand(InputManager, ungrabMouse, true);
 #endif
-    SetCommandLineSwitch(keyboard_no_grab);
+    SetCommandLineSwitch(keyboard_no_grab).information("Whether not to exclusively grab the keyboard");
 
     EmptyHandler InputManager::EMPTY_HANDLER;
Index: /code/branches/core4/src/orxonox/LevelManager.cc
===================================================================
--- /code/branches/core4/src/orxonox/LevelManager.cc	(revision 3254)
+++ /code/branches/core4/src/orxonox/LevelManager.cc	(revision 3255)
@@ -40,5 +40,5 @@
 namespace orxonox
 {
-    SetCommandLineArgument(level, "").shortcut("l");
+    SetCommandLineArgument(level, "").shortcut("l").information("Default level file (overrides LevelManager::defaultLevelName_ configValue)");
 
     LevelManager* LevelManager::singletonRef_s = 0;
@@ -55,5 +55,5 @@
         if (!CommandLine::getArgument("level")->hasDefaultValue())
         {
-            ModifyConfigValue(defaultLevelName_, tset, CommandLine::getValue("mediaPath").getString());
+            ModifyConfigValue(defaultLevelName_, tset, CommandLine::getValue("level").getString());
         }
     }
Index: /code/branches/core4/src/orxonox/gamestates/GSClient.cc
===================================================================
--- /code/branches/core4/src/orxonox/gamestates/GSClient.cc	(revision 3254)
+++ /code/branches/core4/src/orxonox/gamestates/GSClient.cc	(revision 3255)
@@ -40,5 +40,5 @@
     DeclareGameState(GSClient, "client", false, true);
 
-    SetCommandLineArgument(ip, "127.0.0.1").information("#.#.#.#");
+    SetCommandLineArgument(ip, "127.0.0.1").information("Sever IP as strin in the form #.#.#.#");
 
     GSClient::GSClient(const GameStateConstrParams& params)
Index: /code/branches/core4/src/orxonox/gamestates/GSRoot.cc
===================================================================
--- /code/branches/core4/src/orxonox/gamestates/GSRoot.cc	(revision 3254)
+++ /code/branches/core4/src/orxonox/gamestates/GSRoot.cc	(revision 3255)
@@ -42,10 +42,10 @@
 {
     DeclareGameState(GSRoot, "root", true, false);
-    SetCommandLineSwitch(console);
+    SetCommandLineSwitch(console).information("Start in console mode (text IO only)");
     // Shortcuts for easy direct loading
-    SetCommandLineSwitch(server);
-    SetCommandLineSwitch(client);
-    SetCommandLineSwitch(dedicated);
-    SetCommandLineSwitch(standalone);
+    SetCommandLineSwitch(server).information("Start in server mode");
+    SetCommandLineSwitch(client).information("Start in client mode");
+    SetCommandLineSwitch(dedicated).information("Start in dedicated server mode");
+    SetCommandLineSwitch(standalone).information("Start in standalone mode");
 
     GSRoot::GSRoot(const GameStateConstrParams& params)
Index: /code/branches/core4/src/orxonox/gamestates/GSServer.cc
===================================================================
--- /code/branches/core4/src/orxonox/gamestates/GSServer.cc	(revision 3254)
+++ /code/branches/core4/src/orxonox/gamestates/GSServer.cc	(revision 3255)
@@ -39,5 +39,5 @@
     DeclareGameState(GSServer, "server", false, true);
 
-    SetCommandLineArgument(port, 55556).shortcut("p").information("0-65535");
+    SetCommandLineArgument(port, 55556).shortcut("p").information("Network communication port to be used 0-65535 (default: 55556)");
 
     GSServer::GSServer(const GameStateConstrParams& params)
