diff --git a/ProcessLib/HeatConduction/HeatConductionProcess.cpp b/ProcessLib/HeatConduction/HeatConductionProcess.cpp
index 0813b7b703ee54625cf668a16f0d0460d75cbdd3..986aeb31e463d99c99515d87ec887939375adb03 100644
--- a/ProcessLib/HeatConduction/HeatConductionProcess.cpp
+++ b/ProcessLib/HeatConduction/HeatConductionProcess.cpp
@@ -35,7 +35,8 @@ HeatConductionProcess::HeatConductionProcess(
 
 void HeatConductionProcess::preTimestepConcreteProcess(GlobalVector const& x,
                                             const double /*t*/,
-                                            const double /*delta_t*/)
+                                            const double /*delta_t*/,
+                                            const int /*process_id*/)
 {
     if (!_x_previous_timestep)
     {
diff --git a/ProcessLib/HeatConduction/HeatConductionProcess.h b/ProcessLib/HeatConduction/HeatConductionProcess.h
index 60e39b8238c07d0e3064bef9a1517330579d7324..3965ef37f5e79ea0be5e4519815868c882999e7a 100644
--- a/ProcessLib/HeatConduction/HeatConductionProcess.h
+++ b/ProcessLib/HeatConduction/HeatConductionProcess.h
@@ -42,7 +42,8 @@ public:
         double const t, GlobalVector const& x) override;
 
     void preTimestepConcreteProcess(GlobalVector const& x, const double t,
-                                    const double delta_t) override;
+                                    const double delta_t,
+                                    const int process_id) override;
 
     // Get the solution of the previous time step.
     GlobalVector* getPreviousTimeStepSolution() const override
diff --git a/ProcessLib/HydroMechanics/HydroMechanicsProcess-impl.h b/ProcessLib/HydroMechanics/HydroMechanicsProcess-impl.h
index cbdbe6e6f4020003a94c694a55ce606e190ee015..8f6ebb41846ef000230db7cde3a0198ed787ecb8 100644
--- a/ProcessLib/HydroMechanics/HydroMechanicsProcess-impl.h
+++ b/ProcessLib/HydroMechanics/HydroMechanicsProcess-impl.h
@@ -200,7 +200,8 @@ void HydroMechanicsProcess<DisplacementDim>::
 }
 template <int DisplacementDim>
 void HydroMechanicsProcess<DisplacementDim>::preTimestepConcreteProcess(
-    GlobalVector const& x, double const t, double const dt)
+    GlobalVector const& x, double const t, double const dt,
+    const int /*process_id*/)
 {
     DBUG("PreTimestep HydroMechanicsProcess.");
 
diff --git a/ProcessLib/HydroMechanics/HydroMechanicsProcess.h b/ProcessLib/HydroMechanics/HydroMechanicsProcess.h
index 640d83932da9fb71d7381d5764a9040471e86b61..3197f0524e9a8307102ac7b5304bff70e23428a9 100644
--- a/ProcessLib/HydroMechanics/HydroMechanicsProcess.h
+++ b/ProcessLib/HydroMechanics/HydroMechanicsProcess.h
@@ -64,8 +64,9 @@ private:
         const double dxdot_dx, const double dx_dx, GlobalMatrix& M,
         GlobalMatrix& K, GlobalVector& b, GlobalMatrix& Jac) override;
 
-    void preTimestepConcreteProcess(GlobalVector const& x, double const t,
-                                    double const dt) override;
+    void preTimestepConcreteProcess(
+        GlobalVector const& x, double const t, double const dt,
+        const int process_id) override;
 
     void postTimestepConcreteProcess(GlobalVector const& x) override;
 
diff --git a/ProcessLib/LIE/HydroMechanics/HydroMechanicsProcess.h b/ProcessLib/LIE/HydroMechanics/HydroMechanicsProcess.h
index ba65735a500412757b59612757a2cf43e9166147..42b562076837f56ecdc1c7e1b2328d5d37840b87 100644
--- a/ProcessLib/LIE/HydroMechanics/HydroMechanicsProcess.h
+++ b/ProcessLib/LIE/HydroMechanics/HydroMechanicsProcess.h
@@ -92,8 +92,9 @@ private:
             dxdot_dx, dx_dx, M, K, b, Jac, _coupled_solutions);
     }
 
