diff --git a/ProcessLib/ComponentTransport/ComponentTransportProcess.cpp b/ProcessLib/ComponentTransport/ComponentTransportProcess.cpp
index 9e886b74c0edff80a73482d1e913308b993fcb09..b371823600452d1bf7e7fd2420b3a3a79e11f119 100644
--- a/ProcessLib/ComponentTransport/ComponentTransportProcess.cpp
+++ b/ProcessLib/ComponentTransport/ComponentTransportProcess.cpp
@@ -86,6 +86,12 @@ void ComponentTransportProcess::initializeConcreteProcess(
             &ComponentTransportLocalAssemblerInterface::getIntPtDarcyVelocity));
 }
 
+void ComponentTransportProcess::setInitialConditionsConcreteProcess(
+    std::vector<GlobalVector*>& /*x*/, double const /*t*/,
+    int const /*process_id*/)
+{
+}
+
 void ComponentTransportProcess::assembleConcreteProcess(
     const double t, double const dt, std::vector<GlobalVector*> const& x,
     std::vector<GlobalVector*> const& xdot, int const process_id,
diff --git a/ProcessLib/ComponentTransport/ComponentTransportProcess.h b/ProcessLib/ComponentTransport/ComponentTransportProcess.h
index c5a86b770179a252f8806f063d6e9bc211d2c842..c13c5e8ab648c0aef8fee90378dc00a4dd7cd793 100644
--- a/ProcessLib/ComponentTransport/ComponentTransportProcess.h
+++ b/ProcessLib/ComponentTransport/ComponentTransportProcess.h
@@ -142,6 +142,10 @@ private:
         MeshLib::Mesh const& mesh,
         unsigned const integration_order) override;
 
+    void setInitialConditionsConcreteProcess(std::vector<GlobalVector*>& x,
+                                             double const t,
+                                             int const process_id) override;
+
     void assembleConcreteProcess(const double t, double const dt,
                                  std::vector<GlobalVector*> const& x,
                                  std::vector<GlobalVector*> const& xdot,
diff --git a/ProcessLib/HydroMechanics/HydroMechanicsProcess.cpp b/ProcessLib/HydroMechanics/HydroMechanicsProcess.cpp
index 1de73f250041b5514280d9724eecc94f1942f710..7d6ba4327b70d9156d117d902816ed0c2720a8ca 100644
--- a/ProcessLib/HydroMechanics/HydroMechanicsProcess.cpp
+++ b/ProcessLib/HydroMechanics/HydroMechanicsProcess.cpp
@@ -532,17 +532,22 @@ void HydroMechanicsProcess<DisplacementDim>::postNonLinearSolverConcreteProcess(
 }
 
 template <int DisplacementDim>
-void HydroMechanicsProcess<
-    DisplacementDim>::setInitialConditionsConcreteProcess(GlobalVector const& x,
-                                                          double const t,
-                                                          int const process_id)
+void HydroMechanicsProcess<DisplacementDim>::
+    setInitialConditionsConcreteProcess(std::vector<GlobalVector*>& x,
+                                        double const t,
+                                        int const process_id)
 {
+    if (process_id != _process_data.hydraulic_process_id)
+    {
+        return;
+    }
+
     DBUG("Set initial conditions of HydroMechanicsProcess.");
 
     ProcessLib::ProcessVariable const& pv = getProcessVariables(process_id)[0];
     GlobalExecutor::executeSelectedMemberOnDereferenced(
         &LocalAssemblerIF::setInitialConditions, _local_assemblers,
-        pv.getActiveElementIDs(), getDOFTable(process_id), x, t,
+        pv.getActiveElementIDs(), getDOFTable(process_id), *x[process_id], t,
         _use_monolithic_scheme, process_id);
 }
 
diff --git a/ProcessLib/HydroMechanics/HydroMechanicsProcess.h b/ProcessLib/HydroMechanics/HydroMechanicsProcess.h
index 987e4e6cf8dd1d928a95c34f0593d04787b02c8d..313b77a7acfc72484ff3487723e765a37b90cc2b 100644
--- a/ProcessLib/HydroMechanics/HydroMechanicsProcess.h
+++ b/ProcessLib/HydroMechanics/HydroMechanicsProcess.h
@@ -99,7 +99,7 @@ private:
                                             const double t, double const dt,
                                             int const process_id) override;
 
