diff --git a/dune/solvers/iterationsteps/mmgstep.hh b/dune/solvers/iterationsteps/mmgstep.hh
index 0fccf3b630600e5d4c35076f292575bd2a1de89f..95a715267c90b7c57f58951b49d90d7ad8586395 100644
--- a/dune/solvers/iterationsteps/mmgstep.hh
+++ b/dune/solvers/iterationsteps/mmgstep.hh
@@ -8,6 +8,7 @@
 #include <dune/solvers/transferoperators/multigridtransfer.hh>
 
 #include <dune/solvers/common/boxconstraint.hh>
+#include <dune/solvers/common/wrapownshare.hh>
 #include <dune/solvers/transferoperators/obstaclerestrictor.hh>
 
 /** \brief The general monotone multigrid solver
@@ -59,8 +60,9 @@ public:
     void setObstacles(ObstacleVectorType* obstacles) {obstacles_ = obstacles;}
 
     //! Set the obstacle restrictor
-    void setObstacleRestrictor(std::shared_ptr<ObstacleRestrictor<VectorType> > restrictor) {
-        obstacleRestrictor_ = restrictor;
+    template <class Restrictor>
+    void setObstacleRestrictor(Restrictor&& restrictor) {
+        obstacleRestrictor_ = Dune::Solvers::wrap_own_share<ObstacleRestrictor<VectorType> >(std::forward<Restrictor>(restrictor));
     }
 
     //! Bitfield determining which fine grid nodes have an obstacle