diff --git a/src/OpenFOAM/primitives/Scalar/scalar/scalar.C b/src/OpenFOAM/primitives/Scalar/scalar/scalar.C
index 0038b1d6422be95bad3b0f1de563b8847fb62a19..30b9127fc104601a57250bfac62d52eb5be8ee31 100644
--- a/src/OpenFOAM/primitives/Scalar/scalar/scalar.C
+++ b/src/OpenFOAM/primitives/Scalar/scalar/scalar.C
@@ -40,6 +40,24 @@ Foam::scalar Foam::readScalar(Istream& is)
 }
 
 
+Foam::scalar Foam::readScalarOrDefault(Istream& is, const scalar defaultValue)
+{
+    if (is.good())
+    {
+        token tok(is);
+
+        if (tok.isNumber())
+        {
+            return tok.scalarToken();
+        }
+
+        is.putBack(tok);
+    }
+
+    return defaultValue;
+}
+
+
 Foam::scalar Foam::readRawScalar(Istream& is)
 {
     scalar val(0);
diff --git a/src/OpenFOAM/primitives/Scalar/scalar/scalar.H b/src/OpenFOAM/primitives/Scalar/scalar/scalar.H
index 58bb002e9811c6f47b08ba89e84445e0d264f93e..cd5d1550433a909aef4b6a8a1e23603020aff778 100644
--- a/src/OpenFOAM/primitives/Scalar/scalar/scalar.H
+++ b/src/OpenFOAM/primitives/Scalar/scalar/scalar.H
@@ -103,6 +103,9 @@ namespace Foam
     //- Read scalar from stream.
     scalar readScalar(Istream& is);
 
+    //- Read scalar from stream if present or return default value
+    scalar readScalarOrDefault(Istream& is, const scalar defaultValue);
+
     //- Read raw scalar from binary stream.
     //  \note No internal check for binary vs ascii,
     //        the caller knows what they are doing
@@ -172,6 +175,9 @@ namespace Foam
     //- Read scalar from stream.
     scalar readScalar(Istream& is);
 
+    //- Read scalar from stream if present or return default value
+    scalar readScalarOrDefault(Istream& is, const scalar defaultValue);
+
     //- Read raw scalar from binary stream.
     //  \note No internal check for binary vs ascii,
     //        the caller knows what they are doing