diff --git a/dune/solvers/test/cgsteptest.cc b/dune/solvers/test/cgsteptest.cc
index 0289a4d60d3ff24e0066ed83b56b2f35ad0409a4..2af7c726f0e99a2957fb367068c6887f83fbb821 100644
--- a/dune/solvers/test/cgsteptest.cc
+++ b/dune/solvers/test/cgsteptest.cc
@@ -6,6 +6,7 @@
 #include <iostream>
 
 #include <dune/common/parallel/mpihelper.hh>
+#include <dune/common/timer.hh>
 
 #include <dune/solvers/solvers/loopsolver.hh>
 #include <dune/solvers/iterationsteps/blockgssteps.hh>
@@ -22,10 +23,11 @@ public:
     {}
 
     bool
-    analyse(typename Problem::Vector const &candidate, std::string testCase) {
+    analyse(typename Problem::Vector const &candidate,
+            SolverResult solverResult, double t, std::string testCase) {
         const auto twoNormDiff = p_.twoNorm.diff(p_.u_ex, candidate);
-        std::cout << "Defect two norm |u-u_n| for solver \"" << testCase
-                  << "\": " << twoNormDiff << std::endl;
+        printf("%f | %3zu | %11g | %11g | %s\n", t, solverResult.iterations,
+               solverResult.conv_rate, twoNormDiff, testCase.c_str());
         if (twoNormDiff > tolerance_) {
             std::cerr << "### Error too large for solver \"" << testCase << "\"."
                       << std::endl;
@@ -59,12 +61,44 @@ struct CGTestSuite
             SymmetricSampleProblem<1, typename GridType::LevelGridView>;
         Problem p(grid.levelGridView(grid.maxLevel()));
 
-        const auto verbosity = Solver::REDUCED;
+        const auto verbosity = Solver::QUIET;
         const bool relativeErrors = false;
 
+        // Test that ignoreNodes are honoured.
+        {
+          typename Problem::Vector u_copy = p.u;
+          for (size_t i = 0; i < p.u.size(); ++i)
+            if (p.ignore[i].any())
+              u_copy[i] += 1.0;
+          typename Problem::Vector rhs_copy = p.rhs;
+
+          Dune::Solvers::CGStep<typename Problem::Matrix,
+                                typename Problem::Vector>
+              cgStep(p.A, u_copy, rhs_copy);
+          cgStep.setIgnore(p.ignore);
+          ::LoopSolver<typename Problem::Vector> solver(
+              &cgStep, maxIterations, stepTol, &p.twoNorm, Solver::QUIET,
+              relativeErrors);
+          solver.check();
+          solver.preprocess();
+          solver.solve();
+
+          for (size_t i = 0; i < p.u.size(); ++i)
+            if (p.ignore[i].any())
+              if (std::abs(u_copy[i] - 1.0 - p.u_ex[i]) > solveTol) {
+                std::cerr << "### error: ignoredNodes not respected!"
+                          << std::endl;
+                passed = false;
+                break;
+              }
+        }
+
+        // Test if we get the right solution and benchmark
         Analyser<Problem> analyser(p, solveTol);
+        Dune::Timer timer;
+        printf("time [s] | #it |  conv. rate | abs. error  | preconditioner\n");
         {
-            std::string const testCase = "Dune::Solvers::CGStep                ";
+            std::string const testCase = "none";
 
             typename Problem::Vector u_copy = p.u;
             typename Problem::Vector rhs_copy = p.rhs;
@@ -77,13 +111,15 @@ struct CGTestSuite
                 &cgStep, maxIterations, stepTol, &p.twoNorm, verbosity,
                 relativeErrors);
             solver.check();
+            timer.reset();
             solver.preprocess();
             solver.solve();
 
-            passed &= analyser.analyse(u_copy, testCase);
+            passed &= analyser.analyse(u_copy, solver.getResult(),
+                                       timer.elapsed(), testCase);
         }
         {
-            std::string const testCase = "Dune::Solvers::CGStep, preconditioned";
+            std::string const testCase = "BlockGS";
 
             typename Problem::Vector u_copy = p.u;
             typename Problem::Vector rhs_copy = p.rhs;
@@ -102,41 +138,13 @@ struct CGTestSuite
                 &cgStep, maxIterations, stepTol, &p.twoNorm, verbosity,
                 relativeErrors);
             solver.check();
+            timer.reset();
             solver.preprocess();
             solver.solve();
 
-            passed &= analyser.analyse(u_copy, testCase);
+            passed &= analyser.analyse(u_copy, solver.getResult(),
+                                       timer.elapsed(), testCase);
         }
-
-        // Test that ignoreNodes are honoured.
-        {
-          typename Problem::Vector u_copy = p.u;
-          for (size_t i = 0; i < p.u.size(); ++i)
-            if (p.ignore[i].any())
-              u_copy[i] += 1.0;
-          typename Problem::Vector rhs_copy = p.rhs;
-
-          Dune::Solvers::CGStep<typename Problem::Matrix,
-                                typename Problem::Vector>
-              cgStep(p.A, u_copy, rhs_copy);
-          cgStep.setIgnore(p.ignore);
-          ::LoopSolver<typename Problem::Vector> solver(
-              &cgStep, maxIterations, stepTol, &p.twoNorm, Solver::QUIET,
-              relativeErrors);
-          solver.check();
-          solver.preprocess();
-          solver.solve();
-
-          for (size_t i = 0; i < p.u.size(); ++i)
-            if (p.ignore[i].any())
-              if (std::abs(u_copy[i] - 1.0 - p.u_ex[i]) > solveTol) {
-                std::cerr << "### error: ignoredNodes not respected!"
-                          << std::endl;
-                passed = false;
-                break;
-              }
-        }
-
         return passed;
     }
 };