diff --git a/applications/utilities/parallelProcessing/redistributePar/redistributePar.C b/applications/utilities/parallelProcessing/redistributePar/redistributePar.C
index baf3104190d430ce905a3c000c7aa3d7588dc303..e463f8d4933da6757962425327666b9e807a1e57 100644
--- a/applications/utilities/parallelProcessing/redistributePar/redistributePar.C
+++ b/applications/utilities/parallelProcessing/redistributePar/redistributePar.C
@@ -2396,7 +2396,10 @@ int main(int argc, char *argv[])
         instantList timeDirs;
         if (Pstream::master())
         {
+            const bool oldParRun = Pstream::parRun();
+            Pstream::parRun() = false;
             timeDirs = Time::findTimes(args.path(), "constant");
+            Pstream::parRun() = oldParRun;
         }
         Pstream::scatter(timeDirs);
         for (const instant& t : timeDirs)
@@ -2432,7 +2435,10 @@ int main(int argc, char *argv[])
 
         if (Pstream::master())
         {
+            const bool oldParRun = Pstream::parRun();
+            Pstream::parRun() = false;
             timeDirs = Time::findTimes(basePath, "constant");
+            Pstream::parRun() = oldParRun;
         }
         Pstream::scatter(timeDirs);
         for (const instant& t : timeDirs)
diff --git a/src/OpenFOAM/global/fileOperations/fileOperation/fileOperation.C b/src/OpenFOAM/global/fileOperations/fileOperation/fileOperation.C
index 999562fa03e584676a68f332ca303eabaa6abd13..e66c6fc019fa8700a0cf6a6d38d27ec8521e9cc4 100644
--- a/src/OpenFOAM/global/fileOperations/fileOperation/fileOperation.C
+++ b/src/OpenFOAM/global/fileOperations/fileOperation/fileOperation.C
@@ -238,7 +238,11 @@ bool Foam::fileOperation::isFileOrDir(const bool isFile, const fileName& f)
 
 
 Foam::tmpNrc<Foam::fileOperation::dirIndexList>
-Foam::fileOperation::lookupProcessorsPath(const fileName& fName) const
+Foam::fileOperation::lookupAndCacheProcessorsPath
+(
+    const fileName& fName,
+    const bool syncPar
+) const
 {
     // If path is local to a processor (e.g. contains 'processor2')
     // find the corresponding actual processor directory (e.g. 'processors4')
@@ -344,7 +348,11 @@ Foam::fileOperation::lookupProcessorsPath(const fileName& fName) const
             }
         }
 
-        if (returnReduce(procDirs.size(), sumOp<label>()))
+        if
+        (
+            (syncPar && returnReduce(procDirs.size(), sumOp<label>()))
+         || (!syncPar && procDirs.size())
+        )
         {
             procsDirs_.insert(procPath, procDirs);
 
@@ -362,6 +370,14 @@ Foam::fileOperation::lookupProcessorsPath(const fileName& fName) const
 }
 
 
