diff --git a/src/myblockproblem.hh b/src/myblockproblem.hh
index ceed350d18cafa30dbf5d86c060feda619b51eb8..601652f8531d883c6d914d75f446d91c8b37bc77 100644
--- a/src/myblockproblem.hh
+++ b/src/myblockproblem.hh
@@ -109,9 +109,9 @@ class MyBlockProblem<ConvexProblemTypeTEMPLATE>::IterateObject {
         if (j == m)
           localA = &(*it); // localA = &A[m][m]
 
-        it->umv(u[j], localb); // localb += A[m][j] * u[j]
+        it->mmv(u[j], localb); // localb += A[m][j] * u[j]
       }
-      localb -= problem.f[m]; // localb -= b[m]
+      localb += problem.f[m]; // localb -= b[m]
       assert(localA != NULL);
 
       // FIXME: Hardcoding a fixed function here for now
@@ -126,8 +126,7 @@ class MyBlockProblem<ConvexProblemTypeTEMPLATE>::IterateObject {
         Dune::minimise(localJ, ui_copy, correction);
         ui_copy += correction;
       }
-      // FIXME: this makes no sense. Why does it work this way?!
-      ui -= ui_copy;
+      ui += ui_copy;
       return;
     }