diff --git a/dune/solvers/iterationsteps/obstacletnnmgstep.hh b/dune/solvers/iterationsteps/obstacletnnmgstep.hh
index f1a5b6b989f1832612f036f0c7297d3de77fe638..09e2db71ede931b1b27d5314f01c2bf6a00bb6b9 100644
--- a/dune/solvers/iterationsteps/obstacletnnmgstep.hh
+++ b/dune/solvers/iterationsteps/obstacletnnmgstep.hh
@@ -112,7 +112,7 @@ class ObstacleTNNMGStep
             linearSmoother_(Dune::Solvers::BlockGS::LocalSolvers::gs()),
             baseSolverStep_(Dune::Solvers::BlockGS::LocalSolvers::gs()),
             baseSolverNorm_(baseSolverStep_),
-            baseSolver_(&baseSolverStep_, 100, 1e-8, &baseSolverNorm_, LinearBaseSolver::QUIET),
+            baseSolver_(baseSolverStep_, 100, 1e-8, baseSolverNorm_, LinearBaseSolver::QUIET),
             preSmoothingSteps_(3),
             postSmoothingSteps_(3),
             linearIterationSteps_(1),
@@ -158,7 +158,7 @@ class ObstacleTNNMGStep
 
             linearMGStep_.setTransferOperators(transfer_);
             linearMGStep_.setSmoother(&linearSmoother_);
-            linearMGStep_.basesolver_ = &baseSolver_;
+            linearMGStep_.setBaseSolver(baseSolver_);
             linearMGStep_.setMGType(1, linearPreSmoothingSteps_, linearPostSmoothingSteps_);
 
             hasObstacle_.resize(x_->size());
diff --git a/dune/solvers/test/cgsteptest.cc b/dune/solvers/test/cgsteptest.cc
index 0ccc7372ae052cdcd527c6b28945399eb965ff97..f7540138dabe09b8f00ab7bfb38f4b5129945d55 100644
--- a/dune/solvers/test/cgsteptest.cc
+++ b/dune/solvers/test/cgsteptest.cc
@@ -83,7 +83,7 @@ struct CGTestSuite
               cgStep(p.A, u_copy, rhs_copy);
           cgStep.setIgnore(p.ignore);
           ::LoopSolver<typename Problem::Vector> solver(
-              &cgStep, maxIterations, stepTol, &p.twoNorm, Solver::QUIET,
+              cgStep, maxIterations, stepTol, p.twoNorm, Solver::QUIET,
               relativeErrors, &p.u_ex);
           solver.check();
           solver.preprocess();
@@ -115,7 +115,7 @@ struct CGTestSuite
             if (withIgnore)
                 cgStep.setIgnore(p.ignore);
             ::LoopSolver<typename Problem::Vector> solver(
-                &cgStep, maxIterations, stepTol, &p.twoNorm, verbosity,
+                cgStep, maxIterations, stepTol, p.twoNorm, verbosity,
                 relativeErrors, &p.u_ex);
             solver.check();
             timer.reset();
@@ -143,7 +143,7 @@ struct CGTestSuite
             if (withIgnore)
                 cgStep.setIgnore(p.ignore);
             ::LoopSolver<typename Problem::Vector> solver(
-                &cgStep, maxIterations, stepTol, &p.twoNorm, verbosity,
+                cgStep, maxIterations, stepTol, p.twoNorm, verbosity,
                 relativeErrors, &p.u_ex);
             solver.check();
             timer.reset();
@@ -167,7 +167,7 @@ struct CGTestSuite
                                   typename Problem::Vector>
                 cgStep(p.A, u_copy, rhs_copy, ilu0);
             ::LoopSolver<typename Problem::Vector> solver(
-                &cgStep, maxIterations, stepTol, &p.twoNorm, verbosity,
+                cgStep, maxIterations, stepTol, p.twoNorm, verbosity,
                 relativeErrors, &p.u_ex);
             solver.check();
             timer.reset();
