diff --git a/ProcessLib/ComponentTransport/ComponentTransportFEM.h b/ProcessLib/ComponentTransport/ComponentTransportFEM.h
index 1e7bd7ad69d75a187b529fe67a1b2cfa97f5e6d3..bb9ea194a997a800a23d9ca852c0cabd2e62b47a 100644
--- a/ProcessLib/ComponentTransport/ComponentTransportFEM.h
+++ b/ProcessLib/ComponentTransport/ComponentTransportFEM.h
@@ -1775,6 +1775,7 @@ public:
     }
 
     void postTimestepConcrete(Eigen::VectorXd const& /*local_x*/,
+                              Eigen::VectorXd const& /*local_x_dot*/,
                               double const /*t*/, double const /*dt*/) override
     {
         unsigned const n_integration_points =
diff --git a/ProcessLib/ComponentTransport/ComponentTransportProcess.cpp b/ProcessLib/ComponentTransport/ComponentTransportProcess.cpp
index d80f2ebc3f1dd8bbd4c9707e32ecc5164258afb1..7026da94892e5480af1d1fbd5fe8780008d09f1f 100644
--- a/ProcessLib/ComponentTransport/ComponentTransportProcess.cpp
+++ b/ProcessLib/ComponentTransport/ComponentTransportProcess.cpp
@@ -422,6 +422,7 @@ void ComponentTransportProcess::computeSecondaryVariableConcrete(
 
 void ComponentTransportProcess::postTimestepConcreteProcess(
     std::vector<GlobalVector*> const& x,
+    std::vector<GlobalVector*> const& x_dot,
     const double t,
     const double dt,
     int const process_id)
@@ -439,7 +440,8 @@ void ComponentTransportProcess::postTimestepConcreteProcess(
     ProcessLib::ProcessVariable const& pv = getProcessVariables(process_id)[0];
     GlobalExecutor::executeSelectedMemberOnDereferenced(
         &ComponentTransportLocalAssemblerInterface::postTimestep,
-        _local_assemblers, pv.getActiveElementIDs(), dof_tables, x, t, dt);
+        _local_assemblers, pv.getActiveElementIDs(), dof_tables, x, x_dot, t,
+        dt);
 
     if (!_surfaceflux)  // computing the surfaceflux is optional
     {
diff --git a/ProcessLib/ComponentTransport/ComponentTransportProcess.h b/ProcessLib/ComponentTransport/ComponentTransportProcess.h
index 6831a8cdc4d3241da31fec357a9137cf3f02dd09..d6298c610ba7806ad25669bafc50b920d7681dd8 100644
--- a/ProcessLib/ComponentTransport/ComponentTransportProcess.h
+++ b/ProcessLib/ComponentTransport/ComponentTransportProcess.h
@@ -134,6 +134,7 @@ public:
                                           int const /*process_id*/) override;
 
     void postTimestepConcreteProcess(std::vector<GlobalVector*> const& x,
+                                     std::vector<GlobalVector*> const& x_dot,
                                      const double t,
                                      const double dt,
                                      int const process_id) override;
diff --git a/ProcessLib/HT/HTProcess.cpp b/ProcessLib/HT/HTProcess.cpp
index aed6f24a42a0b3e80c0c01b7211efb67be23344a..fc0749c08e677028ef8cef592ae3c9a287a2f0ec 100644
--- a/ProcessLib/HT/HTProcess.cpp
+++ b/ProcessLib/HT/HTProcess.cpp
@@ -189,10 +189,12 @@ Eigen::Vector3d HTProcess::getFlux(std::size_t element_id,
 }
 
 // this is almost a copy of the implementation in the GroundwaterFlow
-void HTProcess::postTimestepConcreteProcess(std::vector<GlobalVector*> const& x,
-                                            const double t,
-                                            const double /*delta_t*/,
-                                            int const process_id)
+void HTProcess::postTimestepConcreteProcess(
+    std::vector<GlobalVector*> const& x,
+    std::vector<GlobalVector*> const& /*x_dot*/,
+    const double t,
+    const double /*delta_t*/,
+    int const process_id)
 {
     // For the monolithic scheme, process_id is always zero.
     if (_use_monolithic_scheme && process_id != 0)
diff --git a/ProcessLib/HT/HTProcess.h b/ProcessLib/HT/HTProcess.h
index ff595a6b664f9c8e76b7ede1d027e13c5bbb2446..99f26904f8bfeae53faa710bac73ebaf08ef9961 100644
--- a/ProcessLib/HT/HTProcess.h
+++ b/ProcessLib/HT/HTProcess.h
@@ -81,6 +81,7 @@ public:
         int const process_id) override;
 
     void postTimestepConcreteProcess(std::vector<GlobalVector*> const& x,
+                                     std::vector<GlobalVector*> const& x_dot,
                                      const double t,
                                      const double delta_t,
                                      int const process_id) override;
diff --git a/ProcessLib/HeatTransportBHE/HeatTransportBHEProcess.cpp b/ProcessLib/HeatTransportBHE/HeatTransportBHEProcess.cpp
index 2fa58409ca1674bd1f1a0655a8e9683aa293cb03..a859f7bf6e7531ba6031b9dfa5febac2bdf56368 100644
--- a/ProcessLib/HeatTransportBHE/HeatTransportBHEProcess.cpp
+++ b/ProcessLib/HeatTransportBHE/HeatTransportBHEProcess.cpp
@@ -307,8 +307,9 @@ void HeatTransportBHEProcess::preTimestepConcreteProcess(
 }
 
 void HeatTransportBHEProcess::postTimestepConcreteProcess(
-    std::vector<GlobalVector*> const& x, const double t, const double dt,
-    int const process_id)
+    std::vector<GlobalVector*> const& x,
+    std::vector<GlobalVector*> const& /*x_dot*/, const double t,
+    const double dt, int const process_id)
 {
     if (_process_data.py_bc_object == nullptr ||
         !_process_data._use_server_communication)
diff --git a/ProcessLib/HeatTransportBHE/HeatTransportBHEProcess.h b/ProcessLib/HeatTransportBHE/HeatTransportBHEProcess.h
index c46b4e69efc2cb25ec0b03ac2a46a65ab999f1b4..8670c83f8bda9eb23343cbfd8e19165ca007d2cc 100644
--- a/ProcessLib/HeatTransportBHE/HeatTransportBHEProcess.h
+++ b/ProcessLib/HeatTransportBHE/HeatTransportBHEProcess.h
@@ -74,6 +74,7 @@ private:
                                     int const process_id) override;
 
     void postTimestepConcreteProcess(std::vector<GlobalVector*> const& x,
+                                     std::vector<GlobalVector*> const& x_dot,
                                      const double t, const double dt,
                                      int const process_id) override;
 
diff --git a/ProcessLib/HydroMechanics/HydroMechanicsFEM.h b/ProcessLib/HydroMechanics/HydroMechanicsFEM.h
index af485aa1033420552076d8488e8bc053677c42dd..4c8a249bf4b567e49d2777210babf638cac68307 100644
--- a/ProcessLib/HydroMechanics/HydroMechanicsFEM.h
+++ b/ProcessLib/HydroMechanics/HydroMechanicsFEM.h
@@ -256,6 +256,7 @@ public:
     }
 
     void postTimestepConcrete(Eigen::VectorXd const& /*local_x*/,
+                              Eigen::VectorXd const& /*local_x_dot*/,
                               double const /*t*/,
                               double const /*dt*/) override
     {
diff --git a/ProcessLib/HydroMechanics/HydroMechanicsProcess.cpp b/ProcessLib/HydroMechanics/HydroMechanicsProcess.cpp
index b0b018f65b417c5f48d2f8f793fa4d14af940478..21623bc27a3026a6047af4fffd0d29e98c5998e8 100644
--- a/ProcessLib/HydroMechanics/HydroMechanicsProcess.cpp
+++ b/ProcessLib/HydroMechanics/HydroMechanicsProcess.cpp
@@ -384,7 +384,8 @@ void HydroMechanicsProcess<DisplacementDim>::preTimestepConcreteProcess(
 
 template <int DisplacementDim>
 void HydroMechanicsProcess<DisplacementDim>::postTimestepConcreteProcess(
-    std::vector<GlobalVector*> const& x, double const t, double const dt,
+    std::vector<GlobalVector*> const& x,
+    std::vector<GlobalVector*> const& x_dot, double const t, double const dt,
     const int process_id)
 {
     if (process_id != 0)
@@ -404,7 +405,7 @@ void HydroMechanicsProcess<DisplacementDim>::postTimestepConcreteProcess(
     ProcessLib::ProcessVariable const& pv = getProcessVariables(process_id)[0];
     GlobalExecutor::executeSelectedMemberOnDereferenced(
         &LocalAssemblerIF::postTimestep, _local_assemblers,
-        pv.getActiveElementIDs(), dof_tables, x, t, dt);
+        pv.getActiveElementIDs(), dof_tables, x, x_dot, t, dt);
 }
 
 template <int DisplacementDim>
diff --git a/ProcessLib/HydroMechanics/HydroMechanicsProcess.h b/ProcessLib/HydroMechanics/HydroMechanicsProcess.h
index 6aa4c45fc878407b03b333f86fe3882eb381a9de..3ec003f9d89fb14771105d153565a3bb052b8423 100644
--- a/ProcessLib/HydroMechanics/HydroMechanicsProcess.h
+++ b/ProcessLib/HydroMechanics/HydroMechanicsProcess.h
@@ -91,6 +91,7 @@ private:
                                     const int process_id) override;
 
     void postTimestepConcreteProcess(std::vector<GlobalVector*> const& x,
+                                     std::vector<GlobalVector*> const& x_dot,
                                      const double t, const double dt,
                                      int const process_id) override;
 
diff --git a/ProcessLib/LIE/HydroMechanics/HydroMechanicsProcess.cpp b/ProcessLib/LIE/HydroMechanics/HydroMechanicsProcess.cpp
index 2824e8b091de5e68aff64a5aae9fe6043e967ff6..b542000a6375c427d5029ee194d94465273dafea 100644
--- a/ProcessLib/LIE/HydroMechanics/HydroMechanicsProcess.cpp
+++ b/ProcessLib/LIE/HydroMechanics/HydroMechanicsProcess.cpp
@@ -449,7 +449,8 @@ void HydroMechanicsProcess<GlobalDim>::initializeConcreteProcess(
 
 template <int GlobalDim>
 void HydroMechanicsProcess<GlobalDim>::postTimestepConcreteProcess(
-    std::vector<GlobalVector*> const& x, const double t, double const dt,
+    std::vector<GlobalVector*> const& x,
+    std::vector<GlobalVector*> const& x_dot, const double t, double const dt,
     int const process_id)
 {
     if (process_id == 0)
@@ -467,7 +468,8 @@ void HydroMechanicsProcess<GlobalDim>::postTimestepConcreteProcess(
             getProcessVariables(process_id)[0];
         GlobalExecutor::executeSelectedMemberOnDereferenced(
             &HydroMechanicsLocalAssemblerInterface::postTimestep,
-            _local_assemblers, pv.getActiveElementIDs(), dof_tables, x, t, dt);
+            _local_assemblers, pv.getActiveElementIDs(), dof_tables, x, x_dot,
+            t, dt);
     }
 
     DBUG("Compute the secondary variables for HydroMechanicsProcess.");
diff --git a/ProcessLib/LIE/HydroMechanics/HydroMechanicsProcess.h b/ProcessLib/LIE/HydroMechanics/HydroMechanicsProcess.h
index bf6f6ead0da89e2bee931d9763ee89f40a47e50a..cb9d275dd9847cb56db6a15b5e0c2cf70907e7ad 100644
--- a/ProcessLib/LIE/HydroMechanics/HydroMechanicsProcess.h
+++ b/ProcessLib/LIE/HydroMechanics/HydroMechanicsProcess.h
@@ -51,6 +51,7 @@ public:
     //! @}
 
     void postTimestepConcreteProcess(std::vector<GlobalVector*> const& x,
+                                     std::vector<GlobalVector*> const& x_dot,
                                      double const t, double const dt,
                                      int const process_id) override;
 
diff --git a/ProcessLib/LIE/HydroMechanics/LocalAssembler/HydroMechanicsLocalAssemblerInterface.h b/ProcessLib/LIE/HydroMechanics/LocalAssembler/HydroMechanicsLocalAssemblerInterface.h
index e3f5c12c1395047e1a64b03684f2761694100a24..deee7e49ed8c829e1bd747b1a7a49aeed3be5332 100644
--- a/ProcessLib/LIE/HydroMechanics/LocalAssembler/HydroMechanicsLocalAssemblerInterface.h
+++ b/ProcessLib/LIE/HydroMechanics/LocalAssembler/HydroMechanicsLocalAssemblerInterface.h
@@ -99,7 +99,9 @@ public:
         }
     }
 
