Index: code/branches/gui/src/orxonox/Main.cc
===================================================================
--- code/branches/gui/src/orxonox/Main.cc	(revision 1663)
+++ code/branches/gui/src/orxonox/Main.cc	(revision 1664)
@@ -41,6 +41,4 @@
 #include "core/SignalHandler.h"
 #include "core/Debug.h"
-#include "core/CommandLine.h"
-//#include "Orxonox.h"
 
 #include "gamestates/GSRoot.h"
@@ -85,19 +83,6 @@
 int main(int argc, char** argv)
 {
-    try
-    {
-        orxonox::CommandLine::parse(argc, argv);
-    }
-    catch (orxonox::ArgumentException& ex)
-    {
-        COUT(1) << ex.what() << std::endl;
-        COUT(0) << "Usage:" << std::endl << "orxonox [--mode client|server|dedicated|standalone] "
-                << "[--data PATH] [--ip IP] [--port PORT]" << std::endl;
-    }
-
-
     // create a signal handler (only works for linux)
     SignalHandler::getInstance()->doCatch(argv[0], "orxonox.log");
-
 
 
@@ -144,24 +129,8 @@
     graphics.addChild(&gui);
 
-    root.requestState("gui");
+    root.feedCommandLine(argc, argv);
+    root.requestState("root");
     root.tick(0.0f);
     root.requestState("");
-
-
-    //Orxonox orxonoxInstance;
-
-    try
-    {
-#if ORXONOX_PLATFORM == ORXONOX_PLATFORM_APPLE
-        orxonoxInstance.start(macBundlePath());
-#else
-        //orxonoxInstance.start();
-#endif
-    }
-    catch (std::exception& ex)
-    {
-        COUT(1) << ex.what() << std::endl;
-        COUT(1) << "Abort." << std::endl;
-    }
 
     return 0;
Index: code/branches/gui/src/orxonox/gamestates/GSLevel.cc
===================================================================
--- code/branches/gui/src/orxonox/gamestates/GSLevel.cc	(revision 1663)
+++ code/branches/gui/src/orxonox/gamestates/GSLevel.cc	(revision 1664)
@@ -46,6 +46,6 @@
 namespace orxonox
 {
-    SetCommandLineArgument(port, 55556).setShortcut("p");
-    SetCommandLineArgument(ip, std::string("127.0.0.0"));
+    SetCommandLineArgument(port, 55556).setShortcut("p").setInformation("PORT");
+    SetCommandLineArgument(ip, "127.0.0.0").setInformation("#.#.#.#");
 
     GSLevel::GSLevel()
Index: code/branches/gui/src/orxonox/gamestates/GSRoot.cc
===================================================================
--- code/branches/gui/src/orxonox/gamestates/GSRoot.cc	(revision 1663)
+++ code/branches/gui/src/orxonox/gamestates/GSRoot.cc	(revision 1664)
@@ -30,8 +30,10 @@
 #include "GSRoot.h"
 
+#include "util/SubString.h"
 #include "core/Factory.h"
 #include "core/ConfigFileManager.h"
 #include "core/ConfigValueIncludes.h"
 #include "core/ConsoleCommand.h"
+#include "core/CommandLine.h"
 #include "core/Debug.h"
 #include "core/Exception.h"
@@ -44,5 +46,5 @@
 namespace orxonox
 {
-    SetCommandLineArgument(dataPath, std::string("./"));
+    SetCommandLineArgument(dataPath, "").setInformation("PATH");
 
     GSRoot::GSRoot()
@@ -55,4 +57,31 @@
     GSRoot::~GSRoot()
     {
+    }
+
+    //SetCommandLineArgument(asdf1, "haha").setShortcut("a").setUsageInformation("1|2|3");
+    //SetCommandLineArgument(asdf2, 3).setShortcut("b");
+    //SetCommandLineArgument(asdf3, Vector2()).setShortcut("c");
+    //SetCommandLineArgument(adsf4, 1.4f).setShortcut("d");
+    //SetCommandLineSwitch(showGraphics).setShortcut("g");
+
+    void GSRoot::feedCommandLine(int argc, char** argv)
+    {
+        std::vector<std::string> args;
+        for (int i = 1; i < argc; ++i)
+            args.push_back(argv[i]);
+
+        //std::string line = "-a --asdf3 (3,3) -d -5 -b - 5.4";
+        //SubString tokens(line, " ", " ", false, 92, false, 34, true, 40, 41, false, 0);
+
+        try
+        {
+            orxonox::CommandLine::parse(args);
+            //CommandLine::parse(tokens.getAllStrings());
+        }
+        catch (orxonox::ArgumentException& ex)
+        {
+            COUT(1) << ex.what() << std::endl;
+            COUT(0) << "Usage:" << std::endl << "orxonox " << CommandLine::getUsageInformation() << std::endl;
+        }
     }
 
@@ -71,11 +100,12 @@
         this->settings_ = new Settings();
 
-        const CommandLineArgument<std::string>* dataPath = CommandLine::getCommandLineArgument<std::string>("dataPath");
-        if (!dataPath->hasDefaultValue())
+        std::string dataPath;
+        CommandLine::getCommandLineValue("dataPath", &dataPath);
+        if (dataPath != "")
         {
-            if (*dataPath->getValue().end() != '/' && *dataPath->getValue().end() != '\\')
-                Settings::tsetDataPath(dataPath->getValue() + "/");
+            if (*dataPath.end() != '/' && *dataPath.end() != '\\')
+                Settings::tsetDataPath(dataPath + "/");
             else
-                Settings::tsetDataPath(dataPath->getValue());
+                Settings::tsetDataPath(dataPath);
         }
 
@@ -91,4 +121,6 @@
         functor->setObject(this);
         CommandExecutor::addConsoleCommandShortcut(createConsoleCommand(functor, "loadGame"));
+
+        requestState("gui");
     }
 
Index: code/branches/gui/src/orxonox/gamestates/GSRoot.h
===================================================================
--- code/branches/gui/src/orxonox/gamestates/GSRoot.h	(revision 1663)
+++ code/branches/gui/src/orxonox/gamestates/GSRoot.h	(revision 1664)
@@ -41,4 +41,5 @@
         ~GSRoot();
 
+        void feedCommandLine(int argc, char** argv);
         bool tick(float dt);
         void loadGame(const std::string& name);
