diff --git a/ProcessLib/HydroMechanics/HydroMechanicsProcess.cpp b/ProcessLib/HydroMechanics/HydroMechanicsProcess.cpp
index 96b6c73369664982f2d1c72cfea628c2c8a4dcec..11fdc1a13ac41a2ac07f02c0100dfc85e2d0e860 100644
--- a/ProcessLib/HydroMechanics/HydroMechanicsProcess.cpp
+++ b/ProcessLib/HydroMechanics/HydroMechanicsProcess.cpp
@@ -421,8 +421,9 @@ void HydroMechanicsProcess<DisplacementDim>::postTimestepConcreteProcess(
 
 template <int DisplacementDim>
 void HydroMechanicsProcess<DisplacementDim>::postNonLinearSolverConcreteProcess(
-    GlobalVector const& x, GlobalVector const& x_prev, const double t,
-    double const dt, const int process_id)
+    std::vector<GlobalVector*> const& x,
+    std::vector<GlobalVector*> const& x_prev, const double t, double const dt,
+    const int process_id)
 {
     DBUG("PostNonLinearSolver HydroMechanicsProcess.");
 
diff --git a/ProcessLib/HydroMechanics/HydroMechanicsProcess.h b/ProcessLib/HydroMechanics/HydroMechanicsProcess.h
index a493d60de08ca95ba14d31eb52570acd1dce1f29..6a1cf557087e87111af893f238799639157ebf73 100644
--- a/ProcessLib/HydroMechanics/HydroMechanicsProcess.h
+++ b/ProcessLib/HydroMechanics/HydroMechanicsProcess.h
@@ -97,10 +97,10 @@ private:
                                      const double t, const double dt,
                                      int const process_id) override;
 
