diff --git a/applications/utilities/miscellaneous/foamHelp/addToolOption.H b/applications/utilities/miscellaneous/foamHelp/addToolOption.H
new file mode 100644
index 0000000000000000000000000000000000000000..71aa07117944da5cc97f276d757b30d89d1752ce
--- /dev/null
+++ b/applications/utilities/miscellaneous/foamHelp/addToolOption.H
@@ -0,0 +1,10 @@
+argList::validArgs.append("tool");
+const wordList opts(helpType::dictionaryConstructorTablePtr_->sortedToc());
+
+string note = "Valid <tool> options include:";
+forAll(opts, i)
+{
+    note = note + ' ' + opts[i];
+}
+
+argList::notes.append(note);
diff --git a/applications/utilities/miscellaneous/foamHelp/foamHelp.C b/applications/utilities/miscellaneous/foamHelp/foamHelp.C
index d4d145ee218bbcb1365e0e9bca3281a54c817e0c..a0e7097e4f96c52479f66520f3821179215388eb 100644
--- a/applications/utilities/miscellaneous/foamHelp/foamHelp.C
+++ b/applications/utilities/miscellaneous/foamHelp/foamHelp.C
@@ -3,7 +3,7 @@
   \\      /  F ield         | OpenFOAM: The Open Source CFD Toolbox
    \\    /   O peration     |
     \\  /    A nd           | Copyright (C) 2012-2014 OpenFOAM Foundation
-     \\/     M anipulation  |
+     \\/     M anipulation  | Copyright (C) 2017 OpenCFD Ltd.
 -------------------------------------------------------------------------------
 License
     This file is part of OpenFOAM.
@@ -42,6 +42,14 @@ using namespace Foam;
 int main(int argc, char *argv[])
 {
     #include "addRegionOption.H"
+    #include "addToolOption.H"
+
+    // Intercept request for help
+    if ((argc > 0) && (strcmp(argv[1], "-help") == 0))
+    {
+        #include "setRootCase.H"
+    }
+
     if (argc < 2)
     {
         FatalError
@@ -49,8 +57,7 @@ int main(int argc, char *argv[])
             << exit(FatalError);
     }
 
-    const word utilityName = argv[1];
-
+    word utilityName = argv[1];
     Foam::autoPtr<Foam::helpType> utility
     (
         helpType::New(utilityName)
diff --git a/applications/utilities/miscellaneous/foamHelp/helpTypes/helpBoundary/helpBoundary.C b/applications/utilities/miscellaneous/foamHelp/helpTypes/helpBoundary/helpBoundary.C
index 5052b76a14f5d3d417e1fe27b3b598a3081f3fa0..3e3931c4c3006ff8249a4ce12a0783aaf3e024ea 100644
--- a/applications/utilities/miscellaneous/foamHelp/helpTypes/helpBoundary/helpBoundary.C
+++ b/applications/utilities/miscellaneous/foamHelp/helpTypes/helpBoundary/helpBoundary.C
@@ -62,8 +62,6 @@ void Foam::helpTypes::helpBoundary::init()
 {
     helpType::init();
 
-    argList::validArgs.append("boundary");
-
     argList::addOption
     (
         "field",
diff --git a/applications/utilities/miscellaneous/foamHelp/helpTypes/helpFunctionObject/helpFunctionObject.C b/applications/utilities/miscellaneous/foamHelp/helpTypes/helpFunctionObject/helpFunctionObject.C
index c42a430a061a2becd08672b59890a99d6cc26efd..81fca4a91844aeff6d9d931e6f284b2c6142ad07 100644
--- a/applications/utilities/miscellaneous/foamHelp/helpTypes/helpFunctionObject/helpFunctionObject.C
+++ b/applications/utilities/miscellaneous/foamHelp/helpTypes/helpFunctionObject/helpFunctionObject.C
@@ -61,8 +61,6 @@ Foam::helpTypes::helpFunctionObject::~helpFunctionObject()
 void Foam::helpTypes::helpFunctionObject::init()
 {
     helpType::init();
-
-    argList::validArgs.append("functionObject");
 }
 
 
diff --git a/applications/utilities/miscellaneous/foamHelp/helpTypes/helpSolver/helpSolver.C b/applications/utilities/miscellaneous/foamHelp/helpTypes/helpSolver/helpSolver.C
index cac59967c31b236de66a2e6e8ba65c752aaa214f..ac628c09c6784796bcf07309056bfbf58cdd1f45 100644
--- a/applications/utilities/miscellaneous/foamHelp/helpTypes/helpSolver/helpSolver.C
+++ b/applications/utilities/miscellaneous/foamHelp/helpTypes/helpSolver/helpSolver.C
@@ -63,7 +63,6 @@ void Foam::helpTypes::helpSolver::init()
 {
     helpType::init();
 
-    argList::validArgs.append("solver");
     argList::addBoolOption
     (
         "read",