diff --git a/dune/solvers/solvers/loopsolver.cc b/dune/solvers/solvers/loopsolver.cc
index bf98e04248096da3f38505d62402b529637c262b..075c760ae4f4ea20014de65deaef330c8b16c64e 100644
--- a/dune/solvers/solvers/loopsolver.cc
+++ b/dune/solvers/solvers/loopsolver.cc
@@ -16,6 +16,12 @@ void ::LoopSolver<VectorType, BitVectorType>::check() const
     IterativeSolver<VectorType,BitVectorType>::check();
 }
 
+template <class VectorType, class BitVectorType>
+void LoopSolver<VectorType, BitVectorType>::preprocess()
+{
+    this->iterationStep_->preprocess();
+}
+
 template <class VectorType, class BitVectorType>
 void LoopSolver<VectorType, BitVectorType>::solve()
 {
@@ -25,8 +31,6 @@ void LoopSolver<VectorType, BitVectorType>::solve()
     // Check whether the solver is set up properly
     this->check();
 
-    this->iterationStep_->preprocess();
-
     if (this->verbosity_ != NumProc::QUIET)
         std::cout << "--- LoopSolver ---\n";
 
diff --git a/dune/solvers/solvers/loopsolver.hh b/dune/solvers/solvers/loopsolver.hh
index 7bb4185bedc757e7270c1ceefb5068687fc416b4..8312704b28f5f688b7882b400b1f0c31f45b842b 100644
--- a/dune/solvers/solvers/loopsolver.hh
+++ b/dune/solvers/solvers/loopsolver.hh
@@ -37,6 +37,8 @@ public:
       */
     virtual void check() const;
 
+    virtual void preprocess();
+
     /**  \brief Loop, call the iteration procedure
       *  and monitor convergence
       */