diff --git a/dune-solvers/iterationsteps/amgstep.hh b/dune-solvers/iterationsteps/amgstep.hh
index b110e374c247054e519c7050dd3054b8c549b56a..86115fe4c23f0e3d8f40d476af4b9515a07cc4af 100644
--- a/dune-solvers/iterationsteps/amgstep.hh
+++ b/dune-solvers/iterationsteps/amgstep.hh
@@ -52,8 +52,16 @@ public:
              VectorType& rhs)
     {
         setProblem(*stiffnessMatrix, x, rhs);
+    }
 
-        fop_ = std::auto_ptr<Operator>(new Operator(*stiffnessMatrix));
+    /** \brief Initialize the iteration step but don't actually build the matrix hierarchy yet */
+    virtual void setProblem(const MatrixType& stiffnessMatrix, 
+             VectorType& x, 
+             VectorType& rhs)
+    {
+        LinearIterationStep<MatrixType, VectorType>::setProblem(stiffnessMatrix, x, rhs);
+
+        fop_ = std::auto_ptr<Operator>(new Operator(stiffnessMatrix));
     }
 
     /** \brief Sets up an algebraic hierarchy