-    void preTimestepConcreteProcess(GlobalVector const& x, double const t,
-                                    double const dt) override
+    void preTimestepConcreteProcess(
+        GlobalVector const& x, double const t, double const dt,
+        const int /*process_id*/) override
     {
         DBUG("PreTimestep HydroMechanicsProcess.");
 
diff --git a/ProcessLib/LIE/SmallDeformation/SmallDeformationProcess.h b/ProcessLib/LIE/SmallDeformation/SmallDeformationProcess.h
index 588270daacf869eb0886ab9c933cf9a5c1004cce..b1a25e6c844adb2f66f4b370b2e374d459651b32 100644
--- a/ProcessLib/LIE/SmallDeformation/SmallDeformationProcess.h
+++ b/ProcessLib/LIE/SmallDeformation/SmallDeformationProcess.h
@@ -90,8 +90,9 @@ private:
             dxdot_dx, dx_dx, M, K, b, Jac, _coupled_solutions);
     }
 
-    void preTimestepConcreteProcess(GlobalVector const& x, double const t,
-                     double const dt) override
+    void preTimestepConcreteProcess(
+        GlobalVector const& x, double const t, double const dt,
+        const int /*process_id*/) override
     {
         DBUG("PreTimestep SmallDeformationProcess.");
 
diff --git a/ProcessLib/PhaseField/PhaseFieldProcess-impl.h b/ProcessLib/PhaseField/PhaseFieldProcess-impl.h
index 527c935d52a57eb59dc5cd200c73638bc90ac890..bdf2d897645d34c4e0d3a9f34dec27116055ab64 100644
--- a/ProcessLib/PhaseField/PhaseFieldProcess-impl.h
+++ b/ProcessLib/PhaseField/PhaseFieldProcess-impl.h
@@ -162,7 +162,8 @@ void PhaseFieldProcess<DisplacementDim>::assembleWithJacobianConcreteProcess(
 
 template <int DisplacementDim>
 void PhaseFieldProcess<DisplacementDim>::preTimestepConcreteProcess(
-    GlobalVector const& x, double const t, double const dt)
+    GlobalVector const& x, double const t, double const dt,
+    const int /*process_id*/)
 {
     DBUG("PreTimestep PhaseFieldProcess.");
 
diff --git a/ProcessLib/PhaseField/PhaseFieldProcess.h b/ProcessLib/PhaseField/PhaseFieldProcess.h
index 4c900b7f887a6504cd9207ecc8c0a62700d71491..3db6e74e9de300625080d94aa8e920ea93fdcbc4 100644
--- a/ProcessLib/PhaseField/PhaseFieldProcess.h
+++ b/ProcessLib/PhaseField/PhaseFieldProcess.h
@@ -85,8 +85,9 @@ private:
         const double dxdot_dx, const double dx_dx, GlobalMatrix& M,
         GlobalMatrix& K, GlobalVector& b, GlobalMatrix& Jac) override;
 
-    void preTimestepConcreteProcess(GlobalVector const& x, double const t,
-                                    double const dt) override;
+    void preTimestepConcreteProcess(
+        GlobalVector const& x, double const t, double const dt,
+        const int process_id) override;
 
     void postTimestepConcreteProcess(GlobalVector const& x) override;
 
diff --git a/ProcessLib/Process.cpp b/ProcessLib/Process.cpp
index 5840fccdf3cf64870ea22b72da42e1ec521352f3..808bb909c59a4d959589d5df4d18e06e1c9e2859 100644
--- a/ProcessLib/Process.cpp
+++ b/ProcessLib/Process.cpp
@@ -254,7 +254,7 @@ void Process::computeSparsityPattern()
 }
 
 void Process::preTimestep(GlobalVector const& x, const double t,
-                          const double delta_t)
+                          const double delta_t, const int process_id)
 {
     for (auto& cached_var : _cached_secondary_variables)
     {
@@ -262,7 +262,7 @@ void Process::preTimestep(GlobalVector const& x, const double t,
     }
 
     MathLib::LinAlg::setLocalAccessibleVector(x);
-    preTimestepConcreteProcess(x, t, delta_t);
+    preTimestepConcreteProcess(x, t, delta_t, process_id);
 }
 
 void Process::postTimestep(GlobalVector const& x)
diff --git a/ProcessLib/Process.h b/ProcessLib/Process.h
index dacd9a79f76863fdac0345a5476958dafe3ed713..d067d0ff747ba5b10b5807aee426df99c332e0e5 100644
--- a/ProcessLib/Process.h
+++ b/ProcessLib/Process.h
@@ -53,7 +53,7 @@ public:
 
     /// Preprocessing before starting assembly for new timestep.
     void preTimestep(GlobalVector const& x, const double t,
-                     const double delta_t);
+                     const double delta_t, const int process_id);
 
     /// Postprocessing after a complete timestep.
     void postTimestep(GlobalVector const& x);
