diff --git a/ProcessLib/GroundwaterFlow/GroundwaterFlowProcess.h b/ProcessLib/GroundwaterFlow/GroundwaterFlowProcess.h
index c3128d812a5304fc45c594c66d602fe224381b33..882dab4ee9056b942349ea2055bff2b02c0e2a06 100644
--- a/ProcessLib/GroundwaterFlow/GroundwaterFlowProcess.h
+++ b/ProcessLib/GroundwaterFlow/GroundwaterFlowProcess.h
@@ -60,7 +60,8 @@ public:
         return _local_assemblers[element_id]->getFlux(p, local_x);
     }
 
-    void postTimestepConcreteProcess(GlobalVector const& x) override
+    void postTimestepConcreteProcess(GlobalVector const& x,
+                                     int const /*process_id*/) override
     {
         if (_balance_mesh) // computing the balance is optional
         {
diff --git a/ProcessLib/HydroMechanics/HydroMechanicsProcess-impl.h b/ProcessLib/HydroMechanics/HydroMechanicsProcess-impl.h
index 6899f457e0f1e83f6659dbf0595dfe646167478e..29c79cd51255e8fcb869f8c632da0df7845e09fd 100644
--- a/ProcessLib/HydroMechanics/HydroMechanicsProcess-impl.h
+++ b/ProcessLib/HydroMechanics/HydroMechanicsProcess-impl.h
@@ -343,13 +343,12 @@ void HydroMechanicsProcess<DisplacementDim>::preTimestepConcreteProcess(
 
 template <int DisplacementDim>
 void HydroMechanicsProcess<DisplacementDim>::postTimestepConcreteProcess(
-    GlobalVector const& x)
+    GlobalVector const& x, const int process_id)
 {
     DBUG("PostTimestep HydroMechanicsProcess.");
-
     GlobalExecutor::executeMemberOnDereferenced(
         &LocalAssemblerInterface::postTimestep, _local_assemblers,
-        *_local_to_global_index_map, x);
+        getDOFTable(process_id), x);
 }
 
 template <int DisplacementDim>
diff --git a/ProcessLib/HydroMechanics/HydroMechanicsProcess.h b/ProcessLib/HydroMechanics/HydroMechanicsProcess.h
index 7d795de2e23bb390f1c39cb92c74cc8f4d612677..1b773f2f90708361374ee8e03340341e0dda78a3 100644
--- a/ProcessLib/HydroMechanics/HydroMechanicsProcess.h
+++ b/ProcessLib/HydroMechanics/HydroMechanicsProcess.h
@@ -74,7 +74,8 @@ private:
                                     double const dt,
                                     const int process_id) override;
 
-    void postTimestepConcreteProcess(GlobalVector const& x) override;
+    void postTimestepConcreteProcess(GlobalVector const& x,
+                                     int const process_id) override;
 
     NumLib::LocalToGlobalIndexMap const& getDOFTable(
         const int process_id) const override;
diff --git a/ProcessLib/LIE/SmallDeformation/SmallDeformationProcess.cpp b/ProcessLib/LIE/SmallDeformation/SmallDeformationProcess.cpp
index 5f0a61315dce96765f52f362a890a639e163d0ac..209fdcc943a64a1f0106da806c9e920329f71528 100644
--- a/ProcessLib/LIE/SmallDeformation/SmallDeformationProcess.cpp
+++ b/ProcessLib/LIE/SmallDeformation/SmallDeformationProcess.cpp
@@ -395,7 +395,7 @@ void SmallDeformationProcess<DisplacementDim>::initializeConcreteProcess(
 
 template <int DisplacementDim>
 void SmallDeformationProcess<DisplacementDim>::postTimestepConcreteProcess(
-    GlobalVector const& x)
+    GlobalVector const& x, int const /*process_id*/)
 {
     DBUG("PostTimestep SmallDeformationProcess.");
 
diff --git a/ProcessLib/LIE/SmallDeformation/SmallDeformationProcess.h b/ProcessLib/LIE/SmallDeformation/SmallDeformationProcess.h
index 3245f76ec3853ccfc56f30c1b434f2a03c31ad1e..d7325fc331d7d2326c66cb33d4401a9f7600fc9d 100644
--- a/ProcessLib/LIE/SmallDeformation/SmallDeformationProcess.h
+++ b/ProcessLib/LIE/SmallDeformation/SmallDeformationProcess.h
@@ -70,7 +70,8 @@ private:
                                     double const dt,
                                     const int /*process_id*/) override;
 
-    void postTimestepConcreteProcess(GlobalVector const& x) override;
+    void postTimestepConcreteProcess(GlobalVector const& x,
+                                     int const process_id) override;
 
 private:
     SmallDeformationProcessData<DisplacementDim> _process_data;
