diff --git a/applications/solvers/basic/potentialFoam/createFields.H b/applications/solvers/basic/potentialFoam/createFields.H
index 5152727b1db74bf902830f71b0b94e215ae216bf..4b3352557ab1ff61d4b4aa890c0d7cdd89450818 100644
--- a/applications/solvers/basic/potentialFoam/createFields.H
+++ b/applications/solvers/basic/potentialFoam/createFields.H
@@ -38,10 +38,9 @@ if (args.found("initialiseUBCs"))
 // Construct a pressure field
 // If it is available read it otherwise construct from the velocity BCs
 // converting fixed-value BCs to zero-gradient and vice versa.
-word pName("p");
 
-// Update name of the pressure field from the command-line option
-args.readIfPresent("pName", pName);
+// Allow override from command-line -pName option
+const word pName = args.opt<word>("pName", "p");
 
 // Infer the pressure BCs from the velocity
 wordList pBCTypes
diff --git a/applications/solvers/basic/potentialFoam/overPotentialFoam/createFields.H b/applications/solvers/basic/potentialFoam/overPotentialFoam/createFields.H
index 67c1c67e59b0440de4f50d86968cdc53838ed5e6..80f04a8a68d47db1f17f151cce525365ab63b226 100644
--- a/applications/solvers/basic/potentialFoam/overPotentialFoam/createFields.H
+++ b/applications/solvers/basic/potentialFoam/overPotentialFoam/createFields.H
@@ -38,10 +38,9 @@ if (args.found("initialiseUBCs"))
 // Construct a pressure field
 // If it is available read it otherwise construct from the velocity BCs
 // converting fixed-value BCs to zero-gradient and vice versa.
-word pName("p");
 
-// Update name of the pressure field from the command-line option
-args.readIfPresent("pName", pName);
+// Allow override from command-line -pName option
+const word pName = args.opt<word>("pName", "p");
 
 // Infer the pressure BCs from the velocity
 wordList pBCTypes
diff --git a/applications/solvers/lagrangian/DPMFoam/createFields.H b/applications/solvers/lagrangian/DPMFoam/createFields.H
index 527e4651773ef353753c9604366a236f962f3ed5..07ff05738b859df880a1c971bd68ab94384e67be 100644
--- a/applications/solvers/lagrangian/DPMFoam/createFields.H
+++ b/applications/solvers/lagrangian/DPMFoam/createFields.H
@@ -119,8 +119,10 @@ volScalarField alphac
     dimensionedScalar(dimless, Zero)
 );
 
-word kinematicCloudName("kinematicCloud");
-args.readIfPresent("cloud", kinematicCloudName);
+const word kinematicCloudName
+(
+    args.opt<word>("cloud", "kinematicCloud")
+);
 
 Info<< "Constructing kinematicCloud " << kinematicCloudName << endl;
 basicKinematicTypeCloud kinematicCloud
diff --git a/applications/solvers/lagrangian/icoUncoupledKinematicParcelFoam/createFields.H b/applications/solvers/lagrangian/icoUncoupledKinematicParcelFoam/createFields.H
index fe2134e3c8f7db4569e36218d43623b37900644b..1031e81a9a6307aeb7fec9898c1beba0865bdff7 100644
--- a/applications/solvers/lagrangian/icoUncoupledKinematicParcelFoam/createFields.H
+++ b/applications/solvers/lagrangian/icoUncoupledKinematicParcelFoam/createFields.H
@@ -57,8 +57,10 @@ volScalarField mu
     laminarTransport.nu()*rhoInfValue
 );
 
-word kinematicCloudName("kinematicCloud");
-args.readIfPresent("cloud", kinematicCloudName);
+const word kinematicCloudName
+(
+    args.opt<word>("cloud", "kinematicCloud")
+);
 
 Info<< "Constructing kinematicCloud " << kinematicCloudName << endl;
 basicKinematicCollidingCloud kinematicCloud
diff --git a/applications/solvers/lagrangian/uncoupledKinematicParcelFoam/createFields.H b/applications/solvers/lagrangian/uncoupledKinematicParcelFoam/createFields.H
index e8dd95b2e89b4f3e44fb17dea77a66aab1b586ce..f4675bbdb6f135c55e5f6de3b8d2a64a9bc99545 100644
--- a/applications/solvers/lagrangian/uncoupledKinematicParcelFoam/createFields.H
+++ b/applications/solvers/lagrangian/uncoupledKinematicParcelFoam/createFields.H
@@ -51,7 +51,7 @@ autoPtr<compressible::turbulenceModel> turbulence
 
 const word kinematicCloudName
 (
-    args.lookupOrDefault<word>("cloud", "kinematicCloud")
+    args.opt<word>("cloud", "kinematicCloud")
 );
 
 Info<< "Constructing kinematicCloud " << kinematicCloudName << endl;
diff --git a/applications/test/checkDecomposePar/Test-checkDecomposePar.C b/applications/test/checkDecomposePar/Test-checkDecomposePar.C
index a34d695b869228f64b75278a422402149380ec1f..c9f8ca34de3e38efe796cad29e7d18efebf8f209 100644
--- a/applications/test/checkDecomposePar/Test-checkDecomposePar.C
+++ b/applications/test/checkDecomposePar/Test-checkDecomposePar.C
@@ -84,8 +84,7 @@ int main(int argc, char *argv[])
     instantList times = timeSelector::selectIfPresent(runTime, args);
 
     // Allow override of decomposeParDict location
-    fileName decompDictFile;
-    args.readIfPresent("decomposeParDict", decompDictFile);
+    const fileName decompDictFile = args.opt<fileName>("decomposeParDict", "");
 
     wordList regionNames;
     wordList regionDirs;
diff --git a/applications/test/decomposePar/Test-decomposePar.C b/applications/test/decomposePar/Test-decomposePar.C
index 4747c4e9ca153b8de1512136e47619c5b321c75f..0d925ec96d6aef0f018bc5ee93503ed83a1c0188 100644
--- a/applications/test/decomposePar/Test-decomposePar.C
+++ b/applications/test/decomposePar/Test-decomposePar.C
@@ -98,8 +98,8 @@ int main(int argc, char *argv[])
     const bool allRegions = args.found("allRegions");
     const bool verbose    = args.found("verbose");
 
-    const label numSubdomains = args.lookupOrDefault<label>("domains", 0);
-    const word methodName = args.lookupOrDefault<word>("method", word::null);
+    const label numSubdomains = args.opt<label>("domains", 0);
+    const word methodName = args.opt<word>("method", word::null);
 
     // Set time from database
     #include "createTime.H"
@@ -107,8 +107,7 @@ int main(int argc, char *argv[])
     instantList times = timeSelector::selectIfPresent(runTime, args);
 
     // Allow override of decomposeParDict location
-    fileName decompDictFile;
-    args.readIfPresent("decomposeParDict", decompDictFile);
+    const fileName decompDictFile = args.opt<fileName>("decomposeParDict", "");
 
     // Get all region names
     wordList regionNames;
@@ -122,8 +121,7 @@ int main(int argc, char *argv[])
     else
     {
         regionNames.resize(1);
-        regionNames.first() =
-            args.lookupOrDefault<word>("region", fvMesh::defaultRegion);
+        regionNames.first() = args.opt<word>("region", fvMesh::defaultRegion);
     }
 
     forAll(regionNames, regioni)
diff --git a/applications/test/externalFileCoupler/Test-externalFileCoupler.C b/applications/test/externalFileCoupler/Test-externalFileCoupler.C
index bd1cad0160bc554461583e7053f157830721536a..9b088de46c6b2cdb824f0369bca8752805b4d2e4 100644
--- a/applications/test/externalFileCoupler/Test-externalFileCoupler.C
+++ b/applications/test/externalFileCoupler/Test-externalFileCoupler.C
@@ -45,7 +45,7 @@ int main(int argc, char *argv[])
 
     #include "setRootCase.H"
 
-    const label maxCount = args.lookupOrDefault<label>("max", 1000);
+    const label maxCount = args.opt<label>("max", 1000);
 
     externalFileCoupler coupler;
 
