diff --git a/ProcessLib/CreateProcessData.cpp b/ProcessLib/CreateProcessData.cpp
index 94c777e47a1010b1e1bd0b2282d8100091b73d78..b8ff8aff11800b180e286e7f805e47320644521e 100644
--- a/ProcessLib/CreateProcessData.cpp
+++ b/ProcessLib/CreateProcessData.cpp
@@ -23,9 +23,8 @@ namespace ProcessLib
 {
 static std::unique_ptr<ProcessData> makeProcessData(
     std::unique_ptr<NumLib::TimeStepAlgorithm>&& timestepper,
-    NumLib::NonlinearSolverBase& nonlinear_solver,
-    int const process_id,
-    Process& process,
+    NumLib::NonlinearSolverBase& nonlinear_solver, int const process_id,
+    std::string process_name, Process& process,
     std::unique_ptr<NumLib::TimeDiscretization>&& time_disc,
     std::unique_ptr<NumLib::ConvergenceCriterion>&& conv_crit,
     bool const compensate_non_equilibrium_initial_residuum)
@@ -40,7 +39,8 @@ static std::unique_ptr<ProcessData> makeProcessData(
             compensate_non_equilibrium_initial_residuum);
         return std::make_unique<ProcessData>(
             std::move(timestepper), Tag::Picard, *nonlinear_solver_picard,
-            std::move(conv_crit), std::move(time_disc), process_id, process);
+            std::move(conv_crit), std::move(time_disc), process_id,
+            std::move(process_name), process);
     }
     if (auto* nonlinear_solver_newton =
             dynamic_cast<NumLib::NonlinearSolver<Tag::Newton>*>(
@@ -50,7 +50,8 @@ static std::unique_ptr<ProcessData> makeProcessData(
             compensate_non_equilibrium_initial_residuum);
         return std::make_unique<ProcessData>(
             std::move(timestepper), Tag::Newton, *nonlinear_solver_newton,
-            std::move(conv_crit), std::move(time_disc), process_id, process);
+            std::move(conv_crit), std::move(time_disc), process_id,
+            std::move(process_name), process);
     }
 #ifdef USE_PETSC
     if (auto* nonlinear_solver_petsc =
@@ -58,7 +59,8 @@ static std::unique_ptr<ProcessData> makeProcessData(
     {
         return std::make_unique<ProcessData>(
             std::move(timestepper), Tag::Newton, *nonlinear_solver_petsc,
-            std::move(conv_crit), std::move(time_disc), process_id, process);
+            std::move(conv_crit), std::move(time_disc), process_id,
+            std::move(process_name), process);
     }
 #endif  // USE_PETSC
 
@@ -71,8 +73,7 @@ std::vector<std::unique_ptr<ProcessData>> createPerProcessData(
     std::map<std::string, std::unique_ptr<NumLib::NonlinearSolverBase>> const&
         nonlinear_solvers,
     bool const compensate_non_equilibrium_initial_residuum,
-    std::vector<double> const& fixed_times_for_output,
-    std::map<std::string, int>& local_coupling_processes)
+    std::vector<double> const& fixed_times_for_output)
 {
     std::vector<std::unique_ptr<ProcessData>> per_process_data;
     std::vector<std::string> process_names;
@@ -91,31 +92,20 @@ std::vector<std::unique_ptr<ProcessData>> createPerProcessData(
 
         auto const process_name =
             //! \ogs_file_param{prj__time_loop__processes__process__process_name}
-            pcs_config.getConfigParameterOptional<std::string>("process_name");
-        if (process_name)
+            pcs_config.getConfigParameter<std::string>("process_name", "");
+        if (process_name != "")
         {
-            if (!local_coupling_processes.contains(*process_name))
+            if (ranges::contains(process_names, process_name))
             {
                 OGS_FATAL(
-                    "The given process name '{}' for the element "
-                    "'time_loop/processes/process/process_name' is not found "
-                    "in the element "
-                    "'time_loop/global_process_coupling/"
-                    "local_coupling_processes/process_name' in the project "
-                    "file.",
-                    *process_name);
+                    "The given process name is not unique! Please check the "
+                    "element "
+                    "'time_loop/process/name' in the project file. Found "
+                    "duplicate "
+                    "process name '{:s}'.",
+                    process_name);
             }
-
-            if (ranges::contains(process_names, *process_name))
-            {
-                OGS_FATAL(
-                    "The given process name '{}' for the element "
-                    "'time_loop/processes/process/process_name' is not unique! "
-                    "Please check this in the project file.",
-                    *process_name);
-            }
-            process_names.emplace_back(*process_name);
-            local_coupling_processes[*process_name] = process_id;
+            process_names.emplace_back(process_name);
         }
 
         auto const nl_slv_name =
@@ -152,10 +142,10 @@ std::vector<std::unique_ptr<ProcessData>> createPerProcessData(
                 "in the current project file!");
         }
 