-    void postTimestepConcrete(Eigen::VectorXd const& local_x_, const double t,
+    void postTimestepConcrete(Eigen::VectorXd const& local_x_,
+                              Eigen::VectorXd const& /*local_x_dot*/,
+                              const double t,
                               double const dt) override
     {
         _local_u.setZero();
diff --git a/ProcessLib/LiquidFlow/LiquidFlowProcess.cpp b/ProcessLib/LiquidFlow/LiquidFlowProcess.cpp
index e775c5c1fb6661af24edb5f0eabfaec9ced642e9..569ad13dd3d7990fa97d9fd50a861242fe7b5da6 100644
--- a/ProcessLib/LiquidFlow/LiquidFlowProcess.cpp
+++ b/ProcessLib/LiquidFlow/LiquidFlowProcess.cpp
@@ -149,6 +149,7 @@ Eigen::Vector3d LiquidFlowProcess::getFlux(
 // this is almost a copy of the implementation in the GroundwaterFlow
 void LiquidFlowProcess::postTimestepConcreteProcess(
     std::vector<GlobalVector*> const& x,
+    std::vector<GlobalVector*> const& /*x_dot*/,
     const double t,
     const double /*dt*/,
     int const process_id)
diff --git a/ProcessLib/LiquidFlow/LiquidFlowProcess.h b/ProcessLib/LiquidFlow/LiquidFlowProcess.h
index 0e7fe884809a9bcfc6b1238258482612795ba12b..a331f5740b842cfac256e14d4a61adb53f4de0d1 100644
--- a/ProcessLib/LiquidFlow/LiquidFlowProcess.h
+++ b/ProcessLib/LiquidFlow/LiquidFlowProcess.h
@@ -81,6 +81,7 @@ public:
                             std::vector<GlobalVector*> const& x) const override;
 
     void postTimestepConcreteProcess(std::vector<GlobalVector*> const& x,
+                                     std::vector<GlobalVector*> const& x_dot,
                                      const double t,
                                      const double dt,
                                      int const process_id) override;
diff --git a/ProcessLib/LocalAssemblerInterface.cpp b/ProcessLib/LocalAssemblerInterface.cpp
index cc1052e14bc616bdc82b96f784aeecf3c52a9727..87e16e27072bbe4938463090db4f3fdd486b50ad 100644
--- a/ProcessLib/LocalAssemblerInterface.cpp
+++ b/ProcessLib/LocalAssemblerInterface.cpp
@@ -131,9 +131,11 @@ void LocalAssemblerInterface::preTimestep(
 void LocalAssemblerInterface::postTimestep(
     std::size_t const mesh_item_id,
     std::vector<NumLib::LocalToGlobalIndexMap const*> const& dof_tables,
-    std::vector<GlobalVector*> const& x, double const t, double const dt)
+    std::vector<GlobalVector*> const& x,
+    std::vector<GlobalVector*> const& x_dot, double const t, double const dt)
 {
     std::vector<double> local_x_vec;
+    std::vector<double> local_x_dot_vec;
 
     auto const n_processes = x.size();
     for (std::size_t process_id = 0; process_id < n_processes; ++process_id)
@@ -144,10 +146,16 @@ void LocalAssemblerInterface::postTimestep(
         auto const local_solution = x[process_id]->get(indices);
         local_x_vec.insert(std::end(local_x_vec), std::begin(local_solution),
                            std::end(local_solution));
+
+        auto const local_solution_dot = x_dot[process_id]->get(indices);
+        local_x_dot_vec.insert(std::end(local_x_dot_vec),
+                               std::begin(local_solution_dot),
+                               std::end(local_solution_dot));
     }
     auto const local_x = MathLib::toVector(local_x_vec);
+    auto const local_x_dot = MathLib::toVector(local_x_dot_vec);
 
-    postTimestepConcrete(local_x, t, dt);
+    postTimestepConcrete(local_x, local_x_dot, t, dt);
 }
 
 void LocalAssemblerInterface::postNonLinearSolver(
diff --git a/ProcessLib/LocalAssemblerInterface.h b/ProcessLib/LocalAssemblerInterface.h
index 1442c3bf242973441e790a1e64c608e33bba3bcd..fe30f2fd389e55377a4d7c98284aa228528b1804 100644
--- a/ProcessLib/LocalAssemblerInterface.h
+++ b/ProcessLib/LocalAssemblerInterface.h
@@ -90,7 +90,9 @@ public:
     virtual void postTimestep(
         std::size_t const mesh_item_id,
         std::vector<NumLib::LocalToGlobalIndexMap const*> const& dof_tables,
-        std::vector<GlobalVector*> const& x, double const t, double const dt);
+        std::vector<GlobalVector*> const& x,
+        std::vector<GlobalVector*> const& x_dot, double const t,
+        double const dt);
 
     void postNonLinearSolver(std::size_t const mesh_item_id,
                              NumLib::LocalToGlobalIndexMap const& dof_table,
@@ -134,6 +136,7 @@ private:
     }
 
     virtual void postTimestepConcrete(Eigen::VectorXd const& /*local_x*/,
+                                      Eigen::VectorXd const& /*local_x_dot*/,
                                       double const /*t*/, double const /*dt*/)
     {
     }
diff --git a/ProcessLib/PhaseField/PhaseFieldFEM.h b/ProcessLib/PhaseField/PhaseFieldFEM.h
index e0f79d5df360499a1e0466ed4eef19d7203b3d57..3865e5e5b10b4fbe593968fce227dc2a72eaf757 100644
--- a/ProcessLib/PhaseField/PhaseFieldFEM.h
+++ b/ProcessLib/PhaseField/PhaseFieldFEM.h
@@ -290,6 +290,7 @@ public:
     }
 
     void postTimestepConcrete(Eigen::VectorXd const& /*local_x*/,
+                              Eigen::VectorXd const& /*local_x_dot*/,
                               double const /*t*/,
                               double const /*dt*/) override
     {
diff --git a/ProcessLib/PhaseField/PhaseFieldProcess.cpp b/ProcessLib/PhaseField/PhaseFieldProcess.cpp
index 48fc07c8e4269715e74cda38e49139ec5fa59b50..74bf60895dc46c18cbea16b67aac5580879d4dc4 100644
--- a/ProcessLib/PhaseField/PhaseFieldProcess.cpp
+++ b/ProcessLib/PhaseField/PhaseFieldProcess.cpp
@@ -277,7 +277,8 @@ void PhaseFieldProcess<DisplacementDim>::preTimestepConcreteProcess(
 
 template <int DisplacementDim>
 void PhaseFieldProcess<DisplacementDim>::postTimestepConcreteProcess(
-    std::vector<GlobalVector*> const& x, const double t,
+    std::vector<GlobalVector*> const& x,
+    std::vector<GlobalVector*> const& /*x_dot*/, const double t,
     const double /*delta_t*/, int const process_id)
 {
     if (isPhaseFieldProcess(process_id))
diff --git a/ProcessLib/PhaseField/PhaseFieldProcess.h b/ProcessLib/PhaseField/PhaseFieldProcess.h
index 875032dfbbce06a51a7b48dae26c59cddc8ada95..da2a453a98db3c2133ffab1ee8014dd3e65eed81 100644
--- a/ProcessLib/PhaseField/PhaseFieldProcess.h
+++ b/ProcessLib/PhaseField/PhaseFieldProcess.h
@@ -76,6 +76,7 @@ private:
                                     const int process_id) override;
 
     void postTimestepConcreteProcess(std::vector<GlobalVector*> const& x,
+                                     std::vector<GlobalVector*> const& x_dot,
                                      const double t, const double delta_t,
                                      int const process_id) override;
 
diff --git a/ProcessLib/Process.cpp b/ProcessLib/Process.cpp
index a1ca553e86ffeee1b3142c9377a192961b91c5bc..850d3948d72ee54cfaadf794ad6e0b49f9796e79 100644
--- a/ProcessLib/Process.cpp
+++ b/ProcessLib/Process.cpp
@@ -393,12 +393,21 @@ void Process::preTimestep(std::vector<GlobalVector*> const& x, const double t,
     _boundary_conditions[process_id].preTimestep(t, x, process_id);
 }
 
-void Process::postTimestep(std::vector<GlobalVector*> const& x, const double t,
-                           const double delta_t, int const process_id)
+void Process::postTimestep(std::vector<GlobalVector*> const& x,
+                           std::vector<GlobalVector*> const& x_dot,
+                           const double t, const double delta_t,
+                           int const process_id)
 {
     for (auto* const solution : x)
+    {
+        MathLib::LinAlg::setLocalAccessibleVector(*solution);
+    }
+    for (auto* const solution : x_dot)
+    {
         MathLib::LinAlg::setLocalAccessibleVector(*solution);
-    postTimestepConcreteProcess(x, t, delta_t, process_id);
+    }
+
+    postTimestepConcreteProcess(x, x_dot, t, delta_t, process_id);
 
     _boundary_conditions[process_id].postTimestep(t, x, process_id);
 }
diff --git a/ProcessLib/Process.h b/ProcessLib/Process.h
index 13690b447458ee81e8309c3967df439c752a100b..693cf75b92be793c9c187e75b74370e4f23c7830 100644
--- a/ProcessLib/Process.h
+++ b/ProcessLib/Process.h
@@ -66,7 +66,8 @@ public:
                      const double delta_t, const int process_id);
 
     /// Postprocessing after a complete timestep.
-    void postTimestep(std::vector<GlobalVector*> const& x, const double t,
+    void postTimestep(std::vector<GlobalVector*> const& x,
+                      std::vector<GlobalVector*> const& x_dot, const double t,
                       const double delta_t, int const process_id);
 
     /// Calculates secondary variables, e.g. stress and strain for deformation
@@ -248,6 +249,7 @@ private:
 
     virtual void postTimestepConcreteProcess(
         std::vector<GlobalVector*> const& /*x*/,
+        std::vector<GlobalVector*> const& /*x_dot*/,
         const double /*t*/,
         const double /*dt*/,
         int const /*process_id*/)
diff --git a/ProcessLib/RichardsMechanics/RichardsMechanicsFEM.h b/ProcessLib/RichardsMechanics/RichardsMechanicsFEM.h
index 2a28693ed49762590830c52af9b2a429ef4a1dda..0f93231ebeb8f313d3507fe972f87fcaab4c33d3 100644
--- a/ProcessLib/RichardsMechanics/RichardsMechanicsFEM.h
+++ b/ProcessLib/RichardsMechanics/RichardsMechanicsFEM.h
@@ -153,6 +153,7 @@ public:
     }
 
     void postTimestepConcrete(Eigen::VectorXd const& /*local_x*/,
+                              Eigen::VectorXd const& /*local_x_dot*/,
                               double const /*t*/,
                               double const /*dt*/) override
     {
diff --git a/ProcessLib/RichardsMechanics/RichardsMechanicsProcess.cpp b/ProcessLib/RichardsMechanics/RichardsMechanicsProcess.cpp
index a9603cf2e2676e8c5dc1655865fcd962dbc40613..5b15d385cc275fc53d2d8144a052f22919657ab7 100644
--- a/ProcessLib/RichardsMechanics/RichardsMechanicsProcess.cpp
+++ b/ProcessLib/RichardsMechanics/RichardsMechanicsProcess.cpp
@@ -423,7 +423,8 @@ void RichardsMechanicsProcess<DisplacementDim>::
 
 template <int DisplacementDim>
 void RichardsMechanicsProcess<DisplacementDim>::postTimestepConcreteProcess(
-    std::vector<GlobalVector*> const& x, double const t, double const dt,
+    std::vector<GlobalVector*> const& x,
+    std::vector<GlobalVector*> const& x_dot, double const t, double const dt,
     const int process_id)
 {
     if (hasMechanicalProcess(process_id))
@@ -435,7 +436,7 @@ void RichardsMechanicsProcess<DisplacementDim>::postTimestepConcreteProcess(
             getProcessVariables(process_id)[0];
         GlobalExecutor::executeSelectedMemberOnDereferenced(
             &LocalAssemblerIF::postTimestep, _local_assemblers,
-            pv.getActiveElementIDs(), dof_tables, x, t, dt);
+            pv.getActiveElementIDs(), dof_tables, x, x_dot, t, dt);
     }
 }
 
diff --git a/ProcessLib/RichardsMechanics/RichardsMechanicsProcess.h b/ProcessLib/RichardsMechanics/RichardsMechanicsProcess.h
index 4128105bdaafab50ce1e8f5e90d0b53cc8cd64e7..0c694f6269649f0ca02f36e931e8f6131c655b91 100644
--- a/ProcessLib/RichardsMechanics/RichardsMechanicsProcess.h
+++ b/ProcessLib/RichardsMechanics/RichardsMechanicsProcess.h
@@ -90,6 +90,7 @@ private:
         GlobalMatrix& Jac) override;
 
     void postTimestepConcreteProcess(std::vector<GlobalVector*> const& x,
+                                     std::vector<GlobalVector*> const& x_dot,
                                      double const t, double const dt,
                                      const int process_id) override;
 
diff --git a/ProcessLib/SmallDeformation/SmallDeformationFEM.h b/ProcessLib/SmallDeformation/SmallDeformationFEM.h
index e6c155adf09f94bbac186ef0a3a3e62ae6678932..e785b4d61199fdefc5f068e4573bddaa22af46c0 100644
--- a/ProcessLib/SmallDeformation/SmallDeformationFEM.h
+++ b/ProcessLib/SmallDeformation/SmallDeformationFEM.h
@@ -236,6 +236,7 @@ public:
     MathLib::KelvinVector::KelvinMatrixType<DisplacementDim>
     updateConstitutiveRelations(
         Eigen::Ref<Eigen::VectorXd const> const& local_x,
+        Eigen::Ref<Eigen::VectorXd const> const& /*local_x_dot*/,
         ParameterLib::SpatialPosition const& x_position, double const t,
         double const dt,
         IntegrationPointData<BMatricesType, ShapeMatricesType, DisplacementDim>&
@@ -310,7 +311,7 @@ public:
 
     void assembleWithJacobian(double const t, double const dt,
                               std::vector<double> const& local_x,
-                              std::vector<double> const& /*local_xdot*/,
+                              std::vector<double> const& local_x_dot,
                               std::vector<double>& /*local_M_data*/,
                               std::vector<double>& /*local_K_data*/,
                               std::vector<double>& local_b_data,
@@ -352,6 +353,9 @@ public:
             auto const C = updateConstitutiveRelations(
                 Eigen::Map<NodalForceVectorType const>(
                     local_x.data(), ShapeFunction::NPOINTS * DisplacementDim),
+                Eigen::Map<NodalForceVectorType const>(
+                    local_x_dot.data(),
+                    ShapeFunction::NPOINTS * DisplacementDim),
                 x_position, t, dt, _ip_data[ip]);
 
             auto const rho = _process_data.solid_density(t, x_position)[0];
@@ -361,8 +365,9 @@ public:
         }
     }
 
-    void postTimestepConcrete(Eigen::VectorXd const& local_x, double const t,
-                              double const dt) override
+    void postTimestepConcrete(Eigen::VectorXd const& local_x,
+                              Eigen::VectorXd const& local_x_dot,
+                              double const t, double const dt) override
     {
         unsigned const n_integration_points =
             _integration_method.getNumberOfPoints();
@@ -374,7 +379,7 @@ public:
         {
             x_position.setIntegrationPoint(ip);
 
-            updateConstitutiveRelations(local_x, x_position, t, dt,
+            updateConstitutiveRelations(local_x, local_x_dot, x_position, t, dt,
                                         _ip_data[ip]);
 
             auto& eps = _ip_data[ip].eps;
diff --git a/ProcessLib/SmallDeformation/SmallDeformationProcess.cpp b/ProcessLib/SmallDeformation/SmallDeformationProcess.cpp
index e5b00677d862d89afaf2dcb72145cdd8471a421c..4813db186021a99161c74f712d587bd6bc15afc9 100644
--- a/ProcessLib/SmallDeformation/SmallDeformationProcess.cpp
+++ b/ProcessLib/SmallDeformation/SmallDeformationProcess.cpp
@@ -181,7 +181,8 @@ void SmallDeformationProcess<DisplacementDim>::
 
 template <int DisplacementDim>
 void SmallDeformationProcess<DisplacementDim>::postTimestepConcreteProcess(
-    std::vector<GlobalVector*> const& x, const double t, const double dt,
+    std::vector<GlobalVector*> const& x,
+    std::vector<GlobalVector*> const& x_dot, const double t, const double dt,
     int const process_id)
 {
     DBUG("PostTimestep SmallDeformationProcess.");
@@ -193,7 +194,7 @@ void SmallDeformationProcess<DisplacementDim>::postTimestepConcreteProcess(
     ProcessLib::ProcessVariable const& pv = getProcessVariables(process_id)[0];
     GlobalExecutor::executeSelectedMemberOnDereferenced(
         &LocalAssemblerInterface::postTimestep, _local_assemblers,
-        pv.getActiveElementIDs(), dof_tables, x, t, dt);
+        pv.getActiveElementIDs(), dof_tables, x, x_dot, t, dt);
 
     std::unique_ptr<GlobalVector> material_forces;
     ProcessLib::SmallDeformation::writeMaterialForces(
diff --git a/ProcessLib/SmallDeformation/SmallDeformationProcess.h b/ProcessLib/SmallDeformation/SmallDeformationProcess.h
index 0d0ae5107b181c5f05b64d24bce4bd0eeac2b9f9..30c8c756dfa2704adfeb02095cceec35005ba746 100644
--- a/ProcessLib/SmallDeformation/SmallDeformationProcess.h
+++ b/ProcessLib/SmallDeformation/SmallDeformationProcess.h
@@ -62,6 +62,7 @@ private:
         GlobalMatrix& Jac) override;
 
     void postTimestepConcreteProcess(std::vector<GlobalVector*> const& x,
+                                     std::vector<GlobalVector*> const& x_dot,
                                      const double t, const double dt,
                                      int const process_id) override;
 
diff --git a/ProcessLib/SmallDeformationNonlocal/SmallDeformationNonlocalFEM.h b/ProcessLib/SmallDeformationNonlocal/SmallDeformationNonlocalFEM.h
index acc4c2d6bc7629794f84ec07d4d2e4a003046abf..e445b43af46e461e134facfb6c1c310372fc8eb8 100644
--- a/ProcessLib/SmallDeformationNonlocal/SmallDeformationNonlocalFEM.h
+++ b/ProcessLib/SmallDeformationNonlocal/SmallDeformationNonlocalFEM.h
@@ -543,6 +543,7 @@ public:
     }
 
     void postTimestepConcrete(Eigen::VectorXd const& /*local_x*/,
+                              Eigen::VectorXd const& /*local_x_dot*/,
                               double const /*t*/, double const /*dt*/) override
     {
         unsigned const n_integration_points =
diff --git a/ProcessLib/SmallDeformationNonlocal/SmallDeformationNonlocalProcess.cpp b/ProcessLib/SmallDeformationNonlocal/SmallDeformationNonlocalProcess.cpp
index d1fcf282a317ca979b4782250e4653533629308f..721b7067497d6fe327b2df52ba0fe33906ce8b44 100644
--- a/ProcessLib/SmallDeformationNonlocal/SmallDeformationNonlocalProcess.cpp
+++ b/ProcessLib/SmallDeformationNonlocal/SmallDeformationNonlocalProcess.cpp
@@ -272,6 +272,7 @@ void SmallDeformationNonlocalProcess<DisplacementDim>::
 template <int DisplacementDim>
 void SmallDeformationNonlocalProcess<DisplacementDim>::
     postTimestepConcreteProcess(std::vector<GlobalVector*> const& x,
+                                std::vector<GlobalVector*> const& x_dot,
                                 double const t,
                                 double const dt,
                                 int const process_id)
@@ -285,7 +286,7 @@ void SmallDeformationNonlocalProcess<DisplacementDim>::
     ProcessLib::ProcessVariable const& pv = getProcessVariables(process_id)[0];
     GlobalExecutor::executeSelectedMemberOnDereferenced(
         &LocalAssemblerInterface::postTimestep, _local_assemblers,
-        pv.getActiveElementIDs(), dof_tables, x, t, dt);
+        pv.getActiveElementIDs(), dof_tables, x, x_dot, t, dt);
 }
 
 template <int DisplacementDim>
diff --git a/ProcessLib/SmallDeformationNonlocal/SmallDeformationNonlocalProcess.h b/ProcessLib/SmallDeformationNonlocal/SmallDeformationNonlocalProcess.h
index d2abf804576cd9e8c9a089f37c41fa96fd1001c4..20de29e33f890d056a27ef23c0a6201d35316cb6 100644
--- a/ProcessLib/SmallDeformationNonlocal/SmallDeformationNonlocalProcess.h
+++ b/ProcessLib/SmallDeformationNonlocal/SmallDeformationNonlocalProcess.h
@@ -67,6 +67,7 @@ private:
         GlobalMatrix& Jac) override;
 
     void postTimestepConcreteProcess(std::vector<GlobalVector*> const& x,
+                                     std::vector<GlobalVector*> const& x_dot,
                                      double const t, double const dt,
                                      int const process_id) override;
 
diff --git a/ProcessLib/SteadyStateDiffusion/SteadyStateDiffusion.h b/ProcessLib/SteadyStateDiffusion/SteadyStateDiffusion.h
index 9847c46880cf5491df657cf67e73e3cc61c7a40b..f8bbd8298c2131342ae8b5e1ccc1f45003c89c45 100644
--- a/ProcessLib/SteadyStateDiffusion/SteadyStateDiffusion.h
+++ b/ProcessLib/SteadyStateDiffusion/SteadyStateDiffusion.h
@@ -58,10 +58,12 @@ public:
         return _local_assemblers[element_id]->getFlux(p, t, local_x);
     }
 
-    void postTimestepConcreteProcess(std::vector<GlobalVector*> const& x,
-                                     const double t,
-                                     const double /*delta_t*/,
-                                     int const process_id) override
+    void postTimestepConcreteProcess(
+        std::vector<GlobalVector*> const& x,
+        std::vector<GlobalVector*> const& /*x_dot*/,
+        const double t,
+        const double /*delta_t*/,
+        int const process_id) override
     {
         // For this single process, process_id is always zero.
         if (process_id != 0)
diff --git a/ProcessLib/StokesFlow/StokesFlowProcess.cpp b/ProcessLib/StokesFlow/StokesFlowProcess.cpp
index 5cc64069193e7bc27407bbf5a927efe552c2494d..14156ae390138792c36d820f0351f84fafb6b4ac 100644
--- a/ProcessLib/StokesFlow/StokesFlowProcess.cpp
+++ b/ProcessLib/StokesFlow/StokesFlowProcess.cpp
@@ -190,6 +190,7 @@ void StokesFlowProcess<GlobalDim>::computeSecondaryVariableConcrete(
 template <int GlobalDim>
 void StokesFlowProcess<GlobalDim>::postTimestepConcreteProcess(
     std::vector<GlobalVector*> const& x,
+    std::vector<GlobalVector*> const& x_dot,
     const double t,
     const double dt,
     int const process_id)
@@ -209,7 +210,7 @@ void StokesFlowProcess<GlobalDim>::postTimestepConcreteProcess(
     ProcessLib::ProcessVariable const& pv = getProcessVariables(process_id)[0];
     GlobalExecutor::executeSelectedMemberOnDereferenced(
         &StokesFlowLocalAssemblerInterface::postTimestep, _local_assemblers,
-        pv.getActiveElementIDs(), dof_tables, x, t, dt);
+        pv.getActiveElementIDs(), dof_tables, x, x_dot, t, dt);
 }
 
 template <int GlobalDim>
diff --git a/ProcessLib/StokesFlow/StokesFlowProcess.h b/ProcessLib/StokesFlow/StokesFlowProcess.h
index c16b3fa9a15cd5fa5804e117b85f02291168e567..68d7e21b93fe626aeb313e04cd9eb4994a2a86a6 100644
--- a/ProcessLib/StokesFlow/StokesFlowProcess.h
+++ b/ProcessLib/StokesFlow/StokesFlowProcess.h
@@ -55,6 +55,7 @@ public:
                                           int const /*process_id*/) override;
 
     void postTimestepConcreteProcess(std::vector<GlobalVector*> const& x,
+                                     std::vector<GlobalVector*> const& x_dot,
                                      const double t,
                                      const double dt,
                                      int const process_id) override;
diff --git a/ProcessLib/TH2M/TH2MFEM.h b/ProcessLib/TH2M/TH2MFEM.h
index 6ec3d71b5ec2ebdf66e751b216e33917bb31a495..cc077ef17ea8681d75b7d9bfed8900bf0b58c48d 100644
--- a/ProcessLib/TH2M/TH2MFEM.h
+++ b/ProcessLib/TH2M/TH2MFEM.h
@@ -149,6 +149,7 @@ private:
     }
 
     void postTimestepConcrete(Eigen::VectorXd const& /*local_x*/,
+                              Eigen::VectorXd const& /*local_x_dot*/,
                               double const /*t*/,
                               double const /*dt*/) override
     {
diff --git a/ProcessLib/TH2M/TH2MProcess.cpp b/ProcessLib/TH2M/TH2MProcess.cpp
index 2cd415061c23027e348f08def929555a4a871fd8..a53373046b3e0d3eaa5ad5db5820f4e55b40a5ce 100644
--- a/ProcessLib/TH2M/TH2MProcess.cpp
+++ b/ProcessLib/TH2M/TH2MProcess.cpp
@@ -363,7 +363,8 @@ void TH2MProcess<DisplacementDim>::preTimestepConcreteProcess(
 
 template <int DisplacementDim>
 void TH2MProcess<DisplacementDim>::postTimestepConcreteProcess(
-    std::vector<GlobalVector*> const& x, double const t, double const dt,
+    std::vector<GlobalVector*> const& x,
+    std::vector<GlobalVector*> const& x_dot, double const t, double const dt,
     const int process_id)
 {
     DBUG("PostTimestep TH2MProcess.");
@@ -371,7 +372,7 @@ void TH2MProcess<DisplacementDim>::postTimestepConcreteProcess(
     ProcessLib::ProcessVariable const& pv = getProcessVariables(process_id)[0];
     GlobalExecutor::executeSelectedMemberOnDereferenced(
         &LocalAssemblerInterface::postTimestep, local_assemblers_,
-        pv.getActiveElementIDs(), dof_tables, x, t, dt);
+        pv.getActiveElementIDs(), dof_tables, x, x_dot, t, dt);
 }
 
 template <int DisplacementDim>
diff --git a/ProcessLib/TH2M/TH2MProcess.h b/ProcessLib/TH2M/TH2MProcess.h
index aa412b8868fb85150509aea948c360d963c1769f..e985238230ea4d3cadef9af8e91d9bf5fbf61204 100644
--- a/ProcessLib/TH2M/TH2MProcess.h
+++ b/ProcessLib/TH2M/TH2MProcess.h
@@ -96,6 +96,7 @@ private:
                                     const int process_id) override;
 
     void postTimestepConcreteProcess(std::vector<GlobalVector*> const& x,
+                                     std::vector<GlobalVector*> const& x_dot,
                                      const double t, const double dt,
                                      int const /*process_id*/) override;
 
diff --git a/ProcessLib/ThermoHydroMechanics/ThermoHydroMechanicsFEM.h b/ProcessLib/ThermoHydroMechanics/ThermoHydroMechanicsFEM.h
index 5f43641ec4fc811ba8147a1714370cec64dfc930..85677012dba8cee4f7007b2d5cd63cd43c4d2ef5 100644
--- a/ProcessLib/ThermoHydroMechanics/ThermoHydroMechanicsFEM.h
+++ b/ProcessLib/ThermoHydroMechanics/ThermoHydroMechanicsFEM.h
@@ -147,6 +147,7 @@ public:
     }
 
     void postTimestepConcrete(Eigen::VectorXd const& /*local_x*/,
+                              Eigen::VectorXd const& /*local_x_dot*/,
                               double const /*t*/,
                               double const /*dt*/) override
     {
diff --git a/ProcessLib/ThermoHydroMechanics/ThermoHydroMechanicsProcess.cpp b/ProcessLib/ThermoHydroMechanics/ThermoHydroMechanicsProcess.cpp
index 93f76a2bed6f153e96021c624a9d18e37186a1dd..d57c6cbee2e37a06d6f717d2757f55fbb242aa52 100644
--- a/ProcessLib/ThermoHydroMechanics/ThermoHydroMechanicsProcess.cpp
+++ b/ProcessLib/ThermoHydroMechanics/ThermoHydroMechanicsProcess.cpp
@@ -372,7 +372,8 @@ void ThermoHydroMechanicsProcess<DisplacementDim>::preTimestepConcreteProcess(
 
 template <int DisplacementDim>
 void ThermoHydroMechanicsProcess<DisplacementDim>::postTimestepConcreteProcess(
-    std::vector<GlobalVector*> const& x, double const t, double const dt,
+    std::vector<GlobalVector*> const& x,
+    std::vector<GlobalVector*> const& x_dot, double const t, double const dt,
     const int process_id)
 {
     if (process_id != 0)
@@ -393,7 +394,7 @@ void ThermoHydroMechanicsProcess<DisplacementDim>::postTimestepConcreteProcess(
 
     GlobalExecutor::executeSelectedMemberOnDereferenced(
         &LocalAssemblerInterface::postTimestep, _local_assemblers,
-        pv.getActiveElementIDs(), dof_tables, x, t, dt);
+        pv.getActiveElementIDs(), dof_tables, x, x_dot, t, dt);
 }
 
 template <int DisplacementDim>
diff --git a/ProcessLib/ThermoHydroMechanics/ThermoHydroMechanicsProcess.h b/ProcessLib/ThermoHydroMechanics/ThermoHydroMechanicsProcess.h
index a2a548a619c39d154f3f72f7e7c4cb3ecb5bc0f9..123b186bb3b324dda7e4b928325393f9acf6bddb 100644
--- a/ProcessLib/ThermoHydroMechanics/ThermoHydroMechanicsProcess.h
+++ b/ProcessLib/ThermoHydroMechanics/ThermoHydroMechanicsProcess.h
@@ -91,6 +91,7 @@ private:
                                     const int process_id) override;
 
     void postTimestepConcreteProcess(std::vector<GlobalVector*> const& x,
+                                     std::vector<GlobalVector*> const& x_dot,
                                      const double t, const double dt,
                                      int const process_id) override;
 
diff --git a/ProcessLib/ThermoMechanicalPhaseField/ThermoMechanicalPhaseFieldFEM.h b/ProcessLib/ThermoMechanicalPhaseField/ThermoMechanicalPhaseFieldFEM.h
index 4a2391e1169876550d8899644d8c12263a8b9392..c57fa88ff7f65a880d8af49c0905dbb6dcb4f653 100644
--- a/ProcessLib/ThermoMechanicalPhaseField/ThermoMechanicalPhaseFieldFEM.h
+++ b/ProcessLib/ThermoMechanicalPhaseField/ThermoMechanicalPhaseFieldFEM.h
@@ -253,6 +253,7 @@ public:
     }
 
     void postTimestepConcrete(Eigen::VectorXd const& /*local_x*/,
+                              Eigen::VectorXd const& /*local_x_dot*/,
                               double const /*t*/, double const /*dt*/) override
     {
         unsigned const n_integration_points =
diff --git a/ProcessLib/ThermoMechanicalPhaseField/ThermoMechanicalPhaseFieldProcess.cpp b/ProcessLib/ThermoMechanicalPhaseField/ThermoMechanicalPhaseFieldProcess.cpp
index d71643e77802c1cd050dce2bb50e00827dadda96..1a948966d5a67862c512b944278b3905d1c88954 100644
--- a/ProcessLib/ThermoMechanicalPhaseField/ThermoMechanicalPhaseFieldProcess.cpp
+++ b/ProcessLib/ThermoMechanicalPhaseField/ThermoMechanicalPhaseFieldProcess.cpp
@@ -278,6 +278,7 @@ void ThermoMechanicalPhaseFieldProcess<DisplacementDim>::
 template <int DisplacementDim>
 void ThermoMechanicalPhaseFieldProcess<DisplacementDim>::
     postTimestepConcreteProcess(std::vector<GlobalVector*> const& x,
+                                std::vector<GlobalVector*> const& x_dot,
                                 double const t,
                                 double const dt,
                                 int const process_id)
@@ -299,7 +300,8 @@ void ThermoMechanicalPhaseFieldProcess<DisplacementDim>::
     ProcessLib::ProcessVariable const& pv = getProcessVariables(process_id)[0];
     GlobalExecutor::executeSelectedMemberOnDereferenced(
         &ThermoMechanicalPhaseFieldLocalAssemblerInterface::postTimestep,
-        _local_assemblers, pv.getActiveElementIDs(), dof_tables, x, t, dt);
+        _local_assemblers, pv.getActiveElementIDs(), dof_tables, x, x_dot, t,
+        dt);
 }
 
 template <int DisplacementDim>
