diff --git a/dune/gfe/riemanniantrsolver.cc b/dune/gfe/riemanniantrsolver.cc
index 8feb344f72223c699bc0ad7ca13b35801efaaf1c..927e7b14a5ebec554e31222def80e91427a58600 100644
--- a/dune/gfe/riemanniantrsolver.cc
+++ b/dune/gfe/riemanniantrsolver.cc
@@ -78,12 +78,17 @@ setup(const GridType& grid,
     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!
-    ::LoopSolver<CorrectionType> baseSolver(TrustRegionGSStep<MatrixType, CorrectionType>{},
-                                                        baseIterations,
-                                                        baseTolerance,
-                                                        TwoNorm<CorrectionType>{},
-                                                        Solver::QUIET);
+    auto baseNorm = std::make_shared<TwoNorm<CorrectionType>>();
+
+    auto baseSolver = std::make_shared<::LoopSolver<CorrectionType>>(baseSolverStep,
+                                                                            baseIterations,
+                                                                            baseTolerance,
+                                                                            baseNorm,
+                                                                            Solver::QUIET);
 #endif
 #if HAVE_MPI
     // Transfer all Dirichlet data to the master processor