diff --git a/src/OpenFOAM/primitives/tensor/tensor.C b/src/OpenFOAM/primitives/tensor/tensor.C
index c2f5a65f4585667773ae34b020b4986137c265de..4ad04ff2c4beca1a02d312b7656794e1ed34c2e7 100644
--- a/src/OpenFOAM/primitives/tensor/tensor.C
+++ b/src/OpenFOAM/primitives/tensor/tensor.C
@@ -97,17 +97,17 @@ vector eigenValues(const tensor& t)
             + t.xy()*t.yx()*t.zz() + t.xx()*t.yz()*t.zy();
 
         // If there is a zero root
-        if (mag(c) < SMALL)
+        if (mag(c) < 1.0e-100)
         {
             scalar disc = sqr(a) - 4*b;
 
-            if (disc > 0)
+            if (disc >= -SMALL)
             {
-                scalar q = -0.5*(a + sign(a)*sqrt(disc));
+                scalar q = -0.5*sqrt(max(0.0, disc));
 
                 i = 0;
-                ii = q;
-                iii = b/q;
+                ii = -0.5*a + q;
+                iii = -0.5*a - q;
             }
             else
             {
@@ -185,7 +185,7 @@ vector eigenValues(const tensor& t)
 
 vector eigenVector(const tensor& t, const scalar lambda)
 {
-    if (mag(lambda) < SMALL)
+    if (lambda < SMALL)
     {
         return vector::zero;
     }
@@ -380,7 +380,7 @@ vector eigenValues(const symmTensor& t)
 
 vector eigenVector(const symmTensor& t, const scalar lambda)
 {
-    if (mag(lambda) < SMALL)
+    if (lambda < SMALL)
     {
         return vector::zero;
     }