Index: branches/preferences/src/lib/parser/cmdline_parser/cmdline_parser.cc
===================================================================
--- branches/preferences/src/lib/parser/cmdline_parser/cmdline_parser.cc	(revision 7249)
+++ branches/preferences/src/lib/parser/cmdline_parser/cmdline_parser.cc	(revision 7250)
@@ -16,4 +16,6 @@
 #include "cmdline_parser.h"
 
+#include "src/lib/util/substring.h"
+
 using namespace std;
 
@@ -35,5 +37,5 @@
 
 
-bool CmdLineParser::add( int id, const std::string & longOption, char shortOption, int numArgs, bool back )
+bool CmdLineParser::add( int id, const std::string & longOption, char shortOption, int numArgs, const std::string & argNames, const std::string& help, bool back )
 {
   ArgTableEntry entry;
@@ -43,4 +45,6 @@
   entry.shortOption = shortOption;
   entry.numArgs = numArgs;
+  entry.argNames = argNames;
+  entry.help = help;
   
   if ( back )
@@ -53,4 +57,6 @@
 bool CmdLineParser::parse( ArgParserCallback cb, void * data, int argc, char ** argv )
 {
+  this->exeName = argv[0];
+  
   //put all args in vector
   std::vector<std::string> args;
@@ -166,2 +172,81 @@
   }
 }
+
+void CmdLineParser::showHelp()
+{
+  printf("Usage: %s [options]\n", exeName.c_str());
+  printf("\n");
+  
+  std::list<std::vector<std::string> > output;
+  
+  for ( ArgTable::iterator it = argTable.begin(); it != argTable.end(); it++ )
+  {
+    output.push_back( std::vector<std::string>() );
+    
+    SubString substr( it->argNames );
+    std::string args;
+    assert( it->numArgs == substr.getCount() );
+      
+    for ( int i = 0; i<it->numArgs; i++ )
+    {
+      args += " [" + substr[i] + "]";
+    }
+    
+    if ( it->shortOption != '\0' )
+    {
+      output.back().push_back( " -" + std::string((char*)&it->shortOption, 1) );
+      output.back().back() += args;
+    }
+    else
+      output.back().push_back( "" );
+    
+    if ( it->longOption != "" )
+    {
+      output.back().push_back( "--" + it->longOption );
+      
+      output.back().back() += args;
+    }
+    else
+      output.back().push_back( "" );
+    
+    output.back().push_back( it->help );
+  }
+  
+  output.push_back( std::vector<std::string>() );
+  output.back().push_back( "Option" );
+  output.back().push_back( "Long option" );
+  output.back().push_back( "Meaning" );
+  
+  output.reverse();
+  
+  int maxShort = 0;
+  int maxLong = 0;
+  
+  std::list<std::vector<std::string> >::const_iterator it;
+  
+  for ( it = output.begin(); it != output.end(); it++ )
+  {
+    if ( (*it)[0].length() > maxShort )
+      maxShort = (*it)[0].length();
+    
+    if ( (*it)[1].length() > maxLong )
+      maxLong = (*it)[1].length();
+  }
+  
+  for ( it = output.begin(); it != output.end(); it++ )
+  {
+    printf("%s ", (*it)[0].c_str());
+    
+    for ( int i = 0; i<maxShort-(*it)[0].length(); i++ )
+      printf(" ");
+    
+    printf("%s ", (*it)[1].c_str());
+    
+    for ( int i = 0; i<maxLong-(*it)[1].length(); i++ )
+      printf(" ");
+    
+    printf("%s\n", (*it)[2].c_str());
+  }
+  
+  exit(0);
+}
Index: branches/preferences/src/lib/parser/cmdline_parser/cmdline_parser.h
===================================================================
--- branches/preferences/src/lib/parser/cmdline_parser/cmdline_parser.h	(revision 7249)
+++ branches/preferences/src/lib/parser/cmdline_parser/cmdline_parser.h	(revision 7250)
@@ -21,4 +21,6 @@
   char        shortOption;
   int         numArgs;