diff --git a/applications/test/momentOfInertia/Test-momentOfInertia.C b/applications/test/momentOfInertia/Test-momentOfInertia.C
index 201c7e004bd12f874ad4fc131f6e9f480431ee4d..9cd426a9b7eaec55d47e06b820de8cfbc7e3d925 100644
--- a/applications/test/momentOfInertia/Test-momentOfInertia.C
+++ b/applications/test/momentOfInertia/Test-momentOfInertia.C
@@ -196,7 +196,7 @@ int main(int argc, char *argv[])
     }
 
     {
-        const label celli = args.lookupOrDefault<label>("cell", 0);
+        const label celli = args.opt<label>("cell", 0);
 
         tensorField mI(momentOfInertia::meshInertia(mesh));
 
diff --git a/applications/test/spline/Test-spline.C b/applications/test/spline/Test-spline.C
index 2e75d267bd430bbc993c38965e1aaa856a25db9e..cb2f99cceb2ae4bcd7c818f57347df185e0cab61 100644
--- a/applications/test/spline/Test-spline.C
+++ b/applications/test/spline/Test-spline.C
@@ -65,7 +65,7 @@ int main(int argc, char *argv[])
 
     bool useBSpline = args.found("B");
     bool useCatmullRom = args.found("CMR");
-    const label nSeg = args.lookupOrDefault<label>("n", 20);
+    const label nSeg = args.opt<label>("n", 20);
 
     if (!useCatmullRom && !useBSpline)
     {
diff --git a/applications/test/surfaceIntersection/Test-surfaceIntersection.C b/applications/test/surfaceIntersection/Test-surfaceIntersection.C
index 08c8996882c49b35123a13b8e2ab0e7bd0f9f37d..1a270158ced6c8670de8ddc32a77b73870839ae3 100644
--- a/applications/test/surfaceIntersection/Test-surfaceIntersection.C
+++ b/applications/test/surfaceIntersection/Test-surfaceIntersection.C
@@ -128,7 +128,7 @@ int main(int argc, char *argv[])
     #include "setRootCase.H"
     #include "createTime.H"
 
-    const scalar scaleFactor = args.lookupOrDefault<scalar>("scale", -1);
+    const scalar scaleFactor = args.opt<scalar>("scale", -1);
 
     const word outputFile(args.executable() + ".obj");
 
diff --git a/applications/test/surfaceMeshConvert/Test-surfaceMeshConvert.C b/applications/test/surfaceMeshConvert/Test-surfaceMeshConvert.C
index 74e45613b6c25ffc48610a9bd5d386f69c02c17b..916ed53f3684c4d8b0a085d60a3670ed3e2841dc 100644
--- a/applications/test/surfaceMeshConvert/Test-surfaceMeshConvert.C
+++ b/applications/test/surfaceMeshConvert/Test-surfaceMeshConvert.C
@@ -138,7 +138,7 @@ int main(int argc, char *argv[])
     #include "setRootCase.H"
 
     const bool     optStdout = args.found("stdout");
-    const scalar scaleFactor = args.lookupOrDefault<scalar>("scale", 0);
+    const scalar scaleFactor = args.opt<scalar>("scale", 0);
 
     const fileName importName = args[1];
     const fileName exportName = optStdout ? "-stdout" : args[2];
diff --git a/applications/test/tokenize/Test-tokenize.C b/applications/test/tokenize/Test-tokenize.C
index 1f298eaa7d527bd1ef3687faaaf297f336febdb0..919a57449815ba0c23cb2e19ff3dbfefd9519698 100644
--- a/applications/test/tokenize/Test-tokenize.C
+++ b/applications/test/tokenize/Test-tokenize.C
@@ -51,7 +51,7 @@ int main(int argc, char *argv[])
 
     argList args(argc, argv, false, true);
 
-    const label repeat = args.lookupOrDefault<label>("repeat", 1);
+    const label repeat = args.opt<label>("repeat", 1);
 
     const bool optVerbose = args.found("verbose");
 
diff --git a/applications/test/vtkSeriesWriter/Test-vtkSeriesWriter.C b/applications/test/vtkSeriesWriter/Test-vtkSeriesWriter.C
index 043e42e03491d9e62a29ab28376d01820cbd1675..f97b8facd9be6f1b11c4951af7b320469955ba90 100644
--- a/applications/test/vtkSeriesWriter/Test-vtkSeriesWriter.C
+++ b/applications/test/vtkSeriesWriter/Test-vtkSeriesWriter.C
@@ -45,7 +45,7 @@ int main(int argc, char *argv[])
 
     argList args(argc, argv, false, true);
 
-    const scalar currTime = args.lookupOrDefault<scalar>("time", GREAT);
+    const scalar currTime = args.opt<scalar>("time", GREAT);
 
     Info<< "Using currTime = " << currTime << nl
         << "when loading " << (args.size()-1) << " files" << nl << nl;
diff --git a/applications/utilities/mesh/advanced/collapseEdges/collapseEdges.C b/applications/utilities/mesh/advanced/collapseEdges/collapseEdges.C
index 7fbcb7c9bd2c4a7633cc10c54110756ff8ed0596..edd762a839cbf56d8b15e81f496720e4b563d163 100644
--- a/applications/utilities/mesh/advanced/collapseEdges/collapseEdges.C
+++ b/applications/utilities/mesh/advanced/collapseEdges/collapseEdges.C
@@ -130,7 +130,6 @@ int main(int argc, char *argv[])
     }
 
 
-
     labelIOList pointPriority
     (
         IOobject
diff --git a/applications/utilities/mesh/advanced/combinePatchFaces/combinePatchFaces.C b/applications/utilities/mesh/advanced/combinePatchFaces/combinePatchFaces.C
index 1f99e7a44ff61d6ee6b7180e14c395ecb8911e98..6a6b7836de2190739c81a00b4370d13ff13d5993 100644
--- a/applications/utilities/mesh/advanced/combinePatchFaces/combinePatchFaces.C
+++ b/applications/utilities/mesh/advanced/combinePatchFaces/combinePatchFaces.C
@@ -380,8 +380,7 @@ int main(int argc, char *argv[])
 
     // Sin of angle between two consecutive edges on a face.
     // If sin(angle) larger than this the face will be considered concave.
-    const scalar concaveAngle =
-        args.lookupOrDefault<scalar>("concaveAngle", 30);
+    const scalar concaveAngle = args.opt<scalar>("concaveAngle", 30);
 
     const scalar concaveSin = Foam::sin(degToRad(concaveAngle));
 
diff --git a/applications/utilities/mesh/advanced/splitCells/splitCells.C b/applications/utilities/mesh/advanced/splitCells/splitCells.C
index 068fedefbcf9969f555ebc1b836a81f21bf09c10..5a38c2189e5eea1bc888fea10b1f9dd82b6b08c2 100644
--- a/applications/utilities/mesh/advanced/splitCells/splitCells.C
+++ b/applications/utilities/mesh/advanced/splitCells/splitCells.C
@@ -566,7 +566,7 @@ int main(int argc, char *argv[])
     const bool geometry  = args.found("geometry");
     const bool overwrite = args.found("overwrite");
 
-    const scalar edgeTol = args.lookupOrDefault<scalar>("tol", 0.2);
+    const scalar edgeTol = args.opt<scalar>("tol", 0.2);
 
     Info<< "Trying to split cells with internal angles > feature angle\n" << nl
         << "featureAngle      : " << featureAngle << nl
diff --git a/applications/utilities/mesh/conversion/ansysToFoam/ansysToFoam.L b/applications/utilities/mesh/conversion/ansysToFoam/ansysToFoam.L
index 796de5b65c893548324a1a7f3e336cbfcfc92993..c275ecec35009501aee57804225c30f094c75099 100644
--- a/applications/utilities/mesh/conversion/ansysToFoam/ansysToFoam.L
+++ b/applications/utilities/mesh/conversion/ansysToFoam/ansysToFoam.L
@@ -320,7 +320,7 @@ int main(int argc, char *argv[])
         FatalError.exit();
     }
 
-    const scalar scaleFactor = args.lookupOrDefault<scalar>("scale", 1);
+    const scalar scaleFactor = args.opt<scalar>("scale", 1);
 
     #include "createTime.H"
 
diff --git a/applications/utilities/mesh/conversion/ccm/ccmToFoam/ccmToFoam.C b/applications/utilities/mesh/conversion/ccm/ccmToFoam/ccmToFoam.C
index e4a98f81a27a84c2c9fe89dabfe0732642904f33..7a55c7a71e10427c3cc2e7df25186526af43b8cb 100644
--- a/applications/utilities/mesh/conversion/ccm/ccmToFoam/ccmToFoam.C
+++ b/applications/utilities/mesh/conversion/ccm/ccmToFoam/ccmToFoam.C
@@ -186,7 +186,7 @@ int main(int argc, char *argv[])
     }
 
     // By default, no scaling
-    const scalar scaleFactor = args.lookupOrDefault<scalar>("scale", 1);
+    const scalar scaleFactor = args.opt<scalar>("scale", 1);
 
     // Default to binary output, unless otherwise specified
     const IOstream::streamFormat format =