diff --git a/ProcessLib/ThermoMechanicalPhaseField/ThermoMechanicalPhaseFieldProcess.h b/ProcessLib/ThermoMechanicalPhaseField/ThermoMechanicalPhaseFieldProcess.h
index 3a7967474fbd1897b025fc0b82db5c8abdf70ba9..0bc74f00845c8c1dbdac1c4ddb51809d2dd4b780 100644
--- a/ProcessLib/ThermoMechanicalPhaseField/ThermoMechanicalPhaseFieldProcess.h
+++ b/ProcessLib/ThermoMechanicalPhaseField/ThermoMechanicalPhaseFieldProcess.h
@@ -108,6 +108,7 @@ private:
                                     const int process_id) override;
 
     void postTimestepConcreteProcess(std::vector<GlobalVector*> const& x,
+                                     std::vector<GlobalVector*> const& x_dot,
                                      double const t, double const dt,
                                      int const process_id) override;
 
diff --git a/ProcessLib/ThermoMechanics/ThermoMechanicsFEM.h b/ProcessLib/ThermoMechanics/ThermoMechanicsFEM.h
index 8fb6e8d309f8a96f42a40a9391cd799f4a8b4ab5..eae77e1a27ed740375413d815b4f779f66ad37c8 100644
--- a/ProcessLib/ThermoMechanics/ThermoMechanicsFEM.h
+++ b/ProcessLib/ThermoMechanics/ThermoMechanicsFEM.h
@@ -225,6 +225,7 @@ public:
     }
 
     void postTimestepConcrete(Eigen::VectorXd const& /*local_x*/,
+                              Eigen::VectorXd const& /*local_x_dot*/,
                               double const /*t*/, double const /*dt*/) override
     {
         unsigned const n_integration_points =
diff --git a/ProcessLib/ThermoMechanics/ThermoMechanicsProcess.cpp b/ProcessLib/ThermoMechanics/ThermoMechanicsProcess.cpp
index 3d7f94b91c16347ad64bb39fab8ff29a792ed443..efd54a162508f740cce32627940f50dfcef08e5b 100644
--- a/ProcessLib/ThermoMechanics/ThermoMechanicsProcess.cpp
+++ b/ProcessLib/ThermoMechanics/ThermoMechanicsProcess.cpp
@@ -330,7 +330,8 @@ void ThermoMechanicsProcess<DisplacementDim>::preTimestepConcreteProcess(
 
 template <int DisplacementDim>
 void ThermoMechanicsProcess<DisplacementDim>::postTimestepConcreteProcess(
-    std::vector<GlobalVector*> const& x, double const t, double const dt,
+    std::vector<GlobalVector*> const& x,
+    std::vector<GlobalVector*> const& x_dot, double const t, double const dt,
     int const process_id)
 {
     if (process_id != 0)
@@ -350,7 +351,7 @@ void ThermoMechanicsProcess<DisplacementDim>::postTimestepConcreteProcess(
     ProcessLib::ProcessVariable const& pv = getProcessVariables(process_id)[0];
     GlobalExecutor::executeSelectedMemberOnDereferenced(
         &LocalAssemblerInterface::postTimestep, _local_assemblers,
-        pv.getActiveElementIDs(), dof_tables, x, t, dt);
+        pv.getActiveElementIDs(), dof_tables, x, x_dot, t, dt);
 }
 
 template <int DisplacementDim>
diff --git a/ProcessLib/ThermoMechanics/ThermoMechanicsProcess.h b/ProcessLib/ThermoMechanics/ThermoMechanicsProcess.h
index 4ecb93d8650db949d104f76b42c595f94f7715bf..fc1046dcce1313eeea280e1831785a60d2ff4cb8 100644
--- a/ProcessLib/ThermoMechanics/ThermoMechanicsProcess.h
+++ b/ProcessLib/ThermoMechanics/ThermoMechanicsProcess.h
@@ -84,6 +84,7 @@ private:
                                     const int process_id) override;
 
     void postTimestepConcreteProcess(std::vector<GlobalVector*> const& x,
+                                     std::vector<GlobalVector*> const& x_dot,
                                      const double t, const double dt,
                                      int const process_id) override;
 
diff --git a/ProcessLib/ThermoRichardsFlow/ThermoRichardsFlowFEM.h b/ProcessLib/ThermoRichardsFlow/ThermoRichardsFlowFEM.h
index f6a5b081f9ca34488b431c66305237f237da297a..0dd5422503e68307fcc27354e6cacd42d04b6568 100644
--- a/ProcessLib/ThermoRichardsFlow/ThermoRichardsFlowFEM.h
+++ b/ProcessLib/ThermoRichardsFlow/ThermoRichardsFlowFEM.h
@@ -96,6 +96,7 @@ public:
     }
 
     void postTimestepConcrete(Eigen::VectorXd const& /*local_x*/,
+                              Eigen::VectorXd const& /*local_x_dot*/,
                               double const /*t*/,
                               double const /*dt*/) override
     {
diff --git a/ProcessLib/ThermoRichardsFlow/ThermoRichardsFlowProcess.cpp b/ProcessLib/ThermoRichardsFlow/ThermoRichardsFlowProcess.cpp
index 207d5463b76734308f47f5e60b974cb4856f5789..e4d15a92b0cad829932595b8374d3f97800fded6 100644
--- a/ProcessLib/ThermoRichardsFlow/ThermoRichardsFlowProcess.cpp
+++ b/ProcessLib/ThermoRichardsFlow/ThermoRichardsFlowProcess.cpp
@@ -173,7 +173,8 @@ void ThermoRichardsFlowProcess::assembleWithJacobianConcreteProcess(
 }
 
 void ThermoRichardsFlowProcess::postTimestepConcreteProcess(
-    std::vector<GlobalVector*> const& x, double const t, double const dt,
+    std::vector<GlobalVector*> const& x,
+    std::vector<GlobalVector*> const& x_dot, double const t, double const dt,
     const int process_id)
 {
     if (process_id != 0)
@@ -188,7 +189,7 @@ void ThermoRichardsFlowProcess::postTimestepConcreteProcess(
     ProcessLib::ProcessVariable const& pv = getProcessVariables(process_id)[0];
     GlobalExecutor::executeSelectedMemberOnDereferenced(
         &LocalAssemblerIF::postTimestep, _local_assemblers,
-        pv.getActiveElementIDs(), dof_tables, x, t, dt);
+        pv.getActiveElementIDs(), dof_tables, x, x_dot, t, dt);
 }
 
 void ThermoRichardsFlowProcess::computeSecondaryVariableConcrete(
diff --git a/ProcessLib/ThermoRichardsFlow/ThermoRichardsFlowProcess.h b/ProcessLib/ThermoRichardsFlow/ThermoRichardsFlowProcess.h
index a2b2397fb04477ca54b5213ce33e180831658c85..c93f2ee3091f9246a12c147b7d07ce9d9c25f6b6 100644
--- a/ProcessLib/ThermoRichardsFlow/ThermoRichardsFlowProcess.h
+++ b/ProcessLib/ThermoRichardsFlow/ThermoRichardsFlowProcess.h
@@ -127,6 +127,7 @@ private:
         GlobalMatrix& Jac) override;
 
     void postTimestepConcreteProcess(std::vector<GlobalVector*> const& x,
+                                     std::vector<GlobalVector*> const& x_dot,
                                      double const t, double const dt,
                                      const int process_id) override;
 
diff --git a/ProcessLib/ThermoRichardsMechanics/LocalAssemblerInterface.h b/ProcessLib/ThermoRichardsMechanics/LocalAssemblerInterface.h
index f5edbc4d373b41c9a3b3b6a9c6975d4482df88fa..e3ba811b6d4ac7e4698fc83f5c8b3a12e9330bef 100644
--- a/ProcessLib/ThermoRichardsMechanics/LocalAssemblerInterface.h
+++ b/ProcessLib/ThermoRichardsMechanics/LocalAssemblerInterface.h
@@ -105,6 +105,7 @@ struct LocalAssemblerInterface : public ProcessLib::LocalAssemblerInterface,
     }
 
     void postTimestepConcrete(Eigen::VectorXd const& /*local_x*/,
+                              Eigen::VectorXd const& /*local_x_dot*/,
                               double const /*t*/,
                               double const /*dt*/) override
     {
diff --git a/ProcessLib/ThermoRichardsMechanics/ThermoRichardsMechanicsProcess.cpp b/ProcessLib/ThermoRichardsMechanics/ThermoRichardsMechanicsProcess.cpp
index 8594a81dcb5128f23726879b996ab3094d46f35f..acdf602bfa9b85cb998d37d48c10c6a5a70587b4 100644
--- a/ProcessLib/ThermoRichardsMechanics/ThermoRichardsMechanicsProcess.cpp
+++ b/ProcessLib/ThermoRichardsMechanics/ThermoRichardsMechanicsProcess.cpp
@@ -274,6 +274,7 @@ ThermoRichardsMechanicsProcess<DisplacementDim, ConstitutiveTraits>::
 template <int DisplacementDim, typename ConstitutiveTraits>
 void ThermoRichardsMechanicsProcess<DisplacementDim, ConstitutiveTraits>::
     postTimestepConcreteProcess(std::vector<GlobalVector*> const& x,
+                                std::vector<GlobalVector*> const& x_dot,
                                 double const t, double const dt,
                                 const int process_id)
 {
@@ -284,7 +285,7 @@ void ThermoRichardsMechanicsProcess<DisplacementDim, ConstitutiveTraits>::
     ProcessLib::ProcessVariable const& pv = getProcessVariables(process_id)[0];
     GlobalExecutor::executeSelectedMemberOnDereferenced(
         &LocalAssemblerIF::postTimestep, local_assemblers_,
-        pv.getActiveElementIDs(), dof_tables, x, t, dt);
+        pv.getActiveElementIDs(), dof_tables, x, x_dot, t, dt);
 }
 
 template <int DisplacementDim, typename ConstitutiveTraits>
