diff --git a/applications/utilities/finiteArea/makeFaMesh/makeFaMesh.C b/applications/utilities/finiteArea/makeFaMesh/makeFaMesh.C
index 87f803c57b85acf6a9d04e313c9d8f67f7038549..fab99d7f2a21e2789cab37be5b5d01feea75b644 100644
--- a/applications/utilities/finiteArea/makeFaMesh/makeFaMesh.C
+++ b/applications/utilities/finiteArea/makeFaMesh/makeFaMesh.C
@@ -319,9 +319,9 @@ int main(int argc, char *argv[])
         }
     }
 
-    if (args.optionFound("addEmptyPatch"))
+    word emptyPatchName;
+    if (args.optionReadIfPresent("addEmptyPatch", emptyPatchName))
     {
-        word emptyPatchName(args.optionLookup("addEmptyPatch")());
         dictionary emptyPatchDict;
         emptyPatchDict.add("type", "empty");
         emptyPatchDict.add("edgeLabels", labelList());
diff --git a/applications/utilities/preProcessing/changeDictionary/changeDictionary.C b/applications/utilities/preProcessing/changeDictionary/changeDictionary.C
index c6ef4bd6ff984fece6aba079b4848b77f49c1327..52215a5aec9e3b07e66b14195b493e3cdbebd501 100644
--- a/applications/utilities/preProcessing/changeDictionary/changeDictionary.C
+++ b/applications/utilities/preProcessing/changeDictionary/changeDictionary.C
@@ -498,7 +498,7 @@ int main(int argc, char *argv[])
         }
 
 
-        fileName regionPrefix = "";
+        fileName regionPrefix;
         if (regionName != fvMesh::defaultRegion)
         {
             regionPrefix = regionName;
@@ -520,8 +520,7 @@ int main(int argc, char *argv[])
 
         if (args.optionFound("subDict"))
         {
-            word subDictName(args.optionLookup("subDict")());
-            replaceDictsPtr = &dict.subDict(subDictName);
+            replaceDictsPtr = &dict.subDict(args["subDict"]);
         }
 
         const dictionary& replaceDicts = *replaceDictsPtr;
diff --git a/src/OpenFOAM/db/functionObjects/functionObjectList/functionObjectList.C b/src/OpenFOAM/db/functionObjects/functionObjectList/functionObjectList.C
index bb1d7c7e9bfc3df6a2e672e599f595a2e27dbfbd..824f24db01d25c605d5251ed297884cf6a08db85 100644
--- a/src/OpenFOAM/db/functionObjects/functionObjectList/functionObjectList.C
+++ b/src/OpenFOAM/db/functionObjects/functionObjectList/functionObjectList.C
@@ -3,7 +3,7 @@
   \\      /  F ield         | OpenFOAM: The Open Source CFD Toolbox
    \\    /   O peration     |
     \\  /    A nd           | Copyright (C) 2011-2017 OpenFOAM Foundation
-     \\/     M anipulation  | Copyright (C) 2015-2017 OpenCFD Ltd.
+     \\/     M anipulation  | Copyright (C) 2015-2018 OpenCFD Ltd.
 -------------------------------------------------------------------------------
 License
     This file is part of OpenFOAM.
@@ -85,7 +85,7 @@ Foam::functionObject* Foam::functionObjectList::remove
         oldIndex = fnd();
 
         // Retrieve the pointer and remove it from the old list
-        ptr = this->set(oldIndex, 0).ptr();
+        ptr = this->set(oldIndex, nullptr).ptr();
         indices_.erase(fnd);
     }
     else
@@ -106,11 +106,11 @@ void Foam::functionObjectList::listDir
     // Search specified directory for functionObject configuration files
     {
         fileNameList foFiles(fileHandler().readDir(dir));
-        forAll(foFiles, f)
+        for (const fileName& f : foFiles)
         {
-            if (foFiles[f].ext().empty())
+            if (f.ext().empty())
             {
-                foMap.insert(foFiles[f]);
+                foMap.insert(f);
             }
         }
     }