diff --git a/applications/utilities/mesh/conversion/cfx4ToFoam/cfx4ToFoam.C b/applications/utilities/mesh/conversion/cfx4ToFoam/cfx4ToFoam.C
index dcc5dee8665733d335db31e6fc476f72587c6fb1..4d7939a667ed5d310cef399e08386a7d07b1a2ae 100644
--- a/applications/utilities/mesh/conversion/cfx4ToFoam/cfx4ToFoam.C
+++ b/applications/utilities/mesh/conversion/cfx4ToFoam/cfx4ToFoam.C
@@ -69,7 +69,7 @@ int main(int argc, char *argv[])
          FatalError.exit();
     }
 
-    const scalar scaleFactor = args.lookupOrDefault<scalar>("scale", 1);
+    const scalar scaleFactor = args.opt<scalar>("scale", 1);
 
     #include "createTime.H"
 
diff --git a/applications/utilities/mesh/conversion/fireToFoam/fireToFoam.C b/applications/utilities/mesh/conversion/fireToFoam/fireToFoam.C
index d9186830e80cca29a40c7077fff5406ff9e80ec4..dbd3db74c03e25922955d55316e5af4247efb69e 100644
--- a/applications/utilities/mesh/conversion/fireToFoam/fireToFoam.C
+++ b/applications/utilities/mesh/conversion/fireToFoam/fireToFoam.C
@@ -103,7 +103,7 @@ int main(int argc, char *argv[])
     (
         args[1],
         // Default no scaling
-        args.lookupOrDefault<scalar>("scale", 1)
+        args.opt<scalar>("scale", 1)
     );
 
 
diff --git a/applications/utilities/mesh/conversion/fluentMeshToFoam/fluentMeshToFoam.L b/applications/utilities/mesh/conversion/fluentMeshToFoam/fluentMeshToFoam.L
index 2a81b4c1a8ebb293b9470a84a8ab25d0f6e6f9ee..f248a3771c2aa8329b5a580ca0fa83033639441b 100644
--- a/applications/utilities/mesh/conversion/fluentMeshToFoam/fluentMeshToFoam.L
+++ b/applications/utilities/mesh/conversion/fluentMeshToFoam/fluentMeshToFoam.L
@@ -902,7 +902,7 @@ int main(int argc, char *argv[])
         FatalError.exit();
     }
 
-    const scalar scaleFactor = args.lookupOrDefault<scalar>("scale", 1);
+    const scalar scaleFactor = args.opt<scalar>("scale", 1);
 
     const bool writeSets  = args.found("writeSets");
     const bool writeZones = args.found("writeZones");
diff --git a/applications/utilities/mesh/conversion/foamToStarMesh/foamToStarMesh.C b/applications/utilities/mesh/conversion/foamToStarMesh/foamToStarMesh.C
index 57a53453696065ee923e4d14f0a3c7482bd0615d..181daca7cb3ace0b1ca63ba26780fad57f8dd9fd 100644
--- a/applications/utilities/mesh/conversion/foamToStarMesh/foamToStarMesh.C
+++ b/applications/utilities/mesh/conversion/foamToStarMesh/foamToStarMesh.C
@@ -96,7 +96,7 @@ int main(int argc, char *argv[])
     }
 
     // Default rescale from [m] to [mm]
-    const scalar scaleFactor = args.lookupOrDefault<scalar>("scale", 1000);
+    const scalar scaleFactor = args.opt<scalar>("scale", 1000);
     const bool  writeBndFile = !args.found("noBnd");
 
     #include "createPolyMesh.H"
diff --git a/applications/utilities/mesh/conversion/foamToSurface/foamToSurface.C b/applications/utilities/mesh/conversion/foamToSurface/foamToSurface.C
index eea517725cf6ab9d0d3ea03e6b81ab2b32d12a89..26e404fc11f43bb540f1c3989c1f7a2060f94246 100644
--- a/applications/utilities/mesh/conversion/foamToSurface/foamToSurface.C
+++ b/applications/utilities/mesh/conversion/foamToSurface/foamToSurface.C
@@ -81,8 +81,7 @@ int main(int argc, char *argv[])
 
     fileName exportName = args[1];
 
-    scalar scaleFactor = 0;
-    args.readIfPresent<scalar>("scale", scaleFactor);
+    const scalar scaleFactor = args.opt<scalar>("scale", 0);
     const bool doTriangulate = args.found("tri");
 
     fileName exportBase = exportName.lessExt();
diff --git a/applications/utilities/mesh/conversion/gambitToFoam/gambitToFoam.L b/applications/utilities/mesh/conversion/gambitToFoam/gambitToFoam.L
index c51a01ab8060017e624dfd5427105cf7376c7aaa..e1493c8c377514e283775b3c8694234c62d87ef7 100644
--- a/applications/utilities/mesh/conversion/gambitToFoam/gambitToFoam.L
+++ b/applications/utilities/mesh/conversion/gambitToFoam/gambitToFoam.L
@@ -646,7 +646,7 @@ int main(int argc, char *argv[])
          FatalError.exit();
     }
 
-    const scalar scaleFactor = args.lookupOrDefault<scalar>("scale", 1);
+    const scalar scaleFactor = args.opt<scalar>("scale", 1);
 
     #include "createTime.H"
 
diff --git a/applications/utilities/mesh/conversion/gmshToFoam/gmshToFoam.C b/applications/utilities/mesh/conversion/gmshToFoam/gmshToFoam.C
index acafed87c55a9a30b0f6977d2a3c6d629130d035..b91672b16234beac9995192da6e7204c7055ae41 100644
--- a/applications/utilities/mesh/conversion/gmshToFoam/gmshToFoam.C
+++ b/applications/utilities/mesh/conversion/gmshToFoam/gmshToFoam.C
@@ -784,16 +784,11 @@ int main(int argc, char *argv[])
     #include "setRootCase.H"
     #include "createTime.H"
 
-    Foam::word regionName;
+    word regionName = polyMesh::defaultRegion;
 
     if (args.readIfPresent("region", regionName))
     {
-        Foam::Info
-            << "Creating polyMesh for region " << regionName << endl;
-    }
-    else
-    {
-        regionName = Foam::polyMesh::defaultRegion;
+        Info<< "Creating polyMesh for region " << regionName << endl;
     }
 
     const bool keepOrientation = args.found("keepOrientation");
diff --git a/applications/utilities/mesh/conversion/kivaToFoam/kivaToFoam.C b/applications/utilities/mesh/conversion/kivaToFoam/kivaToFoam.C
index 8f64f5e616e6fd73ef6d1d6616192aae6ed4117c..85d8a99b2e4f8e52d541fcd22fd9945473d3cd41 100644
--- a/applications/utilities/mesh/conversion/kivaToFoam/kivaToFoam.C
+++ b/applications/utilities/mesh/conversion/kivaToFoam/kivaToFoam.C
@@ -85,8 +85,7 @@ int main(int argc, char *argv[])
     #include "setRootCase.H"
     #include "createTime.H"
 
-    const fileName kivaFileName =
-        args.lookupOrDefault<fileName>("file", "otape17");
+    const fileName kivaFileName = args.opt<fileName>("file", "otape17");
 
     kivaVersions kivaVersion = kiva3v;
     if (args.found("version"))
@@ -112,8 +111,7 @@ int main(int argc, char *argv[])
         }
     }
 
-    scalar zHeadMin = -GREAT;
-    args.readIfPresent("zHeadMin", zHeadMin);
+    const scalar zHeadMin = args.opt<scalar>("zHeadMin", -GREAT);
 
     #include "readKivaGrid.H"
 
diff --git a/applications/utilities/mesh/conversion/plot3dToFoam/plot3dToFoam.C b/applications/utilities/mesh/conversion/plot3dToFoam/plot3dToFoam.C
index 69c00af00a88bb4cbc69feb684ac13c5872f03e6..d0254c0cea4afce1956ff9a8b32f84ff5e8285e4 100644
--- a/applications/utilities/mesh/conversion/plot3dToFoam/plot3dToFoam.C
+++ b/applications/utilities/mesh/conversion/plot3dToFoam/plot3dToFoam.C
@@ -94,7 +94,7 @@ int main(int argc, char *argv[])
          FatalError.exit();
     }
 
-    const scalar scaleFactor = args.lookupOrDefault<scalar>("scale", 1);
+    const scalar scaleFactor = args.opt<scalar>("scale", 1);
 
     const bool readBlank = !args.found("noBlank");
     const bool singleBlock = args.found("singleBlock");
