diff --git a/dune/solvers/solvers/fixedstepsolver.hh b/dune/solvers/solvers/fixedstepsolver.hh
new file mode 100644
index 0000000000000000000000000000000000000000..755c5a49d4146a40c9b8d7b607f375016efff0a7
--- /dev/null
+++ b/dune/solvers/solvers/fixedstepsolver.hh
@@ -0,0 +1,64 @@
+// -*- tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*-
+// vi: set et ts=4 sw=2 sts=2:
+#ifndef DUNE_SOLVERS_FIXEDSTEPSOLVER_HH
+#define DUNE_SOLVERS_FIXEDSTEPSOLVER_HH
+
+#include <memory>
+
+#include <dune/solvers/common/defaultbitvector.hh>
+#include <dune/solvers/common/resize.hh>
+
+
+
+namespace Dune {
+namespace Solvers {
+
+/**
+ * \brief An iterative solver using a fixed number of iterations
+ *
+ * \tparam Matrix Matrix type of the system
+ * \tparam Vector Vector type of the system
+ */
+template<class Matrix, class Vector, class Step>
+class FixedStepSolver
+{
+  using BitVector = Dune::Solvers::DefaultBitVector_t<Vector>;
+
+public:
+
+  /** \brief Constructor
+   * \param step The iteration step object to use
+   * \param noOfSteps The number of steps to take
+   */
+  FixedStepSolver(const std::shared_ptr<Step> step, unsigned int noOfSteps=1)
+  : step_(step),
+    noOfSteps_(noOfSteps)
+  {}
+
+  /** \brief Solve */
+  void operator()(Vector& x, const Matrix& m, const Vector& r)
+  {
+    Dune::Solvers::resizeInitialize(ignore_, x, false);
+    step_->setIgnore(ignore_);
+    step_->setProblem(m, x, r);
+    step_->preprocess();
+    for (unsigned int i=0; i<noOfSteps_; i++)
+      step_->iterate();
+  }
+
+private:
+  std::shared_ptr<Step> step_;
+  unsigned int noOfSteps_;
+  BitVector ignore_;
+};
+
+
+
+} // end namespace Solvers
+} // end namespace Dune
+
+
+
+#endif // DUNE_SOLVERS_FIXEDSTEPSOLVER_HH
+
+
diff --git a/dune/solvers/transferoperators/densemultigridtransfer.hh b/dune/solvers/transferoperators/densemultigridtransfer.hh
index e16abce4d51b218a2c7be572b8469f03c75f1cbb..310b027d6ac1fe292d1b58f36ba643a4db9b71fb 100644
--- a/dune/solvers/transferoperators/densemultigridtransfer.hh
+++ b/dune/solvers/transferoperators/densemultigridtransfer.hh
@@ -121,6 +121,11 @@ public:
         return matrix_;
     }
 
+    /** \brief Set matrix */
+    template<class M>
+    void setMatrix(M&& m) {
+        matrix_ = std::forward<M>(m);
+    }
 
 protected: