diff --git a/src/one-body-sample.cc b/src/one-body-sample.cc
index adbfeaeb1b6b2593a518db5d4b73ce423a8d5755..b60eb5061730edfaf9bb13b8835c76fd5426cf52 100644
--- a/src/one-body-sample.cc
+++ b/src/one-body-sample.cc
@@ -342,13 +342,12 @@ int main(int argc, char *argv[]) {
       _ell += gravityFunctional;
     };
 
+    VectorType ud = ud_initial;
     auto const state_fpi_max =
         parset.get<size_t>("solver.tnnmg.fixed_point_iterations");
     for (size_t run = 1; run <= timesteps; ++run) {
       VectorType u;
-      VectorType ud;
       SingletonVectorType alpha;
-      stateUpdater->extractState(alpha);
 
       stateUpdater->nextTimeStep();
       timeSteppingScheme->nextTimeStep();
@@ -394,15 +393,14 @@ int main(int argc, char *argv[]) {
       double const fixedPointTolerance =
           parset.get<double>("solver.tnnmg.fixed_point_tolerance");
       for (size_t state_fpi = 1; state_fpi <= state_fpi_max; ++state_fpi) {
-        solveDisplacementProblem(problem_iterate, alpha);
+        stateUpdater->solve(ud);
+        stateUpdater->extractState(alpha);
 
+        solveDisplacementProblem(problem_iterate, alpha);
         timeSteppingScheme->postProcess(problem_iterate);
         timeSteppingScheme->extractDisplacement(u);
         timeSteppingScheme->extractVelocity(ud);
 
-        stateUpdater->solve(ud);
-        stateUpdater->extractState(alpha);
-
         iteration_writer << iterationCounter << " ";
         if (parset.get<bool>("printProgress")) {
           std::cerr << '.';