diff --git a/applications/utilities/mesh/conversion/star4ToFoam/star4ToFoam.C b/applications/utilities/mesh/conversion/star4ToFoam/star4ToFoam.C
index ae79053150a8d4842acfead665433169299d42ba..e7b21dd1ee997d7ec5a65f6fb4b8cd6ad7378010 100644
--- a/applications/utilities/mesh/conversion/star4ToFoam/star4ToFoam.C
+++ b/applications/utilities/mesh/conversion/star4ToFoam/star4ToFoam.C
@@ -113,7 +113,7 @@ int main(int argc, char *argv[])
         prefix,
         runTime,
         // Default rescale from [mm] to [m]
-        args.lookupOrDefault<scalar>("scale", 0.001),
+        args.opt<scalar>("scale", 0.001),
         args.found("solids")
     );
 
diff --git a/applications/utilities/mesh/generation/blockMesh/blockMesh.C b/applications/utilities/mesh/generation/blockMesh/blockMesh.C
index e4cb0fad35cb887f7eb464d44426e03efbabd77b..d853528b5ef3f38fe72cb5ebea951b0122af551c 100644
--- a/applications/utilities/mesh/generation/blockMesh/blockMesh.C
+++ b/applications/utilities/mesh/generation/blockMesh/blockMesh.C
@@ -139,11 +139,11 @@ int main(int argc, char *argv[])
     #include "setRootCase.H"
     #include "createTime.H"
 
-    word regionName;
+    word regionName = polyMesh::defaultRegion;
     word regionPath;
 
     // Check if the region is specified otherwise mesh the default region
-    if (args.readIfPresent("region", regionName, polyMesh::defaultRegion))
+    if (args.readIfPresent("region", regionName))
     {
         Info<< nl << "Generating mesh for region " << regionName << endl;
         regionPath = regionName;
diff --git a/applications/utilities/mesh/generation/foamyMesh/foamyHexMesh/foamyHexMesh.C b/applications/utilities/mesh/generation/foamyMesh/foamyHexMesh/foamyHexMesh.C
index 3c2a8be40a8f9cca1d34c47239822c3eb3c89907..76e378ce0fc1557c7ed7b7efb2b23247c90d928f 100644
--- a/applications/utilities/mesh/generation/foamyMesh/foamyHexMesh/foamyHexMesh.C
+++ b/applications/utilities/mesh/generation/foamyMesh/foamyHexMesh/foamyHexMesh.C
@@ -70,8 +70,8 @@ int main(int argc, char *argv[])
     const bool conformationOnly = args.found("conformationOnly");
 
     // Allow override of decomposeParDict location
-    fileName decompDictFile;
-    args.readIfPresent("decomposeParDict", decompDictFile);
+    const fileName decompDictFile =
+        args.opt<fileName>("decomposeParDict", "");
 
     IOdictionary foamyHexMeshDict
     (
diff --git a/applications/utilities/mesh/generation/foamyMesh/foamyHexMeshBackgroundMesh/foamyHexMeshBackgroundMesh.C b/applications/utilities/mesh/generation/foamyMesh/foamyHexMeshBackgroundMesh/foamyHexMeshBackgroundMesh.C
index 92b465c6195f0f0ed0f6b598a979021b44ba6d3c..ffdfd1341147bf202cb62e43d2f6ad5d635b12a2 100644
--- a/applications/utilities/mesh/generation/foamyMesh/foamyHexMeshBackgroundMesh/foamyHexMeshBackgroundMesh.C
+++ b/applications/utilities/mesh/generation/foamyMesh/foamyHexMeshBackgroundMesh/foamyHexMeshBackgroundMesh.C
@@ -61,8 +61,7 @@ scalar getMergeDistance
     const boundBox& bb
 )
 {
-    scalar mergeTol = defaultMergeTol;
-    args.readIfPresent("mergeTol", mergeTol);
+    const scalar mergeTol = args.opt<scalar>("mergeTol", defaultMergeTol);
 
     scalar writeTol =
         Foam::pow(scalar(10), -scalar(IOstream::defaultPrecision()));
@@ -519,8 +518,8 @@ int main(int argc, char *argv[])
         printMeshData(mesh);
 
         // Allow override of decomposeParDict location
-        fileName decompDictFile;
-        args.readIfPresent("decomposeParDict", decompDictFile);
+        const fileName decompDictFile =
+            args.opt<fileName>("decomposeParDict", "");
 
         labelList decomp = decompositionModel::New
         (
diff --git a/applications/utilities/mesh/generation/snappyHexMesh/snappyHexMesh.C b/applications/utilities/mesh/generation/snappyHexMesh/snappyHexMesh.C
index 60ba3f5463aa4dca2031d8ec8dd008d06e4ba658..0656083505dfe8befc2b81dc8c149d4dad74a404 100644
--- a/applications/utilities/mesh/generation/snappyHexMesh/snappyHexMesh.C
+++ b/applications/utilities/mesh/generation/snappyHexMesh/snappyHexMesh.C
@@ -823,7 +823,7 @@ int main(int argc, char *argv[])
                     IOobject::MUST_READ,
                     IOobject::NO_WRITE
                 ),
-                args.lookupOrDefault<fileName>("decomposeParDict", "")
+                args.opt<fileName>("decomposeParDict", "")
             )
         );
 
