diff --git a/dune/gfe/riemanniantrsolver.cc b/dune/gfe/riemanniantrsolver.cc
index 70414dd3a1e7f910f7a73beaa3c1cb74a604a34f..41f856ffb5f6e196d25b6a9938a938663bcb5691 100644
--- a/dune/gfe/riemanniantrsolver.cc
+++ b/dune/gfe/riemanniantrsolver.cc
@@ -74,21 +74,15 @@ setup(const GridType& grid,
 
 #ifdef HAVE_IPOPT
     // First create an IPOpt base solver
-    auto  baseSolver = std::make_shared<QuadraticIPOptSolver<MatrixType,CorrectionType> >();
-    baseSolver->setVerbosity(NumProc::QUIET);
-    baseSolver->setTolerance(baseTolerance);
+    QuadraticIPOptSolver<MatrixType,CorrectionType> baseSolver;
+    baseSolver.setSolverParameter(baseTolerance, 100, NumProc::QUIET);
 #else
-    // First create a Gauss-seidel base solver
-    auto baseSolverStep = std::make_shared<TrustRegionGSStep<MatrixType, CorrectionType> >();
-
     // Hack: the two-norm may not scale all that well, but it is fast!
-    auto baseNorm = std::make_shared<TwoNorm<CorrectionType> >();
-
-    auto baseSolver = std::make_shared<::LoopSolver<CorrectionType> >(baseSolverStep,
-                                                                            baseIterations,
-                                                                            baseTolerance,
-                                                                            baseNorm,
-                                                                            Solver::QUIET);
+    ::LoopSolver<CorrectionType> baseSolver(TrustRegionGSStep<MatrixType, CorrectionType>{},
+                                                        baseIterations,
+                                                        baseTolerance,
+                                                        TwoNorm<CorrectionType>{},
+                                                        Solver::QUIET);
 #endif
 #if HAVE_MPI
     // Transfer all Dirichlet data to the master processor
@@ -109,7 +103,7 @@ setup(const GridType& grid,
 
     mmgStep->setMGType(mu, nu1, nu2);
     mmgStep->ignoreNodes_ = globalDirichletNodes;
-    mmgStep->setBaseSolver(baseSolver);
+    mmgStep->setBaseSolver(std::move(baseSolver));
     mmgStep->setSmoother(smoother);
     mmgStep->setObstacleRestrictor(std::make_shared<MandelObstacleRestrictor<CorrectionType> >());
     mmgStep->setVerbosity(Solver::QUIET);