diff --git a/applications/utilities/parallelProcessing/redistributeMeshPar/redistributeMeshPar.C b/applications/utilities/parallelProcessing/redistributeMeshPar/redistributeMeshPar.C
index b870e9efab81f41db80cb6143067648d9d36395b..f51ebafb87b45ab1164024f776987d7985189ee2 100644
--- a/applications/utilities/parallelProcessing/redistributeMeshPar/redistributeMeshPar.C
+++ b/applications/utilities/parallelProcessing/redistributeMeshPar/redistributeMeshPar.C
@@ -561,10 +561,6 @@ int main(int argc, char *argv[])
         mkDir(args.path());
     }
 
-    // Switch timeStamp checking to one which does not do any
-    // parallel sync for same reason
-    regIOobject::fileModificationChecking = regIOobject::timeStamp;
-
 #   include "createTime.H"
 
 
diff --git a/src/OpenFOAM/db/IOobjects/IOdictionary/IOdictionary.C b/src/OpenFOAM/db/IOobjects/IOdictionary/IOdictionary.C
index 65276015fed8e9149d6c8a3bac1dd7146523ab1d..7192eb7f61a3ea7a0d7ccb0f6078ba6ce2561868 100644
--- a/src/OpenFOAM/db/IOobjects/IOdictionary/IOdictionary.C
+++ b/src/OpenFOAM/db/IOobjects/IOdictionary/IOdictionary.C
@@ -66,6 +66,11 @@ void Foam::IOdictionary::readFile(const bool masterOnly)
           : Pstream::treeCommunication()
         );
 
+        // Master reads headerclassname from file. Make sure this gets
+        // transfered as well as contents.
+        word masterClassName = headerClassName();
+        Pstream::scatter(comms, masterClassName);
+
 
         // Get my communication order
         const Pstream::commsStruct& myComm = comms[Pstream::myProcNo()];
@@ -89,6 +94,7 @@ void Foam::IOdictionary::readFile(const bool masterOnly)
                 IOstream::ASCII
             );
             IOdictionary::readData(fromAbove);
+            const_cast<word&>(headerClassName()) = masterClassName;
         }
 
         // Send to my downstairs neighbours
diff --git a/src/OpenFOAM/db/regIOobject/regIOobjectRead.C b/src/OpenFOAM/db/regIOobject/regIOobjectRead.C
index fcf53b985f274f1c7edcaa75f5ea61610b8b400e..5802fec85fdee7e08d3f40c1d8ccabf0fffd4086 100644
--- a/src/OpenFOAM/db/regIOobject/regIOobjectRead.C
+++ b/src/OpenFOAM/db/regIOobject/regIOobjectRead.C
@@ -201,6 +201,11 @@ bool Foam::regIOobject::read()
           : Pstream::treeCommunication()
         );
 
+        // Master reads headerclassname from file. Make sure this gets
+        // transfered as well as contents.
+        word masterClassName = headerClassName();
+        Pstream::scatter(comms, masterClassName);
+
 
         // Get my communication order
         const Pstream::commsStruct& myComm = comms[Pstream::myProcNo()];
@@ -226,6 +231,7 @@ bool Foam::regIOobject::read()
                 IOstream::ASCII
             );
             ok = readData(fromAbove);
+            const_cast<word&>(headerClassName()) = masterClassName;
         }
 
         // Send to my downstairs neighbours
diff --git a/src/OpenFOAM/matrices/solution/solution.C b/src/OpenFOAM/matrices/solution/solution.C
index 610df5b8dd56c9885b30f8aa3d61a5064df6fafa..c24ed33a60fcf38d68a287c942b0e5a93efa0042 100644
--- a/src/OpenFOAM/matrices/solution/solution.C
+++ b/src/OpenFOAM/matrices/solution/solution.C
@@ -84,7 +84,11 @@ Foam::solution::solution
             dictName,
             obr.time().system(),
             obr,
-            IOobject::MUST_READ_IF_MODIFIED,
+            (
+                obr.readOpt() == IOobject::MUST_READ
+              ? IOobject::MUST_READ_IF_MODIFIED
+              : obr.readOpt()
+            ),
             IOobject::NO_WRITE
         )
     ),
@@ -94,7 +98,14 @@ Foam::solution::solution
     defaultRelaxationFactor_(0),
     solvers_(ITstream("solvers", tokenList())())
 {
-    read(solutionDict());
+    if
+    (
+        readOpt() == IOobject::MUST_READ
+     || readOpt() == IOobject::MUST_READ_IF_MODIFIED
+    )
+    {
+        read(solutionDict());
+    }
 }
 
 
diff --git a/src/finiteVolume/finiteVolume/fvSchemes/fvSchemes.C b/src/finiteVolume/finiteVolume/fvSchemes/fvSchemes.C
index cd786d09fac4d1228abf08f617fb3711d471d75b..a489b8c935fb62c6063b94240879ff927e23ab4a 100644
--- a/src/finiteVolume/finiteVolume/fvSchemes/fvSchemes.C
+++ b/src/finiteVolume/finiteVolume/fvSchemes/fvSchemes.C
@@ -256,7 +256,11 @@ Foam::fvSchemes::fvSchemes(const objectRegistry& obr)
             "fvSchemes",
             obr.time().system(),
             obr,
-            IOobject::MUST_READ_IF_MODIFIED,
+            (
+                obr.readOpt() == IOobject::MUST_READ
+              ? IOobject::MUST_READ_IF_MODIFIED
+              : obr.readOpt()
+            ),
             IOobject::NO_WRITE
         )
     ),
@@ -364,7 +368,14 @@ Foam::fvSchemes::fvSchemes(const objectRegistry& obr)
     // persistent settings across reads is incorrect
     clear();
 
-    read(schemesDict());
+    if
+    (
+        readOpt() == IOobject::MUST_READ
+     || readOpt() == IOobject::MUST_READ_IF_MODIFIED
+    )
+    {
+        read(schemesDict());
+    }
 }