+Foam::tmpNrc<Foam::fileOperation::dirIndexList>
+Foam::fileOperation::lookupProcessorsPath(const fileName& fName) const
+{
+    // Use parallel synchronisation
+    return lookupAndCacheProcessorsPath(fName, true);
+}
+
+
 bool Foam::fileOperation::exists(IOobject& io) const
 {
     // Generate output filename for object
diff --git a/src/OpenFOAM/global/fileOperations/fileOperation/fileOperation.H b/src/OpenFOAM/global/fileOperations/fileOperation/fileOperation.H
index f3887fc056dc8dbd94514e51d6c5bd5f7ae3ac54..6f1f2c64f06e6be0db9aad00cfbd0ceb0e7638d1 100644
--- a/src/OpenFOAM/global/fileOperations/fileOperation/fileOperation.H
+++ b/src/OpenFOAM/global/fileOperations/fileOperation/fileOperation.H
@@ -131,12 +131,20 @@ protected:
         //- Helper: check for file (isFile) or directory (!isFile)
         static bool isFileOrDir(const bool isFile, const fileName&);
 
-        //- Detect presence of processorsDDD
-        void cacheProcessorsPath(const fileName& fName) const;
+        //- Lookup name of processorsDDD using cache. Return empty fileName
+        //  if not found.
+        tmpNrc<dirIndexList> lookupAndCacheProcessorsPath
+        (
+            const fileName&,
+            const bool syncPar
+        ) const;
 
         //- Lookup name of processorsDDD using cache. Return empty fileName
-        //  if not found
-        tmpNrc<dirIndexList> lookupProcessorsPath(const fileName&) const;
+        //  if not found. To be called on all processors
+        virtual tmpNrc<dirIndexList> lookupProcessorsPath
+        (
+            const fileName&
+        ) const;
 
         //- Does ioobject exist. Is either a directory (empty name()) or
         //  a file
diff --git a/src/OpenFOAM/global/fileOperations/uncollatedFileOperation/uncollatedFileOperation.C b/src/OpenFOAM/global/fileOperations/uncollatedFileOperation/uncollatedFileOperation.C
index f96ea886a7a7a286326f2afa416b4c13d6083c01..297627b84d9f7f8f0991dac2ab6320c3b30b0cf4 100644
--- a/src/OpenFOAM/global/fileOperations/uncollatedFileOperation/uncollatedFileOperation.C
+++ b/src/OpenFOAM/global/fileOperations/uncollatedFileOperation/uncollatedFileOperation.C
@@ -113,7 +113,11 @@ Foam::fileName Foam::fileOperations::uncollatedFileOperation::filePathInfo
             {
                 tmpNrc<dirIndexList> pDirs
                 (
-                    lookupProcessorsPath(io.objectPath())
+                    fileOperation::lookupAndCacheProcessorsPath
+                    (
+                        io.objectPath(),
+                        false
+                    )
                 );
                 forAll(pDirs(), i)
                 {
@@ -159,6 +163,17 @@ Foam::fileName Foam::fileOperations::uncollatedFileOperation::filePathInfo
 }
 
 
+Foam::tmpNrc<Foam::fileOperation::dirIndexList>
+Foam::fileOperations::uncollatedFileOperation::lookupProcessorsPath
+(
+    const fileName& fName
+) const
+{
+    // Do not use parallel synchronisation
+    return lookupAndCacheProcessorsPath(fName, false);
+}
+
+
 // * * * * * * * * * * * * * * * * Constructors  * * * * * * * * * * * * * * //
 
 Foam::fileOperations::uncollatedFileOperation::uncollatedFileOperation
diff --git a/src/OpenFOAM/global/fileOperations/uncollatedFileOperation/uncollatedFileOperation.H b/src/OpenFOAM/global/fileOperations/uncollatedFileOperation/uncollatedFileOperation.H
index 6cc63a868e830dbf35888c11215bfe223a7fbf28..09f9e7f62437cca991230178896c17f4351e6922 100644
--- a/src/OpenFOAM/global/fileOperations/uncollatedFileOperation/uncollatedFileOperation.H
+++ b/src/OpenFOAM/global/fileOperations/uncollatedFileOperation/uncollatedFileOperation.H
@@ -50,7 +50,9 @@ class uncollatedFileOperation
 :
     public fileOperation
 {
-    // Private Member Functions
+protected:
+
+    // Protected Member Functions
 
         //- Search for an object.
         //    checkGlobal : also check undecomposed case
@@ -63,6 +65,13 @@ class uncollatedFileOperation
             const bool search
         ) const;
 
+        //- Lookup name of processorsDDD using cache. Return empty fileName
+        //  if not found. Do not use any parallel synchronisation
+        virtual tmpNrc<dirIndexList> lookupProcessorsPath
+        (
+            const fileName&
+        ) const;
+
 
 public: