diff --git a/dune/gfe/targetspacertrsolver.cc b/dune/gfe/targetspacertrsolver.cc
index bd50c876805a0205044660e1c3f537ef9c80374a..2612f63ffdd57aa89baca3fe67d0abac07445159 100644
--- a/dune/gfe/targetspacertrsolver.cc
+++ b/dune/gfe/targetspacertrsolver.cc
@@ -48,7 +48,7 @@ setup(const AverageDistanceAssembler<TargetSpace>* assembler,
 template <class TargetSpace>
 void TargetSpaceRiemannianTRSolver<TargetSpace>::solve()
 {
-    MaxNormTrustRegion<blocksize> trustRegion(1,   // we have only one block
+    MaxNormTrustRegion<blocksize,field_type> trustRegion(1,   // we have only one block
                                               initialTrustRegionRadius_);
 
     // /////////////////////////////////////////////////////
@@ -110,8 +110,8 @@ void TargetSpaceRiemannianTRSolver<TargetSpace>::solve()
         newIterate = TargetSpace::exp(newIterate, corr[0]);
 
         /** \todo Don't always recompute oldEnergy */
-        double oldEnergy = assembler_->value(x_);
-        double energy    = assembler_->value(newIterate);
+        field_type oldEnergy = assembler_->value(x_);
+        field_type energy    = assembler_->value(newIterate);
 
         // compute the model decrease
         // It is $ m(x) - m(x+s) = -<g,s> - 0.5 <s, Hs>
@@ -119,7 +119,7 @@ void TargetSpaceRiemannianTRSolver<TargetSpace>::solve()
         CorrectionType tmp(corr.size());
         tmp = 0;
         hesseMatrix.umv(corr, tmp);
-        double modelDecrease = (rhs*corr) - 0.5 * (corr*tmp);
+        field_type modelDecrease = (rhs*corr) - 0.5 * (corr*tmp);
 
         if (this->verbosity_ == NumProc::FULL) {
             std::cout << "Absolute model decrease: " << modelDecrease
diff --git a/dune/gfe/targetspacertrsolver.hh b/dune/gfe/targetspacertrsolver.hh
index 435b4035fcf48fe4a34529b425d0a4e4e74060cf..2213cb157720795050cdd7061e56e8d1842727c6 100644
--- a/dune/gfe/targetspacertrsolver.hh
+++ b/dune/gfe/targetspacertrsolver.hh
@@ -18,7 +18,7 @@ class TargetSpaceRiemannianTRSolver
     const static int blocksize = TargetSpace::TangentVector::dimension;
 
     // Centralize the field type here
-    typedef double field_type;
+    typedef typename TargetSpace::ctype field_type;
 
     // Some types that I need
     // The types have the dynamic outer type because the dune-solvers solvers expect