@@ -118,9 +118,9 @@ void Foam::functionObjectList::listDir
     // Recurse into sub-directories
     {
         fileNameList foDirs(fileHandler().readDir(dir, fileName::DIRECTORY));
-        forAll(foDirs, fd)
+        for (const fileName& d : foDirs)
         {
-            listDir(dir/foDirs[fd], foMap);
+            listDir(dir/d, foMap);
         }
     }
 }
@@ -132,9 +132,9 @@ void Foam::functionObjectList::list()
 
     fileNameList etcDirs(findEtcDirs(functionObjectDictPath));
 
-    forAll(etcDirs, ed)
+    for (const fileName& d : etcDirs)
     {
-        listDir(etcDirs[ed], foMap);
+        listDir(d, foMap);
     }
 
     Info<< nl
@@ -154,17 +154,15 @@ Foam::fileName Foam::functionObjectList::findDict(const word& funcName)
     {
         return dictFile;
     }
-    else
-    {
-        fileNameList etcDirs(findEtcDirs(functionObjectDictPath));
 
-        forAll(etcDirs, i)
+    fileNameList etcDirs(findEtcDirs(functionObjectDictPath));
+
+    for (const fileName& d : etcDirs)
+    {
+        dictFile = search(funcName, d);
+        if (!dictFile.empty())
         {
-            dictFile = search(funcName, etcDirs[i]);
-            if (!dictFile.empty())
-            {
-                return dictFile;
-            }
+            return dictFile;
         }
     }
 
@@ -390,8 +388,6 @@ Foam::autoPtr<Foam::functionObjectList> Foam::functionObjectList::New
     HashSet<wordRe>& requiredFields
 )
 {
-    autoPtr<functionObjectList> functionsPtr;
-
     controlDict.add
     (
         dictionaryEntry("functions", controlDict, dictionary::null)
@@ -399,64 +395,66 @@ Foam::autoPtr<Foam::functionObjectList> Foam::functionObjectList::New
 
     dictionary& functionsDict = controlDict.subDict("functions");
 
-    word region = word::null;
+    word region;
+    args.optionReadIfPresent("region", region);
 
-    // Set the region name if specified
-    if (args.optionFound("region"))
-    {
-        region = args["region"];
-    }
+    bool modifiedControlDict = false;
 
-    if
-    (
-        args.optionFound("dict")
-     || args.optionFound("func")
-     || args.optionFound("funcs")
-    )
+    if (args.optionFound("dict"))
     {
-        if (args.optionFound("dict"))
-        {
-            controlDict.merge
+        modifiedControlDict = true;
+
+        controlDict.merge
+        (
+            IOdictionary
             (
-                IOdictionary
+                IOobject
                 (
-                    IOobject
-                    (
-                        args["dict"],
-                        runTime,
-                        IOobject::MUST_READ_IF_MODIFIED
-                    )
+                    args["dict"],
+                    runTime,
+                    IOobject::MUST_READ_IF_MODIFIED
                 )
-            );
-        }
+            )
+        );
+    }
+
+    if (args.optionFound("func"))
+    {
+        modifiedControlDict = true;
+
+        readFunctionObject
+        (
+            args["func"],
+            functionsDict,
+            requiredFields,
+            region
+        );
+    }
+
+    if (args.optionFound("funcs"))
+    {
+        modifiedControlDict = true;
+
+        ITstream is("funcs", args["funcs"]);
+        wordList funcNames(is);
 
-        if (args.optionFound("func"))
+        for (const word& funcName : funcNames)
         {
             readFunctionObject
             (
-                args["func"],
+                funcName,
                 functionsDict,
                 requiredFields,
                 region
             );
         }
+    }
 
-        if (args.optionFound("funcs"))
-        {
-            wordList funcs(args.optionLookup("funcs")());
 
-            forAll(funcs, i)
-            {
-                readFunctionObject
-                (
-                    funcs[i],
-                    functionsDict,
-                    requiredFields,
-                    region
-                );
-            }
-        }
+    autoPtr<functionObjectList> functionsPtr;
 
+    if (modifiedControlDict)
+    {
         functionsPtr.reset(new functionObjectList(runTime, controlDict));
     }
     else