+  std::string argNames;
+  std::string help;
 };
 
@@ -35,10 +37,13 @@
     virtual ~CmdLineParser();
     
-    bool add( int id, const std::string& longOption, char shortOption, int numArgs, bool back=false );
+    bool add( int id, const std::string& longOption, char shortOption, int numArgs, const std::string & argNames, const std::string& help, bool back=false );
 
     bool parse( ArgParserCallback cb, void* data, int argc, char** argv );
     
+    void showHelp();
+    
   private:
     ArgTable argTable;
+    std::string exeName;
     
     inline bool matches( ArgTableEntry entry, std::string arg, bool & finish );
Index: branches/preferences/src/lib/parser/preferences/cmd_line_prefs_reader.cc
===================================================================
--- branches/preferences/src/lib/parser/preferences/cmd_line_prefs_reader.cc	(revision 7249)
+++ branches/preferences/src/lib/parser/preferences/cmd_line_prefs_reader.cc	(revision 7250)
@@ -40,4 +40,6 @@
 bool CmdLinePrefsReader::callBack( ArgTableEntry entry, void * data, const std::string & arg, const std::vector<MultiType> & argArgs )
 {
+  CallbackData * cbd = (CallbackData *)data;
+  
   switch ( entry.id )
   {
@@ -57,7 +59,14 @@
       }
       
-      Preferences::getInstance()->setMultiType( section, key, argArgs[0], true );
+      //Preferences::getInstance()->setMultiType( section, key, argArgs[0], true );
+      cbd->iniEntries.push_back( IniEntry() );
+      cbd->iniEntries.back().section = section;
+      cbd->iniEntries.back().key = key;
+      cbd->iniEntries.back().value = argArgs[0].getString();
       break;
     }
+    case ID_HELP:
+      cbd->parser->showHelp();
+      break;
     default:
       assert(false);
@@ -67,11 +76,19 @@
 }
 
+
 bool CmdLinePrefsReader::parse( int argc, char ** argv )
 {
   CmdLineParser parser;
   
-  parser.add( ID_SET_INI, "set-%", '\0', 1 );
+  parser.add( ID_HELP, "help", 'h', 0, "", "Show this help");
+  parser.add( 99, "port", 'p', 0, "", "dont know");
   
-  parser.parse( &callBack, NULL, argc, argv );
+  parser.add( ID_SET_INI, "set-%", '\0', 1, "value", "Override a configuration element." );
+  
+  CallbackData cbd;
+  
+  cbd.parser = &parser;
+  
+  parser.parse( &callBack, &cbd, argc, argv );
 }
 
Index: branches/preferences/src/lib/parser/preferences/cmd_line_prefs_reader.h
===================================================================
--- branches/preferences/src/lib/parser/preferences/cmd_line_prefs_reader.h	(revision 7249)
+++ branches/preferences/src/lib/parser/preferences/cmd_line_prefs_reader.h	(revision 7250)
@@ -12,7 +12,21 @@
 #include "src/lib/parser/cmdline_parser/cmdline_parser.h"
 
+struct IniEntry
+{
+  std::string section;
+  std::string key;
+  std::string value;
+};
+
+struct CallbackData
+{
+  std::list<IniEntry> iniEntries;
+  CmdLineParser * parser;
+};
+
 enum
 {
-  ID_SET_INI = 1
+  ID_SET_INI = 1,
+  ID_HELP
 };
 
Index: branches/preferences/src/orxonox.h
===================================================================
--- branches/preferences/src/orxonox.h	(revision 7249)
+++ branches/preferences/src/orxonox.h	(revision 7250)
@@ -11,5 +11,4 @@
 class WorldEntity;
 class GameLoader;
-class IniParser;
 
 //! orxonox core singleton class
