diff --git a/src/OSspecific/POSIX/POSIX.C b/src/OSspecific/POSIX/POSIX.C
index da4bf887c9ba66b2d9916a48f946f4bb795be43c..d90fb84397f13f65e423b14d45e61d9ad6c636bd 100644
--- a/src/OSspecific/POSIX/POSIX.C
+++ b/src/OSspecific/POSIX/POSIX.C
@@ -523,6 +523,22 @@ time_t Foam::lastModified(const fileName& name)
 }
 
 
+double Foam::highResLastModified(const fileName& name)
+{
+    fileStat fileStatus(name);
+    if (fileStatus.isValid())
+    {
+        return
+            fileStatus.status().st_mtime
+          + 1e-9d*fileStatus.status().st_atim.tv_nsec;
+    }
+    else
+    {
+        return 0.0;
+    }
+}
+
+
 Foam::fileNameList Foam::readDir
 (
     const fileName& directory,
diff --git a/src/OSspecific/POSIX/fileMonitor.C b/src/OSspecific/POSIX/fileMonitor.C
index d3f010f0939ea645402d4248b6b3f51ba520d282..ff7deb7538a1f9f7c307c4f2212b7590c46146ae 100644
--- a/src/OSspecific/POSIX/fileMonitor.C
+++ b/src/OSspecific/POSIX/fileMonitor.C
@@ -126,7 +126,7 @@ namespace Foam
         // For stat
 
             //- From watch descriptor to modified time
-            DynamicList<time_t> lastMod_;
+            DynamicList<double> lastMod_;
 
 
 
@@ -261,7 +261,7 @@ namespace Foam
                         << abort(FatalError);
                 }
 
-                lastMod_(watchFd) = lastModified(fName);
+                lastMod_(watchFd) = highResLastModified(fName);
             }
 
             return true;
@@ -395,12 +395,12 @@ void Foam::fileMonitor::checkFiles() const
     {
         forAll(watcher_->lastMod_, watchFd)
         {
-            time_t oldTime = watcher_->lastMod_[watchFd];
+            double oldTime = watcher_->lastMod_[watchFd];
 
             if (oldTime != 0)
             {
                 const fileName& fName = watchFile_[watchFd];
-                time_t newTime = lastModified(fName);
+                double newTime = highResLastModified(fName);
 
                 if (newTime == 0)
                 {
@@ -615,7 +615,7 @@ void Foam::fileMonitor::setUnmodified(const label watchFd)
 
     if (!useInotify_)
     {
-        watcher_->lastMod_[watchFd] = lastModified(watchFile_[watchFd]);
+        watcher_->lastMod_[watchFd] = highResLastModified(watchFile_[watchFd]);
     }
 }
 
diff --git a/src/OpenFOAM/db/regIOobject/regIOobject.C b/src/OpenFOAM/db/regIOobject/regIOobject.C
index fbd5f64eeff43a58fd9183b86e7dbccce7e784e0..675e611182314a1e160d4b7d777c6b5adc80369b 100644
--- a/src/OpenFOAM/db/regIOobject/regIOobject.C
+++ b/src/OpenFOAM/db/regIOobject/regIOobject.C
@@ -48,14 +48,14 @@ namespace Foam
     };
 }
 
-int Foam::regIOobject::fileModificationSkew
+float Foam::regIOobject::fileModificationSkew
 (
-    Foam::debug::optimisationSwitch("fileModificationSkew", 30)
+    Foam::debug::floatOptimisationSwitch("fileModificationSkew", 30)
 );
 registerOptSwitch
 (
     "fileModificationSkew",
-    int,
+    float,
     Foam::regIOobject::fileModificationSkew
 );
 
diff --git a/src/OpenFOAM/db/regIOobject/regIOobject.H b/src/OpenFOAM/db/regIOobject/regIOobject.H
index 56078ce15d33cd9576edc5414d098c5a505ae16c..aea17b9a64bf99bc38192a449f33a4723864a15f 100644
--- a/src/OpenFOAM/db/regIOobject/regIOobject.H
+++ b/src/OpenFOAM/db/regIOobject/regIOobject.H
@@ -2,7 +2,7 @@
   =========                 |
   \\      /  F ield         | OpenFOAM: The Open Source CFD Toolbox
    \\    /   O peration     |
-    \\  /    A nd           | Copyright (C) 2011-2015 OpenFOAM Foundation
+    \\  /    A nd           | Copyright (C) 2011-2016 OpenFOAM Foundation
      \\/     M anipulation  |
 -------------------------------------------------------------------------------
 License
@@ -124,7 +124,7 @@ public:
         //- Runtime type information
         TypeName("regIOobject");
 
-        static int fileModificationSkew;
+        static float fileModificationSkew;
 
         static fileCheckTypes fileModificationChecking;
 
diff --git a/src/OpenFOAM/global/argList/argList.C b/src/OpenFOAM/global/argList/argList.C
index d9cf7f2065ad32696971f7eb2658f54893cc8d3e..9e223df6ba5c3c746401726396dcecec9d8a03b8 100644
--- a/src/OpenFOAM/global/argList/argList.C
+++ b/src/OpenFOAM/global/argList/argList.C
@@ -872,8 +872,23 @@ void Foam::argList::parse
                 << regIOobject::fileCheckTypesNames
                     [
                         regIOobject::fileModificationChecking
-                    ]
-                << endl;
+                    ];
+            if
+            (
+                (
+                    regIOobject::fileModificationChecking
+                 == regIOobject::timeStamp
+                )
+             || (
+                    regIOobject::fileModificationChecking
+                 == regIOobject::timeStampMaster
+                )
+            )
+            {
+                Info<< " (fileModificationSkew "
+                    << regIOobject::fileModificationSkew << ")";
+            }
+            Info<< endl;
 
             Info<< "allowSystemOperations : ";
             if (dynamicCode::allowSystemOperations)
