diff --git a/dune/solvers/solvers/loopsolver.cc b/dune/solvers/solvers/loopsolver.cc
index 248561874decff03dad42cfb22c29ac59abac214..01593c5200f9cd3e0447061c6bded0ae48327a18 100644
--- a/dune/solvers/solvers/loopsolver.cc
+++ b/dune/solvers/solvers/loopsolver.cc
@@ -98,7 +98,7 @@ void Dune::Solvers::LoopSolver<VectorType, BitVectorType>::solve()
         // Please don't replace this call to 'diff' by computing the norm of the difference.
         // In some nonlinear DD applications the 'diff' method may be nonlinear.
         real_type normOfCorrection = this->errorNorm_->diff(oldSolution,this->iterationStep_->getSol());
-        real_type convRate = (normOfOldCorrection > 0)
+        convRate_ = (normOfOldCorrection > 0)
             ? normOfCorrection / normOfOldCorrection : 0.0;
         error = normOfCorrection;
         normOfOldCorrection = normOfCorrection;
@@ -107,7 +107,7 @@ void Dune::Solvers::LoopSolver<VectorType, BitVectorType>::solve()
         if (referenceSolution_)
         {
             normOfError = this->errorNorm_->diff(this->iterationStep_->getSol(), *referenceSolution_);
-            convRate = (normOfOldError > 0) ? normOfError / normOfOldError : 0.0;
+            convRate_ = (normOfOldError > 0) ? normOfError / normOfOldError : 0.0;
             error = normOfError;
             normOfOldError = normOfError;
         }
@@ -117,9 +117,9 @@ void Dune::Solvers::LoopSolver<VectorType, BitVectorType>::solve()
             error = (oldNorm == 0) ? std::numeric_limits<real_type>::max()
                                    : error / oldNorm;
 
-        if (!std::isinf(convRate) && !std::isnan(convRate) && i>0)
+        if (!std::isinf(convRate_) && !std::isnan(convRate_) && i>0)
         {
-            totalConvRate *= convRate;
+            totalConvRate *= convRate_;
             this->maxTotalConvRate_ = std::max(this->maxTotalConvRate_, std::pow(totalConvRate, 1/((real_type)convRateCounter+1)));
             convRateCounter++;
         }
@@ -151,7 +151,7 @@ void Dune::Solvers::LoopSolver<VectorType, BitVectorType>::solve()
                 std::cout << "         ";
             else
                 std::cout << std::fixed
-                          << std::setw(9) << std::setprecision(5) << convRate;
+                          << std::setw(9) << std::setprecision(5) << convRate_;
 
             std::cout << std::setprecision(oldPrecision);
             std::cout.flags(oldFormatFlags);
diff --git a/dune/solvers/solvers/loopsolver.hh b/dune/solvers/solvers/loopsolver.hh
index 9b9465e18fdb875080580edc33cc53f854eba8a6..4d903474bd693ecd143244e61ff6ed1da98760fb 100644
--- a/dune/solvers/solvers/loopsolver.hh
+++ b/dune/solvers/solvers/loopsolver.hh
@@ -107,6 +107,16 @@ public:
         return iter_;
     }
 
+
+    /**
+     * \brief Get current convergence rate
+     */
+    auto convergenceRate() const
+    {
+        return convRate_;
+    }
+
+
     virtual void preprocess();
 
     /**  \brief Loop, call the iteration procedure
@@ -119,6 +129,8 @@ protected:
     std::vector<Dune::Solvers::Criterion> criteria_;
 
     int iter_;
+
+    real_type convRate_;
 };
 
 }  // namespace Solvers