diff --git a/src/one-body-sample.cc b/src/one-body-sample.cc
index 526f0a22d3821e8463d06f63fc0c5f70025d223a..a56de6468076192f56be1a25dcc7949452f086d4 100644
--- a/src/one-body-sample.cc
+++ b/src/one-body-sample.cc
@@ -35,6 +35,7 @@
 #include <dune/fufem/functionspacebases/p1nodalbasis.hh>
 #include <dune/solvers/common/numproc.hh> // Solver::FULL
 #include <dune/solvers/iterationsteps/blockgsstep.hh>
+#include <dune/solvers/iterationsteps/truncatedblockgsstep.hh>
 #include <dune/solvers/norms/energynorm.hh>
 #include <dune/solvers/solvers/loopsolver.hh>
 #include <dune/tnnmg/iterationsteps/genericnonlineargs.hh>
@@ -188,10 +189,12 @@ int main() {
     VectorType u1(grid.size(grid.maxLevel(), dim));
     u1 = 0;
     VectorType u2 = u1;
+    VectorType u3 = u1;
     CellVectorType vonMisesStress;
 
     VectorType b1;
     VectorType b2;
+    VectorType b3;
 
     std::vector<Dune::FieldVector<double, 1>> nodalIntegrals;
     assemble_frictional<GridType, GridType::LeafGridView, SmallVector, P1Basis>(
@@ -204,11 +207,12 @@ int main() {
       // b = neumann
       assemble_neumann<GridType, GridType::LeafGridView, SmallVector, P1Basis>(
           leafView, p1Basis, neumannNodes, b1, run);
-      b2 = b1;
+      b3 = b2 = b1;
 
       // b += linear update
       stiffnessMatrix.umv(u1, b1);
       stiffnessMatrix.umv(u2, b2);
+      stiffnessMatrix.umv(u3, b3);
 
       // {{{ Assemble terms for the nonlinearity
       // TODO: Random value
@@ -272,20 +276,37 @@ int main() {
                                       Solver::QUIET); // Solver::QUIET);
         solver.solve();
       }
+
+      {
+        TruncatedBlockGSStep<OperatorType, VectorType> blockGSStep(
+            stiffnessMatrix, u3, b3);
+        blockGSStep.ignoreNodes_ = &ignoreNodes;
+
+        LoopSolver<VectorType> solver(&blockGSStep, solver_maxIterations,
+                                      solver_tolerance, &energyNorm,
+                                      Solver::QUIET); // Solver::QUIET);
+        solver.solve();
+      }
     }
     std::cout << std::endl;
 
-    VectorType diff = u2;
-    diff -= u1;
-    std::cout << "Infinity norm of the difference of the two solutions: "
-              << diff.infinity_norm() << std::endl;
+    VectorType diff2 = u2;
+    diff2 -= u1;
+    std::cout << "sup |u1 - u2| = " << diff2.infinity_norm() << std::endl;
+    std::cout << "|u1 - u2| = " << diff2.two_norm() << std::endl;
+
+    VectorType diff3 = u3;
+    diff3 -= u1;
+    std::cout << "sup |u1 - u3| = " << diff3.infinity_norm() << std::endl;
+    std::cout << "|u1 - u3| = " << diff3.two_norm() << std::endl;
 
     // Print displacement on frictional boundary
     for (size_t i = 0; i < frictionalNodes.size(); ++i)
       if (frictionalNodes[i][0])
-        std::cout << boost::format("u1[%02d] = %+3e, %|40t|u2[%02d] = %+3e,    "
-                                   " s[%02d] = %+3e") %
-                         i % u1[i] % i % u2[i] % i %
+        std::cout << boost::format("u1[%02d] = %+3e, %|40t|u2[%02d] = %+3e, "
+                                   "%|80t|u3[%02d] = %+3e, %|120t|s[%02d] = "
+                                   "%+3e") %
+                         i % u1[i] % i % u2[i] % i % u3[i] % i %
                          vonMisesStress[i] << std::endl;
   }
   catch (Dune::Exception &e) {