diff --git a/src/OpenFOAM/db/IOobject/IOobject.H b/src/OpenFOAM/db/IOobject/IOobject.H
index 0bf7c438a69e6ccce3e8eb547eda0915b2ecc5e0..adc53426f009db59981972cf0fa41b9ea6ba6d45 100644
--- a/src/OpenFOAM/db/IOobject/IOobject.H
+++ b/src/OpenFOAM/db/IOobject/IOobject.H
@@ -359,6 +359,16 @@ public:
         inline bool& globalObject();
 
 
+    // Checks
+
+        //- Test if headerClassName() equals the given class name
+        inline bool isHeaderClassName(const word& clsName) const;
+
+        //- Test if headerClassName() equals Type::typeName
+        template<class Type>
+        inline bool isHeaderClassName() const;
+
+
     // Read/write options
 
         //- The read option
@@ -488,6 +498,14 @@ public:
 };
 
 
+//- Specialization for \c void always returns true (no headerClassName check).
+template<>
+inline bool IOobject::isHeaderClassName<void>() const
+{
+    return true;
+}
+
+
 template<>
 Ostream& operator<<(Ostream& os, const InfoProxy<IOobject>& ip);
 
diff --git a/src/OpenFOAM/db/IOobject/IOobjectI.H b/src/OpenFOAM/db/IOobject/IOobjectI.H
index 2bcea039d542c46ef9caf2a60e67e947fb95a488..7d040c32c0f37ed31786182f378a65020ca4bb80 100644
--- a/src/OpenFOAM/db/IOobject/IOobjectI.H
+++ b/src/OpenFOAM/db/IOobject/IOobjectI.H
@@ -107,6 +107,21 @@ inline bool& Foam::IOobject::globalObject()
 }
 
 
+// Checks
+
+inline bool Foam::IOobject::isHeaderClassName(const word& clsName) const
+{
+    return (clsName == headerClassName_);
+}
+
+
+template<class Type>
+inline bool Foam::IOobject::isHeaderClassName() const
+{
+    return (Type::typeName == headerClassName_);
+}
+
+
 // Read/write options
 
 inline Foam::IOobject::readOption Foam::IOobject::readOpt() const
diff --git a/src/OpenFOAM/db/IOobject/IOobjectReadHeader.C b/src/OpenFOAM/db/IOobject/IOobjectReadHeader.C
index 86418838a23639db96df3db27c27bfcbadaf6a8a..abc8e8e1205fcc1db020f5845af8eb6fa2fd96e6 100644
--- a/src/OpenFOAM/db/IOobject/IOobjectReadHeader.C
+++ b/src/OpenFOAM/db/IOobject/IOobjectReadHeader.C
@@ -74,10 +74,13 @@ bool Foam::IOobject::readHeader(Istream& is)
                 headerDict.get<float>("version")
             )
         );
+
         is.format(headerDict.get<word>("format"));
+
         headerClassName_ = headerDict.get<word>("class");
 
         const word headerObject(headerDict.get<word>("object"));
+
         if (IOobject::debug && headerObject != name())
         {
             IOWarningInFunction(is)