-        per_process_data.emplace_back(
-            makeProcessData(std::move(timestepper), nl_slv, process_id, pcs,
-                            std::move(time_disc), std::move(conv_crit),
-                            compensate_non_equilibrium_initial_residuum));
+        per_process_data.emplace_back(makeProcessData(
+            std::move(timestepper), nl_slv, process_id, std::move(process_name),
+            pcs, std::move(time_disc), std::move(conv_crit),
+            compensate_non_equilibrium_initial_residuum));
         ++process_id;
     }
 
@@ -175,16 +165,6 @@ std::vector<std::unique_ptr<ProcessData>> createPerProcessData(
         }
     }
 
-    if (process_names.size() != local_coupling_processes.size())
-    {
-        OGS_FATAL(
-            "The number of the given process names for the element "
-            "'time_loop/processes/process/process_name' is not equal to that "
-            "in the element "
-            "'time_loop/global_process_coupling/local_coupling_processes/"
-            "process_name' in the project file.");
-    }
-
     return per_process_data;
 }
 }  // namespace ProcessLib
diff --git a/ProcessLib/CreateProcessData.h b/ProcessLib/CreateProcessData.h
index 0b47009dd0f2ec99b67d92e347662e431754c897..a79db8cdfacb1aedf3b9145cef7bb75fc02e6515 100644
--- a/ProcessLib/CreateProcessData.h
+++ b/ProcessLib/CreateProcessData.h
@@ -20,7 +20,6 @@ std::vector<std::unique_ptr<ProcessData>> createPerProcessData(
     std::map<std::string, std::unique_ptr<NumLib::NonlinearSolverBase>> const&
         nonlinear_solvers,
     bool const compensate_non_equilibrium_initial_residuum,
-    std::vector<double> const& fixed_times_for_output,
-    std::map<std::string, int>& local_coupling_processes);
+    std::vector<double> const& fixed_times_for_output);
 
 }  // namespace ProcessLib
diff --git a/ProcessLib/CreateTimeLoop.cpp b/ProcessLib/CreateTimeLoop.cpp
index 068c14d9289ac05c701bcce3c6446aa6a226b886..1a7b6923fc79e1908646a95cacde1cbf5b1fe596 100644
--- a/ProcessLib/CreateTimeLoop.cpp
+++ b/ProcessLib/CreateTimeLoop.cpp
@@ -150,8 +150,7 @@ std::unique_ptr<TimeLoop> createTimeLoop(
     auto per_process_data = createPerProcessData(
         //! \ogs_file_param{prj__time_loop__processes}
         config.getConfigSubtree("processes"), processes, nonlinear_solvers,
-        compensate_non_equilibrium_initial_residuum, fixed_times_for_output,
-        local_coupling_processes);
+        compensate_non_equilibrium_initial_residuum, fixed_times_for_output);
 
     const bool use_staggered_scheme =
         ranges::any_of(processes.begin(), processes.end(),
diff --git a/ProcessLib/ProcessData.h b/ProcessLib/ProcessData.h
index aa2399ee173e0bc368e32e547224bf0930e9d13d..dd7577a42de4ae66199d8f793d4d9bd448bc60d6 100644
--- a/ProcessLib/ProcessData.h
+++ b/ProcessLib/ProcessData.h
@@ -10,6 +10,8 @@
 
 #pragma once
 
+#include <string>
+
 #include "NumLib/ODESolver/NonlinearSolver.h"
 #include "NumLib/ODESolver/TimeDiscretization.h"
 #include "NumLib/ODESolver/Types.h"
@@ -27,7 +29,7 @@ struct ProcessData
         NumLib::NonlinearSolverBase& nonlinear_solver_,
         std::unique_ptr<NumLib::ConvergenceCriterion>&& conv_crit_,
         std::unique_ptr<NumLib::TimeDiscretization>&& time_disc_,
-        int const process_id_, Process& process_)
+        int const process_id_, std::string&& process_name_, Process& process_)
         : timestep_algorithm(std::move(timestep_algorithm_)),
           timestep_previous(timestep_algorithm->begin()),
           timestep_current(timestep_previous),
@@ -37,6 +39,7 @@ struct ProcessData
           conv_crit(std::move(conv_crit_)),
           time_disc(std::move(time_disc_)),
           process_id(process_id_),
+          process_name(std::move(process_name_)),
           process(process_)
     {
     }
@@ -61,6 +64,7 @@ struct ProcessData
     std::unique_ptr<NumLib::EquationSystem> tdisc_ode_sys;
 
     int const process_id;
+    std::string const process_name;
 
     Process& process;
 };