diff --git a/dune/solvers/solvers/iterativesolver.hh b/dune/solvers/solvers/iterativesolver.hh
index 5b0452f0f0c8f3db298dd0ce03a91e29b13c3897..90d7089a434362781c7c45ccb639fc0d54df1ea7 100644
--- a/dune/solvers/solvers/iterativesolver.hh
+++ b/dune/solvers/solvers/iterativesolver.hh
@@ -1,6 +1,8 @@
 #ifndef DUNE_SOLVERS_ITERATIVE_SOLVER_HH
 #define DUNE_SOLVERS_ITERATIVE_SOLVER_HH
 
+#include <dune/common/ftraits.hh>
+
 #include <dune/solvers/solvers/solver.hh>
 #include <dune/solvers/iterationsteps/iterationstep.hh>
 #include <dune/solvers/norms/norm.hh>
@@ -9,6 +11,11 @@
     template <class VectorType, class BitVectorType = Dune::BitSetVector<VectorType::block_type::dimension> >
     class IterativeSolver : public Solver
     {
+        typedef typename VectorType::field_type field_type;
+
+        // For complex-valued data
+        typedef typename Dune::FieldTraits<field_type>::real_type real_type;
+
     public:
 
         /** \brief Constructor taking all relevant data */
@@ -60,7 +67,7 @@
             directory name.  All intermediate iterates are then written there. */
         std::string historyBuffer_;
 
-        double maxTotalConvRate_;
+        real_type maxTotalConvRate_;
 
         bool useRelativeError_;