@@ -153,7 +153,8 @@ private:
 
     virtual void preTimestepConcreteProcess(GlobalVector const& /*x*/,
                                             const double /*t*/,
-                                            const double /*delta_t*/)
+                                            const double /*delta_t*/,
+                                            const int /*process_id*/)
     {
     }
 
diff --git a/ProcessLib/SmallDeformation/SmallDeformationProcess-impl.h b/ProcessLib/SmallDeformation/SmallDeformationProcess-impl.h
index 5c4f86d9109a1dacfced5e93d472f58dc883107f..a268bd9d3f6e38ae9e3277fdb86692e5e98b6ed5 100644
--- a/ProcessLib/SmallDeformation/SmallDeformationProcess-impl.h
+++ b/ProcessLib/SmallDeformation/SmallDeformationProcess-impl.h
@@ -175,7 +175,8 @@ void SmallDeformationProcess<DisplacementDim>::
 
 template <int DisplacementDim>
 void SmallDeformationProcess<DisplacementDim>::preTimestepConcreteProcess(
-    GlobalVector const& x, double const t, double const dt)
+    GlobalVector const& x, double const t, double const dt,
+    const int /*process_id*/)
 {
     DBUG("PreTimestep SmallDeformationProcess.");
 
diff --git a/ProcessLib/SmallDeformation/SmallDeformationProcess.h b/ProcessLib/SmallDeformation/SmallDeformationProcess.h
index a681519793d0ad751950b78b920be20e5a281def..5c95ceb390b963699d6522cb0bfd60b00cc70443 100644
--- a/ProcessLib/SmallDeformation/SmallDeformationProcess.h
+++ b/ProcessLib/SmallDeformation/SmallDeformationProcess.h
@@ -58,8 +58,9 @@ private:
         const double dxdot_dx, const double dx_dx, GlobalMatrix& M,
         GlobalMatrix& K, GlobalVector& b, GlobalMatrix& Jac) override;
 
-    void preTimestepConcreteProcess(GlobalVector const& x, double const t,
-                                    double const dt) override;
+    void preTimestepConcreteProcess(
+        GlobalVector const& x, double const t, double const dt,
+        const int process_id) override;
 
     void postTimestepConcreteProcess(GlobalVector const& x) override;
 
