diff --git a/dune/solvers/iterationsteps/multigridstep.hh b/dune/solvers/iterationsteps/multigridstep.hh
index a1dce7d69107da85a98459cd02dcfe5d486cbfb9..e2ae953c0788c2b0f3d48d88abb576008413a1ee 100644
--- a/dune/solvers/iterationsteps/multigridstep.hh
+++ b/dune/solvers/iterationsteps/multigridstep.hh
@@ -54,7 +54,7 @@ namespace Dune {
 
             setSmoother(preSmoother,postSmoother);
 
-            basesolver_   = baseSolver;
+            basesolver_ = std::shared_ptr<Solver>(baseSolver, [](auto*){} );
 
             this->ignoreNodes_ = ignoreNodes;
         }
diff --git a/dune/solvers/test/multigridtest.cc b/dune/solvers/test/multigridtest.cc
index 43eb20949acdc857c6cf5d5c0f92a49d76b9fc87..46a31182aa02e92832ab300f44535e2150bc0391 100644
--- a/dune/solvers/test/multigridtest.cc
+++ b/dune/solvers/test/multigridtest.cc
@@ -85,6 +85,13 @@ struct MultigridTestSuite
         mgStep.setIgnore(p.ignore);
         mgStep.setBaseSolver(basesolver);
 
+        // create an unused second multigrid step just to check that the constructor works
+        MGStep alternativeStep(p.A, p.u, p.rhs,
+                               1, 3, 3,
+                               &smoother, &smoother,
+                               &basesolver,
+                               &p.ignore);
+
         // create loop solver
         Solver solver(mgStep, maxIterations, tol, p.energyNorm, Solver::FULL);