@@ -189,7 +189,7 @@ struct CGTestSuite
                                   typename Problem::Vector>
                 cgStep(p.A, u_copy, rhs_copy, ssor);
             ::LoopSolver<typename Problem::Vector> solver(
-                &cgStep, maxIterations, stepTol, &p.twoNorm, verbosity,
+                cgStep, maxIterations, stepTol, p.twoNorm, verbosity,
                 relativeErrors, &p.u_ex);
             solver.check();
             timer.reset();
@@ -211,7 +211,7 @@ struct CGTestSuite
                                   typename Problem::Vector>
                 cgStep(p.A, u_copy, rhs_copy, ssor);
             ::LoopSolver<typename Problem::Vector> solver(
-                &cgStep, maxIterations, stepTol, &p.twoNorm, verbosity,
+                cgStep, maxIterations, stepTol, p.twoNorm, verbosity,
                 relativeErrors, &p.u_ex);
             solver.check();
             timer.reset();
@@ -233,7 +233,7 @@ struct CGTestSuite
                                   typename Problem::Vector>
                 cgStep(p.A, u_copy, rhs_copy, ssor);
             ::LoopSolver<typename Problem::Vector> solver(
-                &cgStep, maxIterations, stepTol, &p.twoNorm, verbosity,
+                cgStep, maxIterations, stepTol, p.twoNorm, verbosity,
                 relativeErrors, &p.u_ex);
             solver.check();
             timer.reset();
@@ -255,7 +255,7 @@ struct CGTestSuite
                                   typename Problem::Vector>
                 cgStep(p.A, u_copy, rhs_copy, ssor);
             ::LoopSolver<typename Problem::Vector> solver(
-                &cgStep, maxIterations, stepTol, &p.twoNorm, verbosity,
+                cgStep, maxIterations, stepTol, p.twoNorm, verbosity,
                 relativeErrors, &p.u_ex);
             solver.check();
             timer.reset();
