diff --git a/applications/utilities/mesh/generation/extrude/extrudeMesh/extrudeMesh.C b/applications/utilities/mesh/generation/extrude/extrudeMesh/extrudeMesh.C
index 26b33a8605e05be3128d14dde9fbedec4a9dec6d..1529ce78226be5784c6b4ab652873953fe32da5c 100644
--- a/applications/utilities/mesh/generation/extrude/extrudeMesh/extrudeMesh.C
+++ b/applications/utilities/mesh/generation/extrude/extrudeMesh/extrudeMesh.C
@@ -358,8 +358,7 @@ int main(int argc, char *argv[])
         if (Pstream::parRun())
         {
             sourceCaseDir =
-                sourceCaseDir
-               /"processor" + Foam::name(Pstream::myProcNo());
+                sourceCaseDir/("processor" + Foam::name(Pstream::myProcNo()));
         }
         wordList sourcePatches;
         dict.readEntry("sourcePatches", sourcePatches);
diff --git a/applications/utilities/parallelProcessing/decomposePar/decomposePar.C b/applications/utilities/parallelProcessing/decomposePar/decomposePar.C
index e061325c846ef561f09a3e0bcc629344005f8411..d7354e91ac6f9e57fbe84ecc092ce63f077c50de 100644
--- a/applications/utilities/parallelProcessing/decomposePar/decomposePar.C
+++ b/applications/utilities/parallelProcessing/decomposePar/decomposePar.C
@@ -589,7 +589,7 @@ int main(int argc, char *argv[])
                 (
                     Time::controlDictName,
                     args.rootPath(),
-                    args.caseName()/fileName(word("processor") + name(proci))
+                    args.caseName()/("processor" + Foam::name(proci))
                 );
                 processorDb.setTime(runTime);
 
@@ -1016,7 +1016,7 @@ int main(int argc, char *argv[])
                                 Time::controlDictName,
                                 args.rootPath(),
                                 args.caseName()
-                               /fileName(word("processor") + name(proci))
+                              / ("processor" + Foam::name(proci))
                             )
                         );
                     }
@@ -1374,8 +1374,8 @@ int main(int argc, char *argv[])
                         (
                             Time::controlDictName,
                             args.rootPath(),
-                            args.caseName()/
-                            fileName(word("processor") + name(procI))
+                            args.caseName()
+                          / ("processor" + Foam::name(procI))
                         );
 
                         processorDb.setTime(runTime);
diff --git a/applications/utilities/parallelProcessing/decomposePar/domainDecomposition.C b/applications/utilities/parallelProcessing/decomposePar/domainDecomposition.C
index 3576fd340446029a844f77b366cc022b87c91ada..1d34f53a5a4e2c8c6f4fb9abc6ceed46ce84c19d 100644
--- a/applications/utilities/parallelProcessing/decomposePar/domainDecomposition.C
+++ b/applications/utilities/parallelProcessing/decomposePar/domainDecomposition.C
@@ -305,7 +305,7 @@ bool Foam::domainDecomposition::writeDecomposition(const bool decomposeSets)
 
         fileName processorCasePath
         (
-            time().caseName()/fileName(word("processor") + Foam::name(proci))
+            time().caseName()/("processor" + Foam::name(proci))
         );
 
         // create a database
diff --git a/applications/utilities/parallelProcessing/decomposePar/faMeshDecomposition.C b/applications/utilities/parallelProcessing/decomposePar/faMeshDecomposition.C
index a1296bd86e661c3fc62c61b987dba00b86471018..bcefd8c7c9e92155d5cacccb7d95b4909f092658 100644
--- a/applications/utilities/parallelProcessing/decomposePar/faMeshDecomposition.C
+++ b/applications/utilities/parallelProcessing/decomposePar/faMeshDecomposition.C
@@ -50,7 +50,7 @@ void Foam::faMeshDecomposition::distributeFaces()
         (
             Time::controlDictName,
             time().rootPath(),
-            time().caseName()/fileName(word("processor") + Foam::name(procI))
+            time().caseName()/("processor" + Foam::name(procI))
         );
 
         fvMesh procMesh
@@ -250,7 +250,7 @@ void Foam::faMeshDecomposition::decomposeMesh()
         (
             Time::controlDictName,
             time().rootPath(),
-            time().caseName()/fileName(word("processor") + Foam::name(procI))
+            time().caseName()/("processor" + Foam::name(procI))
         );
 
         fvMesh procFvMesh
