diff --git a/src/OpenFOAM/primitives/functions/DataEntry/polynomial/polynomial.C b/src/OpenFOAM/primitives/functions/DataEntry/polynomial/polynomial.C
index 34c595f8acf5919638501f42ce87abe6977f6607..c9c8ba3f654d32009dfd8119afa0cd4c0582096c 100644
--- a/src/OpenFOAM/primitives/functions/DataEntry/polynomial/polynomial.C
+++ b/src/OpenFOAM/primitives/functions/DataEntry/polynomial/polynomial.C
@@ -31,8 +31,11 @@ License
 namespace Foam
 {
     defineTypeNameAndDebug(polynomial, 0);
+    DataEntry<scalar>::adddictionaryConstructorToTable<polynomial>
+        addpolynomialConstructorToTable_;
 }
 
+
 // * * * * * * * * * * * * * * * * Constructors  * * * * * * * * * * * * * * //
 
 Foam::polynomial::polynomial(const word& entryName, const dictionary& dict)
@@ -48,7 +51,7 @@ Foam::polynomial::polynomial(const word& entryName, const dictionary& dict)
 
     if (!coeffs_.size())
     {
-        FatalErrorIn("Foam::polynomial::polynomial(const word&, Istream&)")
+        FatalErrorIn("Foam::polynomial::polynomial(const word&, dictionary&)")
             << "polynomial coefficients for entry " << this->name_
             << " are invalid (empty)" << nl << exit(FatalError);
     }
@@ -66,7 +69,7 @@ Foam::polynomial::polynomial(const word& entryName, const dictionary& dict)
     {
         if (!canIntegrate_)
         {
-            WarningIn("Foam::polynomial::polynomial(const word&, Istream&)")
+            WarningIn("Foam::polynomial::polynomial(const word&, dictionary&)")
                 << "Polynomial " << this->name_ << " cannot be integrated"
                 << endl;
         }
@@ -74,6 +77,50 @@ Foam::polynomial::polynomial(const word& entryName, const dictionary& dict)
 }
 
 
+Foam::polynomial::polynomial
+(
+    const word& entryName,
+    const List<Tuple2<scalar, scalar> >& coeffs
+)
+:
+    DataEntry<scalar>(entryName),
+    coeffs_(coeffs),
+    canIntegrate_(true)
+{
+    if (!coeffs_.size())
+    {
+        FatalErrorIn
+        (
+            "Foam::polynomial::polynomial"
+            "(const word&, const List<Tuple2<scalar, scalar> >&&)"
+        )   << "polynomial coefficients for entry " << this->name_
+            << " are invalid (empty)" << nl << exit(FatalError);
+    }
+
+    forAll(coeffs_, i)
+    {
+        if (mag(coeffs_[i].second() + 1) < ROOTVSMALL)
+        {
+            canIntegrate_ = false;
+            break;
+        }
+    }
+
+    if (debug)
+    {
+        if (!canIntegrate_)
+        {
+            WarningIn
+            (
+                "Foam::polynomial::polynomial"
+                "(const word&, const List<Tuple2<scalar, scalar> >&&)"
+            )   << "Polynomial " << this->name_ << " cannot be integrated"
+                << endl;
+        }
+    }
+}
+
+
 Foam::polynomial::polynomial(const polynomial& poly)
 :
     DataEntry<scalar>(poly),
diff --git a/src/OpenFOAM/primitives/functions/DataEntry/polynomial/polynomial.H b/src/OpenFOAM/primitives/functions/DataEntry/polynomial/polynomial.H
index 2ed38a9f32221e9f91ee6dba3ca7522455278877..2c2cbcb30fc76314b0a2dd036dfbeb57b2d74be1 100644
--- a/src/OpenFOAM/primitives/functions/DataEntry/polynomial/polynomial.H
+++ b/src/OpenFOAM/primitives/functions/DataEntry/polynomial/polynomial.H
@@ -96,6 +96,9 @@ public:
 
         polynomial(const word& entryName, const dictionary& dict);
 
+        //- Construct from components
+        polynomial(const word& entryName, const List<Tuple2<scalar, scalar> >&);
+
         //- Copy constructor
         polynomial(const polynomial& poly);