diff --git a/ProcessLib/ThermoRichardsMechanics/ThermoRichardsMechanicsProcess.h b/ProcessLib/ThermoRichardsMechanics/ThermoRichardsMechanicsProcess.h
index f9f6c07c2bb54a6329a1a8358dc180922a5a133d..c25db50b506cc4c9c7520a2ffe79549e0a31fac2 100644
--- a/ProcessLib/ThermoRichardsMechanics/ThermoRichardsMechanicsProcess.h
+++ b/ProcessLib/ThermoRichardsMechanics/ThermoRichardsMechanicsProcess.h
@@ -191,6 +191,7 @@ private:
                                     const int /*process_id*/) override;
 
     void postTimestepConcreteProcess(std::vector<GlobalVector*> const& x,
+                                     std::vector<GlobalVector*> const& x_dot,
                                      double const t, double const dt,
                                      const int process_id) override;
 
diff --git a/ProcessLib/TimeLoop.cpp b/ProcessLib/TimeLoop.cpp
index 5cb4a4aeb6af9486967fc1b1a0d8f2aed6ef4282..048e5d88830a1238bd3d44403b0fbccbf3091038 100644
--- a/ProcessLib/TimeLoop.cpp
+++ b/ProcessLib/TimeLoop.cpp
@@ -100,7 +100,7 @@ void postTimestepForAllProcesses(
         auto& x_dot = *x_dots[process_id];
         pcs.computeSecondaryVariable(t, dt, process_solutions, x_dot,
                                      process_id);
-        pcs.postTimestep(process_solutions, t, dt, process_id);
+        pcs.postTimestep(process_solutions, x_dots, t, dt, process_id);
     }
     for (auto& x_dot : x_dots)
     {