@@ -1700,7 +1700,7 @@ int main(int argc, char *argv[])
 
         fileName outFileName
         (
-            args.lookupOrDefault<fileName>
+            args.opt<fileName>
             (
                 "outFile",
                 "constant/triSurface/simplifiedSurface.stl"
diff --git a/applications/utilities/mesh/manipulation/checkMesh/checkMesh.C b/applications/utilities/mesh/manipulation/checkMesh/checkMesh.C
index c86db130f2c0aaec97516bf1891d24341566fb03..4b68609de6eac7cfe37b30cdbf39c8e0e5768a65 100644
--- a/applications/utilities/mesh/manipulation/checkMesh/checkMesh.C
+++ b/applications/utilities/mesh/manipulation/checkMesh/checkMesh.C
@@ -136,8 +136,9 @@ int main(int argc, char *argv[])
     const bool allTopology = args.found("allTopology");
     const bool meshQuality = args.found("meshQuality");
 
-    word surfaceFormat;
-    const bool writeSets = args.readIfPresent("writeSets", surfaceFormat);
+    const word surfaceFormat = args.opt<word>("writeSets", "");
+    const bool writeSets = surfaceFormat.size();
+
     wordHashSet selectedFields;
     bool writeFields = args.readIfPresent
     (
diff --git a/applications/utilities/mesh/manipulation/createPatch/createPatch.C b/applications/utilities/mesh/manipulation/createPatch/createPatch.C
index d3acb0013daf3fa4aeb5373f52de0ed4428c04c1..d85cf460bdb2415d0922b615afbaf58644e32cc6 100644
--- a/applications/utilities/mesh/manipulation/createPatch/createPatch.C
+++ b/applications/utilities/mesh/manipulation/createPatch/createPatch.C
@@ -531,7 +531,7 @@ int main(int argc, char *argv[])
     #include "createTime.H"
 
     const word meshRegionName =
-        args.lookupOrDefault<word>("region", polyMesh::defaultRegion);
+        args.opt<word>("region", polyMesh::defaultRegion);
 
     const bool overwrite = args.found("overwrite");
 
diff --git a/applications/utilities/mesh/manipulation/mergeMeshes/mergeMeshes.C b/applications/utilities/mesh/manipulation/mergeMeshes/mergeMeshes.C
index 74101860ca84296849a7cfeae8b3d2c88a974a42..eaecaa001e8a044fd36c388dc2d71c673404f537 100644
--- a/applications/utilities/mesh/manipulation/mergeMeshes/mergeMeshes.C
+++ b/applications/utilities/mesh/manipulation/mergeMeshes/mergeMeshes.C
@@ -103,18 +103,10 @@ int main(int argc, char *argv[])
     fileName addCase = args[2];
 
     const word masterRegion =
-        args.lookupOrDefault<word>
-        (
-            "masterRegion",
-            polyMesh::defaultRegion
-        );
+        args.opt<word>("masterRegion", polyMesh::defaultRegion);
 
     const word addRegion =
-        args.lookupOrDefault<word>
-        (
-            "addRegion",
-            polyMesh::defaultRegion
-        );
+        args.opt<word>("addRegion", polyMesh::defaultRegion);
 
     // Since we don't use argList processor directory detection, add it to
     // the casename ourselves so it triggers the logic inside TimePath.
diff --git a/applications/utilities/mesh/manipulation/refineMesh/refineMesh.C b/applications/utilities/mesh/manipulation/refineMesh/refineMesh.C
index ba8d12844e71333c774e663a31abddef608227f8..98f2bebe2ca2f4a492d7c6645e2aea14453ae248 100644
--- a/applications/utilities/mesh/manipulation/refineMesh/refineMesh.C
+++ b/applications/utilities/mesh/manipulation/refineMesh/refineMesh.C
@@ -199,7 +199,7 @@ int main(int argc, char *argv[])
         const word dictName("refineMeshDict");
 
         // Obtain dictPath here for messages
-        fileName dictPath = args.lookupOrDefault<fileName>("dict", "");
+        fileName dictPath = args.opt<fileName>("dict", "");
 
         IOobject dictIO = IOobject::selectIO
         (
diff --git a/applications/utilities/parallelProcessing/decomposePar/decomposePar.C b/applications/utilities/parallelProcessing/decomposePar/decomposePar.C
index beed8776ae2f60532660125636dd9da8bab934df..1d977e806261da0a95c15147933bd513f56e96a5 100644
--- a/applications/utilities/parallelProcessing/decomposePar/decomposePar.C
+++ b/applications/utilities/parallelProcessing/decomposePar/decomposePar.C
@@ -327,8 +327,7 @@ int main(int argc, char *argv[])
 
 
     // Allow override of decomposeParDict location
-    fileName decompDictFile;
-    args.readIfPresent("decomposeParDict", decompDictFile);
+    const fileName decompDictFile = args.opt<fileName>("decomposeParDict", "");
 
     // Get all region names
     wordList regionNames;
@@ -342,8 +341,7 @@ int main(int argc, char *argv[])
     else
     {
         regionNames.resize(1);
-        regionNames.first() =
-            args.lookupOrDefault<word>("region", fvMesh::defaultRegion);
+        regionNames.first() = args.opt<word>("region", fvMesh::defaultRegion);
     }
 
     forAll(regionNames, regioni)
diff --git a/applications/utilities/parallelProcessing/reconstructParMesh/reconstructParMesh.C b/applications/utilities/parallelProcessing/reconstructParMesh/reconstructParMesh.C
index 072535b47fd0723866bd5d6f2d16df40d55ca7ab..be8fff4a00deef871b97fb479547bba8a9e2739e 100644
--- a/applications/utilities/parallelProcessing/reconstructParMesh/reconstructParMesh.C
+++ b/applications/utilities/parallelProcessing/reconstructParMesh/reconstructParMesh.C
@@ -506,8 +506,7 @@ int main(int argc, char *argv[])
         Info<< "Operating on region " << regionName << nl << endl;
     }
 
-    scalar mergeTol = defaultMergeTol;
-    args.readIfPresent("mergeTol", mergeTol);
+    const scalar mergeTol = args.opt<scalar>("mergeTol", defaultMergeTol);
 
     scalar writeTol = Foam::pow(10.0, -scalar(IOstream::defaultPrecision()));
 
diff --git a/applications/utilities/parallelProcessing/redistributePar/redistributePar.C b/applications/utilities/parallelProcessing/redistributePar/redistributePar.C
index 7cd4726305e892a42f7c519ac8c97b0151725034..7e094408ec0a0c037437efd03ba0a469cfd213b7 100644
--- a/applications/utilities/parallelProcessing/redistributePar/redistributePar.C
+++ b/applications/utilities/parallelProcessing/redistributePar/redistributePar.C
@@ -114,8 +114,7 @@ scalar getMergeDistance
     const boundBox& bb
 )
 {
-    scalar mergeTol = defaultMergeTol;
-    args.readIfPresent("mergeTol", mergeTol);
+    const scalar mergeTol = args.opt<scalar>("mergeTol", defaultMergeTol);
 
     const scalar writeTol =
         Foam::pow(scalar(10), -scalar(IOstream::defaultPrecision()));
@@ -136,7 +135,7 @@ scalar getMergeDistance
             << exit(FatalError);
     }
 
-    scalar mergeDist = mergeTol * bb.mag();
+    const scalar mergeDist = mergeTol * bb.mag();
 
     Info<< "Overall meshes bounding box : " << bb << nl
         << "Relative tolerance          : " << mergeTol << nl
@@ -2497,8 +2496,7 @@ int main(int argc, char *argv[])
 
 
     // Allow override of decomposeParDict location
-    fileName decompDictFile;
-    args.readIfPresent("decomposeParDict", decompDictFile);
+    const fileName decompDictFile = args.opt<fileName>("decomposeParDict", "");
 
     // Get all region names
     wordList regionNames;
@@ -2512,8 +2510,7 @@ int main(int argc, char *argv[])
     else
     {
         regionNames.resize(1);
-        regionNames.first() =
-            args.lookupOrDefault<word>("region", fvMesh::defaultRegion);
+        regionNames.first() = args.opt<word>("region", fvMesh::defaultRegion);
     }
 
 
diff --git a/applications/utilities/postProcessing/dataConversion/foamToEnsight/foamToEnsight.C b/applications/utilities/postProcessing/dataConversion/foamToEnsight/foamToEnsight.C
index afc95c7f533ec7bffdeba7d46c2b145d95f4873e..c842f24c93f67a698887aa696b5b4c25f69200d9 100644
--- a/applications/utilities/postProcessing/dataConversion/foamToEnsight/foamToEnsight.C
+++ b/applications/utilities/postProcessing/dataConversion/foamToEnsight/foamToEnsight.C
@@ -237,7 +237,7 @@ int main(int argc, char *argv[])
     ensightCase::options caseOpts(format);
 
     caseOpts.nodeValues(args.found("nodeValues"));
-    caseOpts.width(args.lookupOrDefault<label>("width", 8));
+    caseOpts.width(args.opt<label>("width", 8));
     caseOpts.overwrite(true); // remove existing output directory
 
     // Can also have separate directory for lagrangian
@@ -247,7 +247,7 @@ int main(int argc, char *argv[])
     // Define sub-directory name to use for EnSight data.
     // The path to the ensight directory is at case level only
     // - For parallel cases, data only written from master
-    fileName outputDir = args.lookupOrDefault<word>("name", "EnSight");
+    fileName outputDir = args.opt<word>("name", "EnSight");
     if (!outputDir.isAbsolute())
     {
         outputDir = args.globalPath()/outputDir;
diff --git a/applications/utilities/postProcessing/dataConversion/foamToEnsightParts/foamToEnsightParts.C b/applications/utilities/postProcessing/dataConversion/foamToEnsightParts/foamToEnsightParts.C
index 19e1e7ab2392ff50ebf2963f70a64b989a016e4f..4aa572c43646006d4f0c9f6c099aec7bfb027076 100644
--- a/applications/utilities/postProcessing/dataConversion/foamToEnsightParts/foamToEnsightParts.C
+++ b/applications/utilities/postProcessing/dataConversion/foamToEnsightParts/foamToEnsightParts.C
@@ -203,7 +203,7 @@ int main(int argc, char *argv[])
     //
     ensightCase::options caseOpts(format);
 
-    caseOpts.width(args.lookupOrDefault<label>("width", 8));
+    caseOpts.width(args.opt<label>("width", 8));
     caseOpts.overwrite(false); // leave existing output directory
 
     // Can also have separate directory for lagrangian
@@ -212,7 +212,7 @@ int main(int argc, char *argv[])
     // Define sub-directory name to use for EnSight data.
     // The path to the ensight directory is at case level only
     // - For parallel cases, data only written from master
-    fileName ensightDir = args.lookupOrDefault<word>("name", "Ensight");
+    fileName ensightDir = args.opt<word>("name", "Ensight");
     if (!ensightDir.isAbsolute())
     {
         ensightDir = args.globalPath()/ensightDir;
diff --git a/applications/utilities/postProcessing/dataConversion/foamToVTK/foamToVTK.C b/applications/utilities/postProcessing/dataConversion/foamToVTK/foamToVTK.C
index f79efb579a18af6cd3f0ec18edbc345fa3ac4953..3d405cdf3e41256f3fea3ee6fd90dc57dbae1c51 100644
--- a/applications/utilities/postProcessing/dataConversion/foamToVTK/foamToVTK.C
+++ b/applications/utilities/postProcessing/dataConversion/foamToVTK/foamToVTK.C
@@ -564,8 +564,7 @@ int main(int argc, char *argv[])
     else
     {
         regionNames.resize(1);
-        regionNames.first() =
-            args.lookupOrDefault<word>("region", fvMesh::defaultRegion);
+        regionNames.first() = args.opt<word>("region", fvMesh::defaultRegion);
     }
 
 
@@ -627,7 +626,7 @@ int main(int argc, char *argv[])
     // Directory management
 
     // Sub-directory for output
-    const word vtkDirName = args.lookupOrDefault<word>("name", "VTK");
+    const word vtkDirName = args.opt<word>("name", "VTK");
 
     const fileName outputDir(runTime.globalPath()/vtkDirName);
 
diff --git a/applications/utilities/postProcessing/lumped/lumpedPointMovement/lumpedPointMovement.C b/applications/utilities/postProcessing/lumped/lumpedPointMovement/lumpedPointMovement.C
index 622184450457090fc96d342abf752af3a588360f..9d94cf79e783d916518da62bc0ef88f8fd87c5b3 100644
--- a/applications/utilities/postProcessing/lumped/lumpedPointMovement/lumpedPointMovement.C
+++ b/applications/utilities/postProcessing/lumped/lumpedPointMovement/lumpedPointMovement.C
@@ -91,10 +91,10 @@ int main(int argc, char *argv[])
 
     #include "setRootCase.H"
 
-    const label maxOut = Foam::max(0, args.lookupOrDefault<label>("max", 0));
-    const label span   = Foam::max(1, args.lookupOrDefault<label>("span", 1));
+    const label maxOut = Foam::max(0, args.opt<label>("max", 0));
+    const label span   = Foam::max(1, args.opt<label>("span", 1));
 
-    const scalar relax = args.lookupOrDefault<scalar>("scale", 1);
+    const scalar relax = args.opt<scalar>("scale", 1);
 
     const bool slave = args.found("slave");
     const bool removeLock = args.found("removeLock");
diff --git a/applications/utilities/postProcessing/miscellaneous/temporalInterpolate/temporalInterpolate.C b/applications/utilities/postProcessing/miscellaneous/temporalInterpolate/temporalInterpolate.C
index 3ddf0f82524e0c3a4c3bb73168dc992dd7355abc..f40dc5bf8b528ec2a566f5b72a5e8e9ea0d5c974 100644
--- a/applications/utilities/postProcessing/miscellaneous/temporalInterpolate/temporalInterpolate.C
+++ b/applications/utilities/postProcessing/miscellaneous/temporalInterpolate/temporalInterpolate.C
@@ -234,16 +234,13 @@ int main(int argc, char *argv[])
     }
 
 
-    int divisions = 1;
-    args.readIfPresent("divisions", divisions);
+    const int divisions = args.opt<int>("divisions", 1);
     Info<< "Using " << divisions << " per time interval" << nl << endl;
 
 
-    const word interpolationType = args.lookupOrDefault<word>
-    (
-        "interpolationType",
-        "linear"
-    );
+    const word interpolationType =
+        args.opt<word>("interpolationType", "linear");
+
     Info<< "Using interpolation " << interpolationType << nl << endl;
 
 
diff --git a/applications/utilities/preProcessing/createExternalCoupledPatchGeometry/createExternalCoupledPatchGeometry.C b/applications/utilities/preProcessing/createExternalCoupledPatchGeometry/createExternalCoupledPatchGeometry.C
index b318fedb94794e70b998d7d76746c4eb02b4b16c..2312e19d5f1449828c9091ffcef9d1490a54b12a 100644
--- a/applications/utilities/preProcessing/createExternalCoupledPatchGeometry/createExternalCoupledPatchGeometry.C
+++ b/applications/utilities/preProcessing/createExternalCoupledPatchGeometry/createExternalCoupledPatchGeometry.C
@@ -87,7 +87,7 @@ int main(int argc, char *argv[])
     #include "createTime.H"
 
     wordList regionNames(1, fvMesh::defaultRegion);
-    if (!args.readIfPresent("region", regionNames[0]))
+    if (!args.readIfPresent("region", regionNames.first()))
     {
         args.readIfPresent("regions", regionNames);
     }
diff --git a/applications/utilities/preProcessing/foamUpgradeCyclics/foamUpgradeCyclics.C b/applications/utilities/preProcessing/foamUpgradeCyclics/foamUpgradeCyclics.C
index 320557b7d849e9dc3771a8fec8d3bb11f718f417..7a6455a772404d6ca27610ef6ed5861974f6b7da 100644
--- a/applications/utilities/preProcessing/foamUpgradeCyclics/foamUpgradeCyclics.C
+++ b/applications/utilities/preProcessing/foamUpgradeCyclics/foamUpgradeCyclics.C
@@ -431,11 +431,9 @@ int main(int argc, char *argv[])
     }
     const bool enableEntries = args.found("enableFunctionEntries");
 
+    const word regionName = args.opt<word>("region", polyMesh::defaultRegion);
 
-    Foam::word regionName = polyMesh::defaultRegion;
-    args.readIfPresent("region", regionName);
-
-    fileName regionPrefix = "";
+    fileName regionPrefix;
     if (regionName != polyMesh::defaultRegion)
     {
         regionPrefix = regionName;
diff --git a/applications/utilities/preProcessing/mapFields/mapFields.C b/applications/utilities/preProcessing/mapFields/mapFields.C
index 649e908d6a83138602fccf85ff2f9b92b903b56f..203134c8942559664e6481732c9352ccd44dc504 100644
--- a/applications/utilities/preProcessing/mapFields/mapFields.C
+++ b/applications/utilities/preProcessing/mapFields/mapFields.C
@@ -66,7 +66,7 @@ int readNumProcs
                     IOobject::NO_WRITE,
                     false // do not register
                 ),
-                args.lookupOrDefault<fileName>(optionName, "")
+                args.opt<fileName>(optionName, "")
             )
         )
     );