diff --git a/ProcessLib/PhaseField/PhaseFieldProcess-impl.h b/ProcessLib/PhaseField/PhaseFieldProcess-impl.h
index daf7a2f507dc1832cd99beef93da2457c26fda50..6ea0104b3617df0042a8902666d71fc22927b708 100644
--- a/ProcessLib/PhaseField/PhaseFieldProcess-impl.h
+++ b/ProcessLib/PhaseField/PhaseFieldProcess-impl.h
@@ -180,7 +180,7 @@ void PhaseFieldProcess<DisplacementDim>::preTimestepConcreteProcess(
 
 template <int DisplacementDim>
 void PhaseFieldProcess<DisplacementDim>::postTimestepConcreteProcess(
-    GlobalVector const& x)
+    GlobalVector const& x, int const /*process_id*/)
 {
     DBUG("PostTimestep PhaseFieldProcess.");
 
diff --git a/ProcessLib/PhaseField/PhaseFieldProcess.h b/ProcessLib/PhaseField/PhaseFieldProcess.h
index 9e87e5e1e7da795e515642a6cded3d6a5734ca9d..efdc9d2b5954ae0b7a5b8be02edc726979a1c798 100644
--- a/ProcessLib/PhaseField/PhaseFieldProcess.h
+++ b/ProcessLib/PhaseField/PhaseFieldProcess.h
@@ -90,7 +90,8 @@ private:
         GlobalVector const& x, double const t, double const dt,
         const int process_id) override;
 
-    void postTimestepConcreteProcess(GlobalVector const& x) override;
+    void postTimestepConcreteProcess(GlobalVector const& x,
+                                     int const process_id) override;
 
 private:
     PhaseFieldProcessData<DisplacementDim> _process_data;
diff --git a/ProcessLib/Process.cpp b/ProcessLib/Process.cpp
index b2ea3a4503a69661fe98dd02ab08092a1bf99ff0..644d4575e436c25d257d45be108dd58b808383c1 100644
--- a/ProcessLib/Process.cpp
+++ b/ProcessLib/Process.cpp
@@ -105,13 +105,13 @@ void Process::initialize()
     initializeBoundaryConditions();
 }
 
-void Process::setInitialConditions(const unsigned processs_id, double const t,
+void Process::setInitialConditions(const int process_id, double const t,
                                    GlobalVector& x)
 {
     // getDOFTableOfProcess can be overloaded by the specific process.
-    auto const dof_table_of_process = getDOFTable(processs_id);
+    auto const dof_table_of_process = getDOFTable(process_id);
 
-    auto const& per_process_variables = _process_variables[processs_id];
+    auto const& per_process_variables = _process_variables[process_id];
     for (std::size_t variable_id = 0;
          variable_id < per_process_variables.size();
          variable_id++)
@@ -120,7 +120,7 @@ void Process::setInitialConditions(const unsigned processs_id, double const t,
 
         auto const& pv = per_process_variables[variable_id];
         DBUG("Set the initial condition of variable %s of process %d.",
-             pv.get().getName().data(), processs_id);
+             pv.get().getName().data(), process_id);
 
         auto const& ic = pv.get().getInitialCondition();
 
@@ -344,10 +344,10 @@ void Process::preTimestep(GlobalVector const& x, const double t,
     preTimestepConcreteProcess(x, t, delta_t, process_id);
 }
 
-void Process::postTimestep(GlobalVector const& x)
+void Process::postTimestep(GlobalVector const& x, int const process_id)
 {
     MathLib::LinAlg::setLocalAccessibleVector(x);
-    postTimestepConcreteProcess(x);
+    postTimestepConcreteProcess(x, process_id);
 }
 
 void Process::computeSecondaryVariable(const double t, GlobalVector const& x)
diff --git a/ProcessLib/Process.h b/ProcessLib/Process.h
index 3ca1e200efd9bc09ea8d18ebb843a0cf27db8b45..731cefeb64b32276ba899e04e618421df4acf666 100644
--- a/ProcessLib/Process.h
+++ b/ProcessLib/Process.h
@@ -57,7 +57,7 @@ public:
                      const double delta_t, const int process_id);
 
     /// Postprocessing after a complete timestep.
-    void postTimestep(GlobalVector const& x);
+    void postTimestep(GlobalVector const& x, int const process_id);
 
     void preIteration(const unsigned iter, GlobalVector const& x) final;
 
@@ -68,7 +68,7 @@ public:
 
     void initialize();
 
-    void setInitialConditions(const unsigned processs_id, const double t,
+    void setInitialConditions(const int process_id, const double t,
                               GlobalVector& x);
 
     virtual MathLib::MatrixSpecifications getMatrixSpecifications(
@@ -175,7 +175,10 @@ private:
     {
     }
 
-    virtual void postTimestepConcreteProcess(GlobalVector const& /*x*/) {}
+    virtual void postTimestepConcreteProcess(GlobalVector const& /*x*/,
+                                             int const /*process_id*/)
+    {
+    }
     virtual void preIterationConcreteProcess(const unsigned /*iter*/,
                                              GlobalVector const& /*x*/)
     {
diff --git a/ProcessLib/SmallDeformation/SmallDeformationProcess-impl.h b/ProcessLib/SmallDeformation/SmallDeformationProcess-impl.h
index 9e0aba128ddb7d2f984c5197c4915287e794cc29..368e052e70b4b112db66eb49055e08385bdafbcf 100644
--- a/ProcessLib/SmallDeformation/SmallDeformationProcess-impl.h
+++ b/ProcessLib/SmallDeformation/SmallDeformationProcess-impl.h
@@ -191,7 +191,7 @@ void SmallDeformationProcess<DisplacementDim>::preTimestepConcreteProcess(
 
 template <int DisplacementDim>
 void SmallDeformationProcess<DisplacementDim>::postTimestepConcreteProcess(
-    GlobalVector const& x)
+    GlobalVector const& x, int const /*process_id*/)
 {
     DBUG("PostTimestep SmallDeformationProcess.");
 
diff --git a/ProcessLib/SmallDeformation/SmallDeformationProcess.h b/ProcessLib/SmallDeformation/SmallDeformationProcess.h
index 85247bf0c12a2d8c97102563c1eb4b84c079f5bb..4375858b7e754d40301f7879477a8c8f01eab920 100644
--- a/ProcessLib/SmallDeformation/SmallDeformationProcess.h
+++ b/ProcessLib/SmallDeformation/SmallDeformationProcess.h
@@ -62,7 +62,8 @@ private:
         GlobalVector const& x, double const t, double const dt,
         const int process_id) override;
 
-    void postTimestepConcreteProcess(GlobalVector const& x) override;
+    void postTimestepConcreteProcess(GlobalVector const& x,
+                                     int const process_id) override;
 
 private:
     SmallDeformationProcessData<DisplacementDim> _process_data;
diff --git a/ProcessLib/ThermoMechanics/ThermoMechanicsProcess-impl.h b/ProcessLib/ThermoMechanics/ThermoMechanicsProcess-impl.h
index 9e6c049a25602cbf1103134f7322d5c177e8bfeb..4e056c74ca51261b6544ed7e462b74f78e9420fc 100644
--- a/ProcessLib/ThermoMechanics/ThermoMechanicsProcess-impl.h
+++ b/ProcessLib/ThermoMechanics/ThermoMechanicsProcess-impl.h
@@ -195,7 +195,7 @@ void ThermoMechanicsProcess<DisplacementDim>::preTimestepConcreteProcess(
 
 template <int DisplacementDim>
 void ThermoMechanicsProcess<DisplacementDim>::postTimestepConcreteProcess(
-    GlobalVector const& x)
+    GlobalVector const& x, int const /*process_id*/)
 {
     DBUG("PostTimestep ThermoMechanicsProcess.");
 
diff --git a/ProcessLib/ThermoMechanics/ThermoMechanicsProcess.h b/ProcessLib/ThermoMechanics/ThermoMechanicsProcess.h
index cac7104ef5b439f753522bbb5eb607991c872068..2fb243e92f729133bc3de684b657031c638cf9fd 100644
--- a/ProcessLib/ThermoMechanics/ThermoMechanicsProcess.h
+++ b/ProcessLib/ThermoMechanics/ThermoMechanicsProcess.h
@@ -63,7 +63,8 @@ private:
         GlobalVector const& x, double const t, double const dt,
         const int process_id) override;
 
-    void postTimestepConcreteProcess(GlobalVector const& x) override;
+    void postTimestepConcreteProcess(GlobalVector const& x,
+                                     int const process_id) override;
 
 private:
     std::vector<MeshLib::Node*> _base_nodes;
diff --git a/ProcessLib/UncoupledProcessesTimeLoop.cpp b/ProcessLib/UncoupledProcessesTimeLoop.cpp
index d196a80401431dd224298b7607ab662bc92bed53..4b4e4ec926d2bc7eb4078dace0b6dfb8d36d0ebd 100644
--- a/ProcessLib/UncoupledProcessesTimeLoop.cpp
+++ b/ProcessLib/UncoupledProcessesTimeLoop.cpp
@@ -803,7 +803,7 @@ bool UncoupledProcessesTimeLoop::solveUncoupledEquationSystems(
         const auto nonlinear_solver_succeeded =
             solveOneTimeStepOneProcess(pcs_idx, x, timestep_id, t, dt, *spd, *_output);
         spd->nonlinear_solver_converged = nonlinear_solver_succeeded;
-        pcs.postTimestep(x);
+        pcs.postTimestep(x, pcs_idx);
         pcs.computeSecondaryVariable(t, x);
 
         INFO("[time] Solving process #%u took %g s in time step #%u ", pcs_idx,
@@ -958,7 +958,7 @@ bool UncoupledProcessesTimeLoop::solveCoupledEquationSystemsByStaggeredScheme(
         }
         auto& pcs = spd->process;
         auto& x = *_process_solutions[pcs_idx];
-        pcs.postTimestep(x);
+        pcs.postTimestep(x, pcs_idx);
         pcs.computeSecondaryVariable(t, x);
 
         ++pcs_idx;