diff --git a/dune/tectonic/minimisation.hh b/dune/tectonic/minimisation.hh
index 5bf0888bf9aabc4be740e46f8ec14d5e4f54a44a..0e27a6549542d8901c6eab002585ec16c218a06e 100644
--- a/dune/tectonic/minimisation.hh
+++ b/dune/tectonic/minimisation.hh
@@ -28,6 +28,14 @@ template <class Functional>
 void minimise(Functional const &J, typename Functional::LocalVector &x,
               size_t steps, Bisection const &bisection) {
   using LocalVector = typename Functional::LocalVector;
+  auto const diff = [](LocalVector const &a, LocalVector const &b) {
+    LocalVector tmp = a;
+    tmp -= b;
+    return tmp.two_norm();
+  };
+
+  LocalVector x_initial = x;
+  LocalVector x_o = x;
 
   for (size_t step = 0; step < steps; ++step) {
     LocalVector v;
@@ -40,6 +48,20 @@ void minimise(Functional const &J, typename Functional::LocalVector &x,
 
     double const alpha = lineSearch(J, x, v, bisection);
     Arithmetic::addProduct(x, alpha, v);
+
+    if (alpha < 1e-14) // TODO
+      break;
+
+    double const correction = diff(x, x_o);
+    double const overallCorrection = diff(x, x_initial);
+    if (overallCorrection <= 0.0)
+      return;
+
+    double const correctionQuotient = correction / overallCorrection;
+    if (correctionQuotient < 0.1) // enough descent; TODO
+      break;
+
+    x_o = x;
   }
 }
 #endif