-    void setInitialConditionsConcreteProcess(GlobalVector const& x,
+    void setInitialConditionsConcreteProcess(std::vector<GlobalVector*>& x,
                                              double const t,
                                              int const process_id) override;
 
diff --git a/ProcessLib/Process.cpp b/ProcessLib/Process.cpp
index e2c3f120ec950d9be7134c7879dd4a08629f8695..4c14b21b6785f7cb684ccc8cc77263f26f2d183e 100644
--- a/ProcessLib/Process.cpp
+++ b/ProcessLib/Process.cpp
@@ -173,7 +173,7 @@ void Process::setInitialConditions(
     MathLib::LinAlg::finalizeAssembly(x);
     MathLib::LinAlg::copy(x, x_prev);  // pushState
 
-    setInitialConditionsConcreteProcess(x, t, process_id);
+    setInitialConditionsConcreteProcess(process_solutions, t, process_id);
 }
 
 MathLib::MatrixSpecifications Process::getMatrixSpecifications(
diff --git a/ProcessLib/Process.h b/ProcessLib/Process.h
index 6f0d5e29a635f95830fb729139ad5850ea3b769c..c01cf00daa59d94710ee74d8eb45e9dae55f4202 100644
--- a/ProcessLib/Process.h
+++ b/ProcessLib/Process.h
@@ -209,9 +209,10 @@ private:
     /// processes. It is called by initialize().
     virtual void initializeBoundaryConditions();
 
-    virtual void setInitialConditionsConcreteProcess(GlobalVector const& /*x*/,
-                                                     double const /*t*/,
-                                                     int const /*process_id*/)
+    virtual void setInitialConditionsConcreteProcess(
+        std::vector<GlobalVector*>& /*x*/,
+        double const /*t*/,
+        int const /*process_id*/)
     {
     }
 
diff --git a/ProcessLib/RichardsMechanics/RichardsMechanicsProcess.cpp b/ProcessLib/RichardsMechanics/RichardsMechanicsProcess.cpp
index 48900041ef3158d77f39cbd9f446f28c2cca862d..6a6e9debe41aac9dbba0ac6ce9322719523116a4 100644
--- a/ProcessLib/RichardsMechanics/RichardsMechanicsProcess.cpp
+++ b/ProcessLib/RichardsMechanics/RichardsMechanicsProcess.cpp
@@ -432,18 +432,23 @@ void RichardsMechanicsProcess<DisplacementDim>::initializeBoundaryConditions()
 }
 
 template <int DisplacementDim>
-void RichardsMechanicsProcess<
-    DisplacementDim>::setInitialConditionsConcreteProcess(GlobalVector const& x,
-                                                          double const t,
-                                                          int const process_id)
+void RichardsMechanicsProcess<DisplacementDim>::
+    setInitialConditionsConcreteProcess(std::vector<GlobalVector*>& x,
+                                        double const t,
+                                        int const process_id)
 {
+    if (process_id != 0)
+    {
+        return;
+    }
+
     DBUG("SetInitialConditions RichardsMechanicsProcess.");
 
     ProcessLib::ProcessVariable const& pv = getProcessVariables(process_id)[0];
 
     GlobalExecutor::executeSelectedMemberOnDereferenced(
         &LocalAssemblerIF::setInitialConditions, _local_assemblers,
-        pv.getActiveElementIDs(), getDOFTable(process_id), x, t,
+        pv.getActiveElementIDs(), getDOFTable(process_id), *x[process_id], t,
         _use_monolithic_scheme, process_id);
 }
 
diff --git a/ProcessLib/RichardsMechanics/RichardsMechanicsProcess.h b/ProcessLib/RichardsMechanics/RichardsMechanicsProcess.h
index c5f598ecb9470629e3e4bde300ec03cec12071c4..5c4bf653ca79650211937c3715e7cd30faafd63d 100644
--- a/ProcessLib/RichardsMechanics/RichardsMechanicsProcess.h
+++ b/ProcessLib/RichardsMechanics/RichardsMechanicsProcess.h
@@ -73,7 +73,7 @@ private:
 
     void initializeBoundaryConditions() override;
 
-    void setInitialConditionsConcreteProcess(GlobalVector const& x,
+    void setInitialConditionsConcreteProcess(std::vector<GlobalVector*>& x,
                                              double const t,
                                              int const process_id) override;