diff --git a/applications/utilities/surface/surfaceAdd/surfaceAdd.C b/applications/utilities/surface/surfaceAdd/surfaceAdd.C
index c63d01cbbc231c3609617c7d809b8c07482deff3..6477e44f9cd6ba2468dd0c9f870c0a137486eedd 100644
--- a/applications/utilities/surface/surfaceAdd/surfaceAdd.C
+++ b/applications/utilities/surface/surfaceAdd/surfaceAdd.C
@@ -87,7 +87,7 @@ int main(int argc, char *argv[])
     const bool addPoint     = args.found("points");
     const bool mergeRegions = args.found("mergeRegions");
 
-    const scalar scaleFactor = args.lookupOrDefault<scalar>("scale", -1);
+    const scalar scaleFactor = args.opt<scalar>("scale", -1);
 
     if (addPoint)
     {
diff --git a/applications/utilities/surface/surfaceBooleanFeatures/surfaceBooleanFeatures.C b/applications/utilities/surface/surfaceBooleanFeatures/surfaceBooleanFeatures.C
index c958d686fdc42d2e001842befdf953e264c088d0..808f552ff45b461c33e4475e18b82fd91b780542 100644
--- a/applications/utilities/surface/surfaceBooleanFeatures/surfaceBooleanFeatures.C
+++ b/applications/utilities/surface/surfaceBooleanFeatures/surfaceBooleanFeatures.C
@@ -1593,7 +1593,7 @@ int main(int argc, char *argv[])
 
 
     // Scale factor for both surfaces:
-    const scalar scaleFactor = args.lookupOrDefault<scalar>("scale", -1);
+    const scalar scaleFactor = args.opt<scalar>("scale", -1);
 
     const word surf1Name(args[2]);
     Info<< "Reading surface " << surf1Name << endl;
diff --git a/applications/utilities/surface/surfaceCheck/surfaceCheck.C b/applications/utilities/surface/surfaceCheck/surfaceCheck.C
index af3fa2c6ce22fbff9b0644a647695e73bc99fba5..a131d11c4c8571db8bffd0f5f715779171935ba3 100644
--- a/applications/utilities/surface/surfaceCheck/surfaceCheck.C
+++ b/applications/utilities/surface/surfaceCheck/surfaceCheck.C
@@ -366,9 +366,9 @@ int main(int argc, char *argv[])
     const fileName surfFileName = args[1];
     const bool checkSelfIntersect = args.found("checkSelfIntersection");
     const bool splitNonManifold = args.found("splitNonManifold");
-    const label outputThreshold = args.lookupOrDefault("outputThreshold", 10);
-    word surfaceFormat;
-    const bool writeSets = args.readIfPresent("writeSets", surfaceFormat);
+    const label outputThreshold = args.opt<label>("outputThreshold", 10);
+    const word surfaceFormat = args.opt<word>("writeSets", "");
+    const bool writeSets = !surfaceFormat.empty();
 
     autoPtr<surfaceWriter> surfWriter;
     word edgeFormat;
diff --git a/applications/utilities/surface/surfaceClean/surfaceClean.C b/applications/utilities/surface/surfaceClean/surfaceClean.C
index c4cca5fb6f80e03acb7e73dc182181f0602423fa..39249b3b0200b2c9129f8386c184bda2ac269636 100644
--- a/applications/utilities/surface/surfaceClean/surfaceClean.C
+++ b/applications/utilities/surface/surfaceClean/surfaceClean.C
@@ -94,7 +94,7 @@ int main(int argc, char *argv[])
     triSurface surf
     (
         inFileName,
-        args.lookupOrDefault<scalar>("scale", -1)
+        args.opt<scalar>("scale", -1)
     );
     surf.writeStats(Info);
 
diff --git a/applications/utilities/surface/surfaceCoarsen/surfaceCoarsen.C b/applications/utilities/surface/surfaceCoarsen/surfaceCoarsen.C
index 45dc24cfab4193b9f09284d23128ca0e39ce0614..3fbc14c865f8f6c1dba80aa3668297b893a180df 100644
--- a/applications/utilities/surface/surfaceCoarsen/surfaceCoarsen.C
+++ b/applications/utilities/surface/surfaceCoarsen/surfaceCoarsen.C
@@ -102,7 +102,7 @@ int main(int argc, char *argv[])
             << exit(FatalError);
     }
 
