diff --git a/src/OpenFOAM/primitives/functions/DataEntry/polynomial/polynomial.C b/src/OpenFOAM/primitives/functions/DataEntry/polynomial/polynomial.C
index 859440c6dcb7a06154b006c6458d34b20d74feeb..87d3acc8815f482763afba913cd05307ab454b79 100644
--- a/src/OpenFOAM/primitives/functions/DataEntry/polynomial/polynomial.C
+++ b/src/OpenFOAM/primitives/functions/DataEntry/polynomial/polynomial.C
@@ -37,13 +37,33 @@ namespace Foam
 Foam::polynomial::polynomial(const word& entryName, Istream& is)
 :
     DataEntry<scalar>(entryName),
-    coeffs_(is)
+    coeffs_(is),
+    canIntegrate_(true)
 {
     if (!coeffs_.size())
     {
         FatalErrorIn("Foam::polynomial::polynomial(const word&, Istream&)")
             << "polynomial coefficients for entry " << this->name_
-            << " is invalid (empty)" << nl << exit(FatalError);
+            << " 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&, Istream&)")
+                << "Polynomial " << this->name_ << " cannot be integrated"
+                << endl;
+        }
     }
 }
 
@@ -51,7 +71,8 @@ Foam::polynomial::polynomial(const word& entryName, Istream& is)
 Foam::polynomial::polynomial(const polynomial& poly)
 :
     DataEntry<scalar>(poly),
-    coeffs_(poly.coeffs_)
+    coeffs_(poly.coeffs_),
+    canIntegrate_(poly.canIntegrate_)
 {}
 
 
@@ -65,13 +86,10 @@ Foam::polynomial::~polynomial()
 
 Foam::scalar Foam::polynomial::value(const scalar x) const
 {
-    scalar y = coeffs_[0].first();
-    scalar powX = x;
-
-    for (label i = 1; i < coeffs_.size(); i++)
+    scalar y = 0.0;
+    forAll(coeffs_, i)
     {
-        y +=  coeffs_[i].first()*powX;
-        powX *= x;
+        y += coeffs_[i].first()*pow(x, coeffs_[i].second());
     }
 
     return y;
@@ -82,14 +100,17 @@ Foam::scalar Foam::polynomial::integrate(const scalar x1, const scalar x2) const
 {
     scalar intx = 0.0;
 
-    forAll(coeffs_, i)
+    if (canIntegrate_)
     {
-        intx +=
-            coeffs_[i].first()/(coeffs_[i].second() + 1)
-           *(
-                pow(x2, coeffs_[i].second() + 1)
-              - pow(x1, coeffs_[i].second() + 1)
-            );
+        forAll(coeffs_, i)
+        {
+            intx +=
+                coeffs_[i].first()/(coeffs_[i].second() + 1)
+               *(
+                    pow(x2, coeffs_[i].second() + 1)
+                  - pow(x1, coeffs_[i].second() + 1)
+                );
+        }
     }
 
     return intx;
diff --git a/src/OpenFOAM/primitives/functions/DataEntry/polynomial/polynomial.H b/src/OpenFOAM/primitives/functions/DataEntry/polynomial/polynomial.H
index 0b4d18a4bb4b854a66798c0c492cb8447b5b39b0..e336068020995f8a358eb512bf9d4033b0fb957d 100644
--- a/src/OpenFOAM/primitives/functions/DataEntry/polynomial/polynomial.H
+++ b/src/OpenFOAM/primitives/functions/DataEntry/polynomial/polynomial.H
@@ -76,6 +76,9 @@ class polynomial
         //- Polynomial coefficients - list of prefactor, exponent
         List<Tuple2<scalar, scalar> > coeffs_;
 
+        //- Flag to indicate whether poly can be integrated
+        bool canIntegrate_;
+
 
     // Private Member Functions