diff --git a/ProcessLib/TES/TESProcess.cpp b/ProcessLib/TES/TESProcess.cpp
index 5afdac5595105ffaaa3729db872149354bc70576..40d96dd594d8a218ac69e0c90483ebfe7f8f6fdd 100644
--- a/ProcessLib/TES/TESProcess.cpp
+++ b/ProcessLib/TES/TESProcess.cpp
@@ -248,7 +248,8 @@ void TESProcess::assembleWithJacobianConcreteProcess(
 
 void TESProcess::preTimestepConcreteProcess(GlobalVector const& x,
                                             const double t,
-                                            const double delta_t)
+                                            const double delta_t,
+                                            const int /*process_id*/)
 {
     DBUG("new timestep");
 
diff --git a/ProcessLib/TES/TESProcess.h b/ProcessLib/TES/TESProcess.h
index 195b5cdb53ee9c3e0538a73258002c73cbafe3df..fb2a8062f5bfb46886f33dfa4137acd3d2611d27 100644
--- a/ProcessLib/TES/TESProcess.h
+++ b/ProcessLib/TES/TESProcess.h
@@ -41,7 +41,8 @@ public:
                BaseLib::ConfigTree const& config);
 
     void preTimestepConcreteProcess(GlobalVector const& x, const double t,
-                                    const double delta_t) override;
+                                    const double delta_t,
+                                    const int process_id) override;
     void preIterationConcreteProcess(const unsigned iter,
                                      GlobalVector const& x) override;
     NumLib::IterationResult postIterationConcreteProcess(
diff --git a/ProcessLib/ThermalTwoPhaseFlowWithPP/ThermalTwoPhaseFlowWithPPProcess.cpp b/ProcessLib/ThermalTwoPhaseFlowWithPP/ThermalTwoPhaseFlowWithPPProcess.cpp
index e6e86b688943d3c1a5e9213c0b0d0ef2ad2d8789..4acf0cdca1d03c7c5ac26e7c01c5f86dd0dca445 100644
--- a/ProcessLib/ThermalTwoPhaseFlowWithPP/ThermalTwoPhaseFlowWithPPProcess.cpp
+++ b/ProcessLib/ThermalTwoPhaseFlowWithPP/ThermalTwoPhaseFlowWithPPProcess.cpp
@@ -97,7 +97,8 @@ void ThermalTwoPhaseFlowWithPPProcess::assembleWithJacobianConcreteProcess(
         dx_dx, M, K, b, Jac, _coupled_solutions);
 }
 void ThermalTwoPhaseFlowWithPPProcess::preTimestepConcreteProcess(
-    GlobalVector const& x, double const t, double const delta_t)
+    GlobalVector const& x, double const t, double const delta_t,
+    const int /*process_id*/)
 {
     DBUG("PreTimestep ThermalTwoPhaseFlowWithPPProcess.");
 
diff --git a/ProcessLib/ThermalTwoPhaseFlowWithPP/ThermalTwoPhaseFlowWithPPProcess.h b/ProcessLib/ThermalTwoPhaseFlowWithPP/ThermalTwoPhaseFlowWithPPProcess.h
index e6dfa66fee7cdb4f7928b0d76239599312f33410..4ede515c524b283a1bff1dfbad348d9cdab28b69 100644
--- a/ProcessLib/ThermalTwoPhaseFlowWithPP/ThermalTwoPhaseFlowWithPPProcess.h
+++ b/ProcessLib/ThermalTwoPhaseFlowWithPP/ThermalTwoPhaseFlowWithPPProcess.h
@@ -68,7 +68,8 @@ private:
         GlobalMatrix& K, GlobalVector& b, GlobalMatrix& Jac) override;
 
     void preTimestepConcreteProcess(GlobalVector const& x, const double t,
-                                    const double delta_t) override;
+                                    const double delta_t,
+                                    const int process_id) override;
 
     ThermalTwoPhaseFlowWithPPProcessData _process_data;
 
diff --git a/ProcessLib/ThermoMechanics/ThermoMechanicsProcess-impl.h b/ProcessLib/ThermoMechanics/ThermoMechanicsProcess-impl.h
index 493b6b1fb5b12e2f98f4587f93490991dd2a930c..65ccd511029e28062939c8881b1ba3d7a2f245d2 100644
--- a/ProcessLib/ThermoMechanics/ThermoMechanicsProcess-impl.h
+++ b/ProcessLib/ThermoMechanics/ThermoMechanicsProcess-impl.h
@@ -177,7 +177,8 @@ void ThermoMechanicsProcess<DisplacementDim>::
 
 template <int DisplacementDim>
 void ThermoMechanicsProcess<DisplacementDim>::preTimestepConcreteProcess(
-    GlobalVector const& x, double const t, double const dt)
+    GlobalVector const& x, double const t, double const dt,
+    const int /*process_id*/)
 {
     DBUG("PreTimestep ThermoMechanicsProcess.");
 
diff --git a/ProcessLib/ThermoMechanics/ThermoMechanicsProcess.h b/ProcessLib/ThermoMechanics/ThermoMechanicsProcess.h
index 85d5116103d78470acca18e62f80ac4dc7b2299e..e5a76051375259743b07ce49e8e8c237de02e7e5 100644
--- a/ProcessLib/ThermoMechanics/ThermoMechanicsProcess.h
+++ b/ProcessLib/ThermoMechanics/ThermoMechanicsProcess.h
@@ -58,8 +58,9 @@ private:
         const double dxdot_dx, const double dx_dx, GlobalMatrix& M,
         GlobalMatrix& K, GlobalVector& b, GlobalMatrix& Jac) override;
 