@@ -1059,8 +1059,7 @@ void Foam::faMeshDecomposition::decomposeMesh()
     {
         fileName processorCasePath
         (
-            time().caseName()/fileName(word("processor")
-          + Foam::name(procI))
+            time().caseName()/("processor" + Foam::name(procI))
         );
 
         // create a database
@@ -1179,7 +1178,7 @@ bool Foam::faMeshDecomposition::writeDecomposition()
 
         fileName processorCasePath
         (
-            time().caseName()/fileName(word("processor") + Foam::name(procI))
+            time().caseName()/("processor" + Foam::name(procI))
         );
 
         // create a database
diff --git a/applications/utilities/parallelProcessing/reconstructPar/reconstructPar.C b/applications/utilities/parallelProcessing/reconstructPar/reconstructPar.C
index 37e179440d00b3ff42e65b71bd84ec6cfb3e18ec..6429453e7bfe75a7058fdf1630ef986d24e0d0f8 100644
--- a/applications/utilities/parallelProcessing/reconstructPar/reconstructPar.C
+++ b/applications/utilities/parallelProcessing/reconstructPar/reconstructPar.C
@@ -223,7 +223,7 @@ int main(int argc, char *argv[])
             (
                 Time::controlDictName,
                 args.rootPath(),
-                args.caseName()/fileName(word("processor") + name(proci))
+                args.caseName()/("processor" + Foam::name(proci))
             )
         );
     }
diff --git a/applications/utilities/parallelProcessing/reconstructParMesh/reconstructParMesh.C b/applications/utilities/parallelProcessing/reconstructParMesh/reconstructParMesh.C
index 5236940d408259643ee3aa008adae720611f2981..8bc73b9040e4b29212d499ccb04f8122be3930ce 100644
--- a/applications/utilities/parallelProcessing/reconstructParMesh/reconstructParMesh.C
+++ b/applications/utilities/parallelProcessing/reconstructParMesh/reconstructParMesh.C
@@ -550,7 +550,7 @@ int main(int argc, char *argv[])
     forAll(databases, proci)
     {
         Info<< "Reading database "
-            << args.caseName()/fileName(word("processor") + name(proci))
+            << args.caseName()/("processor" + Foam::name(proci))
             << endl;
 
         databases.set
@@ -560,7 +560,7 @@ int main(int argc, char *argv[])
             (
                 Time::controlDictName,
                 args.rootPath(),
-                args.caseName()/fileName(word("processor") + name(proci))
+                args.caseName()/("processor" + Foam::name(proci))
             )
         );
     }
diff --git a/applications/utilities/postProcessing/miscellaneous/profilingSummary/profilingSummary.C b/applications/utilities/postProcessing/miscellaneous/profilingSummary/profilingSummary.C
index 877bdf3de5b921db2651c2cb995b7927cfdb2004..920ba165a57e2f3e8217902eeed0e41831dc3b54 100644
--- a/applications/utilities/postProcessing/miscellaneous/profilingSummary/profilingSummary.C
+++ b/applications/utilities/postProcessing/miscellaneous/profilingSummary/profilingSummary.C
@@ -88,7 +88,7 @@ int main(int argc, char *argv[])
     const label nProcs = fileHandler().nProcs(args.path());
     #else
     label nProcs = 0;
-    while (isDir(args.path()/(word("processor") + name(nProcs))))
+    while (isDir(args.path()/("processor" + Foam::name(nProcs))))
     {
         ++nProcs;
     }
@@ -106,7 +106,7 @@ int main(int argc, char *argv[])
             (
                 Time::controlDictName,
                 args.rootPath(),
-                args.caseName()/fileName(word("processor") + name(proci))
+                args.caseName()/("processor" + Foam::name(proci))
             )
         );
     }
diff --git a/applications/utilities/preProcessing/mapFields/mapFields.C b/applications/utilities/preProcessing/mapFields/mapFields.C
index d6fe3578544ede6ac67b1579b2491cd1550bf872..649e908d6a83138602fccf85ff2f9b92b903b56f 100644
--- a/applications/utilities/preProcessing/mapFields/mapFields.C
+++ b/applications/utilities/preProcessing/mapFields/mapFields.C
@@ -396,7 +396,7 @@ int main(int argc, char *argv[])
             (
                 Time::controlDictName,
                 rootDirSource,
-                caseDirSource/fileName(word("processor") + name(proci))
+                caseDirSource/("processor" + Foam::name(proci))
             );
 
             #include "setTimeIndex.H"
