diff --git a/applications/solvers/basic/potentialFoam/potentialFoam.C b/applications/solvers/basic/potentialFoam/potentialFoam.C
index 49188fcf0086fd314654d0b74c5768ae90c4db37..a9c5d67211970f10495b3eaaa8dde164f116fae4 100644
--- a/applications/solvers/basic/potentialFoam/potentialFoam.C
+++ b/applications/solvers/basic/potentialFoam/potentialFoam.C
@@ -38,11 +38,9 @@ Description
 
 int main(int argc, char *argv[])
 {
-
-    argList::validOptions.insert("writep", "");
+    argList::addBoolOption("writep", "write the final pressure field");
 
 #   include "setRootCase.H"
-
 #   include "createTime.H"
 #   include "createMesh.H"
 #   include "createFields.H"
diff --git a/applications/solvers/lagrangian/uncoupledKinematicParcelFoam/uncoupledKinematicParcelFoam.C b/applications/solvers/lagrangian/uncoupledKinematicParcelFoam/uncoupledKinematicParcelFoam.C
index 625a30646676a037064dd408b63e285373f8d477..ee0088c3974b5b5fe651337c1818c1951333427e 100644
--- a/applications/solvers/lagrangian/uncoupledKinematicParcelFoam/uncoupledKinematicParcelFoam.C
+++ b/applications/solvers/lagrangian/uncoupledKinematicParcelFoam/uncoupledKinematicParcelFoam.C
@@ -42,7 +42,7 @@ Description
 
 int main(int argc, char *argv[])
 {
-    argList::validOptions.insert("cloudName", "cloud name");
+    argList::addOption("cloudName", "cloud name");
 
     #include "setRootCase.H"
     #include "createTime.H"
diff --git a/applications/test/List/ListTest.C b/applications/test/List/ListTest.C
index 0fee9a9e3b5bd907a611dbad46e91ccd8984a321..b9f69fd043691f4c5fc036b65d2ffb956457dc4d 100644
--- a/applications/test/List/ListTest.C
+++ b/applications/test/List/ListTest.C
@@ -47,11 +47,11 @@ using namespace Foam;
 int main(int argc, char *argv[])
 {
     argList::noParallel();
-    argList::validOptions.insert("reList", "reList");
-    argList::validOptions.insert("wordList", "wordList");
-    argList::validOptions.insert("stringList", "stringList");
-    argList::validOptions.insert("float", "xx");
-    argList::validOptions.insert("flag", "");
+    argList::addOption("reList", "reList");
+    argList::addOption("wordList", "wordList");
+    argList::addOption("stringList", "stringList");
+    argList::addOption("float", "xx");
+    argList::addBoolOption("flag");
 
 #   include "setRootCase.H"
 
diff --git a/applications/test/PackedList/PackedListTest.C b/applications/test/PackedList/PackedListTest.C
index 9bf29923fe029b2aafd948c9d57d3b31cf89cfaa..1e0ca6f385dbf2476a485639052cc73ad68697ee 100644
--- a/applications/test/PackedList/PackedListTest.C
+++ b/applications/test/PackedList/PackedListTest.C
@@ -82,9 +82,9 @@ int main(int argc, char *argv[])
     argList::noParallel();
     argList::validArgs.insert("file .. fileN");
 
-    argList::validOptions.insert("mask", "");
-    argList::validOptions.insert("count", "");
-    argList::validOptions.insert("info", "");
+    argList::addBoolOption("mask");
+    argList::addBoolOption("count");
+    argList::addBoolOption("info");
 
     argList args(argc, argv, false, true);
 
diff --git a/applications/test/fvSolutionCombine/fvSolutionCombine.C b/applications/test/fvSolutionCombine/fvSolutionCombine.C
index 1d9f1017c098ff5eb11cdeddcd3e63ed8a5b507a..e409d5db4ba43db363836942c062c759374e03fa 100644
--- a/applications/test/fvSolutionCombine/fvSolutionCombine.C
+++ b/applications/test/fvSolutionCombine/fvSolutionCombine.C
@@ -98,8 +98,9 @@ bool checkDictionaryContent(const dictionary& dict1, const dictionary& dict2)
 int main(int argc, char *argv[])
 {
     argList::noParallel();
-    argList::validOptions.insert("rewrite", "");
-    argList::validOptions.insert("show", "");
+    argList::addBoolOption("rewrite");
+    argList::addBoolOption("show");
+
     argList args(argc, argv);
 
     Time runTime(args.rootPath(), args.caseName());
diff --git a/applications/test/mvBak/mvBakTest.C b/applications/test/mvBak/mvBakTest.C
index 6580ed421c51edb0d17d94c9252e0b6bd2cefd33..5cc25161dd54516f1566f171925eadbbbc6ae33c 100644
--- a/applications/test/mvBak/mvBakTest.C
+++ b/applications/test/mvBak/mvBakTest.C
@@ -39,8 +39,9 @@ int main(int argc, char *argv[])
     argList::noBanner();
     argList::noParallel();
     argList::validArgs.insert("file .. fileN");
-    argList::validOptions.erase("case");
-    argList::validOptions.insert("ext", "bak");
+
+    argList::removeOption("case");
+    argList::addOption("ext", "bak");
 
     argList args(argc, argv, false, true);
 
diff --git a/applications/test/readCHEMKINIII/readCHEMKINIII.C b/applications/test/readCHEMKINIII/readCHEMKINIII.C
index 10514de3fe13402a27efa5e8d67b0233542b8469..5449297127f9ab1f47ef2bf094e6c13e754f114d 100644
--- a/applications/test/readCHEMKINIII/readCHEMKINIII.C
+++ b/applications/test/readCHEMKINIII/readCHEMKINIII.C
@@ -38,7 +38,7 @@ int main(int argc, char *argv[])
 {
     argList::validArgs.clear();
     argList::validArgs.append("CHEMKINIIIFile");
-    argList::validOptions.insert("thermo", "fileName");
+    argList::addOption("thermo", "fileName");
     argList args(argc, argv);
 
     fileName thermoFileName = fileName::null;
diff --git a/applications/test/tokenizeTest/tokenizeTest.C b/applications/test/tokenizeTest/tokenizeTest.C
index decafd7fc426d80eb736131ccd3ed24274471e4f..cd80997f61dcdbb79155df2d86a5cd70edbf0764 100644
--- a/applications/test/tokenizeTest/tokenizeTest.C
+++ b/applications/test/tokenizeTest/tokenizeTest.C
@@ -44,8 +44,8 @@ int main(int argc, char *argv[])
 {
     argList::noParallel();
     argList::validArgs.insert("string .. stringN");
-    argList::validOptions.insert("file", "name");
-    argList::validOptions.insert("repeat", "count");
+    argList::addOption("file", "name");
+    argList::addOption("repeat", "count");
 
     argList args(argc, argv, false, true);
 
diff --git a/applications/utilities/mesh/advanced/collapseEdges/collapseEdges.C b/applications/utilities/mesh/advanced/collapseEdges/collapseEdges.C
index bc0a575207d8a8f9f28e721f6bc42f80f800d497..3f1f29b29846d86447fe029442dd3994304b6a8f 100644
--- a/applications/utilities/mesh/advanced/collapseEdges/collapseEdges.C
+++ b/applications/utilities/mesh/advanced/collapseEdges/collapseEdges.C
@@ -454,7 +454,7 @@ label simplifyFaces
 int main(int argc, char *argv[])
 {
     argList::noParallel();
-    argList::validOptions.insert("overwrite", "");
+    argList::addBoolOption("overwrite");
     argList::validArgs.append("edge length [m]");
     argList::validArgs.append("merge angle (degrees)");
 
diff --git a/applications/utilities/mesh/advanced/combinePatchFaces/combinePatchFaces.C b/applications/utilities/mesh/advanced/combinePatchFaces/combinePatchFaces.C
index b0d0ab313b52e4997b5be657e2e0a253bbfed4ed..fa055e2758fb85235933cc50f41f08cbe03686e8 100644
--- a/applications/utilities/mesh/advanced/combinePatchFaces/combinePatchFaces.C
+++ b/applications/utilities/mesh/advanced/combinePatchFaces/combinePatchFaces.C
@@ -429,9 +429,9 @@ label mergeEdges(const scalar minCos, polyMesh& mesh)
 int main(int argc, char *argv[])
 {
     argList::validArgs.append("feature angle [0..180]");
-    argList::validOptions.insert("concaveAngle", "[0..180]");
-    argList::validOptions.insert("snapMesh", "");
-    argList::validOptions.insert("overwrite", "");
+    argList::addOption("concaveAngle", "[0..180]");
+    argList::addBoolOption("snapMesh");
+    argList::addBoolOption("overwrite");
 
 #   include "setRootCase.H"
 #   include "createTime.H"
diff --git a/applications/utilities/mesh/advanced/modifyMesh/modifyMesh.C b/applications/utilities/mesh/advanced/modifyMesh/modifyMesh.C
index efe2b761ed4b39a337ed9a36c9b1aedd1b5b9d25..b46a421eb37c35c99781a2f40014a3712ecaf014 100644
--- a/applications/utilities/mesh/advanced/modifyMesh/modifyMesh.C
+++ b/applications/utilities/mesh/advanced/modifyMesh/modifyMesh.C
@@ -328,7 +328,7 @@ label findCell(const primitiveMesh& mesh, const point& nearPoint)
 
 int main(int argc, char *argv[])
 {
-    argList::validOptions.insert("overwrite", "");
+    argList::addBoolOption("overwrite");
 
 #   include "setRootCase.H"
 #   include "createTime.H"
diff --git a/applications/utilities/mesh/advanced/refineHexMesh/refineHexMesh.C b/applications/utilities/mesh/advanced/refineHexMesh/refineHexMesh.C
index 2b3d9ecc452e46b844b96d5d617d6283d7135e15..6175bd4e168bcdf6efab04f11cffad11500e83d4 100644
--- a/applications/utilities/mesh/advanced/refineHexMesh/refineHexMesh.C
+++ b/applications/utilities/mesh/advanced/refineHexMesh/refineHexMesh.C
@@ -52,7 +52,7 @@ using namespace Foam;
 // Main program:
 int main(int argc, char *argv[])
 {
-    argList::validOptions.insert("overwrite", "");
+    argList::addBoolOption("overwrite");
     argList::validArgs.append("cellSet");
 #   include "setRootCase.H"
 #   include "createTime.H"
diff --git a/applications/utilities/mesh/advanced/refineWallLayer/refineWallLayer.C b/applications/utilities/mesh/advanced/refineWallLayer/refineWallLayer.C
index 7e42676f3a413ece91b20cfe01ec0848bac435e7..731eac7855b059c01cd3ea7ed09314a35340735b 100644
--- a/applications/utilities/mesh/advanced/refineWallLayer/refineWallLayer.C
+++ b/applications/utilities/mesh/advanced/refineWallLayer/refineWallLayer.C
@@ -47,11 +47,12 @@ using namespace Foam;
 
 int main(int argc, char *argv[])
 {
-    Foam::argList::noParallel();
-    Foam::argList::validArgs.append("patchName");
-    Foam::argList::validArgs.append("edgeWeight");
-    Foam::argList::validOptions.insert("useSet", "cellSet");
-    Foam::argList::validOptions.insert("overwrite", "");
+    argList::noParallel();
+    argList::validArgs.append("patchName");
+    argList::validArgs.append("edgeWeight");
+
+    argList::addOption("useSet", "cellSet");
+    argList::addBoolOption("overwrite");
 
 #   include "setRootCase.H"
 #   include "createTime.H"
diff --git a/applications/utilities/mesh/advanced/refinementLevel/refinementLevel.C b/applications/utilities/mesh/advanced/refinementLevel/refinementLevel.C
index d3b1e14c63e5dffa651cdbd7504d98ce914a4057..38842e7394ad69f5ba03f2ac52a6669a5173b922 100644
--- a/applications/utilities/mesh/advanced/refinementLevel/refinementLevel.C
+++ b/applications/utilities/mesh/advanced/refinementLevel/refinementLevel.C
@@ -97,7 +97,7 @@ bool limitRefinementLevel
 
 int main(int argc, char *argv[])
 {
-    argList::validOptions.insert("readLevel", "");
+    argList::addBoolOption("readLevel");
 
 #   include "setRootCase.H"
 #   include "createTime.H"
diff --git a/applications/utilities/mesh/advanced/removeFaces/removeFaces.C b/applications/utilities/mesh/advanced/removeFaces/removeFaces.C
index c3fcc727d2087f05a8cc8e0beff782a063a0e30b..a7d13ba2c3de3b8cf7fa79168ce9f8cb9811a308 100644
--- a/applications/utilities/mesh/advanced/removeFaces/removeFaces.C
+++ b/applications/utilities/mesh/advanced/removeFaces/removeFaces.C
@@ -48,8 +48,8 @@ using namespace Foam;
 
 int main(int argc, char *argv[])
 {
-    Foam::argList::validOptions.insert("overwrite", "");
-    Foam::argList::validArgs.append("faceSet");
+    argList::addBoolOption("overwrite");
+    argList::validArgs.append("faceSet");
 
 #   include "setRootCase.H"
 #   include "createTime.H"
diff --git a/applications/utilities/mesh/advanced/splitCells/splitCells.C b/applications/utilities/mesh/advanced/splitCells/splitCells.C
index b2851345b87c98435147d092e00287528850410a..1e1548f517e281544167e6ad3a896d5530b60742 100644
--- a/applications/utilities/mesh/advanced/splitCells/splitCells.C
+++ b/applications/utilities/mesh/advanced/splitCells/splitCells.C
@@ -525,10 +525,10 @@ void collectCuts
 int main(int argc, char *argv[])
 {
     argList::noParallel();
-    argList::validOptions.insert("set", "cellSet name");
-    argList::validOptions.insert("geometry", "");
-    argList::validOptions.insert("tol", "edge snap tolerance");
-    argList::validOptions.insert("overwrite", "");
+    argList::addOption("set", "cellSet name");
+    argList::addBoolOption("geometry");
+    argList::addOption("tol", "edge snap tolerance");
+    argList::addBoolOption("overwrite");
     argList::validArgs.append("edge angle [0..360]");
 
 #   include "setRootCase.H"
diff --git a/applications/utilities/mesh/conversion/ansysToFoam/ansysToFoam.L b/applications/utilities/mesh/conversion/ansysToFoam/ansysToFoam.L
index bcdf44f265f9c4f6568dca11c61e6e50d08410fd..d07eeb7b69629255a079f96dfb8f88a0a8ffb99a 100644
--- a/applications/utilities/mesh/conversion/ansysToFoam/ansysToFoam.L
+++ b/applications/utilities/mesh/conversion/ansysToFoam/ansysToFoam.L
@@ -238,7 +238,7 @@ int main(int argc, char *argv[])
 {
     argList::noParallel();
     argList::validArgs.append("ANSYS input file");
-    argList::validOptions.insert("scale", "scale factor");
+    argList::addOption("scale", "scale factor");
 
     argList args(argc, argv);
 
diff --git a/applications/utilities/mesh/conversion/cfx4ToFoam/cfx4ToFoam.C b/applications/utilities/mesh/conversion/cfx4ToFoam/cfx4ToFoam.C
index 7684db4c32f78c115bedb53f625f9e3a8d3c964d..e7a5a5ba56463629568b7703e4a76389764f1cb1 100644
--- a/applications/utilities/mesh/conversion/cfx4ToFoam/cfx4ToFoam.C
+++ b/applications/utilities/mesh/conversion/cfx4ToFoam/cfx4ToFoam.C
@@ -50,7 +50,7 @@ int main(int argc, char *argv[])
 {
     argList::noParallel();
     argList::validArgs.append("CFX geom file");
-    argList::validOptions.insert("scale", "scale factor");
+    argList::addOption("scale", "scale factor");
 
     argList args(argc, argv);
 
diff --git a/applications/utilities/mesh/conversion/fluent3DMeshToFoam/fluent3DMeshToFoam.L b/applications/utilities/mesh/conversion/fluent3DMeshToFoam/fluent3DMeshToFoam.L
index 58523bc1647d27e60a5dd05699dff11a490955c4..4cb7406fecb4fad6a93857fbf4e49213c722adb9 100644
--- a/applications/utilities/mesh/conversion/fluent3DMeshToFoam/fluent3DMeshToFoam.L
+++ b/applications/utilities/mesh/conversion/fluent3DMeshToFoam/fluent3DMeshToFoam.L
@@ -762,10 +762,10 @@ int main(int argc, char *argv[])
 {
     argList::noParallel();
     argList::validArgs.append("Fluent mesh file");
-    argList::validOptions.insert("scale", "scale factor");
-    argList::validOptions.insert("ignoreCellGroups", "cell group names");
-    argList::validOptions.insert("ignoreFaceGroups", "face group names");
-    argList::validOptions.insert("cubit", "");
+    argList::addOption("scale", "scale factor");
+    argList::addOption("ignoreCellGroups", "cell group names");
+    argList::addOption("ignoreFaceGroups", "face group names");
+    argList::addBoolOption("cubit");
 
     argList args(argc, argv);
 
diff --git a/applications/utilities/mesh/conversion/fluentMeshToFoam/fluentMeshToFoam.L b/applications/utilities/mesh/conversion/fluentMeshToFoam/fluentMeshToFoam.L
index 3460a213e87598728a01fba28dc801bbea4bd383..63ac76417676fbab9af6b44fb03acdec803645ab 100644
--- a/applications/utilities/mesh/conversion/fluentMeshToFoam/fluentMeshToFoam.L
+++ b/applications/utilities/mesh/conversion/fluentMeshToFoam/fluentMeshToFoam.L
@@ -867,9 +867,9 @@ int main(int argc, char *argv[])
 {
     argList::noParallel();
     argList::validArgs.append("Fluent mesh file");
-    argList::validOptions.insert("scale", "scale factor");
-    argList::validOptions.insert("writeSets", "");
-    argList::validOptions.insert("writeZones", "");
+    argList::addOption("scale", "scale factor");
+    argList::addBoolOption("writeSets");
+    argList::addBoolOption("writeZones");
 
     argList args(argc, argv);
 
diff --git a/applications/utilities/mesh/conversion/foamToStarMesh/foamToStarMesh.C b/applications/utilities/mesh/conversion/foamToStarMesh/foamToStarMesh.C
index b36ec777694b35d4a640212171062ad026020254..7b021d355ca219f38a4aabc3323732cc13c9e082 100644
--- a/applications/utilities/mesh/conversion/foamToStarMesh/foamToStarMesh.C
+++ b/applications/utilities/mesh/conversion/foamToStarMesh/foamToStarMesh.C
@@ -76,10 +76,10 @@ int main(int argc, char *argv[])
     argList::noParallel();
     timeSelector::addOptions();
 
-    argList::validOptions.insert("scale", "scale");
-    argList::validOptions.insert("noBnd", "");
-    argList::validOptions.insert("tri", "");
-    argList::validOptions.insert("surface", "");
+    argList::addOption("scale", "scale");
+    argList::addBoolOption("noBnd");
+    argList::addBoolOption("tri");
+    argList::addBoolOption("surface");
 
 #   include "setRootCase.H"
 #   include "createTime.H"
diff --git a/applications/utilities/mesh/conversion/gambitToFoam/gambitToFoam.L b/applications/utilities/mesh/conversion/gambitToFoam/gambitToFoam.L
index bc88b46c1e0333331f431c3498f5f2414208ea07..47353f8e42f67a62d4284beb8f2026661050e0c8 100644
--- a/applications/utilities/mesh/conversion/gambitToFoam/gambitToFoam.L
+++ b/applications/utilities/mesh/conversion/gambitToFoam/gambitToFoam.L
@@ -639,7 +639,7 @@ int main(int argc, char *argv[])
 {
     argList::noParallel();
     argList::validArgs.append("GAMBIT file");
-    argList::validOptions.insert("scale", "scale factor");
+    argList::addOption("scale", "scale factor");
 
     argList args(argc, argv);
 
diff --git a/applications/utilities/mesh/conversion/gmshToFoam/gmshToFoam.C b/applications/utilities/mesh/conversion/gmshToFoam/gmshToFoam.C
index 16977b92c6788d7761cd4da49b40de7c6f036609..45d144e8ab79e9e290b35bc44767b65ffa58742d 100644
--- a/applications/utilities/mesh/conversion/gmshToFoam/gmshToFoam.C
+++ b/applications/utilities/mesh/conversion/gmshToFoam/gmshToFoam.C
@@ -717,7 +717,7 @@ int main(int argc, char *argv[])
 {
     argList::noParallel();
     argList::validArgs.append(".msh file");
-    argList::validOptions.insert("keepOrientation", "");
+    argList::addBoolOption("keepOrientation");
 
 #   include "setRootCase.H"
 #   include "createTime.H"
diff --git a/applications/utilities/mesh/conversion/ideasUnvToFoam/ideasUnvToFoam.C b/applications/utilities/mesh/conversion/ideasUnvToFoam/ideasUnvToFoam.C
index f289e8bb389a3e91b243cfb0022e94b90c9f8479..ba7ee39c8080a92af0f1f5fda4fad3c7f63f44bf 100644
--- a/applications/utilities/mesh/conversion/ideasUnvToFoam/ideasUnvToFoam.C
+++ b/applications/utilities/mesh/conversion/ideasUnvToFoam/ideasUnvToFoam.C
@@ -579,7 +579,7 @@ int main(int argc, char *argv[])
 {
     argList::noParallel();
     argList::validArgs.append(".unv file");
-    argList::validOptions.insert("dump", "");
+    argList::addBoolOption("dump");
 
 #   include "setRootCase.H"
 #   include "createTime.H"
diff --git a/applications/utilities/mesh/conversion/kivaToFoam/kivaToFoam.C b/applications/utilities/mesh/conversion/kivaToFoam/kivaToFoam.C
index 551741974bf2be71dabfe5dd454f43bfada765b4..dbd32851bfba14feefbad3a98a772ab1521b571f 100644
--- a/applications/utilities/mesh/conversion/kivaToFoam/kivaToFoam.C
+++ b/applications/utilities/mesh/conversion/kivaToFoam/kivaToFoam.C
@@ -60,9 +60,9 @@ enum kivaVersions
 int main(int argc, char *argv[])
 {
     argList::noParallel();
-    argList::validOptions.insert("file", "fileName");
-    argList::validOptions.insert("version", "[kiva3|kiva3v]");
-    argList::validOptions.insert("zHeadMin", "scalar");
+    argList::addOption("file", "fileName");
+    argList::addOption("version", "[kiva3|kiva3v]");
+    argList::addOption("zHeadMin", "scalar");
 
 #   include "setRootCase.H"
 #   include "createTime.H"
diff --git a/applications/utilities/mesh/conversion/mshToFoam/mshToFoam.C b/applications/utilities/mesh/conversion/mshToFoam/mshToFoam.C
index 1d00c4939385cd3c9dbe69349180e6927b5f4274..1beea38d029568dfb78a2afa8bac6dbccd5c9670 100644
--- a/applications/utilities/mesh/conversion/mshToFoam/mshToFoam.C
+++ b/applications/utilities/mesh/conversion/mshToFoam/mshToFoam.C
@@ -57,7 +57,7 @@ int main(int argc, char *argv[])
 {
     argList::noParallel();
     argList::validArgs.append(".msh file");
-    argList::validOptions.insert("hex", "");
+    argList::addBoolOption("hex");
 
 #   include "setRootCase.H"
 #   include "createTime.H"
diff --git a/applications/utilities/mesh/conversion/plot3dToFoam/plot3dToFoam.C b/applications/utilities/mesh/conversion/plot3dToFoam/plot3dToFoam.C
index b1ea5df43fb096dc70fcbf46c73643a42a494436..8ad25caea68fbeb0ca96a5ef62a1ee43671bd1f1 100644
--- a/applications/utilities/mesh/conversion/plot3dToFoam/plot3dToFoam.C
+++ b/applications/utilities/mesh/conversion/plot3dToFoam/plot3dToFoam.C
@@ -58,10 +58,10 @@ int main(int argc, char *argv[])
 {
     argList::noParallel();
     argList::validArgs.append("PLOT3D geom file");
-    argList::validOptions.insert("scale", "scale factor");
-    argList::validOptions.insert("noBlank", "");
-    argList::validOptions.insert("singleBlock", "");
-    argList::validOptions.insert("2D", "thickness");
+    argList::addOption("scale", "scale factor");
+    argList::addBoolOption("noBlank");
+    argList::addBoolOption("singleBlock");
+    argList::addOption("2D", "thickness");
 
     argList args(argc, argv);
 
diff --git a/applications/utilities/mesh/conversion/polyDualMesh/polyDualMeshApp.C b/applications/utilities/mesh/conversion/polyDualMesh/polyDualMeshApp.C
index a1bb6a743156b59fd42dc20d0f7077950d34349d..df229e4bf0428e59183165c350a32c6cc65476ad 100644
--- a/applications/utilities/mesh/conversion/polyDualMesh/polyDualMeshApp.C
+++ b/applications/utilities/mesh/conversion/polyDualMesh/polyDualMeshApp.C
@@ -357,10 +357,10 @@ int main(int argc, char *argv[])
     timeSelector::addOptions(true, false);
 
     argList::validArgs.append("feature angle[0-180]");
-    argList::validOptions.insert("splitAllFaces", "");
-    argList::validOptions.insert("concaveMultiCells", "");
-    argList::validOptions.insert("doNotPreserveFaceZones", "");
-    argList::validOptions.insert("overwrite", "");
+    argList::addBoolOption("splitAllFaces");
+    argList::addBoolOption("concaveMultiCells");
+    argList::addBoolOption("doNotPreserveFaceZones");
+    argList::addBoolOption("overwrite");
 
 #   include "setRootCase.H"
 #   include "createTime.H"
diff --git a/applications/utilities/mesh/conversion/sammToFoam/sammToFoam.C b/applications/utilities/mesh/conversion/sammToFoam/sammToFoam.C
index 012382560d591a59a8eae958d9a0734b069f9693..d4bfaa47e23d345e5754b15a451897767baa653e 100644
--- a/applications/utilities/mesh/conversion/sammToFoam/sammToFoam.C
+++ b/applications/utilities/mesh/conversion/sammToFoam/sammToFoam.C
@@ -41,7 +41,7 @@ int main(int argc, char *argv[])
 {
     argList::noParallel();
     argList::validArgs.append("SAMM mesh file prefix");
-    argList::validOptions.insert("scale", "scale factor");
+    argList::addOption("scale", "scale factor");
 
     argList args(argc, argv);
 
diff --git a/applications/utilities/mesh/conversion/star4ToFoam/star4ToFoam.C b/applications/utilities/mesh/conversion/star4ToFoam/star4ToFoam.C
index 390f2bd4ebdb2202d23dabd535a056c457117419..0cc4c4efd2921feec4a4b2241587662d816354ce 100644
--- a/applications/utilities/mesh/conversion/star4ToFoam/star4ToFoam.C
+++ b/applications/utilities/mesh/conversion/star4ToFoam/star4ToFoam.C
@@ -62,9 +62,9 @@ int main(int argc, char *argv[])
 {
     argList::noParallel();
     argList::validArgs.append("pro-STAR prefix");
-    argList::validOptions.insert("ascii", "");
-    argList::validOptions.insert("scale", "scale");
-    argList::validOptions.insert("solids", "");
+    argList::addBoolOption("ascii");
+    argList::addOption("scale", "scale");
+    argList::addBoolOption("solids");
 
     argList args(argc, argv);
     Time runTime(args.rootPath(), args.caseName());
diff --git a/applications/utilities/mesh/conversion/starToFoam/starToFoam.C b/applications/utilities/mesh/conversion/starToFoam/starToFoam.C
index 24da39c9a174db196a7885bf3ef37669446c2772..90547da3afd5bf1a990c41f11780ddf2f750d40e 100644
--- a/applications/utilities/mesh/conversion/starToFoam/starToFoam.C
+++ b/applications/utilities/mesh/conversion/starToFoam/starToFoam.C
@@ -41,7 +41,7 @@ int main(int argc, char *argv[])
 {
     argList::noParallel();
     argList::validArgs.append("STAR mesh file prefix");
-    argList::validOptions.insert("scale", "scale factor");
+    argList::addOption("scale", "scale factor");
 
     argList args(argc, argv);
 
diff --git a/applications/utilities/mesh/conversion/tetgenToFoam/tetgenToFoam.C b/applications/utilities/mesh/conversion/tetgenToFoam/tetgenToFoam.C
index eaf44fed1370661cf91579f3bab4c9fa3a21b744..f830cfc18535e1861e6eb27591cccec967d81b33 100644
--- a/applications/utilities/mesh/conversion/tetgenToFoam/tetgenToFoam.C
+++ b/applications/utilities/mesh/conversion/tetgenToFoam/tetgenToFoam.C
@@ -98,7 +98,7 @@ label findFace(const primitiveMesh& mesh, const face& f)
 int main(int argc, char *argv[])
 {
     argList::validArgs.append("file prefix");
-    argList::validOptions.insert("noFaceFile", "");
+    argList::addBoolOption("noFaceFile");
 
 #   include "setRootCase.H"
 #   include "createTime.H"
diff --git a/applications/utilities/mesh/conversion/writeMeshObj/writeMeshObj.C b/applications/utilities/mesh/conversion/writeMeshObj/writeMeshObj.C
index c00be771118e664310f55dd9e2d2f5e5ec0a9951..47fc9c922f3a8dff0ea6a5958736566d249e12a0 100644
--- a/applications/utilities/mesh/conversion/writeMeshObj/writeMeshObj.C
+++ b/applications/utilities/mesh/conversion/writeMeshObj/writeMeshObj.C
@@ -378,13 +378,13 @@ void writePointCells
 int main(int argc, char *argv[])
 {
     timeSelector::addOptions();
-    argList::validOptions.insert("patchFaces", "");
-    argList::validOptions.insert("patchEdges", "");
-    argList::validOptions.insert("cell", "cellI");
-    argList::validOptions.insert("face", "faceI");
-    argList::validOptions.insert("point", "pointI");
-    argList::validOptions.insert("cellSet", "setName");
-    argList::validOptions.insert("faceSet", "setName");
+    argList::addBoolOption("patchFaces");
+    argList::addBoolOption("patchEdges");
+    argList::addOption("cell", "cellI");
+    argList::addOption("face", "faceI");
+    argList::addOption("point", "pointI");
+    argList::addOption("cellSet", "setName");
+    argList::addOption("faceSet", "setName");
 #   include "addRegionOption.H"
 
 #   include "setRootCase.H"
diff --git a/applications/utilities/mesh/generation/blockMesh/blockMeshApp.C b/applications/utilities/mesh/generation/blockMesh/blockMeshApp.C
index 717f36b5378fa2768a87cd548f33a6a5ba86691a..6e92fae989ccadf77bab4aa03c9ac02dfdb5e030 100644
--- a/applications/utilities/mesh/generation/blockMesh/blockMeshApp.C
+++ b/applications/utilities/mesh/generation/blockMesh/blockMeshApp.C
@@ -72,8 +72,8 @@ using namespace Foam;
 int main(int argc, char *argv[])
 {
     argList::noParallel();
-    argList::validOptions.insert("blockTopology", "");
-    argList::validOptions.insert("dict", "dictionary");
+    argList::addBoolOption("blockTopology");
+    argList::addOption("dict", "dictionary");
 #   include "addRegionOption.H"
 #   include "setRootCase.H"
 #   include "createTime.H"
diff --git a/applications/utilities/mesh/generation/extrude2DMesh/doExtrude2DMesh.C b/applications/utilities/mesh/generation/extrude2DMesh/doExtrude2DMesh.C
index c71f91079c8cda68c77b86054a9d8cf01c2c4a27..74104f14c36f343a280ded68d1372dc4e9668d4d 100644
--- a/applications/utilities/mesh/generation/extrude2DMesh/doExtrude2DMesh.C
+++ b/applications/utilities/mesh/generation/extrude2DMesh/doExtrude2DMesh.C
@@ -58,7 +58,7 @@ using namespace Foam;
 int main(int argc, char *argv[])
 {
     argList::validArgs.append("thickness");
-    argList::validOptions.insert("overwrite", "");
+    argList::addBoolOption("overwrite");
 #   include "setRootCase.H"
 #   include "createTime.H"
     runTime.functionObjects().off();
diff --git a/applications/utilities/mesh/generation/snappyHexMesh/snappyHexMesh.C b/applications/utilities/mesh/generation/snappyHexMesh/snappyHexMesh.C
index 8fc3aaf3a4928338cb9d5d0d30365adcb0c01c0b..727d21c0615151a9a376ef8decde44ad4cccafc4 100644
--- a/applications/utilities/mesh/generation/snappyHexMesh/snappyHexMesh.C
+++ b/applications/utilities/mesh/generation/snappyHexMesh/snappyHexMesh.C
@@ -115,7 +115,7 @@ void writeMesh
 
 int main(int argc, char *argv[])
 {
-    argList::validOptions.insert("overwrite", "");
+    argList::addBoolOption("overwrite");
 #   include "setRootCase.H"
 #   include "createTime.H"
     runTime.functionObjects().off();
diff --git a/applications/utilities/mesh/manipulation/attachMesh/attachMesh.C b/applications/utilities/mesh/manipulation/attachMesh/attachMesh.C
index 341fc4eab67a8bb5b11134a72688d402aa9f9c00..35247413e1f51c154a762c252969a29bcaf8ece5 100644
--- a/applications/utilities/mesh/manipulation/attachMesh/attachMesh.C
+++ b/applications/utilities/mesh/manipulation/attachMesh/attachMesh.C
@@ -42,7 +42,7 @@ using namespace Foam;
 int main(int argc, char *argv[])
 {
     argList::noParallel();
-    argList::validOptions.insert("overwrite", "");
+    argList::addBoolOption("overwrite");
 
 #   include "setRootCase.H"
 #   include "createTime.H"
diff --git a/applications/utilities/mesh/manipulation/autoPatch/autoPatch.C b/applications/utilities/mesh/manipulation/autoPatch/autoPatch.C
index a753d03c54bf73ba407e6fbca17d55d21bb89fae..abad71139266d839b94bb5da7adc8b60a98d10d4 100644
--- a/applications/utilities/mesh/manipulation/autoPatch/autoPatch.C
+++ b/applications/utilities/mesh/manipulation/autoPatch/autoPatch.C
@@ -71,7 +71,7 @@ int main(int argc, char *argv[])
 {
     argList::noParallel();
     argList::validArgs.append("feature angle[0-180]");
-    argList::validOptions.insert("overwrite", "");
+    argList::addBoolOption("overwrite");
 
 #   include "setRootCase.H"
 #   include "createTime.H"
diff --git a/applications/utilities/mesh/manipulation/checkMesh/checkMesh.C b/applications/utilities/mesh/manipulation/checkMesh/checkMesh.C
index 0ce3a9d8e6483e355cfc12e5b2a22231e5aff936..f83461b25d256f9056d734f3e9580b531476d536 100644
--- a/applications/utilities/mesh/manipulation/checkMesh/checkMesh.C
+++ b/applications/utilities/mesh/manipulation/checkMesh/checkMesh.C
@@ -49,9 +49,9 @@ int main(int argc, char *argv[])
 {
     timeSelector::addOptions();
 #   include "addRegionOption.H"
-    argList::validOptions.insert("noTopology", "");
-    argList::validOptions.insert("allGeometry", "");
-    argList::validOptions.insert("allTopology", "");
+    argList::addBoolOption("noTopology");
+    argList::addBoolOption("allGeometry");
+    argList::addBoolOption("allTopology");
 
 #   include "setRootCase.H"
 #   include "createTime.H"
diff --git a/applications/utilities/mesh/manipulation/createBaffles/createBaffles.C b/applications/utilities/mesh/manipulation/createBaffles/createBaffles.C
index 64403919f39d4899c7d7093b619bd93bb16e7334..dc947862224c73c8c513729b0efdb8288d89cde5 100644
--- a/applications/utilities/mesh/manipulation/createBaffles/createBaffles.C
+++ b/applications/utilities/mesh/manipulation/createBaffles/createBaffles.C
@@ -128,9 +128,9 @@ int main(int argc, char *argv[])
 #   include "addRegionOption.H"
     argList::validArgs.append("faceZone");
     argList::validArgs.append("patch");
-    argList::validOptions.insert("additionalPatches", "(patch2 .. patchN)");
-    argList::validOptions.insert("internalFacesOnly", "");
-    argList::validOptions.insert("overwrite", "");
+    argList::addOption("additionalPatches", "(patch2 .. patchN)");
+    argList::addBoolOption("internalFacesOnly");
+    argList::addBoolOption("overwrite");
 
 #   include "setRootCase.H"
 #   include "createTime.H"
diff --git a/applications/utilities/mesh/manipulation/createPatch/createPatch.C b/applications/utilities/mesh/manipulation/createPatch/createPatch.C
index 6374722e461ee8cfc7c0781f28782e1b81fff86d..d59f7317b9412212bce8799084fe3db66417225c 100644
--- a/applications/utilities/mesh/manipulation/createPatch/createPatch.C
+++ b/applications/utilities/mesh/manipulation/createPatch/createPatch.C
@@ -517,7 +517,7 @@ void syncPoints
 int main(int argc, char *argv[])
 {
 #   include "addRegionOption.H"
-    argList::validOptions.insert("overwrite", "");
+    argList::addBoolOption("overwrite");
 
 #   include "setRootCase.H"
 #   include "createTime.H"
diff --git a/applications/utilities/mesh/manipulation/insideCells/insideCells.C b/applications/utilities/mesh/manipulation/insideCells/insideCells.C
index 22f99465632927c606b7909e4b9e197d74d12a47..194b9a4c556477d79533e378b3beb008623066d8 100644
--- a/applications/utilities/mesh/manipulation/insideCells/insideCells.C
+++ b/applications/utilities/mesh/manipulation/insideCells/insideCells.C
@@ -43,16 +43,15 @@ using namespace Foam;
 
 int main(int argc, char *argv[])
 {
-    Foam::argList::noParallel();
-    Foam::argList::validArgs.append("surface file");
-    Foam::argList::validArgs.append("destination cellSet");
+    argList::noParallel();
+    argList::validArgs.append("surface file");
+    argList::validArgs.append("destination cellSet");
 
 #   include "setRootCase.H"
 #   include "createTime.H"
 #   include "createPolyMesh.H"
 
     fileName surfName(args.additionalArgs()[0]);
-
     fileName setName(args.additionalArgs()[1]);
 
 
diff --git a/applications/utilities/mesh/manipulation/mergeMeshes/setRoots.H b/applications/utilities/mesh/manipulation/mergeMeshes/setRoots.H
index cfbf59cf64af2b013f075e3f60b67c5f0bcbea8a..2f421ba957abc7be112fa1f8e013b2b62decbd9d 100644
--- a/applications/utilities/mesh/manipulation/mergeMeshes/setRoots.H
+++ b/applications/utilities/mesh/manipulation/mergeMeshes/setRoots.H
@@ -2,11 +2,11 @@
 
     argList::validArgs.append("master root");
     argList::validArgs.append("master case");
-    argList::validOptions.insert("masterRegion", "name");
+    argList::addOption("masterRegion", "name");
 
     argList::validArgs.append("root to add");
     argList::validArgs.append("case to add");
-    argList::validOptions.insert("addRegion", "name");
+    argList::addOption("addRegion", "name");
 
     argList args(argc, argv);
 
diff --git a/applications/utilities/mesh/manipulation/mergeOrSplitBaffles/mergeOrSplitBaffles.C b/applications/utilities/mesh/manipulation/mergeOrSplitBaffles/mergeOrSplitBaffles.C
index b1c064a6ee5a10b8af12bdb0bebde478942b2541..5053c95071c8f117e0d9954394b504f89d78f5b0 100644
--- a/applications/utilities/mesh/manipulation/mergeOrSplitBaffles/mergeOrSplitBaffles.C
+++ b/applications/utilities/mesh/manipulation/mergeOrSplitBaffles/mergeOrSplitBaffles.C
@@ -223,9 +223,9 @@ labelList findBaffles(const polyMesh& mesh, const labelList& boundaryFaces)
 int main(int argc, char *argv[])
 {
 #   include "addRegionOption.H"
-    argList::validOptions.insert("split", "");
-    argList::validOptions.insert("overwrite", "");
-    argList::validOptions.insert("detectOnly", "");
+    argList::addBoolOption("split");
+    argList::addBoolOption("overwrite");
+    argList::addBoolOption("detectOnly");
 #   include "setRootCase.H"
 #   include "createTime.H"
     runTime.functionObjects().off();
diff --git a/applications/utilities/mesh/manipulation/refineMesh/refineMesh.C b/applications/utilities/mesh/manipulation/refineMesh/refineMesh.C
index bbe5775b51983323f043872836952aa4f9fbdbc7..a33afdf711b450e8fa62760674d7e090519e2034 100644
--- a/applications/utilities/mesh/manipulation/refineMesh/refineMesh.C
+++ b/applications/utilities/mesh/manipulation/refineMesh/refineMesh.C
@@ -291,8 +291,8 @@ label twoDNess(const polyMesh& mesh)
 
 int main(int argc, char *argv[])
 {
-    Foam::argList::validOptions.insert("dict", "");
-    Foam::argList::validOptions.insert("overwrite", "");
+    argList::addBoolOption("dict");
+    argList::addBoolOption("overwrite");
 
 #   include "setRootCase.H"
 #   include "createTime.H"
@@ -320,18 +320,17 @@ int main(int argc, char *argv[])
     {
         Info<< "Refining according to refineMeshDict" << nl << endl;
 
-        refineDict =
-            IOdictionary
+        refineDict = IOdictionary
+        (
+            IOobject
             (
-                IOobject
-                (
-                    "refineMeshDict",
-                    runTime.system(),
-                    mesh,
-                    IOobject::MUST_READ,
-                    IOobject::NO_WRITE
-                )
-            );
+                "refineMeshDict",
+                runTime.system(),
+                mesh,
+                IOobject::MUST_READ,
+                IOobject::NO_WRITE
+            )
+        );
 
         word setName(refineDict.lookup("set"));
 
diff --git a/applications/utilities/mesh/manipulation/renumberMesh/renumberMesh.C b/applications/utilities/mesh/manipulation/renumberMesh/renumberMesh.C
index bdc60d724b4af233ec85b7048d659c6cbe4aaac0..56d63f74c9001acd57be7075da7c81b4270c839b 100644
--- a/applications/utilities/mesh/manipulation/renumberMesh/renumberMesh.C
+++ b/applications/utilities/mesh/manipulation/renumberMesh/renumberMesh.C
@@ -364,10 +364,10 @@ autoPtr<mapPolyMesh> reorderMesh
 
 int main(int argc, char *argv[])
 {
-    argList::validOptions.insert("blockOrder", "");
-    argList::validOptions.insert("orderPoints", "");
-    argList::validOptions.insert("writeMaps", "");
-    argList::validOptions.insert("overwrite", "");
+    argList::addBoolOption("blockOrder");
+    argList::addBoolOption("orderPoints");
+    argList::addBoolOption("writeMaps");
+    argList::addBoolOption("overwrite");
 
 #   include "addTimeOptions.H"
 
diff --git a/applications/utilities/mesh/manipulation/setSet/setSet.C b/applications/utilities/mesh/manipulation/setSet/setSet.C
index b704c71a5de2dd2f83f9526e94234b4e53ff0c71..7833b4ec24d35259934e217eeedaf30d866ad351 100644
--- a/applications/utilities/mesh/manipulation/setSet/setSet.C
+++ b/applications/utilities/mesh/manipulation/setSet/setSet.C
@@ -843,8 +843,8 @@ int main(int argc, char *argv[])
 #   include "addRegionOption.H"
 #   include "addTimeOptions.H"
 
-    argList::validOptions.insert("noVTK", "");
-    argList::validOptions.insert("batch", "file");
+    argList::addBoolOption("noVTK");
+    argList::addOption("batch", "file");
 
 #   include "setRootCase.H"
 #   include "createTime.H"
diff --git a/applications/utilities/mesh/manipulation/setsToZones/setsToZones.C b/applications/utilities/mesh/manipulation/setsToZones/setsToZones.C
index 30aba0f5ab8f7a9552cdb98d249e89e9f66f5900..c384eba03d5c5fc9c5fc617be6f000b2a24c57b9 100644
--- a/applications/utilities/mesh/manipulation/setsToZones/setsToZones.C
+++ b/applications/utilities/mesh/manipulation/setsToZones/setsToZones.C
@@ -58,7 +58,7 @@ using namespace Foam;
 
 int main(int argc, char *argv[])
 {
-    argList::validOptions.insert("noFlipMap", "");
+    argList::addBoolOption("noFlipMap");
 
 #   include "addRegionOption.H"
 #   include "addTimeOptions.H"
diff --git a/applications/utilities/mesh/manipulation/singleCellMesh/singleCellMesh.C b/applications/utilities/mesh/manipulation/singleCellMesh/singleCellMesh.C
index fe1e2850b97cccd5304e6809d91b01649ee97a37..927d8ca8549173daf49081db0b4347cb439573e4 100644
--- a/applications/utilities/mesh/manipulation/singleCellMesh/singleCellMesh.C
+++ b/applications/utilities/mesh/manipulation/singleCellMesh/singleCellMesh.C
@@ -66,7 +66,8 @@ void interpolateFields
 
 int main(int argc, char *argv[])
 {
-    Foam::argList::validOptions.insert("overwrite", "");
+    argList::addBoolOption("overwrite");
+
 #   include "addTimeOptions.H"
 #   include "setRootCase.H"
 #   include "createTime.H"
diff --git a/applications/utilities/mesh/manipulation/splitMesh/splitMesh.C b/applications/utilities/mesh/manipulation/splitMesh/splitMesh.C
index d1455a55c5636b429ff77bb800b0674932ee0f89..0d8fe6490d811de6046cc67b8bf9c074bf4901c5 100644
--- a/applications/utilities/mesh/manipulation/splitMesh/splitMesh.C
+++ b/applications/utilities/mesh/manipulation/splitMesh/splitMesh.C
@@ -110,12 +110,12 @@ void checkPatch(const polyBoundaryMesh& bMesh, const word& name)
 
 int main(int argc, char *argv[])
 {
-    Foam::argList::noParallel();
+    argList::noParallel();
 
-    Foam::argList::validArgs.append("faceSet");
-    Foam::argList::validArgs.append("masterPatch");
-    Foam::argList::validArgs.append("slavePatch");
-    Foam::argList::validOptions.insert("overwrite", "");
+    argList::validArgs.append("faceSet");
+    argList::validArgs.append("masterPatch");
+    argList::validArgs.append("slavePatch");
+    argList::addBoolOption("overwrite");
 
 #   include "setRootCase.H"
 #   include "createTime.H"
diff --git a/applications/utilities/mesh/manipulation/splitMeshRegions/splitMeshRegions.C b/applications/utilities/mesh/manipulation/splitMeshRegions/splitMeshRegions.C
index b61d997399f39a31315b4dc5cde0a68d15a63977..3b9903328ce91b0253468f87f9aadf044aaa82f8 100644
--- a/applications/utilities/mesh/manipulation/splitMeshRegions/splitMeshRegions.C
+++ b/applications/utilities/mesh/manipulation/splitMeshRegions/splitMeshRegions.C
@@ -1232,15 +1232,15 @@ label findCorrespondingRegion
 
 int main(int argc, char *argv[])
 {
-    argList::validOptions.insert("cellZones", "");
-    argList::validOptions.insert("cellZonesOnly", "");
-    argList::validOptions.insert("blockedFaces", "faceSet");
-    argList::validOptions.insert("makeCellZones", "");
-    argList::validOptions.insert("largestOnly", "");
-    argList::validOptions.insert("insidePoint", "point");
-    argList::validOptions.insert("overwrite", "");
-    argList::validOptions.insert("detectOnly", "");
-    argList::validOptions.insert("sloppyCellZones", "");
+    argList::addBoolOption("cellZones");
+    argList::addBoolOption("cellZonesOnly");
+    argList::addOption("blockedFaces", "faceSet");
+    argList::addBoolOption("makeCellZones");
+    argList::addBoolOption("largestOnly");
+    argList::addOption("insidePoint", "point");
+    argList::addBoolOption("overwrite");
+    argList::addBoolOption("detectOnly");
+    argList::addBoolOption("sloppyCellZones");
 
 #   include "setRootCase.H"
 #   include "createTime.H"
diff --git a/applications/utilities/mesh/manipulation/stitchMesh/stitchMesh.C b/applications/utilities/mesh/manipulation/stitchMesh/stitchMesh.C
index 9d164f3553872b8514a65ec3cd1b768f495e08e2..a6b9e2cb3e494726aca3e642fa0cf62e4dc76191 100644
--- a/applications/utilities/mesh/manipulation/stitchMesh/stitchMesh.C
+++ b/applications/utilities/mesh/manipulation/stitchMesh/stitchMesh.C
@@ -95,17 +95,16 @@ void checkPatch(const polyBoundaryMesh& bMesh, const word& name)
 
 int main(int argc, char *argv[])
 {
-    Foam::argList::noParallel();
+    argList::noParallel();
 
-    Foam::argList::validArgs.append("masterPatch");
-    Foam::argList::validArgs.append("slavePatch");
+    argList::validArgs.append("masterPatch");
+    argList::validArgs.append("slavePatch");
 
-    Foam::argList::validOptions.insert("partial", "");
-    Foam::argList::validOptions.insert("perfect", "");
+    argList::addBoolOption("partial");
+    argList::addBoolOption("perfect");
+    argList::addBoolOption("overwrite");
 
-    Foam::argList::validOptions.insert("overwrite", "");
-
-    Foam::argList::validOptions.insert("toleranceDict", "file with tolerances");
+    argList::addOption("toleranceDict", "file with tolerances");
 
 #   include "setRootCase.H"
 #   include "createTime.H"
@@ -174,8 +173,10 @@ int main(int argc, char *argv[])
     dictionary slidingTolerances;
     if (args.options().found("toleranceDict"))
     {
-        IOdictionary toleranceFile(
-            IOobject(
+        IOdictionary toleranceFile
+        (
+            IOobject
+            (
                 args.options()["toleranceDict"],
                 runTime.constant(),
                 mesh,
@@ -202,7 +203,7 @@ int main(int argc, char *argv[])
     // Make list of masterPatch faces
     labelList isf(masterPatch.size());
 
-    forAll (isf, i)
+    forAll(isf, i)
     {
         isf[i] = masterPatch.start() + i;
     }
diff --git a/applications/utilities/mesh/manipulation/subsetMesh/subsetMesh.C b/applications/utilities/mesh/manipulation/subsetMesh/subsetMesh.C
index 303df1cbae05214a22aa5a4507691cda94580374..fac26e6815c108abe2f3b67de8e4a0f3b3394874 100644
--- a/applications/utilities/mesh/manipulation/subsetMesh/subsetMesh.C
+++ b/applications/utilities/mesh/manipulation/subsetMesh/subsetMesh.C
@@ -152,8 +152,8 @@ void subsetPointFields
 int main(int argc, char *argv[])
 {
     argList::validArgs.append("set");
-    argList::validOptions.insert("patch", "patch name");
-    argList::validOptions.insert("overwrite", "");
+    argList::addOption("patch", "patch name");
+    argList::addBoolOption("overwrite");
 
 #   include "setRootCase.H"
 #   include "createTime.H"
diff --git a/applications/utilities/mesh/manipulation/transformPoints/transformPoints.C b/applications/utilities/mesh/manipulation/transformPoints/transformPoints.C
index f9b6354dd4e31d2c04d8e79b6da69661ea257baf..9fdc9681c6306ff4463a401e820ec12204e14869 100644
--- a/applications/utilities/mesh/manipulation/transformPoints/transformPoints.C
+++ b/applications/utilities/mesh/manipulation/transformPoints/transformPoints.C
@@ -142,12 +142,12 @@ void rotateFields(const Time& runTime, const tensor& T)
 
 int main(int argc, char *argv[])
 {
-    argList::validOptions.insert("translate", "vector");
-    argList::validOptions.insert("rotate", "(vector vector)");
-    argList::validOptions.insert("rollPitchYaw", "(roll pitch yaw)");
-    argList::validOptions.insert("yawPitchRoll", "(yaw pitch roll)");
-    argList::validOptions.insert("rotateFields", "");
-    argList::validOptions.insert("scale", "vector");
+    argList::addOption("translate", "vector");
+    argList::addOption("rotate", "(vector vector)");
+    argList::addOption("rollPitchYaw", "(roll pitch yaw)");
+    argList::addOption("yawPitchRoll", "(yaw pitch roll)");
+    argList::addBoolOption("rotateFields");
+    argList::addOption("scale", "vector");
 
 #   include "setRootCase.H"
 #   include "createTime.H"
diff --git a/applications/utilities/miscellaneous/foamDebugSwitches/foamDebugSwitches.C b/applications/utilities/miscellaneous/foamDebugSwitches/foamDebugSwitches.C
index d4eb9c3b63af51002d3cf4c136a9416c8bf01a5c..f71043c0342350f6a5ecba0bf5c83f4d97b4aaea 100644
--- a/applications/utilities/miscellaneous/foamDebugSwitches/foamDebugSwitches.C
+++ b/applications/utilities/miscellaneous/foamDebugSwitches/foamDebugSwitches.C
@@ -41,10 +41,10 @@ using namespace Foam;
 int main(int argc, char *argv[])
 {
     argList::noParallel();
-    argList::validOptions.insert("new", "");
-    argList::validOptions.insert("old", "");
+    argList::addBoolOption("new");
+    argList::addBoolOption("old");
 
-    Foam::argList args(argc, argv);
+    argList args(argc, argv);
 
     wordList currDebug(debug::debugSwitches().toc());
     wordList currInfo(debug::infoSwitches().toc());
diff --git a/applications/utilities/miscellaneous/foamInfoExec/foamInfoExec.C b/applications/utilities/miscellaneous/foamInfoExec/foamInfoExec.C
index b55e5b97013886395b11e200bc4c7661490d71ce..6f78a733b8780c2eb759a7dcc9d33d7966c1aca9 100644
--- a/applications/utilities/miscellaneous/foamInfoExec/foamInfoExec.C
+++ b/applications/utilities/miscellaneous/foamInfoExec/foamInfoExec.C
@@ -40,10 +40,10 @@ using namespace Foam;
 int main(int argc, char *argv[])
 {
     argList::noParallel();
-    argList::validOptions.insert("times", "");
-    argList::validOptions.insert("dictionary", "dictionary name");
-    argList::validOptions.insert("keywords", "");
-    argList::validOptions.insert("entry", "entry name");
+    argList::addBoolOption("times");
+    argList::addOption("dictionary", "dictionary name");
+    argList::addBoolOption("keywords");
+    argList::addOption("entry", "entry name");
 
 #   include "setRootCase.H"
 
diff --git a/applications/utilities/parallelProcessing/decomposePar/decomposePar.C b/applications/utilities/parallelProcessing/decomposePar/decomposePar.C
index f8a8ca01d57b492b5f2604462fb091d7fcf055e4..34a30d63f65f15fac1925cc55d00b1a1840697a0 100644
--- a/applications/utilities/parallelProcessing/decomposePar/decomposePar.C
+++ b/applications/utilities/parallelProcessing/decomposePar/decomposePar.C
@@ -87,12 +87,12 @@ int main(int argc, char *argv[])
 {
     argList::noParallel();
 #   include "addRegionOption.H"
-    argList::validOptions.insert("cellDist", "");
-    argList::validOptions.insert("copyUniform", "");
-    argList::validOptions.insert("fields", "");
-    argList::validOptions.insert("filterPatches", "");
-    argList::validOptions.insert("force", "");
-    argList::validOptions.insert("ifRequired", "");
+    argList::addBoolOption("cellDist");
+    argList::addBoolOption("copyUniform");
+    argList::addBoolOption("fields");
+    argList::addBoolOption("filterPatches");
+    argList::addBoolOption("force");
+    argList::addBoolOption("ifRequired");
 
 #   include "setRootCase.H"
 
diff --git a/applications/utilities/parallelProcessing/reconstructPar/reconstructPar.C b/applications/utilities/parallelProcessing/reconstructPar/reconstructPar.C
index fd354a47807b4d1f9f551272a302261bb268d57c..8def808e458fbb6645bbde5fe3f28ab4ab8fda34 100644
--- a/applications/utilities/parallelProcessing/reconstructPar/reconstructPar.C
+++ b/applications/utilities/parallelProcessing/reconstructPar/reconstructPar.C
@@ -50,8 +50,8 @@ int main(int argc, char *argv[])
     timeSelector::addOptions(true, true);
     argList::noParallel();
 #   include "addRegionOption.H"
-    argList::validOptions.insert("fields", "\"(list of fields)\"");
-    argList::validOptions.insert("noLagrangian", "");
+    argList::addOption("fields", "\"(list of fields)\"");
+    argList::addBoolOption("noLagrangian");
 
 #   include "setRootCase.H"
 #   include "createTime.H"
diff --git a/applications/utilities/parallelProcessing/reconstructParMesh/reconstructParMesh.C b/applications/utilities/parallelProcessing/reconstructParMesh/reconstructParMesh.C
index d98d171e6b68cc04c07db7a64d8b3832fd388b80..04810a4e0c542ec3a60aa4d0ef103e748ec79859 100644
--- a/applications/utilities/parallelProcessing/reconstructParMesh/reconstructParMesh.C
+++ b/applications/utilities/parallelProcessing/reconstructParMesh/reconstructParMesh.C
@@ -281,8 +281,8 @@ autoPtr<mapPolyMesh> mergeSharedPoints
 int main(int argc, char *argv[])
 {
     argList::noParallel();
-    argList::validOptions.insert("mergeTol", "relative merge distance");
-    argList::validOptions.insert("fullMatch", "");
+    argList::addOption("mergeTol", "relative merge distance");
+    argList::addBoolOption("fullMatch");
 
 #   include "addTimeOptions.H"
 #   include "addRegionOption.H"
diff --git a/applications/utilities/parallelProcessing/redistributeMeshPar/redistributeMeshPar.C b/applications/utilities/parallelProcessing/redistributeMeshPar/redistributeMeshPar.C
index 20398a16d3ed4d7ea11bd8d0c5f775ee17c30445..dbcb9e16430d0744d8b7324f417c91a479576b48 100644
--- a/applications/utilities/parallelProcessing/redistributeMeshPar/redistributeMeshPar.C
+++ b/applications/utilities/parallelProcessing/redistributeMeshPar/redistributeMeshPar.C
@@ -506,7 +506,7 @@ void compareFields
 
 int main(int argc, char *argv[])
 {
-    argList::validOptions.insert("mergeTol", "relative merge distance");
+    argList::addOption("mergeTol", "relative merge distance");
 #   include "setRootCase.H"
 
     // Create processor directory if non-existing
diff --git a/applications/utilities/postProcessing/dataConversion/foamToEnsight/foamToEnsight.C b/applications/utilities/postProcessing/dataConversion/foamToEnsight/foamToEnsight.C
index d0a59b5116f4cd0a5dd8d73a16807b16856a5fc6..977972e4cacb076fb3797f8d04c2dac1cefc67b8 100644
--- a/applications/utilities/postProcessing/dataConversion/foamToEnsight/foamToEnsight.C
+++ b/applications/utilities/postProcessing/dataConversion/foamToEnsight/foamToEnsight.C
@@ -93,9 +93,10 @@ bool inFileNameList
 
 int main(int argc, char *argv[])
 {
-    argList::validOptions.insert("ascii", "" );
-    argList::validOptions.insert("patches", "patchList");
-    argList::validOptions.insert("noPatches", "");
+    argList::addBoolOption("ascii");
+    argList::addBoolOption("noPatches");
+
+    argList::addOption("patches", "patchList");
 
 #   include "addTimeOptions.H"
 #   include "setRootCase.H"
diff --git a/applications/utilities/postProcessing/dataConversion/foamToEnsightParts/foamToEnsightParts.C b/applications/utilities/postProcessing/dataConversion/foamToEnsightParts/foamToEnsightParts.C
index e4f2ee2f2573e634e832053536ba858531b5cee3..6797f69978ec7fdde68359394ca3d58830b7fe94 100644
--- a/applications/utilities/postProcessing/dataConversion/foamToEnsightParts/foamToEnsightParts.C
+++ b/applications/utilities/postProcessing/dataConversion/foamToEnsightParts/foamToEnsightParts.C
@@ -79,9 +79,9 @@ int main(int argc, char *argv[])
     // afterwards anyhow
     timeSelector::addOptions(true, false);
     argList::noParallel();
-    argList::validOptions.insert("ascii", "");
-    argList::validOptions.insert("index",  "start");
-    argList::validOptions.insert("noMesh", "");
+    argList::addBoolOption("ascii");
+    argList::addOption("index",  "start");
+    argList::addBoolOption("noMesh");
 
     // the volume field types that we handle
     wordHashSet volFieldTypes;
diff --git a/applications/utilities/postProcessing/dataConversion/foamToFieldview9/foamToFieldview9.C b/applications/utilities/postProcessing/dataConversion/foamToFieldview9/foamToFieldview9.C
index 8f69fe0b2f6b4d74369d0805b07b4741a70dd7c1..1e3b781a7e3de2f577119fb28d48c26f6027fa25 100644
--- a/applications/utilities/postProcessing/dataConversion/foamToFieldview9/foamToFieldview9.C
+++ b/applications/utilities/postProcessing/dataConversion/foamToFieldview9/foamToFieldview9.C
@@ -177,7 +177,7 @@ static void writeFaceData
 int main(int argc, char *argv[])
 {
     argList::noParallel();
-    argList::validOptions.insert("noWall", "");
+    argList::addBoolOption("noWall");
     timeSelector::addOptions(true, false);
 
 #   include "setRootCase.H"
diff --git a/applications/utilities/postProcessing/dataConversion/foamToTecplot360/foamToTecplot360.C b/applications/utilities/postProcessing/dataConversion/foamToTecplot360/foamToTecplot360.C
index 8ed17ebffb190f42d4589bf1ecd0eac777d788d3..14e0468c0b7b7c889f733f3dfea05bc7b7fab8cf 100644
--- a/applications/utilities/postProcessing/dataConversion/foamToTecplot360/foamToTecplot360.C
+++ b/applications/utilities/postProcessing/dataConversion/foamToTecplot360/foamToTecplot360.C
@@ -168,18 +168,18 @@ int main(int argc, char *argv[])
 
 #   include "addRegionOption.H"
 
-    argList::validOptions.insert("fields", "fields");
-    argList::validOptions.insert("cellSet", "cellSet name");
-    argList::validOptions.insert("faceSet", "faceSet name");
-    argList::validOptions.insert("nearCellValue","");
-    argList::validOptions.insert("noInternal","");
-    argList::validOptions.insert("noPointValues","");
-    argList::validOptions.insert
+    argList::addOption("fields", "fields");
+    argList::addOption("cellSet", "cellSet name");
+    argList::addOption("faceSet", "faceSet name");
+    argList::addBoolOption("nearCellValue");
+    argList::addBoolOption("noInternal");
+    argList::addBoolOption("noPointValues");
+    argList::addOption
     (
         "excludePatches",
         "patches (wildcards) to exclude"
     );
-    argList::validOptions.insert("noFaceZones","");
+    argList::addBoolOption("noFaceZones");
 
 #   include "setRootCase.H"
 #   include "createTime.H"
diff --git a/applications/utilities/postProcessing/dataConversion/foamToVTK/foamToVTK.C b/applications/utilities/postProcessing/dataConversion/foamToVTK/foamToVTK.C
index 5743bda34bfd3e6e76c7f11738a33b654e8be165..9a82419e201d67bdf0fd9bba5eaff8a48e0493b6 100644
--- a/applications/utilities/postProcessing/dataConversion/foamToVTK/foamToVTK.C
+++ b/applications/utilities/postProcessing/dataConversion/foamToVTK/foamToVTK.C
@@ -241,20 +241,20 @@ int main(int argc, char *argv[])
 
 #   include "addRegionOption.H"
 
-    argList::validOptions.insert("fields", "fields");
-    argList::validOptions.insert("cellSet", "cellSet name");
-    argList::validOptions.insert("faceSet", "faceSet name");
-    argList::validOptions.insert("pointSet", "pointSet name");
-    argList::validOptions.insert("ascii","");
-    argList::validOptions.insert("surfaceFields","");
-    argList::validOptions.insert("nearCellValue","");
-    argList::validOptions.insert("noInternal","");
-    argList::validOptions.insert("noPointValues","");
-    argList::validOptions.insert("allPatches","");
-    argList::validOptions.insert("excludePatches","patches to exclude");
-    argList::validOptions.insert("noFaceZones","");
-    argList::validOptions.insert("noLinks","");
-    argList::validOptions.insert("useTimeName","");
+    argList::addOption("fields", "fields");
+    argList::addOption("cellSet", "cellSet name");
+    argList::addOption("faceSet", "faceSet name");
+    argList::addOption("pointSet", "pointSet name");
+    argList::addBoolOption("ascii");
+    argList::addBoolOption("surfaceFields");
+    argList::addBoolOption("nearCellValue");
+    argList::addBoolOption("noInternal");
+    argList::addBoolOption("noPointValues");
+    argList::addBoolOption("allPatches");
+    argList::addOption("excludePatches","patches to exclude");
+    argList::addBoolOption("noFaceZones");
+    argList::addBoolOption("noLinks");
+    argList::addBoolOption("useTimeName");
 
 #   include "setRootCase.H"
 #   include "createTime.H"
diff --git a/applications/utilities/postProcessing/foamCalc/Make/files b/applications/utilities/postProcessing/foamCalc/Make/files
index a2d961e851352bb17af0ad0c09b577aad152e7e3..1d17b8db164a195ab1b7e836b913842d3db4ae98 100644
--- a/applications/utilities/postProcessing/foamCalc/Make/files
+++ b/applications/utilities/postProcessing/foamCalc/Make/files
@@ -1,3 +1,3 @@
-foamCalc.C
+foamCalcApp.C
 
 EXE = $(FOAM_APPBIN)/foamCalc
diff --git a/applications/utilities/postProcessing/foamCalc/foamCalc.C b/applications/utilities/postProcessing/foamCalc/foamCalcApp.C
similarity index 90%
rename from applications/utilities/postProcessing/foamCalc/foamCalc.C
rename to applications/utilities/postProcessing/foamCalc/foamCalcApp.C
index c673ed24552a2ecbeb0fe5204db77a98193da24f..29a5e7e4460e46ee5de767198cf67a8b8758d51c 100644
--- a/applications/utilities/postProcessing/foamCalc/foamCalc.C
+++ b/applications/utilities/postProcessing/foamCalc/foamCalcApp.C
@@ -26,8 +26,9 @@ Application
     foamCalc
 
 Description
-    Generic wrapper for calculating a quantity at each time. Split into four
-    phases:
+    Generic wrapper for calculating a quantity at each time.
+
+    Split into four phases:
         1. Intialise
         2. Pre-time calculation loop
         3. Calculation loop
@@ -43,8 +44,16 @@ Description
 int main(int argc, char *argv[])
 {
     Foam::timeSelector::addOptions();
-    Foam::argList::validOptions.insert("noWrite", "");
-    Foam::argList::validOptions.insert("dict", "dictionary name");
+    Foam::argList::addBoolOption
+    (
+        "noWrite",
+        "suppress writing results"
+    );
+    Foam::argList::addOption
+    (
+        "dict",
+        "dictionary name"
+    );
 
     if (argc < 2)
     {
diff --git a/applications/utilities/postProcessing/miscellaneous/foamListTimes/foamListTimes.C b/applications/utilities/postProcessing/miscellaneous/foamListTimes/foamListTimes.C
index 0a10a5744fa0eecbcc43217def17dff91e6998db..4e72f388744000ba14ab95bcb821041fe7c2d9fa 100644
--- a/applications/utilities/postProcessing/miscellaneous/foamListTimes/foamListTimes.C
+++ b/applications/utilities/postProcessing/miscellaneous/foamListTimes/foamListTimes.C
@@ -50,7 +50,7 @@ int main(int argc, char *argv[])
     timeSelector::addOptions();  // -constant enabled
     argList::noBanner();
     argList::noParallel();
-    argList::validOptions.insert("processor", "");
+    argList::addBoolOption("processor");
 
 #   include "setRootCase.H"
 
diff --git a/applications/utilities/postProcessing/wall/yPlusRAS/yPlusRAS.C b/applications/utilities/postProcessing/wall/yPlusRAS/yPlusRAS.C
index a71e0fb1d2527f8f690f603a1ea4e4ca942d12ff..718daf7c2679945283cbb553b0ce714d7692cad0 100644
--- a/applications/utilities/postProcessing/wall/yPlusRAS/yPlusRAS.C
+++ b/applications/utilities/postProcessing/wall/yPlusRAS/yPlusRAS.C
@@ -186,7 +186,7 @@ int main(int argc, char *argv[])
 
     #include "addRegionOption.H"
 
-    argList::validOptions.insert("compressible","");
+    argList::addBoolOption("compressible");
 
     #include "setRootCase.H"
     #include "createTime.H"
diff --git a/applications/utilities/preProcessing/applyBoundaryLayer/applyBoundaryLayer.C b/applications/utilities/preProcessing/applyBoundaryLayer/applyBoundaryLayer.C
index 52d79cec81526771683e8ca8debdc7c1350a09db..361bce909c0ca615af78a3e99841a73561e5df45 100644
--- a/applications/utilities/preProcessing/applyBoundaryLayer/applyBoundaryLayer.C
+++ b/applications/utilities/preProcessing/applyBoundaryLayer/applyBoundaryLayer.C
@@ -50,9 +50,9 @@ static const scalar kappa(0.41);
 
 int main(int argc, char *argv[])
 {
-    argList::validOptions.insert("ybl", "scalar");
-    argList::validOptions.insert("Cbl", "scalar");
-    argList::validOptions.insert("writenut", "");
+    argList::addOption("ybl", "scalar");
+    argList::addOption("Cbl", "scalar");
+    argList::addBoolOption("writenut");
 
     #include "setRootCase.H"
     #include "createTime.H"
diff --git a/applications/utilities/preProcessing/applyWallFunctionBoundaryConditions/applyWallFunctionBoundaryConditions.C b/applications/utilities/preProcessing/applyWallFunctionBoundaryConditions/applyWallFunctionBoundaryConditions.C
index b2f53d5e0d4f866838de915de61abdbfc7cb2254..1357362daab323cb084216e5ff0639d32da1ce20 100644
--- a/applications/utilities/preProcessing/applyWallFunctionBoundaryConditions/applyWallFunctionBoundaryConditions.C
+++ b/applications/utilities/preProcessing/applyWallFunctionBoundaryConditions/applyWallFunctionBoundaryConditions.C
@@ -334,7 +334,7 @@ void updateIncompressibleCase(const fvMesh& mesh)
 int main(int argc, char *argv[])
 {
     #include "addTimeOptions.H"
-    argList::validOptions.insert("compressible", "");
+    argList::addBoolOption("compressible");
 
     #include "setRootCase.H"
     #include "createTime.H"
diff --git a/applications/utilities/preProcessing/changeDictionary/changeDictionary.C b/applications/utilities/preProcessing/changeDictionary/changeDictionary.C
index 8d60a6c88e929cf4fd477a118bd9913fa715add9..efb24b7d408e320b4129ead9802366942bd12958 100644
--- a/applications/utilities/preProcessing/changeDictionary/changeDictionary.C
+++ b/applications/utilities/preProcessing/changeDictionary/changeDictionary.C
@@ -245,8 +245,8 @@ bool merge
 
 int main(int argc, char *argv[])
 {
-    argList::validOptions.insert("instance", "instance");
-    argList::validOptions.insert("literalRE", "");
+    argList::addOption("instance", "instance");
+    argList::addBoolOption("literalRE");
     #include "addRegionOption.H"
 
     #include "setRootCase.H"
diff --git a/applications/utilities/preProcessing/foamUpgradeFvSolution/foamUpgradeFvSolution.C b/applications/utilities/preProcessing/foamUpgradeFvSolution/foamUpgradeFvSolution.C
index 9c96a9a4c221c7d5066ad148bfc3d6db4aa5762d..e964cf70f78f1bd4732f8127c486e56d364408e8 100644
--- a/applications/utilities/preProcessing/foamUpgradeFvSolution/foamUpgradeFvSolution.C
+++ b/applications/utilities/preProcessing/foamUpgradeFvSolution/foamUpgradeFvSolution.C
@@ -50,7 +50,7 @@ using namespace Foam;
 int main(int argc, char *argv[])
 {
     argList::noParallel();
-    argList::validOptions.insert("test", "");
+    argList::addBoolOption("test");
 
 #   include "setRootCase.H"
 #   include "createTime.H"
diff --git a/applications/utilities/preProcessing/mapFields/setRoots.H b/applications/utilities/preProcessing/mapFields/setRoots.H
index 6aceba234f46e8d0326a343feb91d04ea2765253..3758fbee6a2419c57bb7cf464f126bf04b8aad00 100644
--- a/applications/utilities/preProcessing/mapFields/setRoots.H
+++ b/applications/utilities/preProcessing/mapFields/setRoots.H
@@ -2,10 +2,10 @@
     argList::validArgs.clear();
     argList::validArgs.append("source dir");
 
-    argList::validOptions.insert("sourceTime", "scalar");
-    argList::validOptions.insert("parallelSource", "");
-    argList::validOptions.insert("parallelTarget", "");
-    argList::validOptions.insert("consistent", "");
+    argList::addOption("sourceTime", "scalar");
+    argList::addBoolOption("parallelSource");
+    argList::addBoolOption("parallelTarget");
+    argList::addBoolOption("consistent");
 
     argList args(argc, argv);
 
diff --git a/applications/utilities/surface/surfaceAdd/surfaceAdd.C b/applications/utilities/surface/surfaceAdd/surfaceAdd.C
index e8f1d3b70385caed61d316be7c590f676807a45d..305c9d48c2f707830c2f23c45897b817171745cd 100644
--- a/applications/utilities/surface/surfaceAdd/surfaceAdd.C
+++ b/applications/utilities/surface/surfaceAdd/surfaceAdd.C
@@ -51,8 +51,10 @@ int main(int argc, char *argv[])
     argList::validArgs.append("Foam surface file");
     argList::validArgs.append("Foam surface file");
     argList::validArgs.append("Foam output file");
-    argList::validOptions.insert("points", "pointsFile");
-    argList::validOptions.insert("mergeRegions", "");
+
+    argList::addOption("points", "pointsFile");
+    argList::addBoolOption("mergeRegions");
+
     argList args(argc, argv);
 
     fileName inFileName1(args.additionalArgs()[0]);
diff --git a/applications/utilities/surface/surfaceCheck/surfaceCheck.C b/applications/utilities/surface/surfaceCheck/surfaceCheck.C
index 1a8253b25d7b1532e886923cff3f9e7ff5759c6a..854cea06991ce819c222b9fe548950d2b38fe647 100644
--- a/applications/utilities/surface/surfaceCheck/surfaceCheck.C
+++ b/applications/utilities/surface/surfaceCheck/surfaceCheck.C
@@ -172,8 +172,10 @@ int main(int argc, char *argv[])
 
     argList::validArgs.clear();
     argList::validArgs.append("surface file");
-    argList::validOptions.insert("checkSelfIntersection", "");
-    argList::validOptions.insert("verbose", "");
+
+    argList::addBoolOption("checkSelfIntersection");
+    argList::addBoolOption("verbose");
+
     argList args(argc, argv);
 
     bool checkSelfIntersection = args.optionFound("checkSelfIntersection");
diff --git a/applications/utilities/surface/surfaceConvert/surfaceConvert.C b/applications/utilities/surface/surfaceConvert/surfaceConvert.C
index f7df57d1e1844037d6fab413aeda49715c8395fe..8481addc0316f9277e0c2ba4759895296aee8947 100644
--- a/applications/utilities/surface/surfaceConvert/surfaceConvert.C
+++ b/applications/utilities/surface/surfaceConvert/surfaceConvert.C
@@ -63,9 +63,10 @@ int main(int argc, char *argv[])
     argList::validArgs.clear();
     argList::validArgs.append("inputFile");
     argList::validArgs.append("outputFile");
-    argList::validOptions.insert("clean", "");
-    argList::validOptions.insert("scale", "scale");
-    argList::validOptions.insert("group", "");
+
+    argList::addBoolOption("clean");
+    argList::addBoolOption("group");
+    argList::addOption("scale", "scale");
 
     argList args(argc, argv);
     const stringList& params = args.additionalArgs();
diff --git a/applications/utilities/surface/surfaceFeatureExtract/surfaceFeatureExtract.C b/applications/utilities/surface/surfaceFeatureExtract/surfaceFeatureExtract.C
index c3a7e5a26dd827dbc21484aefb1c6d7e42dff4e0..307edd85685717bb91188d91fe187452727dc82c 100644
--- a/applications/utilities/surface/surfaceFeatureExtract/surfaceFeatureExtract.C
+++ b/applications/utilities/surface/surfaceFeatureExtract/surfaceFeatureExtract.C
@@ -101,13 +101,13 @@ int main(int argc, char *argv[])
     argList::validArgs.append("surface");
     argList::validArgs.append("output set");
 
-    argList::validOptions.insert("includedAngle", "included angle [0..180]");
-    argList::validOptions.insert("set", "input feature set");
+    argList::addOption("includedAngle", "included angle [0..180]");
+    argList::addOption("set", "input feature set");
 
-    argList::validOptions.insert("minLen", "cumulative length of feature");
-    argList::validOptions.insert("minElem", "number of edges in feature");
-    argList::validOptions.insert("subsetBox", "((x0 y0 z0)(x1 y1 z1))");
-    argList::validOptions.insert("deleteBox", "((x0 y0 z0)(x1 y1 z1))");
+    argList::addOption("minLen", "cumulative length of feature");
+    argList::addOption("minElem", "number of edges in feature");
+    argList::addOption("subsetBox", "((x0 y0 z0)(x1 y1 z1))");
+    argList::addOption("deleteBox", "((x0 y0 z0)(x1 y1 z1))");
     argList args(argc, argv);
 
     Pout<< "Feature line extraction is only valid on closed manifold surfaces."
diff --git a/applications/utilities/surface/surfaceFind/surfaceFind.C b/applications/utilities/surface/surfaceFind/surfaceFind.C
index b710a52493e5ccc3793c2405f37ae7d2f651234a..dcaccc04c298c4e7f4315e93c5b051ce63894ff9 100644
--- a/applications/utilities/surface/surfaceFind/surfaceFind.C
+++ b/applications/utilities/surface/surfaceFind/surfaceFind.C
@@ -44,9 +44,9 @@ int main(int argc, char *argv[])
 {
     argList::noParallel();
     argList::validArgs.clear();
-    argList::validOptions.insert("x", "X");
-    argList::validOptions.insert("y", "Y");
-    argList::validOptions.insert("z", "Z");
+    argList::addOption("x", "X");
+    argList::addOption("y", "Y");
+    argList::addOption("z", "Z");
 
     argList::validArgs.append("surface file");
 
diff --git a/applications/utilities/surface/surfaceMeshConvert/surfaceMeshConvert.C b/applications/utilities/surface/surfaceMeshConvert/surfaceMeshConvert.C
index 6e730cc60ab3ef201ca86de13f11c4400513f925..bf98b2673b638e0848e914375091e0a9eeba12e2 100644
--- a/applications/utilities/surface/surfaceMeshConvert/surfaceMeshConvert.C
+++ b/applications/utilities/surface/surfaceMeshConvert/surfaceMeshConvert.C
@@ -73,12 +73,14 @@ int main(int argc, char *argv[])
     argList::noParallel();
     argList::validArgs.append("inputFile");
     argList::validArgs.append("outputFile");
-    argList::validOptions.insert("clean", "");
-    argList::validOptions.insert("scaleIn",  "scale");
-    argList::validOptions.insert("scaleOut", "scale");
-    argList::validOptions.insert("dict", "coordinateSystemsDict");
-    argList::validOptions.insert("from", "sourceCoordinateSystem");
-    argList::validOptions.insert("to",   "targetCoordinateSystem");
+
+    argList::addBoolOption("clean");
+
+    argList::addOption("scaleIn",  "scale");
+    argList::addOption("scaleOut", "scale");
+    argList::addOption("dict", "coordinateSystemsDict");
+    argList::addOption("from", "sourceCoordinateSystem");
+    argList::addOption("to",   "targetCoordinateSystem");
 
     argList args(argc, argv);
     Time runTime(args.rootPath(), args.caseName());
diff --git a/applications/utilities/surface/surfaceMeshConvertTesting/surfaceMeshConvertTesting.C b/applications/utilities/surface/surfaceMeshConvertTesting/surfaceMeshConvertTesting.C
index e53a8616d824e3ad1d61a6542f8a35fcb7c940e1..22c37c2379ed2aadc97a4599204ad33995b98694 100644
--- a/applications/utilities/surface/surfaceMeshConvertTesting/surfaceMeshConvertTesting.C
+++ b/applications/utilities/surface/surfaceMeshConvertTesting/surfaceMeshConvertTesting.C
@@ -75,13 +75,16 @@ int main(int argc, char *argv[])
     argList::noParallel();
     argList::validArgs.append("inputFile");
     argList::validArgs.append("outputFile");
-    argList::validOptions.insert("clean", "");
-    argList::validOptions.insert("orient", "");
-    argList::validOptions.insert("surfMesh", "");
-    argList::validOptions.insert("scale", "scale");
-    argList::validOptions.insert("triSurface", "");
-    argList::validOptions.insert("unsorted", "");
-    argList::validOptions.insert("triFace", "");
+
+    argList::addBoolOption("clean");
+    argList::addBoolOption("orient");
+    argList::addBoolOption("surfMesh");
+    argList::addBoolOption("triSurface");
+    argList::addBoolOption("unsorted");
+    argList::addBoolOption("triFace");
+
+    argList::addOption("scale", "scale");
+
 #   include "setRootCase.H"
     const stringList& params = args.additionalArgs();
 
diff --git a/applications/utilities/surface/surfaceMeshExport/surfaceMeshExport.C b/applications/utilities/surface/surfaceMeshExport/surfaceMeshExport.C
index 40a1a39820646c1b395bf8b1303dd01c80b6d9fb..98445dde2b15a22a1109efa686ba7be34d3cc768 100644
--- a/applications/utilities/surface/surfaceMeshExport/surfaceMeshExport.C
+++ b/applications/utilities/surface/surfaceMeshExport/surfaceMeshExport.C
@@ -75,13 +75,15 @@ int main(int argc, char *argv[])
 {
     argList::noParallel();
     argList::validArgs.append("outputFile");
-    argList::validOptions.insert("name",  "name");
-    argList::validOptions.insert("clean", "");
-    argList::validOptions.insert("scaleIn",  "scale");
-    argList::validOptions.insert("scaleOut", "scale");
-    argList::validOptions.insert("dict", "coordinateSystemsDict");
-    argList::validOptions.insert("from", "sourceCoordinateSystem");
-    argList::validOptions.insert("to",   "targetCoordinateSystem");
+
+    argList::addBoolOption("clean");
+
+    argList::addOption("name",  "name");
+    argList::addOption("scaleIn",  "scale");
+    argList::addOption("scaleOut", "scale");
+    argList::addOption("dict", "coordinateSystemsDict");
+    argList::addOption("from", "sourceCoordinateSystem");
+    argList::addOption("to",   "targetCoordinateSystem");
 
     argList args(argc, argv);
     Time runTime(args.rootPath(), args.caseName());
diff --git a/applications/utilities/surface/surfaceMeshImport/surfaceMeshImport.C b/applications/utilities/surface/surfaceMeshImport/surfaceMeshImport.C
index 808eefcd76c0104f5243fe99bc398cf4e2f7023d..a8552bbb05b52d10acd530fa103ce250a3580e2b 100644
--- a/applications/utilities/surface/surfaceMeshImport/surfaceMeshImport.C
+++ b/applications/utilities/surface/surfaceMeshImport/surfaceMeshImport.C
@@ -75,13 +75,15 @@ int main(int argc, char *argv[])
 {
     argList::noParallel();
     argList::validArgs.append("inputFile");
-    argList::validOptions.insert("name",  "name");
-    argList::validOptions.insert("clean", "");
-    argList::validOptions.insert("scaleIn",  "scale");
-    argList::validOptions.insert("scaleOut", "scale");
-    argList::validOptions.insert("dict", "coordinateSystemsDict");
-    argList::validOptions.insert("from", "sourceCoordinateSystem");
-    argList::validOptions.insert("to",   "targetCoordinateSystem");
+
+    argList::addBoolOption("clean");
+
+    argList::addOption("name",  "name");
+    argList::addOption("scaleIn",  "scale");
+    argList::addOption("scaleOut", "scale");
+    argList::addOption("dict", "coordinateSystemsDict");
+    argList::addOption("from", "sourceCoordinateSystem");
+    argList::addOption("to",   "targetCoordinateSystem");
 
 #   include "setRootCase.H"
 #   include "createTime.H"
diff --git a/applications/utilities/surface/surfaceMeshTriangulate/surfaceMeshTriangulate.C b/applications/utilities/surface/surfaceMeshTriangulate/surfaceMeshTriangulate.C
index 132fca6c342362ecf8dd624bb6e554e18c883151..51c8425d665fc7c25b9848dcc8484f05f3db5bc5 100644
--- a/applications/utilities/surface/surfaceMeshTriangulate/surfaceMeshTriangulate.C
+++ b/applications/utilities/surface/surfaceMeshTriangulate/surfaceMeshTriangulate.C
@@ -51,8 +51,8 @@ int main(int argc, char *argv[])
 {
     argList::validArgs.append("output file");
 #   include "addRegionOption.H"
-    argList::validOptions.insert("excludeProcPatches", "");
-    argList::validOptions.insert("patches", "(patch0 .. patchN)");
+    argList::addBoolOption("excludeProcPatches");
+    argList::addOption("patches", "(patch0 .. patchN)");
 
 #   include "setRootCase.H"
 #   include "createTime.H"
diff --git a/applications/utilities/surface/surfaceOrient/surfaceOrient.C b/applications/utilities/surface/surfaceOrient/surfaceOrient.C
index c6fd31c0294ef3c365c45c14ebabcdc3b14b9218..39620435b16483b5df77056730be6930cb6a1806 100644
--- a/applications/utilities/surface/surfaceOrient/surfaceOrient.C
+++ b/applications/utilities/surface/surfaceOrient/surfaceOrient.C
@@ -45,7 +45,7 @@ int main(int argc, char *argv[])
     argList::validArgs.append("Foam surface file");
     argList::validArgs.append("visiblePoint");
     argList::validArgs.append("output file");
-    argList::validOptions.insert("inside", "");
+    argList::addBoolOption("inside");
     argList args(argc, argv);
 
     fileName surfFileName(args.additionalArgs()[0]);
diff --git a/applications/utilities/surface/surfaceRedistributePar/surfaceRedistributePar.C b/applications/utilities/surface/surfaceRedistributePar/surfaceRedistributePar.C
index 8b37f70fe44fe0a0c5f2d3f892485002cd5f00ba..24a6facb0f4b4d3e138fbff7fbac9cf13f3c89f3 100644
--- a/applications/utilities/surface/surfaceRedistributePar/surfaceRedistributePar.C
+++ b/applications/utilities/surface/surfaceRedistributePar/surfaceRedistributePar.C
@@ -103,7 +103,7 @@ int main(int argc, char *argv[])
     argList::validArgs.append("triSurfaceMesh");
     argList::validArgs.append("distributionType");
 
-    argList::validOptions.insert("keepNonMapped", "");
+    argList::addBoolOption("keepNonMapped");
 #   include "setRootCase.H"
 #   include "createTime.H"
     runTime.functionObjects().off();
@@ -213,7 +213,7 @@ int main(int argc, char *argv[])
         (
             IOstream::ASCII,
             IOstream::currentVersion,
-            ioDict.time().writeCompression()        
+            ioDict.time().writeCompression()
         );
     }
 
diff --git a/applications/utilities/surface/surfaceSplitNonManifolds/surfaceSplitNonManifolds.C b/applications/utilities/surface/surfaceSplitNonManifolds/surfaceSplitNonManifolds.C
index 09d13cb2a89c2a7014437b2584c34bccffa792f8..3e8500bee4ea8283728790267d582d450b33b458 100644
--- a/applications/utilities/surface/surfaceSplitNonManifolds/surfaceSplitNonManifolds.C
+++ b/applications/utilities/surface/surfaceSplitNonManifolds/surfaceSplitNonManifolds.C
@@ -688,7 +688,7 @@ int main(int argc, char *argv[])
 
     argList::validArgs.append("surface file");
     argList::validArgs.append("output surface file");
-    argList::validOptions.insert("debug", "");
+    argList::addBoolOption("debug");
 
     argList args(argc, argv);
 
diff --git a/applications/utilities/surface/surfaceToPatch/surfaceToPatch.C b/applications/utilities/surface/surfaceToPatch/surfaceToPatch.C
index dd5a2e2edf7e26b51c92143d91b014793dc83646..c4adb969a36cf01fd5065cf899b4692954e465e7 100644
--- a/applications/utilities/surface/surfaceToPatch/surfaceToPatch.C
+++ b/applications/utilities/surface/surfaceToPatch/surfaceToPatch.C
@@ -166,8 +166,8 @@ int main(int argc, char *argv[])
 {
     argList::noParallel();
     argList::validArgs.append("surface file");
-    argList::validOptions.insert("faceSet", "faceSet name");
-    argList::validOptions.insert("tol", "fraction of mesh size");
+    argList::addOption("faceSet", "faceSet name");
+    argList::addOption("tol", "fraction of mesh size");
 
 #   include "setRootCase.H"
 #   include "createTime.H"
diff --git a/applications/utilities/surface/surfaceTransformPoints/surfaceTransformPoints.C b/applications/utilities/surface/surfaceTransformPoints/surfaceTransformPoints.C
index be4449c6ae432bc706386378f1b9992d14b737bf..85e3cc11723bb60fc87d64aed9105dea648a6ff9 100644
--- a/applications/utilities/surface/surfaceTransformPoints/surfaceTransformPoints.C
+++ b/applications/utilities/surface/surfaceTransformPoints/surfaceTransformPoints.C
@@ -59,11 +59,11 @@ int main(int argc, char *argv[])
 
     argList::validArgs.append("surface file");
     argList::validArgs.append("output surface file");
-    argList::validOptions.insert("translate", "vector");
-    argList::validOptions.insert("rotate", "(vector vector)");
-    argList::validOptions.insert("scale", "vector");
-    argList::validOptions.insert("rollPitchYaw", "(roll pitch yaw)");
-    argList::validOptions.insert("yawPitchRoll", "(yaw pitch roll)");
+    argList::addOption("translate", "vector");
+    argList::addOption("rotate", "(vector vector)");
+    argList::addOption("scale", "vector");
+    argList::addOption("rollPitchYaw", "(roll pitch yaw)");
+    argList::addOption("yawPitchRoll", "(yaw pitch roll)");
     argList args(argc, argv);
 
     fileName surfFileName(args.additionalArgs()[0]);
diff --git a/src/OpenFOAM/db/Time/timeSelector.C b/src/OpenFOAM/db/Time/timeSelector.C
index caf8c4f3a0fc608c92bc92b16ea956eb4b9c96ec..bb12d0d7da2564bb4286fd9e14e406c1c2bcde22 100644
--- a/src/OpenFOAM/db/Time/timeSelector.C
+++ b/src/OpenFOAM/db/Time/timeSelector.C
@@ -124,15 +124,37 @@ void Foam::timeSelector::addOptions
 {
     if (constant)
     {
-        argList::validOptions.insert("constant", "");
+        argList::addBoolOption
+        (
+            "constant",
+            "include the 'constant/' dir in the times list"
+        );
     }
     if (zeroTime)
     {
-        argList::validOptions.insert("zeroTime", "");
+        argList::addBoolOption
+        (
+            "zeroTime",
+            "include the '0/' dir in the times list"
+        );
     }
-    argList::validOptions.insert("noZero", "");
-    argList::validOptions.insert("time", "ranges");
-    argList::validOptions.insert("latestTime", "");
+    argList::addBoolOption
+    (
+        "noZero",
+        "exclude the '0/' dir from the times list, "
+        "has precedence over the -zeroTime option"
+    );
+    argList::addBoolOption
+    (
+        "latestTime",
+        "select the latest time"
+    );
+    argList::addOption
+    (
+        "time",
+        "ranges",
+        "comma-separated time ranges - eg, ':10,20,40-70,1000:'"
+    );
 }
 
 
diff --git a/src/OpenFOAM/include/addRegionOption.H b/src/OpenFOAM/include/addRegionOption.H
index 4ece251a17240b9054d84f6b3da0d759222047e7..d801dd0de60ed3b5607eb057a352027ecc422e6e 100644
--- a/src/OpenFOAM/include/addRegionOption.H
+++ b/src/OpenFOAM/include/addRegionOption.H
@@ -2,4 +2,10 @@
 // addRegionOption.H
 // ~~~~~~~~~~~~~~~~~
 
-    Foam::argList::validOptions.insert("region", "name");
+    Foam::argList::addOption
+    (
+        "region",
+        "name",
+        "specify alternative mesh region"
+    );
+
diff --git a/src/OpenFOAM/include/addTimeOptions.H b/src/OpenFOAM/include/addTimeOptions.H
index ec57beec07a6b153ed55ccf52b3600ea888c8ca4..6110015c70f6fa6e749d5dd4a782cdf0d3049400 100644
--- a/src/OpenFOAM/include/addTimeOptions.H
+++ b/src/OpenFOAM/include/addTimeOptions.H
@@ -2,7 +2,28 @@
 // addTimeOptions.H
 // ~~~~~~~~~~~~~~~~
 
-    Foam::argList::validOptions.insert("constant", "");
-    Foam::argList::validOptions.insert("latestTime", "");
-    Foam::argList::validOptions.insert("noZero", "");
-    Foam::argList::validOptions.insert("time", "time");
+    Foam::argList::addBoolOption
+    (
+        "constant",
+        "include the 'constant/' dir in the times list"
+    );
+
+    Foam::argList::addBoolOption
+    (
+        "latestTime",
+        "select the latest time"
+    );
+
+    Foam::argList::addBoolOption
+    (
+        "noZero",
+        "exclude the '0/' dir from the times list"
+    );
+
+    Foam::argList::addOption
+    (
+        "time",
+        "time",
+        "specify a single time value to select"
+    );
+
diff --git a/src/postProcessing/postCalc/postCalc.C b/src/postProcessing/postCalc/postCalc.C
index fd3b29ed5dd72095d87eff597bef5bafba6a1a26..9f03a51960ec6b279d93ec83a1dc08718be55e5e 100644
--- a/src/postProcessing/postCalc/postCalc.C
+++ b/src/postProcessing/postCalc/postCalc.C
@@ -58,8 +58,16 @@ namespace Foam
 int main(int argc, char *argv[])
 {
     Foam::timeSelector::addOptions();
-    Foam::argList::validOptions.insert("noWrite", "");
-    Foam::argList::validOptions.insert("dict", "dictionary name");
+    Foam::argList::addBoolOption
+    (
+        "noWrite",
+        "suppress writing results"
+    );
+    Foam::argList::addOption
+    (
+        "dict",
+        "dictionary name"
+    );
 
 #   include "setRootCase.H"
 #   include "createTime.H"