-    void preTimestepConcreteProcess(GlobalVector const& x, double const t,
-                                    double const dt) override;
+    void preTimestepConcreteProcess(
+        GlobalVector const& x, double const t, double const dt,
+        const int process_id) override;
 
     void postTimestepConcreteProcess(GlobalVector const& x) override;
 
diff --git a/ProcessLib/TwoPhaseFlowWithPrho/TwoPhaseFlowWithPrhoProcess.cpp b/ProcessLib/TwoPhaseFlowWithPrho/TwoPhaseFlowWithPrhoProcess.cpp
index 16e4b985f70ebb96a5066f840d06d8c96aa3ca1b..e0d800de4a30da3311b76e3c32ee9283f340e40f 100644
--- a/ProcessLib/TwoPhaseFlowWithPrho/TwoPhaseFlowWithPrhoProcess.cpp
+++ b/ProcessLib/TwoPhaseFlowWithPrho/TwoPhaseFlowWithPrhoProcess.cpp
@@ -95,7 +95,8 @@ void TwoPhaseFlowWithPrhoProcess::assembleWithJacobianConcreteProcess(
         dx_dx, M, K, b, Jac, _coupled_solutions);
 }
 void TwoPhaseFlowWithPrhoProcess::preTimestepConcreteProcess(
-    GlobalVector const& x, double const t, double const dt)
+    GlobalVector const& x, double const t, double const dt,
+    const int /*process_id*/)
 {
     DBUG("PreTimestep TwoPhaseFlowWithPrhoProcess.");
 
diff --git a/ProcessLib/TwoPhaseFlowWithPrho/TwoPhaseFlowWithPrhoProcess.h b/ProcessLib/TwoPhaseFlowWithPrho/TwoPhaseFlowWithPrhoProcess.h
index ccf2163602fa2908caa449cd5e9213e6bc1ee8dc..6bc0376633dcf2ebcbf9bf3247e03d53c1c25959 100644
--- a/ProcessLib/TwoPhaseFlowWithPrho/TwoPhaseFlowWithPrhoProcess.h
+++ b/ProcessLib/TwoPhaseFlowWithPrho/TwoPhaseFlowWithPrhoProcess.h
@@ -64,7 +64,8 @@ private:
         GlobalMatrix& K, GlobalVector& b, GlobalMatrix& Jac) override;
 
     void preTimestepConcreteProcess(GlobalVector const& x, const double t,
-                                    const double delta_t) override;
+                                    const double delta_t,
+                                    const int process_id) override;
 
     TwoPhaseFlowWithPrhoProcessData _process_data;
 
diff --git a/ProcessLib/UncoupledProcessesTimeLoop.cpp b/ProcessLib/UncoupledProcessesTimeLoop.cpp
index e031137c704c6980d1df33bda36ed373fab1d07a..b2e6a015c2e60980ef3aa788991bf07a5cbc6a40 100644
--- a/ProcessLib/UncoupledProcessesTimeLoop.cpp
+++ b/ProcessLib/UncoupledProcessesTimeLoop.cpp
@@ -839,7 +839,7 @@ bool UncoupledProcessesTimeLoop::solveUncoupledEquationSystems(
 
         auto& x = *_process_solutions[pcs_idx];
         auto& pcs = spd->process;
-        pcs.preTimestep(x, t, dt);
+        pcs.preTimestep(x, t, dt, pcs_idx);
 
         const auto nonlinear_solver_succeeded =
             solveOneTimeStepOneProcess(x, timestep_id, t, dt, *spd, *_output);
@@ -913,7 +913,7 @@ bool UncoupledProcessesTimeLoop::solveCoupledEquationSystemsByStaggeredScheme(
                 // belongs to process. For some problems, both of the current
                 // solution and the solution of the previous time step are
                 // required for the coupling computation.
-                spd->process.preTimestep(x, t, dt);
+                spd->process.preTimestep(x, t, dt, pcs_idx);
             }
 
             CoupledSolutionsForStaggeredScheme coupled_solutions(
@@ -1032,7 +1032,7 @@ void UncoupledProcessesTimeLoop::outputSolutions(
 
         if (output_initial_condition)
             pcs.preTimestep(x, _start_time,
-                            spd->timestepper->getTimeStep().dt());
+                            spd->timestepper->getTimeStep().dt(), pcs_idx);
         if (is_staggered_coupling)
         {
             CoupledSolutionsForStaggeredScheme coupled_solutions(