diff --git a/dumux/io/cakegridcreator.hh b/dumux/io/cakegridcreator.hh
index 5970ef51a132f0f6c198a0af40672e8e86734ad4..bc77c8e1a832d2ab8782a0f86e32666382acde60 100644
--- a/dumux/io/cakegridcreator.hh
+++ b/dumux/io/cakegridcreator.hh
@@ -243,7 +243,7 @@ public:
                     Scalar gradingFactor = grading[dimIdx][zoneIdx];
                     Scalar length = upper - lower;
                     Scalar height = 1.0;
-                    bool reverse = false;
+                    bool increasingCellSize = false;
 
                     if (verbose)
                     {
@@ -254,6 +254,22 @@ public:
                                   << " grading "  << gradingFactor;
                     }
 
+                    if (gradingFactor > 1.0)
+                    {
+                        increasingCellSize = true;
+                    }
+
+                    // take absolute values and reverse cell size increment to achieve
+                    // reverse behavior for negative values
+                    if (gradingFactor < 0.0)
+                    {
+                        gradingFactor = -gradingFactor;
+                        if (gradingFactor < 1.0)
+                        {
+                            increasingCellSize = true;
+                        }
+                    }
+
                     if (gradingFactor > 1.0 - 1e-7 && gradingFactor < 1.0 + 1e-7)
                     {
                         height = 1.0 / numCells;
@@ -264,22 +280,6 @@ public:
                     }
                     else
                     {
-                        if (gradingFactor < -1.0)
-                        {
-                            gradingFactor = -gradingFactor;
-                        }
-                        else if (gradingFactor > 0.0 && gradingFactor < 1.0)
-                        {
-                            gradingFactor = 1.0 / gradingFactor;
-                        }
-                        else if (gradingFactor > 1.0)
-                        {
-                            reverse = true;
-                        }
-                        else
-                        {
-                            DUNE_THROW(Dune::NotImplemented, "This grading factor is not implemented.");
-                        }
                         height = (1.0 - gradingFactor) / (1.0 - std::pow(gradingFactor, numCells));
 
                         if (verbose)
@@ -298,7 +298,7 @@ public:
                         Scalar hI = height;
                         if (!(gradingFactor < 1.0 + 1e-7 && gradingFactor > 1.0 - 1e-7))
                         {
-                            if (reverse)
+                            if (increasingCellSize)
                             {
                                 hI *= std::pow(gradingFactor, i);
                             }
diff --git a/dumux/io/gridcreator.hh b/dumux/io/gridcreator.hh
index 14c3d4b86859e73ae834cde2e8fa56797906b54e..30c51a1d86a0f2f1306db8e975a2a1e9ac3f610e 100644
--- a/dumux/io/gridcreator.hh
+++ b/dumux/io/gridcreator.hh
@@ -776,7 +776,7 @@ public:
                     Scalar gradingFactor = grading[dimIdx][zoneIdx];
                     Scalar length = upper - lower;
                     Scalar height = 1.0;
-                    bool reverse = false;
+                    bool increasingCellSize = false;
 
                     if (verbose)
                     {
@@ -787,6 +787,22 @@ public:
                                   << " grading "  << gradingFactor;
                     }
 
+                    if (gradingFactor > 1.0)
+                    {
+                        increasingCellSize = true;
+                    }
+
+                    // take absolute values and reverse cell size increment to achieve
+                    // reverse behavior for negative values
+                    if (gradingFactor < 0.0)
+                    {
+                        gradingFactor = -gradingFactor;
+                        if (gradingFactor < 1.0)
+                        {
+                            increasingCellSize = true;
+                        }
+                    }
+
                     if (gradingFactor > 1.0 - 1e-7 && gradingFactor < 1.0 + 1e-7)
                     {
                         height = 1.0 / numCells;
@@ -797,23 +813,6 @@ public:
                     }
                     else
                     {
-                        if (gradingFactor < -1.0)
-                        {
-                            gradingFactor = -gradingFactor;
-                        }
-                        else if (gradingFactor > 0.0 && gradingFactor < 1.0)
-                        {
-                            gradingFactor = 1.0 / gradingFactor;
-                        }
-                        else if (gradingFactor > 1.0)
-                        {
-                            reverse = true;
-                        }
-                        else
-                        {
-                            DUNE_THROW(Dune::NotImplemented, "This grading factor is not implemented.");
-                        }
-
                         height = (1.0 - gradingFactor) / (1.0 - pow(gradingFactor, numCells));
 
                         if (verbose)
@@ -832,7 +831,7 @@ public:
                         Scalar hI = height;
                         if (!(gradingFactor < 1.0 + 1e-7 && gradingFactor > 1.0 - 1e-7))
                         {
-                            if (reverse)
+                            if (increasingCellSize)
                             {
                                 hI *= pow(gradingFactor, i);
                             }