diff --git a/dune/solvers/iterationsteps/cgstep.cc b/dune/solvers/iterationsteps/cgstep.cc
index 94f86e9d6cb254095e8237283c5097e9958ef9a6..aa2264c1c6bae650457a6cb5ca9e02e625f68a2c 100644
--- a/dune/solvers/iterationsteps/cgstep.cc
+++ b/dune/solvers/iterationsteps/cgstep.cc
@@ -35,6 +35,10 @@ void CGStep<MatrixType, VectorType>::preprocess()
 template <class MatrixType, class VectorType>
 void CGStep<MatrixType, VectorType>::iterate()
 {
+    // Avoid divide-by-zero. If r_squared was zero, we're done anyway.
+    if (r_squared_old_ <= 0)
+        return;
+
     VectorType q(*x_);
 
     matrix_->mv(p_, q);                             // q_0     = Ap_0