diff --git a/dune/solvers/test/gssteptest.cc b/dune/solvers/test/gssteptest.cc
index 2296fa9d257afdedf08e13562a8aa63c13be629b..5538592858ac73e4c249c2d5bc00cc0ad2147936 100644
--- a/dune/solvers/test/gssteptest.cc
+++ b/dune/solvers/test/gssteptest.cc
@@ -54,7 +54,7 @@ struct GSTestSuite {
       step->setProblem(p.A, u_init, p.rhs);
       step->setIgnore(p.ignore);
 
-      LoopSolver solver(step, maxIterations, stepTol, &p.energyNorm, verbosity,
+      LoopSolver solver(*step, maxIterations, stepTol, p.energyNorm, verbosity,
                         relativeErrors);
       solver.check();
       solver.preprocess();
diff --git a/dune/solvers/test/mmgtest.cc b/dune/solvers/test/mmgtest.cc
index af9bfccf754ae4bdb455517ecd7ec331000b3f4c..0288bab7f64d09b7f6ab0acabefb71d74c283df9 100644
--- a/dune/solvers/test/mmgtest.cc
+++ b/dune/solvers/test/mmgtest.cc
@@ -42,10 +42,10 @@ void solveObstacleProblemByMMGSolver(const GridType& grid, const MatrixType& mat
 
     EnergyNorm<MatrixType, VectorType> baseEnergyNorm(baseSolverStep);
 
-    ::LoopSolver<VectorType> baseSolver(&baseSolverStep,
+    ::LoopSolver<VectorType> baseSolver(baseSolverStep,
                                          100,   // base iterations
                                          1e-8,  // tolerance
-                                         &baseEnergyNorm,
+                                         baseEnergyNorm,
                                          Solver::QUIET);
 
     // Make pre and postsmoothers
@@ -58,7 +58,7 @@ void solveObstacleProblemByMMGSolver(const GridType& grid, const MatrixType& mat
     mmgStep.setIgnore(ignore);
     mmgStep.setBaseSolver(baseSolver);
     mmgStep.setSmoother(&smoother);
-    mmgStep.setObstacleRestrictor(std::make_shared<MandelObstacleRestrictor<VectorType> >());
+    mmgStep.setObstacleRestrictor(MandelObstacleRestrictor<VectorType>());
 
     Dune::BitSetVector<blockSize> hasObstacle(x.size(),true);
     mmgStep.hasObstacle_       = &hasObstacle;
@@ -84,10 +84,10 @@ void solveObstacleProblemByMMGSolver(const GridType& grid, const MatrixType& mat
 
     EnergyNorm<MatrixType,VectorType> h1SemiNorm(mat);
 
-    ::LoopSolver<VectorType> solver (&mmgStep,
+    ::LoopSolver<VectorType> solver (mmgStep,
                                    maxIterations,    // iterations
                                    tolerance,   // tolerance
-                                   &h1SemiNorm,
+                                   h1SemiNorm,
                                    Solver::REDUCED);
     // solve problem
     solver.preprocess();
diff --git a/dune/solvers/test/multigridtest.cc b/dune/solvers/test/multigridtest.cc
index a2aefae59807c9624d408938608fa6fdb3e92f4c..be4eb374f8c855f780218e8856613f0c12311816 100644
--- a/dune/solvers/test/multigridtest.cc
+++ b/dune/solvers/test/multigridtest.cc
@@ -75,7 +75,7 @@ struct MultigridTestSuite
 
         typename Problem::Norm basenorm(basesolver_step);
 
-        Solver basesolver(&basesolver_step, 1, 1e-10, &basenorm, Solver::QUIET);
+        Solver basesolver(basesolver_step, 1, 1e-10, basenorm, Solver::QUIET);
 
         // create iteration step and set all kinds of data
         MGStep mgStep;
@@ -87,7 +87,7 @@ struct MultigridTestSuite
         mgStep.setBaseSolver(basesolver);
 
         // create loop solver
-        Solver solver(&mgStep, maxIterations, tol, &p.energyNorm, Solver::FULL);
+        Solver solver(mgStep, maxIterations, tol, p.energyNorm, Solver::FULL);
 
         // solve problem
         solver.preprocess();
diff --git a/dune/solvers/test/obstacletnnmgtest.cc b/dune/solvers/test/obstacletnnmgtest.cc
index 6321ca035355eec91a46d3e2710b2e057fc2ab37..d7a55e48f0244f9a92d5d227269b4b96050482e9 100644
--- a/dune/solvers/test/obstacletnnmgtest.cc
+++ b/dune/solvers/test/obstacletnnmgtest.cc
@@ -78,7 +78,7 @@ void solveObstacleProblemByTNNMG(const GridType& grid, const MatrixType& mat, Ve
     tnnmgStep.nestedIteration();
 
     // cretae loop solver
-    Solver solver(&tnnmgStep, maxIterations, tolerance, &norm, Solver::FULL);
+    Solver solver(tnnmgStep, maxIterations, tolerance, norm, Solver::FULL);
 
     // solve problem
     solver.solve();
diff --git a/dune/solvers/test/projectedgradienttest.cc b/dune/solvers/test/projectedgradienttest.cc
index 7eeef5fdc704a57bb504fd50128ec4dda04a1102..131c73b0232efaa0804f7ded640769eddf540f4f 100644
--- a/dune/solvers/test/projectedgradienttest.cc
+++ b/dune/solvers/test/projectedgradienttest.cc
@@ -43,10 +43,10 @@ bool solveObstacleProblemByProjectedGradientSolver(const MatrixType& mat, Vector
     //projGrad.iterate();
     EnergyNorm<MatrixType,VectorType>* h1SemiNorm = new EnergyNorm<MatrixType,VectorType>(mat);
 
-    ::LoopSolver<VectorType> solver (&projGradStep,
+    ::LoopSolver<VectorType> solver (projGradStep,
                                     maxIterations,    // iterations
                                     tolerance,   // tolerance
-                                    h1SemiNorm,
+                                    *h1SemiNorm,
                                     Solver::REDUCED);
     solver.solve();
     x = projGradStep.getSol();