Index: src/Actions/CommandAction/HelpAction.cpp
===================================================================
--- src/Actions/CommandAction/HelpAction.cpp	(revision 406bb5602ebca0fb814a7bc8777383eb42c9599a)
+++ src/Actions/CommandAction/HelpAction.cpp	(revision dac853cbf770cdeafc4bdd7d6a4ed6e9869cea86)
@@ -23,5 +23,9 @@
 #include <string>
 
-using namespace std;
+#include "Actions/ActionRegistry.hpp"
+#include "Actions/ActionTraits.hpp"
+#include "Actions/OptionRegistry.hpp"
+#include "Actions/OptionTrait.hpp"
+#include "CodePatterns/Log.hpp"
 
 #include "Actions/CommandAction/HelpAction.hpp"
@@ -34,4 +38,54 @@
   // obtain information
   getParametersfromValueStorage();
+
+  // print some general advice
+  std::cout << std::endl << std::endl << "Usage help:" << std::endl;
+  std::cout << "================================================================================" << std::endl;
+  std::cout << "Usage: molecuilder --<action name> [arguments] [--<option1 name> <argument> ...]" << std::endl;
+  std::cout << std::endl;
+  std::cout << "MoleCuilder can do all kinds of measurements and manipulations and it always"  << std::endl;
+  std::cout << "works on files! See action 'input' and 'set-output' on how to specify these." << std::endl;
+  std::cout << std::endl;
+  std::cout << "To get a list of all actions, use " << std::endl;
+  std::cout << "\t'molecuilder --help'." << std::endl;
+  std::cout << "To get all options for a specific action, use " << std::endl;
+  std::cout << "\t'molecuilder --help --actionname \"<actionname>\"'." << std::endl;
+  std::cout << std::endl;
+  std::cout << "Arguments are given in the following (peculiar) ways:" << std::endl;
+  std::cout << "\t - Boolean: give as 0 (false) or 1 (true)." << std::endl;
+  std::cout << "\t - Integer: give as e.g. 17" << std::endl;
+  std::cout << "\t - Double: give as e.g. 0.5346" << std::endl;
+  std::cout << "\t - String: give as e.g. \"test\"" << std::endl;
+  std::cout << "\t - List/vector of strings: gives as \"first\" \"second\" \"third\"." << std::endl;
+  std::cout << "\t - Vector: give as \"x,y,z\", i.e. its 3 components." << std::endl;
+  std::cout << "\t - Domain: give as \"xx,xy,xz,yy,yz,zz\", i.e. symmetric 3x3 matrix." << std::endl;
+  std::cout << "\t - Path/filename: give as \"<path/filename>\"." << std::endl;
+  std::cout << "================================================================================" << std::endl;
+  std::cout << std::endl;
+  // print list of actions or its options
+  if (params.actionname == "none") {
+    // print list of all Actions
+    std::cout << "Here is a list of all available Actions:" << std::endl;
+    for(ActionRegistry::const_iterator iter = ActionRegistry::getInstance().getBeginIter();
+        iter != ActionRegistry::getInstance().getEndIter();
+        ++iter) {
+      const Action *instance = iter->second;
+      std::cout << "'" << iter->first << "': \t "
+          << instance->Traits.getDescription() << std::endl;
+    }
+  } else {
+    // retrieve command from Registry and print its help
+    if (ActionRegistry::getInstance().isActionPresentByName(params.actionname)) {
+      const Action *instance = ActionRegistry::getInstance().getActionByName(params.actionname);
+      // else give description of Action and its option value if present
+      std::cout << instance->help();
+      std::cout << std::endl;
+      std::cout << std::endl;
+    } else {
+      ELOG(1, "No action is known by the name " << params.actionname << ".");
+      return Action::failure;
+    }
+
+  }
 
   return Action::success;
Index: src/Actions/CommandAction/HelpAction.def
===================================================================
--- src/Actions/CommandAction/HelpAction.def	(revision 406bb5602ebca0fb814a7bc8777383eb42c9599a)
+++ src/Actions/CommandAction/HelpAction.def	(revision dac853cbf770cdeafc4bdd7d6a4ed6e9869cea86)
@@ -12,9 +12,9 @@
 // ValueStorage by the token "Z" -> first column: int, Z, "Z"
 // "undefine" if no parameters are required, use (NODEFAULT) for each (undefined) default value
-#undef paramtypes
-#undef paramtokens
-#undef paramdescriptions
-#undef paramdefaults
-#undef paramreferences
+#define paramtypes (std::string)
+#define paramtokens ("actionname")
+#define paramdescriptions ("Name of an action whose option list is then given")
+#define paramdefaults ("none")
+#define paramreferences (actionname)
 
 #undef statetypes
@@ -30,4 +30,4 @@
 
 // finally the information stored in the ActionTrait specialization
-#define DESCRIPTION "help screen"
+#define DESCRIPTION "prints help and available actions, or an action's options"
 #define SHORTFORM "h"
Index: tests/regression/Options/Help/testsuite-options-help.at
===================================================================
--- tests/regression/Options/Help/testsuite-options-help.at	(revision 406bb5602ebca0fb814a7bc8777383eb42c9599a)
+++ tests/regression/Options/Help/testsuite-options-help.at	(revision dac853cbf770cdeafc4bdd7d6a4ed6e9869cea86)
@@ -1,9 +1,13 @@
 ### help screen
 
-AT_SETUP([Standard Options - help screen])
+AT_SETUP([Standard Options - help])
 AT_KEYWORDS([options])
 AT_CHECK([../../molecuilder -h], 0, [stdout], [ignore])
-AT_CHECK([fgrep "help screen" stdout], 0, [ignore], [ignore])
+AT_CHECK([fgrep "list of all available Actions" stdout], 0, [ignore], [ignore])
+AT_CHECK([fgrep "Usage help" stdout], 0, [ignore], [ignore])
 AT_CHECK([../../molecuilder --help], 0, [stdout], [ignore])
-AT_CHECK([fgrep "help screen" stdout], 0, [ignore], [ignore])
+AT_CHECK([fgrep "list of all available Actions" stdout], 0, [ignore], [ignore])
+AT_CHECK([fgrep "Usage help" stdout], 0, [ignore], [ignore])
+AT_CHECK([../../molecuilder --help --actionname "help"], 0, [stdout], [ignore])
+AT_CHECK([fgrep "Options available for action 'help'" stdout], 0, [ignore], [ignore])
 AT_CLEANUP