-    const scalar scaleFactor = args.lookupOrDefault<scalar>("scale", -1);
+    const scalar scaleFactor = args.opt<scalar>("scale", -1);
 
     Info<< "Input surface   :" << inFileName << nl
         << "Scaling factor  :" << scaleFactor << nl
diff --git a/applications/utilities/surface/surfaceConvert/surfaceConvert.C b/applications/utilities/surface/surfaceConvert/surfaceConvert.C
index c7dfe7e93b751f53ca8cf15aa9976a4a4378e8e5..001f163fa7af3a6b2ade95d4feb90206b78e06c0 100644
--- a/applications/utilities/surface/surfaceConvert/surfaceConvert.C
+++ b/applications/utilities/surface/surfaceConvert/surfaceConvert.C
@@ -125,7 +125,7 @@ int main(int argc, char *argv[])
         return 1;
     }
 
-    const scalar scaleFactor = args.lookupOrDefault<scalar>("scale", -1);
+    const scalar scaleFactor = args.opt<scalar>("scale", -1);
 
     Info<< "Reading : " << importName << endl;
     triSurface surf(importName, scaleFactor);
diff --git a/applications/utilities/surface/surfaceFind/surfaceFind.C b/applications/utilities/surface/surfaceFind/surfaceFind.C
index 0a48bcf707006f953f271617f7a8fea439b1ca60..489dd652a93199a3ba06b52019e8e7f40044aa8c 100644
--- a/applications/utilities/surface/surfaceFind/surfaceFind.C
+++ b/applications/utilities/surface/surfaceFind/surfaceFind.C
@@ -61,9 +61,9 @@ int main(int argc, char *argv[])
 
     const point samplePt
     (
-        args.lookupOrDefault<scalar>("x", 0),
-        args.lookupOrDefault<scalar>("y", 0),
-        args.lookupOrDefault<scalar>("z", 0)
+        args.opt<scalar>("x", 0),
+        args.opt<scalar>("y", 0),
+        args.opt<scalar>("z", 0)
     );
     Info<< "Looking for nearest face/vertex to " << samplePt << endl;
 
diff --git a/applications/utilities/surface/surfaceInertia/surfaceInertia.C b/applications/utilities/surface/surfaceInertia/surfaceInertia.C
index cb1d5a583d7112f5d2e16b3cefe9afc287a551a1..39c24ff7599f76ae214575782718c11595e0497e 100644
--- a/applications/utilities/surface/surfaceInertia/surfaceInertia.C
+++ b/applications/utilities/surface/surfaceInertia/surfaceInertia.C
@@ -86,7 +86,7 @@ int main(int argc, char *argv[])
     argList args(argc, argv);
 
     const fileName surfFileName = args[1];
-    const scalar density = args.lookupOrDefault<scalar>("density", 1);
+    const scalar density = args.opt<scalar>("density", 1);
 
     vector refPt = Zero;
     bool calcAroundRefPt = args.readIfPresent("referencePoint", refPt);
diff --git a/applications/utilities/surface/surfaceInflate/surfaceInflate.C b/applications/utilities/surface/surfaceInflate/surfaceInflate.C
index 0b1cfff730ad3cffb3629d674bb8ff714d7b5216..1036ff46c5958a54ff709582538e99d2bf6c3cd0 100644
--- a/applications/utilities/surface/surfaceInflate/surfaceInflate.C
+++ b/applications/utilities/surface/surfaceInflate/surfaceInflate.C
@@ -610,12 +610,8 @@ int main(int argc, char *argv[])
     const scalar distance(args.get<scalar>(2));
     const scalar extendFactor(args.get<scalar>(3));
     const bool checkSelfIntersect = args.found("checkSelfIntersection");
-    const label nSmooth = args.lookupOrDefault("nSmooth", 10);
-    const scalar featureAngle = args.lookupOrDefault<scalar>
-    (
-        "featureAngle",
-        180
-    );
+    const label nSmooth = args.opt<label>("nSmooth", 10);
+    const scalar featureAngle = args.opt<scalar>("featureAngle", 180);
     const bool debug = args.found("debug");
 
 
diff --git a/applications/utilities/surface/surfaceMeshConvert/surfaceMeshConvert.C b/applications/utilities/surface/surfaceMeshConvert/surfaceMeshConvert.C
index 8c16582efeb6168a1e88faa890079bd783fdf8dc..b66a397f2bbbfe40ec6d8a839fe4f7b3dc2e1cfa 100644
--- a/applications/utilities/surface/surfaceMeshConvert/surfaceMeshConvert.C
+++ b/applications/utilities/surface/surfaceMeshConvert/surfaceMeshConvert.C
@@ -164,7 +164,7 @@ int main(int argc, char *argv[])
                 IOobject::NO_WRITE,
                 false
             ),
-            args.lookupOrDefault<fileName>("dict", "")
+            args.opt<fileName>("dict", "")
         );
 
         if (!ioCsys.typeHeaderOk<coordinateSystems>(false))
diff --git a/applications/utilities/surface/surfaceMeshExport/surfaceMeshExport.C b/applications/utilities/surface/surfaceMeshExport/surfaceMeshExport.C
index 378c67ab98fdc52b58bc756055346a11e102565a..8498eb124e0f4f8c81406c56f12a3a53dd4e517f 100644
--- a/applications/utilities/surface/surfaceMeshExport/surfaceMeshExport.C
+++ b/applications/utilities/surface/surfaceMeshExport/surfaceMeshExport.C
@@ -127,7 +127,7 @@ int main(int argc, char *argv[])
     Time runTime(args.rootPath(), args.caseName());
 
     const fileName exportName = args[1];
-    const word importName = args.lookupOrDefault<word>("name", "default");
+    const word importName = args.opt<word>("name", "default");
 
     // check that writing is supported
     if (!MeshedSurface<face>::canWriteType(exportName.ext(), true))
@@ -153,7 +153,7 @@ int main(int argc, char *argv[])
                 IOobject::NO_WRITE,
                 false
             ),
-            args.lookupOrDefault<fileName>("dict", "")
+            args.opt<fileName>("dict", "")
         );
 
         if (!ioCsys.typeHeaderOk<coordinateSystems>(false))
diff --git a/applications/utilities/surface/surfaceMeshImport/surfaceMeshImport.C b/applications/utilities/surface/surfaceMeshImport/surfaceMeshImport.C
index 58522810308a22dfd30216d6f9ce0c337a205b7e..eb8cb700a0396b97d08092c3c57509660012ce7b 100644
--- a/applications/utilities/surface/surfaceMeshImport/surfaceMeshImport.C
+++ b/applications/utilities/surface/surfaceMeshImport/surfaceMeshImport.C
@@ -140,7 +140,7 @@ int main(int argc, char *argv[])
 
 
     const fileName importName = args[1];
-    const word exportName = args.lookupOrDefault<word>("name", "default");
+    const word exportName = args.opt<word>("name", "default");
 
     // check that reading is supported
     if (!MeshedSurface<face>::canRead(importName, true))
@@ -166,7 +166,7 @@ int main(int argc, char *argv[])
                 IOobject::NO_WRITE,
                 false
             ),
-            args.lookupOrDefault<fileName>("dict", "")
+            args.opt<fileName>("dict", "")
         );
 
         if (!ioCsys.typeHeaderOk<coordinateSystems>(false))
