diff --git a/dune/gfe/targetspacertrsolver.cc b/dune/gfe/targetspacertrsolver.cc
index 2612f63ffdd57aa89baca3fe67d0abac07445159..c1c4d5aa53d602b0605a4ebf1bc179c066037adc 100644
--- a/dune/gfe/targetspacertrsolver.cc
+++ b/dune/gfe/targetspacertrsolver.cc
@@ -24,6 +24,7 @@ setup(const AverageDistanceAssembler<TargetSpace>* assembler,
     innerIterations_          = innerIterations;
     innerTolerance_           = innerTolerance;
     this->verbosity_          = NumProc::QUIET;
+    minNumberOfIterations_    = 4;
 
     // ////////////////////////////////
     //   Create a projected gauss-seidel solver
@@ -48,6 +49,8 @@ setup(const AverageDistanceAssembler<TargetSpace>* assembler,
 template <class TargetSpace>
 void TargetSpaceRiemannianTRSolver<TargetSpace>::solve()
 {
+    assert(minNumberOfIterations_ > 0);
+
     MaxNormTrustRegion<blocksize,field_type> trustRegion(1,   // we have only one block
                                               initialTrustRegionRadius_);
 
@@ -93,7 +96,7 @@ void TargetSpaceRiemannianTRSolver<TargetSpace>::solve()
         if (this->verbosity_ == NumProc::FULL)
             std::cout << "Infinity norm of the correction: " << corr.infinity_norm() << std::endl;
 
-        if (corr.infinity_norm() < this->tolerance_) {
+        if (corr.infinity_norm() < this->tolerance_ and i>=minNumberOfIterations_-1) {
             if (this->verbosity_ == NumProc::FULL)
                 std::cout << "CORRECTION IS SMALL ENOUGH" << std::endl;
 
@@ -136,6 +139,7 @@ void TargetSpaceRiemannianTRSolver<TargetSpace>::solve()
         }
 
         if (energy >= oldEnergy &&
+            i>minNumberOfIterations_-1 &&
             (std::abs(oldEnergy-energy)/energy < 1e-9 || modelDecrease/energy < 1e-9)) {
             if (this->verbosity_ == NumProc::FULL)
                 std::cout << "Suspecting rounding problems" << std::endl;
diff --git a/dune/gfe/targetspacertrsolver.hh b/dune/gfe/targetspacertrsolver.hh
index 2213cb157720795050cdd7061e56e8d1842727c6..8c34f20e0ce6a963156cfb43c8240fc312084579 100644
--- a/dune/gfe/targetspacertrsolver.hh
+++ b/dune/gfe/targetspacertrsolver.hh
@@ -81,6 +81,15 @@ protected:
     /** \brief Norm for the quadratic inner problems */
     std::auto_ptr<EnergyNorm<MatrixType, CorrectionType> > energyNorm_;
 
+    /** \brief Specify a minimal number of iterations the trust-region solver has to do
+     *
+     * This is needed when working with automatic differentiation.    While a very low
+     * number of iterations may be enough to precisely compute the value of a
+     * geodesic finite element function, a higher number may be needed to make an AD
+     * system compute a derivative with sufficient precision.
+     */
+    size_t minNumberOfIterations_;
+
 };
 
 #include "targetspacertrsolver.cc"