@@ -471,7 +471,7 @@ int main(int argc, char *argv[])
             (
                 Time::controlDictName,
                 rootDirTarget,
-                caseDirTarget/fileName(word("processor") + name(proci))
+                caseDirTarget/("processor" + Foam::name(proci))
             );
 
             fvMesh meshTarget
@@ -536,7 +536,7 @@ int main(int argc, char *argv[])
             (
                 Time::controlDictName,
                 rootDirSource,
-                caseDirSource/fileName(word("processor") + name(procISource))
+                caseDirSource/("processor" + Foam::name(procISource))
             );
 
             #include "setTimeIndex.H"
@@ -572,8 +572,7 @@ int main(int argc, char *argv[])
                     (
                         Time::controlDictName,
                         rootDirTarget,
-                        caseDirTarget/fileName(word("processor")
-                      + name(procITarget))
+                        caseDirTarget/("processor" + Foam::name(procITarget))
                     );
 
                     fvMesh meshTarget
diff --git a/src/OpenFOAM/global/argList/argList.C b/src/OpenFOAM/global/argList/argList.C
index 467002727eebd7e5b539a013f3a52272531ccaf3..b2f0d979cc2d9bc663e76ce0dc13917b5560f660 100644
--- a/src/OpenFOAM/global/argList/argList.C
+++ b/src/OpenFOAM/global/argList/argList.C
@@ -1317,7 +1317,7 @@ void Foam::argList::parse
                         isDir
                         (
                             rootPath_/globalCase_
-                          / "processor" + Foam::name(++nProcDirs)
+                          / ("processor" + Foam::name(++nProcDirs))
                         )
                     )
                     {}
diff --git a/src/OpenFOAM/global/fileOperations/masterUncollatedFileOperation/masterUncollatedFileOperation.C b/src/OpenFOAM/global/fileOperations/masterUncollatedFileOperation/masterUncollatedFileOperation.C
index 18ff87a6cb66d69710a6a444aa5143377c4d58c9..13a28663c547ea70c4781dd82472982952d58e27 100644
--- a/src/OpenFOAM/global/fileOperations/masterUncollatedFileOperation/masterUncollatedFileOperation.C
+++ b/src/OpenFOAM/global/fileOperations/masterUncollatedFileOperation/masterUncollatedFileOperation.C
@@ -367,8 +367,7 @@ Foam::fileOperations::masterUncollatedFileOperation::localObjectPath
             // Uncollated type, e.g. processor1
             const word procName
             (
-                "processor"
-               +Foam::name(Pstream::myProcNo(Pstream::worldComm))
+                "processor" + Foam::name(Pstream::myProcNo(Pstream::worldComm))
             );
             return
                 processorsPath
diff --git a/src/OpenFOAM/primitives/strings/fileName/fileName.C b/src/OpenFOAM/primitives/strings/fileName/fileName.C
index 83a6d0b70a6195b871e46dd67d9a92a48a71e75d..6fda7a5c8f5735357ff485f41638d4eed6fbed18 100644
--- a/src/OpenFOAM/primitives/strings/fileName/fileName.C
+++ b/src/OpenFOAM/primitives/strings/fileName/fileName.C
@@ -426,13 +426,17 @@ Foam::fileName& Foam::fileName::operator/=(const string& other)
         {
             // Two non-empty strings: can concatenate
 
-            s.append("/");
+            if (s.back() != '/' && other.front() != '/')
+            {
+                s += '/';
+            }
+
             s.append(other);
         }
     }
     else if (other.size())
     {
-        // Or, if the first string is empty
+        // The first string is empty
         s = other;
     }
 
@@ -449,16 +453,23 @@ Foam::fileName Foam::operator/(const string& a, const string& b)
         if (b.size())
         {
             // Two non-empty strings: can concatenate
-            return fileName(a + '/' + b);
+
+            if (a.back() == '/' || b.front() == '/')
+            {
+                return fileName(a + b);
+            }
+            else
+            {
+                return fileName(a + '/' + b);
+            }
         }
 
-        return a;
+        return a;  // The second string was empty
     }
 
-    // Or, if the first string is empty
-
     if (b.size())
     {
+        // The first string is empty
         return b;
     }