diff --git a/dune/solvers/iterationsteps/cgstep.cc b/dune/solvers/iterationsteps/cgstep.cc
index 3085b2b776afdb0dcd96f4b1fed936b2db3ccb30..94f86e9d6cb254095e8237283c5097e9958ef9a6 100644
--- a/dune/solvers/iterationsteps/cgstep.cc
+++ b/dune/solvers/iterationsteps/cgstep.cc
@@ -1,6 +1,8 @@
 // -*- tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 4 -*-
 // vi: set et ts=8 sw=4 sts=4:
 
+#include <dune/solvers/common/canignore.hh>
+
 template <class MatrixType, class VectorType>
 void CGStep<MatrixType, VectorType>::check() const
 {
@@ -17,6 +19,11 @@ void CGStep<MatrixType, VectorType>::preprocess()
                 r_[i] = 0;
 
     if (preconditioner_) {
+        using CanIgnore_t = CanIgnore<DefaultBitVector_t<VectorType>>;
+        CanIgnore_t *asCanIgnore = dynamic_cast<CanIgnore_t*>(preconditioner_);
+        if (asCanIgnore != nullptr and this->hasIgnore())
+            asCanIgnore->setIgnore(this->ignore());
+
         preconditioner_->setMatrix(*matrix_);
         preconditioner_->apply(p_, r_);
     } else
diff --git a/dune/solvers/test/cgsteptest.cc b/dune/solvers/test/cgsteptest.cc
index 2acc984df817f927cfe6d57f43c8be591de50e3a..87cc7f62acef5294695170f4e15506f42967d1f7 100644
--- a/dune/solvers/test/cgsteptest.cc
+++ b/dune/solvers/test/cgsteptest.cc
@@ -93,7 +93,6 @@ struct CGTestSuite
                                                   typename Problem::Vector>::
                     create(Dune::Solvers::BlockGS::LocalSolvers::gs(),
                            Dune::Solvers::BlockGS::Direction::SYMMETRIC);
-            blockgs.setIgnore(p.ignore);
             Dune::Solvers::CGStep<typename Problem::Matrix,
                                   typename Problem::Vector> cgStep(p.A, u_copy,
                                                                    rhs_copy,