diff --git a/src/OpenFOAM/db/dynamicLibrary/dynamicCode/dynamicCode.C b/src/OpenFOAM/db/dynamicLibrary/dynamicCode/dynamicCode.C
index 422d0687a6265a2e077585727059c55a439aa4e1..1a2d068749d5bedc19d51b18f8f0a998ff81046f 100644
--- a/src/OpenFOAM/db/dynamicLibrary/dynamicCode/dynamicCode.C
+++ b/src/OpenFOAM/db/dynamicLibrary/dynamicCode/dynamicCode.C
@@ -25,6 +25,7 @@ License
 
 #include "dynamicCode.H"
 #include "dynamicCodeContext.H"
+#include "argList.H"
 #include "stringOps.H"
 #include "Fstream.H"
 #include "IOstreams.H"
@@ -64,10 +65,10 @@ void Foam::dynamicCode::checkSecurity
     if (isAdministrator())
     {
         FatalIOErrorInFunction(dict)
-            << "This code should not be executed by someone with administrator"
-            << " rights due to security reasons." << nl
-            << "(it writes a shared library which then gets loaded "
-            << "using dlopen)"
+            << "This code should not be executed by someone"
+            << " with administrator rights for security reasons." << nl
+            << "It generates a shared library which is loaded using dlopen"
+            << nl << endl
             << exit(FatalIOError);
     }
 
@@ -292,8 +293,8 @@ bool Foam::dynamicCode::writeDigest(const std::string& sha1) const
 
 Foam::dynamicCode::dynamicCode(const word& codeName, const word& codeDirName)
 :
-    codeRoot_(stringOps::expand("<case>")/topDirName),
-    libSubDir_(stringOps::expand("platforms/$WM_OPTIONS/lib")),
+    codeRoot_(argList::envGlobalPath()/topDirName),
+    libSubDir_(stringOps::expand("platforms/${WM_OPTIONS}/lib")),
     codeName_(codeName),
     codeDirName_(codeDirName)
 {
diff --git a/src/OpenFOAM/global/argList/argList.C b/src/OpenFOAM/global/argList/argList.C
index f06b9cfc1e983595919cfcef088b1309032cf8a4..f7c622e746b4d68748bd08f7228def6815957556 100644
--- a/src/OpenFOAM/global/argList/argList.C
+++ b/src/OpenFOAM/global/argList/argList.C
@@ -463,6 +463,14 @@ bool Foam::argList::postProcess(int argc, char *argv[])
 }
 
 
+// * * * * * * * * * * * * * Static Member Functions * * * * * * * * * * * * //
+
+Foam::fileName Foam::argList::envGlobalPath()
+{
+    return Foam::getEnv("FOAM_CASE");
+}
+
+
 // * * * * * * * * * * * * * Private Member Functions  * * * * * * * * * * * //
 
 Foam::word Foam::argList::optionCompat(const word& optName)
diff --git a/src/OpenFOAM/global/argList/argList.H b/src/OpenFOAM/global/argList/argList.H
index 379c6617d2d3547dd1c86322aa734def9531fb7c..e569e02e5256b78141c58c1cdf881a869f089831 100644
--- a/src/OpenFOAM/global/argList/argList.H
+++ b/src/OpenFOAM/global/argList/argList.H
@@ -272,6 +272,18 @@ public:
 
     // Member Functions
 
+    // Environment
+
+        //- Global case (directory) from environment variable
+        //
+        //  Returns the contents of the \c FOAM_CASE variable,
+        //  which has previously been set by argList or by Time.
+        //
+        //  This will normally be identical to the value of globalPath(),
+        //  but obtained via the environment.
+        static fileName envGlobalPath();
+
+
     // Low-level
 
         //- Scan for -help, -doc options etc prior to checking the validity
diff --git a/src/functionObjects/utilities/systemCall/systemCall.C b/src/functionObjects/utilities/systemCall/systemCall.C
index 0b19fda5e363502890b87f7ac3e3f025ba3daff2..3e54b1d04fbceb1aa64b2eaee0df7f40494b60c1 100644
--- a/src/functionObjects/utilities/systemCall/systemCall.C
+++ b/src/functionObjects/utilities/systemCall/systemCall.C
@@ -114,9 +114,17 @@ bool Foam::functionObjects::systemCall::read(const dictionary& dict)
     if (executeCalls_.empty() && endCalls_.empty() && writeCalls_.empty())
     {
         WarningInFunction
-            << "no executeCalls, endCalls or writeCalls defined."
+            << "No executeCalls, endCalls or writeCalls defined."
             << endl;
     }