diff --git a/src/OpenFOAM/global/debug/debug.C b/src/OpenFOAM/global/debug/debug.C
index 279be7409036dbd379aea47946ebb8fe8dbde3bb..bdf1698d07c08da045afec641a24c8dd81af8b15 100644
--- a/src/OpenFOAM/global/debug/debug.C
+++ b/src/OpenFOAM/global/debug/debug.C
@@ -190,6 +190,19 @@ int Foam::debug::optimisationSwitch(const char* name, const int defaultValue)
 }
 
 
+float Foam::debug::floatOptimisationSwitch
+(
+    const char* name,
+    const float defaultValue
+)
+{
+    return optimisationSwitches().lookupOrAddDefault
+    (
+        name, defaultValue, false, false
+    );
+}
+
+
 void Foam::debug::addDebugObject(const char* name, simpleRegIOobject* obj)
 {
     simpleObjectRegistryEntry* ptr = debugObjects().lookupPtr(name);
diff --git a/src/OpenFOAM/global/debug/debug.H b/src/OpenFOAM/global/debug/debug.H
index 4eeb8cbb534fdce73c32d73f109cf145571c661d..190f73be3029b485e9947a1dc9615edd89134328 100644
--- a/src/OpenFOAM/global/debug/debug.H
+++ b/src/OpenFOAM/global/debug/debug.H
@@ -2,7 +2,7 @@
   =========                 |
   \\      /  F ield         | OpenFOAM: The Open Source CFD Toolbox
    \\    /   O peration     |
-    \\  /    A nd           | Copyright (C) 2011-2013 OpenFOAM Foundation
+    \\  /    A nd           | Copyright (C) 2011-2016 OpenFOAM Foundation
      \\/     M anipulation  |
 -------------------------------------------------------------------------------
 License
@@ -74,6 +74,13 @@ namespace debug
     //- Lookup optimisation switch or add default value.
     int optimisationSwitch(const char* name, const int defaultValue=0);
 
+    //- Lookup optimisation switch or add default value.
+    float floatOptimisationSwitch
+    (
+        const char* name,
+        const float defaultValue=0
+    );
+
     //- Internal function to lookup a sub-dictionary from controlDict.
     dictionary& switchSet(const char* subDictName, dictionary*& subDictPtr);
 
diff --git a/src/OpenFOAM/include/OSspecific.H b/src/OpenFOAM/include/OSspecific.H
index c40aebb598d4e120cd64ed7d752cd67287fe056a..66a4ecc44aa3896cb380adafd8b04b84977e8596 100644
--- a/src/OpenFOAM/include/OSspecific.H
+++ b/src/OpenFOAM/include/OSspecific.H
@@ -122,6 +122,9 @@ off_t fileSize(const fileName&);
 //- Return time of last file modification
 time_t lastModified(const fileName&);
 
+//- Return time of last file modification
+double highResLastModified(const fileName&);
+
 //- Read a directory and return the entries as a string list
 fileNameList readDir
 (