diff --git a/applications/utilities/surface/surfaceMeshInfo/surfaceMeshInfo.C b/applications/utilities/surface/surfaceMeshInfo/surfaceMeshInfo.C
index 8ec2662ad35568aa63661f91c85ad0724df528aa..9a99725122292df10b8a08d1f3f6979be4c7b6a1 100644
--- a/applications/utilities/surface/surfaceMeshInfo/surfaceMeshInfo.C
+++ b/applications/utilities/surface/surfaceMeshInfo/surfaceMeshInfo.C
@@ -119,7 +119,7 @@ int main(int argc, char *argv[])
     // use UnsortedMeshedSurface, not MeshedSurface to maintain ordering
     UnsortedMeshedSurface<face> surf(importName);
 
-    const scalar scaling = args.lookupOrDefault<scalar>("scale", -1);
+    const scalar scaling = args.opt<scalar>("scale", -1);
     if (scaling > 0)
     {
         DetailInfo << " -scale " << scaling << nl;
diff --git a/applications/utilities/surface/surfaceOrient/surfaceOrient.C b/applications/utilities/surface/surfaceOrient/surfaceOrient.C
index edb096802d676ef5a032ba2aad7650aae7868ae5..8d3127e77d26ab3fb9f69770d68e6ccca9cfed7e 100644
--- a/applications/utilities/surface/surfaceOrient/surfaceOrient.C
+++ b/applications/utilities/surface/surfaceOrient/surfaceOrient.C
@@ -93,7 +93,7 @@ int main(int argc, char *argv[])
         Info<< "outside" << endl;
     }
 
-    const scalar scaling = args.lookupOrDefault<scalar>("scale", -1);
+    const scalar scaling = args.opt<scalar>("scale", -1);
     if (scaling > 0)
     {
         Info<< "Input scaling: " << scaling << nl;
diff --git a/applications/utilities/surface/surfacePointMerge/surfacePointMerge.C b/applications/utilities/surface/surfacePointMerge/surfacePointMerge.C
index 5e7dfdd87e1ddb851cb6b3a22a7c234bcb619311..8e552cc73e0aebec21745d58b1af433e988e5502 100644
--- a/applications/utilities/surface/surfacePointMerge/surfacePointMerge.C
+++ b/applications/utilities/surface/surfacePointMerge/surfacePointMerge.C
@@ -68,7 +68,7 @@ int main(int argc, char *argv[])
     const scalar   mergeTol = args.get<scalar>(2);
     const fileName outFileName = args[3];
 
-    const scalar scaling = args.lookupOrDefault<scalar>("scale", -1);
+    const scalar scaling = args.opt<scalar>("scale", -1);
 
     Info<< "Reading surface from " << surfFileName << " ..." << nl
         << "Merging points within " << mergeTol << " metre." << nl;
diff --git a/applications/utilities/surface/surfaceRedistributePar/surfaceRedistributePar.C b/applications/utilities/surface/surfaceRedistributePar/surfaceRedistributePar.C
index 2853f651a30ecf183d7c7e907b1adc3a72193594..5890dbbcc4a7b964efa20bc4ff5d8736769c38ae 100644
--- a/applications/utilities/surface/surfaceRedistributePar/surfaceRedistributePar.C
+++ b/applications/utilities/surface/surfaceRedistributePar/surfaceRedistributePar.C
@@ -174,7 +174,7 @@ int main(int argc, char *argv[])
                     IOobject::MUST_READ,
                     IOobject::NO_WRITE
                 ),
-                args.lookupOrDefault<fileName>("decomposeParDict", "")
+                args.opt<fileName>("decomposeParDict", "")
             )
         );
 
diff --git a/applications/utilities/surface/surfaceToPatch/surfaceToPatch.C b/applications/utilities/surface/surfaceToPatch/surfaceToPatch.C
index fb9ca82c0199754a1d657ad3e039aacb8b4eb3bb..58aecc618053b0731d1da27f35b092d3207a949e 100644
--- a/applications/utilities/surface/surfaceToPatch/surfaceToPatch.C
+++ b/applications/utilities/surface/surfaceToPatch/surfaceToPatch.C
@@ -211,7 +211,7 @@ int main(int argc, char *argv[])
             << " triangle ..." << endl;
     }
 
-    const scalar searchTol = args.lookupOrDefault("tol", 1e-3);
+    const scalar searchTol = args.opt<scalar>("tol", 1e-3);
 
     // Get search box. Anything not within this box will not be considered.
     const boundBox& meshBb = mesh.bounds();
diff --git a/src/OpenFOAM/db/functionObjects/functionObjectList/functionObjectList.C b/src/OpenFOAM/db/functionObjects/functionObjectList/functionObjectList.C
index 1410bdad006bbab12885622942ebdde107b93234..baafa87b74c654ad5e6c243bcc8f79a870989fce 100644
--- a/src/OpenFOAM/db/functionObjects/functionObjectList/functionObjectList.C
+++ b/src/OpenFOAM/db/functionObjects/functionObjectList/functionObjectList.C
@@ -385,8 +385,7 @@ Foam::autoPtr<Foam::functionObjectList> Foam::functionObjectList::New
 
     dictionary& functionsDict = controlDict.subDict("functions");
 
-    word region;
-    args.readIfPresent("region", region);
+    const word regionName = args.opt<word>("region", "");
 
     bool modifiedControlDict = false;
 
@@ -417,7 +416,7 @@ Foam::autoPtr<Foam::functionObjectList> Foam::functionObjectList::New
             args["func"],
             functionsDict,
             requiredFields,
-            region
+            regionName
         );
     }
 
@@ -434,7 +433,7 @@ Foam::autoPtr<Foam::functionObjectList> Foam::functionObjectList::New
                 funcName,
                 functionsDict,
                 requiredFields,
-                region
+                regionName
             );
         }
     }
diff --git a/src/OpenFOAM/include/setConstantMeshDictionaryIO.H b/src/OpenFOAM/include/setConstantMeshDictionaryIO.H
index 84be1121c2af99d69d73cf8a0ce7df89d3541fb2..4174f54f4fcd4b9475a5eaf7bee1289143d14c9f 100644
--- a/src/OpenFOAM/include/setConstantMeshDictionaryIO.H
+++ b/src/OpenFOAM/include/setConstantMeshDictionaryIO.H
@@ -8,5 +8,5 @@ IOobject dictIO = IOobject::selectIO
         IOobject::MUST_READ_IF_MODIFIED,
         IOobject::NO_WRITE
     ),
-    args.lookupOrDefault<fileName>("dict", "")
+    args.opt<fileName>("dict", "")
 );
diff --git a/src/OpenFOAM/include/setConstantRunTimeDictionaryIO.H b/src/OpenFOAM/include/setConstantRunTimeDictionaryIO.H
index 7333f2b54d3a3a450841aacd02d0cce544e93325..ce1b8dd1dcb9d427361dc7567009630296cbbbed 100644
--- a/src/OpenFOAM/include/setConstantRunTimeDictionaryIO.H
+++ b/src/OpenFOAM/include/setConstantRunTimeDictionaryIO.H
@@ -8,5 +8,5 @@ IOobject dictIO = IOobject::selectIO
         IOobject::MUST_READ_IF_MODIFIED,
         IOobject::NO_WRITE
     ),
-    args.lookupOrDefault<fileName>("dict", "")
+    args.opt<fileName>("dict", "")
 );
diff --git a/src/OpenFOAM/include/setSystemMeshDictionaryIO.H b/src/OpenFOAM/include/setSystemMeshDictionaryIO.H
index 02d264b2d96a7f433b533c729e0024e83522c937..33ea27f46ad8d99e7c7e4946db3e6b81d1cc4b6e 100644
--- a/src/OpenFOAM/include/setSystemMeshDictionaryIO.H
+++ b/src/OpenFOAM/include/setSystemMeshDictionaryIO.H
@@ -8,5 +8,5 @@ IOobject dictIO = IOobject::selectIO
         IOobject::MUST_READ_IF_MODIFIED,
         IOobject::NO_WRITE
     ),
-    args.lookupOrDefault<fileName>("dict", "")
+    args.opt<fileName>("dict", "")
 );
diff --git a/src/OpenFOAM/include/setSystemRunTimeDictionaryIO.H b/src/OpenFOAM/include/setSystemRunTimeDictionaryIO.H
index 98d4f1d551f6def67fd7d6a7357aeadfa86941a9..0be3e435ec75a5280a0d35fc0e75bb8bea049e11 100644
--- a/src/OpenFOAM/include/setSystemRunTimeDictionaryIO.H
+++ b/src/OpenFOAM/include/setSystemRunTimeDictionaryIO.H
@@ -8,5 +8,5 @@ IOobject dictIO = IOobject::selectIO
         IOobject::MUST_READ_IF_MODIFIED,
         IOobject::NO_WRITE
     ),
-    args.lookupOrDefault<fileName>("dict", "")
+    args.opt<fileName>("dict", "")
 );