diff --git a/dune/solvers/iterationsteps/cgstep.cc b/dune/solvers/iterationsteps/cgstep.cc
index 9dae98fdfb4d962627ee3fa86dd972774904d55a..50490f28aa7a7b31178acce5f20349d191f270a4 100644
--- a/dune/solvers/iterationsteps/cgstep.cc
+++ b/dune/solvers/iterationsteps/cgstep.cc
@@ -3,13 +3,13 @@
 
 #include <dune/solvers/common/canignore.hh>
 
-template <class MatrixType, class VectorType>
-void CGStep<MatrixType, VectorType>::check() const
+template <class MatrixType, class VectorType, class Ignore>
+void CGStep<MatrixType, VectorType, Ignore>::check() const
 {
 }
 
-template <class MatrixType, class VectorType>
-void CGStep<MatrixType, VectorType>::preprocess()
+template <class MatrixType, class VectorType, class Ignore>
+void CGStep<MatrixType, VectorType, Ignore>::preprocess()
 {
     // Compute the residual (r starts out as the rhs)
     this->mat_->mmv(*x_,r_);
@@ -19,7 +19,7 @@ void CGStep<MatrixType, VectorType>::preprocess()
                 r_[i] = 0;
 
     if (preconditioner_) {
-        using CanIgnore_t = CanIgnore<DefaultBitVector_t<VectorType>>;
+        using CanIgnore_t = CanIgnore<Ignore>;
         CanIgnore_t *asCanIgnore = dynamic_cast<CanIgnore_t*>(preconditioner_);
         if (asCanIgnore != nullptr and this->hasIgnore())
             asCanIgnore->setIgnore(this->ignore());
@@ -32,8 +32,8 @@ void CGStep<MatrixType, VectorType>::preprocess()
     r_squared_old_ = p_*r_;
 }
 
-template <class MatrixType, class VectorType>
-void CGStep<MatrixType, VectorType>::iterate()
+template <class MatrixType, class VectorType, class Ignore>
+void CGStep<MatrixType, VectorType, Ignore>::iterate()
 {
     // Avoid divide-by-zero. If r_squared was zero, we're done anyway.
     if (r_squared_old_ <= 0)
diff --git a/dune/solvers/iterationsteps/cgstep.hh b/dune/solvers/iterationsteps/cgstep.hh
index 366544f8e2f69cc7fdc0d79725df1a93c8cec983..6d7bc3ecdc9badd8c366725fed8d359206ef45ef 100644
--- a/dune/solvers/iterationsteps/cgstep.hh
+++ b/dune/solvers/iterationsteps/cgstep.hh
@@ -4,16 +4,18 @@
 #define DUNE_SOLVERS_ITERATIONSTEPS_CGSTEP_HH
 
 #include <dune/solvers/common/preconditioner.hh>
+#include <dune/solvers/common/defaultbitvector.hh>
 #include <dune/solvers/iterationsteps/lineariterationstep.hh>
 
 namespace Dune {
     namespace Solvers {
 
         //! A conjugate gradient solver
-        template <class MatrixType, class VectorType>
-        class CGStep : public LinearIterationStep<MatrixType,VectorType>
+        template <class MatrixType, class VectorType, class Ignore = DefaultBitVector_t<VectorType>>
+        class CGStep : public LinearIterationStep<MatrixType,VectorType,Ignore>
         {
-            using Base = LinearIterationStep<MatrixType,VectorType>;
+            using Base = LinearIterationStep<MatrixType,VectorType,Ignore>;
+            using Preconditioner = Dune::Solvers::Preconditioner<MatrixType, VectorType, Ignore>;
 
         public:
             CGStep()
@@ -30,7 +32,7 @@ namespace Dune {
             CGStep(const MatrixType& matrix,
                    VectorType& x,
                    const VectorType& rhs,
-                   Preconditioner<MatrixType, VectorType>& preconditioner)
+                   Preconditioner& preconditioner)
                 : Base(matrix,x), p_(rhs.size()), r_(rhs),
                   preconditioner_(&preconditioner)
             {}
@@ -54,7 +56,7 @@ namespace Dune {
             VectorType r_; // residual
             using Base::x_;
             double r_squared_old_;
-            Preconditioner<MatrixType, VectorType>* preconditioner_;
+            Preconditioner* preconditioner_;
         };