-    void postNonLinearSolverConcreteProcess(GlobalVector const& x,
-                                            GlobalVector const& x_prev,
-                                            const double t, double const dt,
-                                            int const process_id) override;
+    void postNonLinearSolverConcreteProcess(
+        std::vector<GlobalVector*> const& x,
+        std::vector<GlobalVector*> const& x_prev, const double t,
+        double const dt, int const process_id) override;
 
     void setInitialConditionsConcreteProcess(std::vector<GlobalVector*>& x,
                                              double const t,
diff --git a/ProcessLib/LocalAssemblerInterface.cpp b/ProcessLib/LocalAssemblerInterface.cpp
index def554c2e3ad6168d145713b4ff7b8ae067336e8..5ed9d363e76cc71adca7e73bffd525cca8cfe3f4 100644
--- a/ProcessLib/LocalAssemblerInterface.cpp
+++ b/ProcessLib/LocalAssemblerInterface.cpp
@@ -162,13 +162,14 @@ void LocalAssemblerInterface::postTimestep(
 
 void LocalAssemblerInterface::postNonLinearSolver(
     std::size_t const mesh_item_id,
-    NumLib::LocalToGlobalIndexMap const& dof_table, GlobalVector const& x,
-    GlobalVector const& x_prev, double const t, double const dt,
+    NumLib::LocalToGlobalIndexMap const& dof_table,
+    std::vector<GlobalVector*> const& x,
+    std::vector<GlobalVector*> const& x_prev, double const t, double const dt,
     bool const use_monolithic_scheme, int const process_id)
 {
     auto const indices = NumLib::getIndices(mesh_item_id, dof_table);
-    auto const local_x = x.get(indices);
-    auto const local_x_prev = x_prev.get(indices);
+    auto const local_x = x[process_id]->get(indices);
+    auto const local_x_prev = x_prev[process_id]->get(indices);
 
     postNonLinearSolverConcrete(local_x, local_x_prev, t, dt,
                                 use_monolithic_scheme, process_id);
diff --git a/ProcessLib/LocalAssemblerInterface.h b/ProcessLib/LocalAssemblerInterface.h
index 0034cecce20404a696f5f2525e0d2e6e8e76218d..75252fba2d6146c79950e4f92677e07dd7e244bf 100644
--- a/ProcessLib/LocalAssemblerInterface.h
+++ b/ProcessLib/LocalAssemblerInterface.h
@@ -97,7 +97,8 @@ public:
 
     void postNonLinearSolver(std::size_t const mesh_item_id,
                              NumLib::LocalToGlobalIndexMap const& dof_table,
-                             GlobalVector const& x, GlobalVector const& x_prev,
+                             std::vector<GlobalVector*> const& x,
+                             std::vector<GlobalVector*> const& x_prev,
                              double const t, double const dt,
                              bool const use_monolithic_scheme,
                              int const process_id);
diff --git a/ProcessLib/PhaseField/PhaseFieldProcess.cpp b/ProcessLib/PhaseField/PhaseFieldProcess.cpp
index 5cbe52ab02add9a5a8e958c6960aa63b97364528..5a725b1f352472de3bd3b9b639e5076985bbd3a2 100644
--- a/ProcessLib/PhaseField/PhaseFieldProcess.cpp
+++ b/ProcessLib/PhaseField/PhaseFieldProcess.cpp
@@ -333,7 +333,8 @@ void PhaseFieldProcess<DisplacementDim>::postTimestepConcreteProcess(
 
 template <int DisplacementDim>
 void PhaseFieldProcess<DisplacementDim>::postNonLinearSolverConcreteProcess(
-    GlobalVector const& x, GlobalVector const& /*x_prev*/, const double t,
+    std::vector<GlobalVector*> const& x,
+    std::vector<GlobalVector*> const& /*x_prev*/, const double t,
     double const /*dt*/, const int process_id)
 {
     _process_data.crack_volume = 0.0;
diff --git a/ProcessLib/PhaseField/PhaseFieldProcess.h b/ProcessLib/PhaseField/PhaseFieldProcess.h
index ba2680f6eace85d857fdaa0c12839f2a38be8c0e..e7b1a995931fb0f035c4a9d455cd83726809c652 100644
--- a/ProcessLib/PhaseField/PhaseFieldProcess.h
+++ b/ProcessLib/PhaseField/PhaseFieldProcess.h
@@ -82,10 +82,10 @@ private:
                                      const double t, const double delta_t,
                                      int const process_id) override;
 
-    void postNonLinearSolverConcreteProcess(GlobalVector const& x,
-                                            GlobalVector const& x_prev,
-                                            const double t, double const dt,
-                                            int const process_id) override;
+    void postNonLinearSolverConcreteProcess(
+        std::vector<GlobalVector*> const& x,
+        std::vector<GlobalVector*> const& x_prev, const double t,
+        double const dt, int const process_id) override;
 
     void updateConstraints(GlobalVector& lower, GlobalVector& upper,
                            int const process_id) override;
diff --git a/ProcessLib/Process.cpp b/ProcessLib/Process.cpp
index 86ac40a84e4ee38ea321bcb1e759b18cd5bb5378..3aa82bf248c07c2df223e73275106398374fca71 100644
--- a/ProcessLib/Process.cpp
+++ b/ProcessLib/Process.cpp
@@ -414,12 +414,20 @@ void Process::postTimestep(std::vector<GlobalVector*> const& x,
     _boundary_conditions[process_id].postTimestep(t, x, process_id);
 }
 
-void Process::postNonLinearSolver(GlobalVector const& x,
-                                  GlobalVector const& x_prev, const double t,
-                                  double const dt, int const process_id)
+void Process::postNonLinearSolver(std::vector<GlobalVector*> const& x,
+                                  std::vector<GlobalVector*> const& x_prev,
+                                  const double t, double const dt,
+                                  int const process_id)
 {
-    MathLib::LinAlg::setLocalAccessibleVector(x);
-    MathLib::LinAlg::setLocalAccessibleVector(x_prev);
+    for (auto* const solution : x)
+    {
+        MathLib::LinAlg::setLocalAccessibleVector(*solution);
+    }
+    for (auto* const solution : x_prev)
+    {
+        MathLib::LinAlg::setLocalAccessibleVector(*solution);
+    }
+
     postNonLinearSolverConcreteProcess(x, x_prev, t, dt, process_id);
 }
 
diff --git a/ProcessLib/Process.h b/ProcessLib/Process.h
index d72b136fbea69eb85bf2a6c97e65c1ab6230e7b5..77b10f70eb4aabc603381f7cbddb032b1158aa3f 100644
--- a/ProcessLib/Process.h
+++ b/ProcessLib/Process.h
@@ -68,7 +68,8 @@ public:
 
     /// Calculates secondary variables, e.g. stress and strain for deformation
     /// analysis, only after nonlinear solver being successfully conducted.
-    void postNonLinearSolver(GlobalVector const& x, GlobalVector const& x_prev,
+    void postNonLinearSolver(std::vector<GlobalVector*> const& x,
+                             std::vector<GlobalVector*> const& x_prev,
                              const double t, double const dt,
                              int const process_id);
 
@@ -267,8 +268,9 @@ private:
     }
 
     virtual void postNonLinearSolverConcreteProcess(
-        GlobalVector const& /*x*/, GlobalVector const& /*x_prev*/,
-        const double /*t*/, double const /*dt*/, int const /*process_id*/)
+        std::vector<GlobalVector*> const& /*x*/,
+        std::vector<GlobalVector*> const& /*x_prev*/, const double /*t*/,
+        double const /*dt*/, int const /*process_id*/)
     {
     }
 
diff --git a/ProcessLib/ThermoMechanicalPhaseField/ThermoMechanicalPhaseFieldProcess.cpp b/ProcessLib/ThermoMechanicalPhaseField/ThermoMechanicalPhaseFieldProcess.cpp
index 49251ed7e7fe65ba8e4c8fd498ebe63d3663b4c0..bb990ace0aacc34b8ebcf2d9a5abb34eb8a93d14 100644
--- a/ProcessLib/ThermoMechanicalPhaseField/ThermoMechanicalPhaseFieldProcess.cpp
+++ b/ProcessLib/ThermoMechanicalPhaseField/ThermoMechanicalPhaseFieldProcess.cpp
@@ -306,8 +306,8 @@ void ThermoMechanicalPhaseFieldProcess<DisplacementDim>::
 
 template <int DisplacementDim>
 void ThermoMechanicalPhaseFieldProcess<DisplacementDim>::
-    postNonLinearSolverConcreteProcess(GlobalVector const& x,
-                                       GlobalVector const& x_prev,
+    postNonLinearSolverConcreteProcess(std::vector<GlobalVector*> const& x,
+                                       std::vector<GlobalVector*> const& x_prev,
                                        const double t, double const dt,
                                        const int process_id)
 {
diff --git a/ProcessLib/ThermoMechanicalPhaseField/ThermoMechanicalPhaseFieldProcess.h b/ProcessLib/ThermoMechanicalPhaseField/ThermoMechanicalPhaseFieldProcess.h
index 2fa5633e108de3768c4dac6efddc5cb18bdc150a..cc6cec904503f14dec20f402a1af0477c39137bf 100644
--- a/ProcessLib/ThermoMechanicalPhaseField/ThermoMechanicalPhaseFieldProcess.h
+++ b/ProcessLib/ThermoMechanicalPhaseField/ThermoMechanicalPhaseFieldProcess.h
@@ -114,10 +114,10 @@ private:
                                      double const t, double const dt,
                                      int const process_id) override;
 
-    void postNonLinearSolverConcreteProcess(GlobalVector const& x,
-                                            GlobalVector const& x_prev,
-                                            const double t, double const dt,
-                                            int const process_id) override;
+    void postNonLinearSolverConcreteProcess(
+        std::vector<GlobalVector*> const& x,
+        std::vector<GlobalVector*> const& x_prev, const double t,
+        double const dt, int const process_id) override;
 
     // To be replaced.
     NumLib::LocalToGlobalIndexMap& getDOFTableByProcessID(
diff --git a/ProcessLib/TimeLoop.cpp b/ProcessLib/TimeLoop.cpp
index 7822438802c517f15807949a871e1929a0e3c023..fa4825680f12a81b818e83a4fa7f739faf9d3427 100644
--- a/ProcessLib/TimeLoop.cpp
+++ b/ProcessLib/TimeLoop.cpp
@@ -256,8 +256,7 @@ NumLib::NonlinearSolverStatus solveOneTimeStepOneProcess(
         return nonlinear_solver_status;
     }
 
-    process.postNonLinearSolver(*x[process_id], *x_prev[process_id], t, delta_t,
-                                process_id);
+    process.postNonLinearSolver(x, x_prev, t, delta_t, process_id);
 
     return nonlinear_solver_status;
 }