diff --git a/dune/solvers/iterationsteps/projectedlinegsstep.cc b/dune/solvers/iterationsteps/projectedlinegsstep.cc
index b852c1afdd17ac7fcb365aaccffffe7182be1ef2..542754ce6b963867eff0c12b45f9fa7b921da1c9 100755
--- a/dune/solvers/iterationsteps/projectedlinegsstep.cc
+++ b/dune/solvers/iterationsteps/projectedlinegsstep.cc
@@ -114,28 +114,19 @@ solveLocalSystem(const Dune::BTDMatrix<typename MatrixType::block_type>& matrix,
         for (size_t i=0; i<linearCorrection.size(); i++) {
 
             for (int j=0; j<BlockSize; j++) {
-
+                // fmin and fmax ignore NAN values
                 if (linearCorrection[i][j] > 0) {
-
-                    // This division can cause nan on some platforms...
-                    if (!isnan( (localObstacles[i].lower(j)-x[i][j]) / linearCorrection[i][j]) )
-                        lineSearchObs.lower(0) = std::max(lineSearchObs.lower(0),
-                                                          (localObstacles[i].lower(j)-x[i][j]) / linearCorrection[i][j]);
-
-                    if (!isnan( (localObstacles[i].upper(j)-x[i][j]) / linearCorrection[i][j]) )
-                        lineSearchObs.upper(0) = std::min(lineSearchObs.upper(0),
-                                                          (localObstacles[i].upper(j)-x[i][j]) / linearCorrection[i][j]);
+                    lineSearchObs.lower(0) = std::fmax(lineSearchObs.lower(0),
+                                                       (localObstacles[i].lower(j)-x[i][j]) / linearCorrection[i][j]);
+                    lineSearchObs.upper(0) = std::fmin(lineSearchObs.upper(0),
+                                                       (localObstacles[i].upper(j)-x[i][j]) / linearCorrection[i][j]);
                 }
-
                 if (linearCorrection[i][j] < 0) {
-                    if (!isnan( (localObstacles[i].upper(j)-x[i][j]) / linearCorrection[i][j]) )
-                        lineSearchObs.lower(0) = std::max(lineSearchObs.lower(0),
-                                                          (localObstacles[i].upper(j)-x[i][j]) / linearCorrection[i][j]);
-                    if (!isnan( (localObstacles[i].lower(j)-x[i][j]) / linearCorrection[i][j]) )
-                        lineSearchObs.upper(0) = std::min(lineSearchObs.upper(0),
-                                                          (localObstacles[i].lower(j)-x[i][j]) / linearCorrection[i][j]);
+                    lineSearchObs.lower(0) = std::fmax(lineSearchObs.lower(0),
+                                                       (localObstacles[i].upper(j)-x[i][j]) / linearCorrection[i][j]);
+                    lineSearchObs.upper(0) = std::fmin(lineSearchObs.upper(0),
+                                                       (localObstacles[i].lower(j)-x[i][j]) / linearCorrection[i][j]);
                 }
-
             }
 
         }