+    else if (isAdministrator())
+    {
+        FatalErrorInFunction
+            << "System calls should not be executed by someone"
+            << " with administrator rights for security reasons." << nl
+            << nl << endl
+            << exit(FatalError);
+    }
     else if (!dynamicCode::allowSystemOperations)
     {
         FatalErrorInFunction
diff --git a/src/randomProcesses/noise/noiseModels/noiseModel/noiseModel.C b/src/randomProcesses/noise/noiseModels/noiseModel/noiseModel.C
index 1104fabc3ff54fea690328ef74746590801a6c7b..6a4272a423d6da3710cf0af12174a9f3e60588d2 100644
--- a/src/randomProcesses/noise/noiseModels/noiseModel/noiseModel.C
+++ b/src/randomProcesses/noise/noiseModels/noiseModel/noiseModel.C
@@ -25,7 +25,7 @@ License
 
 #include "noiseModel.H"
 #include "functionObject.H"
-#include "stringOps.H"
+#include "argList.H"
 
 // * * * * * * * * * * * * * * Static Data Members * * * * * * * * * * * * * //
 
@@ -143,7 +143,7 @@ Foam::fileName Foam::noiseModel::baseFileDir(const label dataseti) const
 {
     return
     (
-        stringOps::expand("<case>")    // ie, globalPath()
+        argList::envGlobalPath()
       / functionObject::outputPrefix
       / "noise"
       / outputPrefix_
diff --git a/src/randomProcesses/noise/noiseModels/pointNoise/pointNoise.C b/src/randomProcesses/noise/noiseModels/pointNoise/pointNoise.C
index c5474aee3bb3d71d0dfbed7dce955432463a2049..3e0c491292d84c6e7712c9f086b732f92645f03f 100644
--- a/src/randomProcesses/noise/noiseModels/pointNoise/pointNoise.C
+++ b/src/randomProcesses/noise/noiseModels/pointNoise/pointNoise.C
@@ -25,7 +25,7 @@ License
 
 #include "pointNoise.H"
 #include "noiseFFT.H"
-#include "stringOps.H"
+#include "argList.H"
 #include "addToRunTimeSelectionTable.H"
 
 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
@@ -244,8 +244,7 @@ void pointNoise::calculate()
 
         if (!fName.isAbsolute())
         {
-            // ie, globalPath() / name
-            fName = stringOps::expand("<case>")/fName;
+            fName = argList::envGlobalPath()/fName;
         }
 
         Function1Types::CSV<scalar> data("pressure", dict_, fName);
diff --git a/src/randomProcesses/noise/noiseModels/surfaceNoise/surfaceNoise.C b/src/randomProcesses/noise/noiseModels/surfaceNoise/surfaceNoise.C
index a60902aafb20105a3a4a0f0f2e53878f8560367d..d53c0c9b9f8ec48047d6301bd68d99c6ce0437fb 100644
--- a/src/randomProcesses/noise/noiseModels/surfaceNoise/surfaceNoise.C
+++ b/src/randomProcesses/noise/noiseModels/surfaceNoise/surfaceNoise.C
@@ -27,8 +27,8 @@ License
 #include "surfaceReader.H"
 #include "surfaceWriter.H"
 #include "noiseFFT.H"
+#include "argList.H"
 #include "graph.H"
-#include "stringOps.H"
 #include "addToRunTimeSelectionTable.H"
 
 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
@@ -465,8 +465,7 @@ void surfaceNoise::calculate()
 
         if (!fName.isAbsolute())
         {
-            // ie, globalPath() / name
-            fName = stringOps::expand("<case>")/fName;
+            fName = argList::envGlobalPath()/fName;
         }
 
         initialise(fName);
diff --git a/src/sampling/sampledSurface/writers/boundaryData/boundaryDataSurfaceWriter.C b/src/sampling/sampledSurface/writers/boundaryData/boundaryDataSurfaceWriter.C
index 15cf1d3ee73afec80f581cea19e266edf174f60b..8456d61912e25a23a33ce2a1529f029b717f65aa 100644
--- a/src/sampling/sampledSurface/writers/boundaryData/boundaryDataSurfaceWriter.C
+++ b/src/sampling/sampledSurface/writers/boundaryData/boundaryDataSurfaceWriter.C
@@ -25,6 +25,7 @@ License
 
 #include "boundaryDataSurfaceWriter.H"
 #include "makeSurfaceWriterMethods.H"
+#include "argList.H"
 
 // * * * * * * * * * * * * * * Static Data Members * * * * * * * * * * * * * //
 
@@ -62,7 +63,7 @@ Foam::fileName Foam::boundaryDataSurfaceWriter::write
     const pointField& points = surf.points();
 
     // Dummy time to use as an objectRegistry
-    const fileName caseDir(getEnv("FOAM_CASE"));
+    const fileName caseDir(argList::envGlobalPath());
 
     Time dummyTime
     (
diff --git a/src/sampling/sampledSurface/writers/boundaryData/boundaryDataSurfaceWriterImpl.C b/src/sampling/sampledSurface/writers/boundaryData/boundaryDataSurfaceWriterImpl.C
index 14f1545e226277733ab816682c72fc38f7722e4b..d774e7f1be543bdff4af848ecee9e257cb1f60a3 100644
--- a/src/sampling/sampledSurface/writers/boundaryData/boundaryDataSurfaceWriterImpl.C
+++ b/src/sampling/sampledSurface/writers/boundaryData/boundaryDataSurfaceWriterImpl.C
@@ -54,7 +54,7 @@ Foam::fileName Foam::boundaryDataSurfaceWriter::writeTemplate
     const faceList&    faces = surf.faces();
 
     // Dummy time to use as an objectRegistry
-    const fileName caseDir(getEnv("FOAM_CASE"));
+    const fileName caseDir(argList::envGlobalPath());
 
     Time dummyTime
     (