diff --git a/dune/solvers/iterationsteps/multigridstep.cc b/dune/solvers/iterationsteps/multigridstep.cc
index da97e31e6893a310a9e9d7c835b71eb19cbd31d0..af839dc1f49fe0262afda5a6d3e6e041e9535a27 100644
--- a/dune/solvers/iterationsteps/multigridstep.cc
+++ b/dune/solvers/iterationsteps/multigridstep.cc
@@ -58,7 +58,7 @@ void MultigridStep<MatrixType, VectorType, BitVectorType>::preprocess()
     //   Check that transfer operators have been supplied
     // //////////////////////////////////////////////////////////
     for (size_t i=0; i<this->mgTransfer_.size(); i++)
-        if (this->mgTransfer_[i] == NULL)
+        if (!this->mgTransfer_[i])
             DUNE_THROW(SolverError, "You have not supplied a multigrid restriction operator "
                        "for level " << i);
 
diff --git a/dune/solvers/iterationsteps/multigridstep.hh b/dune/solvers/iterationsteps/multigridstep.hh
index 2af893d291e8d45097b9a6de421227999742a41f..344063aa390794726dc08f86b189b572ff1f580b 100644
--- a/dune/solvers/iterationsteps/multigridstep.hh
+++ b/dune/solvers/iterationsteps/multigridstep.hh
@@ -9,7 +9,6 @@
 
 #include <dune/solvers/transferoperators/multigridtransfer.hh>
 #include <dune/solvers/solvers/iterativesolver.hh>
-#include <dune/solvers/common/wrapownshare.hh>
 
 #include "lineariterationstep.hh"
 
@@ -101,35 +100,30 @@ namespace Dune {
         {
             mgTransfer_.resize(transfer.size());
             for(size_t j=0; j<transfer.size(); ++j)
-                mgTransfer_[j] = transfer[j];
+                mgTransfer_[j] = Dune::stackobject_to_shared_ptr(*transfer[j]);
         }
 
         /**
-         * \brief Set transfer operator hierarchy from vector of shared_ptr's.
-         *
-         * Be careful: The Multigrid step does currently not share ownership
-         * afterwards. This may change in the future.
-         */
+         * \brief Set transfer operator hierarchy from vector of shared_ptr's taking over ownership. */
         template <class DerivedTransfer>
         void setTransferOperators(const std::vector<typename std::shared_ptr<DerivedTransfer> >& transfer)
         {
             mgTransfer_.resize(transfer.size());
             for(size_t j=0; j<transfer.size(); ++j)
-                mgTransfer_[j] = transfer[j].get();
+                mgTransfer_[j] = transfer[j];
         }
 
         /**
          * \brief Set transfer operator hierarchy from vector.
          *
          * Be careful: The Multigrid step will not copy the transfer operators
-         * or share ownership
          */
         template <class DerivedTransfer>
         void setTransferOperators(const std::vector<DerivedTransfer>& transfer)
         {
             mgTransfer_.resize(transfer.size());
             for(size_t j=0; j<transfer.size(); ++j)
-                mgTransfer_[j] = &transfer[j];
+                mgTransfer_[j] = Dune::stackobject_to_shared_ptr(transfer[j]);
         }
 
         virtual void iterate();
@@ -242,7 +236,7 @@ namespace Dune {
         std::vector<VectorType> rhsHierarchy_;
 
         //protected:
-        std::vector<MultigridTransfer<VectorType, BitVectorType, MatrixType>* > mgTransfer_;
+        std::vector<std::shared_ptr<MultigridTransfer<VectorType, BitVectorType, MatrixType> > > mgTransfer_;
 
     protected: