diff --git a/src/one-body-sample.cc b/src/one-body-sample.cc
index f0820d1fb59b87d629e60f0a002b51ccb3de69cc..dd233f3f94b8b07ca9884fa73351819e681ce8fe 100644
--- a/src/one-body-sample.cc
+++ b/src/one-body-sample.cc
@@ -257,10 +257,9 @@ int main(int argc, char *argv[]) {
           if (ignoreNodes[i].count() == dim)
             dirichletFunction.evaluate(time, u_diff[i][0]);
 
-        for (size_t state_fpi = 0;
-             state_fpi <
-                 parset.get<size_t>("solver.tnnmg.fixed_point_iterations");
-             ++state_fpi) {
+        auto const state_fpi_max =
+            parset.get<size_t>("solver.tnnmg.fixed_point_iterations");
+        for (size_t state_fpi = 1; state_fpi <= state_fpi_max; ++state_fpi) {
           auto myGlobalNonlinearity =
               assemble_nonlinearity<MatrixType, VectorType>(
                   parset.sub("boundary.friction"), *nodalIntegrals, alpha, tau);
@@ -306,6 +305,10 @@ int main(int argc, char *argv[]) {
           if (energyNorm.diff(u_diff_saved, u_diff) <
               parset.get<double>("solver.tnnmg.fixed_point_tolerance"))
             break;
+
+          if (state_fpi == state_fpi_max)
+            std::cerr << "FPI did not converge after " << state_fpi_max
+                      << " iterations" << std::endl;
         }
 
         // Record the state, (scaled) displacement, and Neumann