diff --git a/Applications/ApplicationsLib/ProjectData.cpp b/Applications/ApplicationsLib/ProjectData.cpp
index c95908f87a660887131691403cda8f732d28bbc1..2047cb8548b236a3b2390fd8e406bbd36bbc4787 100644
--- a/Applications/ApplicationsLib/ProjectData.cpp
+++ b/Applications/ApplicationsLib/ProjectData.cpp
@@ -44,7 +44,7 @@
 
 #include "ParameterLib/ConstantParameter.h"
 #include "ParameterLib/Utils.h"
-#include "ProcessLib/UncoupledProcessesTimeLoop.h"
+#include "ProcessLib/TimeLoop.h"
 
 #ifdef OGS_BUILD_PROCESS_COMPONENTTRANSPORT
 #include "ProcessLib/ComponentTransport/CreateComponentTransportProcess.h"
@@ -922,7 +922,7 @@ void ProjectData::parseTimeLoop(BaseLib::ConfigTree const& config,
 {
     DBUG("Reading time loop configuration.");
 
-    _time_loop = ProcessLib::createUncoupledProcessesTimeLoop(
+    _time_loop = ProcessLib::createTimeLoop(
         config, output_directory, _processes, _nonlinear_solvers, _mesh_vec);
 
     if (!_time_loop)
diff --git a/Applications/ApplicationsLib/ProjectData.h b/Applications/ApplicationsLib/ProjectData.h
index b0c309dced3537786fc72995afdab58a4c25758e..b319c3341ff2c285030afd1bccaccea57e29c29e 100644
--- a/Applications/ApplicationsLib/ProjectData.h
+++ b/Applications/ApplicationsLib/ProjectData.h
@@ -38,7 +38,7 @@ class NonlinearSolverBase;
 
 namespace ProcessLib
 {
-class UncoupledProcessesTimeLoop;
+class TimeLoop;
 }
 
 /**
@@ -49,9 +49,6 @@ class UncoupledProcessesTimeLoop;
 class ProjectData final
 {
 public:
-    /// The time loop type used to solve this project's processes.
-    using TimeLoop = ProcessLib::UncoupledProcessesTimeLoop;
-
     /// The empty constructor used in the gui, for example, when the project's
     /// configuration is not loaded yet.
     ProjectData();
@@ -80,7 +77,8 @@ public:
         return _processes;
     }
 
-    TimeLoop& getTimeLoop() { return *_time_loop; }
+    ProcessLib::TimeLoop& getTimeLoop() { return *_time_loop; }
+
 private:
     /// Parses the process variables configuration and creates new variables for
     /// each variable entry passing the corresponding subtree to the process
@@ -127,7 +125,7 @@ private:
     std::map<int, std::unique_ptr<MaterialPropertyLib::Medium>> _media;
 
     /// The time loop used to solve this project's processes.
-    std::unique_ptr<TimeLoop> _time_loop;
+    std::unique_ptr<ProcessLib::TimeLoop> _time_loop;
 
     std::map<std::string, std::unique_ptr<GlobalLinearSolver>> _linear_solvers;
 
diff --git a/Applications/CLI/ogs.cpp b/Applications/CLI/ogs.cpp
index b2492c6bec91dbbb74f57a0c04b6f1e3338bc3eb..4b433084fb8b2aa312295f732e8f05bd9b4a6299 100644
--- a/Applications/CLI/ogs.cpp
+++ b/Applications/CLI/ogs.cpp
@@ -39,7 +39,7 @@
 #include "Applications/ApplicationsLib/ProjectData.h"
 #include "Applications/ApplicationsLib/TestDefinition.h"
 #include "Applications/InSituLib/Adaptor.h"
-#include "ProcessLib/UncoupledProcessesTimeLoop.h"
+#include "ProcessLib/TimeLoop.h"
 
 #include "NumLib/NumericsConfig.h"
 
diff --git a/ProcessLib/UncoupledProcessesTimeLoop.cpp b/ProcessLib/TimeLoop.cpp
similarity index 94%
rename from ProcessLib/UncoupledProcessesTimeLoop.cpp
rename to ProcessLib/TimeLoop.cpp
index 4e1a9d3199a131eebff1338d8a725a5af2792f0a..482cb1a4288ebbdb19bd2427fbc9c5917823a69f 100644
--- a/ProcessLib/UncoupledProcessesTimeLoop.cpp
+++ b/ProcessLib/TimeLoop.cpp
@@ -7,7 +7,7 @@
  *
  */
 
-#include "UncoupledProcessesTimeLoop.h"
+#include "TimeLoop.h"
 
 #include "BaseLib/Error.h"
 #include "BaseLib/RunTime.h"
@@ -114,7 +114,7 @@ void setTimeDiscretizedODESystem(ProcessData& process_data)
     setTimeDiscretizedODESystem(process_data, process_data.process);
 }
 
-std::unique_ptr<UncoupledProcessesTimeLoop> createUncoupledProcessesTimeLoop(
+std::unique_ptr<TimeLoop> createTimeLoop(
     BaseLib::ConfigTree const& config, std::string const& output_directory,
     const std::map<std::string, std::unique_ptr<Process>>& processes,
     const std::map<std::string, std::unique_ptr<NumLib::NonlinearSolverBase>>&
@@ -185,7 +185,7 @@ std::unique_ptr<UncoupledProcessesTimeLoop> createUncoupledProcessesTimeLoop(
         per_process_data[minmax_iter.second - per_process_data.begin()]
             ->timestepper->end();
 
-    return std::make_unique<UncoupledProcessesTimeLoop>(
+    return std::make_unique<TimeLoop>(
         std::move(output), std::move(per_process_data), max_coupling_iterations,
         std::move(global_coupling_conv_criteria), start_time, end_time);
 }
@@ -258,8 +258,8 @@ NumLib::NonlinearSolverStatus solveOneTimeStepOneProcess(
 
     auto const post_iteration_callback = [&](int iteration,
                                              GlobalVector const& x) {
-        output_control.doOutputNonlinearIteration(process, process_id,
-                                                  timestep, t, x, iteration);
+        output_control.doOutputNonlinearIteration(process, process_id, timestep,
+                                                  t, x, iteration);
     };
 
     auto const nonlinear_solver_status =
@@ -273,13 +273,12 @@ NumLib::NonlinearSolverStatus solveOneTimeStepOneProcess(
     return nonlinear_solver_status;
 }
 
-UncoupledProcessesTimeLoop::UncoupledProcessesTimeLoop(
-    std::unique_ptr<Output>&& output,
-    std::vector<std::unique_ptr<ProcessData>>&& per_process_data,
-    const int global_coupling_max_iterations,
-    std::vector<std::unique_ptr<NumLib::ConvergenceCriterion>>&&
-        global_coupling_conv_crit,
-    const double start_time, const double end_time)
+TimeLoop::TimeLoop(std::unique_ptr<Output>&& output,
+                   std::vector<std::unique_ptr<ProcessData>>&& per_process_data,
+                   const int global_coupling_max_iterations,
+                   std::vector<std::unique_ptr<NumLib::ConvergenceCriterion>>&&
+                       global_coupling_conv_crit,
+                   const double start_time, const double end_time)
     : _output(std::move(output)),
       _per_process_data(std::move(per_process_data)),
       _start_time(start_time),
@@ -289,7 +288,7 @@ UncoupledProcessesTimeLoop::UncoupledProcessesTimeLoop(
 {
 }
 
-bool UncoupledProcessesTimeLoop::setCoupledSolutions()
+bool TimeLoop::setCoupledSolutions()
 {
     // All _per_process_data share one process
     const bool use_monolithic_scheme =
@@ -317,9 +316,9 @@ bool UncoupledProcessesTimeLoop::setCoupledSolutions()
     return true;  // use staggered scheme.
 }
 
-double UncoupledProcessesTimeLoop::computeTimeStepping(
-    const double prev_dt, double& t, std::size_t& accepted_steps,
-    std::size_t& rejected_steps)
+double TimeLoop::computeTimeStepping(const double prev_dt, double& t,
+                                     std::size_t& accepted_steps,
+                                     std::size_t& rejected_steps)
 {
     bool all_process_steps_accepted = true;
     // Get minimum time step size among step sizes of all processes.
@@ -478,7 +477,7 @@ double UncoupledProcessesTimeLoop::computeTimeStepping(
  * of the nonlinear solver.
  *
  */
-bool UncoupledProcessesTimeLoop::loop()
+bool TimeLoop::loop()
 {
     // initialize output, convergence criterion, etc.
     {
@@ -610,8 +609,7 @@ static std::string const nonlinear_fixed_dt_fails_info =
     "Nonlinear solver fails. Because the time stepper FixedTimeStepping is "
     "used, the program has to be terminated.";
 
-NumLib::NonlinearSolverStatus
-UncoupledProcessesTimeLoop::solveUncoupledEquationSystems(
+NumLib::NonlinearSolverStatus TimeLoop::solveUncoupledEquationSystems(
     const double t, const double dt, const std::size_t timestep_id)
 {
     NumLib::NonlinearSolverStatus nonlinear_solver_status;
@@ -665,7 +663,7 @@ UncoupledProcessesTimeLoop::solveUncoupledEquationSystems(
 }
 
 NumLib::NonlinearSolverStatus
-UncoupledProcessesTimeLoop::solveCoupledEquationSystemsByStaggeredScheme(
+TimeLoop::solveCoupledEquationSystemsByStaggeredScheme(
     const double t, const double dt, const std::size_t timestep_id)
 {
     // Coupling iteration
@@ -819,10 +817,11 @@ UncoupledProcessesTimeLoop::solveCoupledEquationSystemsByStaggeredScheme(
 }
 
 template <typename OutputClass, typename OutputClassMember>
-void UncoupledProcessesTimeLoop::outputSolutions(
-    bool const output_initial_condition, bool const is_staggered_coupling,
-    unsigned timestep, const double t, OutputClass& output_object,
-    OutputClassMember output_class_member) const
+void TimeLoop::outputSolutions(bool const output_initial_condition,
+                               bool const is_staggered_coupling,
+                               unsigned timestep, const double t,
+                               OutputClass& output_object,
+                               OutputClassMember output_class_member) const
 {
     unsigned process_id = 0;
     for (auto& process_data : _per_process_data)
@@ -857,20 +856,20 @@ void UncoupledProcessesTimeLoop::outputSolutions(
                 &coupled_solutions);
             process_data->process
                 .setCoupledTermForTheStaggeredSchemeToLocalAssemblers();
-            (output_object.*output_class_member)(
-                pcs, process_id, timestep, t, x);
+            (output_object.*output_class_member)(pcs, process_id, timestep, t,
+                                                 x);
         }
         else
         {
-            (output_object.*output_class_member)(
-                pcs, process_id, timestep, t, x);
+            (output_object.*output_class_member)(pcs, process_id, timestep, t,
+                                                 x);
         }
 
         ++process_id;
     }
 }
 
-UncoupledProcessesTimeLoop::~UncoupledProcessesTimeLoop()
+TimeLoop::~TimeLoop()
 {
     for (auto* x : _process_solutions)
     {
diff --git a/ProcessLib/UncoupledProcessesTimeLoop.h b/ProcessLib/TimeLoop.h
similarity index 87%
rename from ProcessLib/UncoupledProcessesTimeLoop.h
rename to ProcessLib/TimeLoop.h
index 92a1351cb35dc742656769ffe7abc6fd3a8669a0..f70eac7a04df85bcb7d061d6d425b19f75998375 100644
--- a/ProcessLib/UncoupledProcessesTimeLoop.h
+++ b/ProcessLib/TimeLoop.h
@@ -9,8 +9,8 @@
 
 #pragma once
 
-#include <memory>
 #include <functional>
+#include <memory>
 
 #include <logog/include/logog.hpp>
 
@@ -30,22 +30,19 @@ namespace ProcessLib
 struct ProcessData;
 
 /// Time loop capable of time-integrating several processes at once.
-/// TODO: Rename to, e.g., TimeLoop, since it is not for purely uncoupled stuff
-/// anymore.
-class UncoupledProcessesTimeLoop
+class TimeLoop
 {
 public:
-    UncoupledProcessesTimeLoop(
-        std::unique_ptr<Output>&& output,
-        std::vector<std::unique_ptr<ProcessData>>&& per_process_data,
-        const int global_coupling_max_iterations,
-        std::vector<std::unique_ptr<NumLib::ConvergenceCriterion>>&&
-            global_coupling_conv_crit,
-        const double start_time, const double end_time);
+    TimeLoop(std::unique_ptr<Output>&& output,
+             std::vector<std::unique_ptr<ProcessData>>&& per_process_data,
+             const int global_coupling_max_iterations,
+             std::vector<std::unique_ptr<NumLib::ConvergenceCriterion>>&&
+                 global_coupling_conv_crit,
+             const double start_time, const double end_time);
 
     bool loop();
 
-    ~UncoupledProcessesTimeLoop();
+    ~TimeLoop();
 
     /**
      *  This function fills the vector of solutions of coupled processes of
@@ -136,8 +133,8 @@ private:
                          OutputClassMember output_class_member) const;
 };
 
-//! Builds an UncoupledProcessesTimeLoop from the given configuration.
-std::unique_ptr<UncoupledProcessesTimeLoop> createUncoupledProcessesTimeLoop(
+//! Builds an TimeLoop from the given configuration.
+std::unique_ptr<TimeLoop> createTimeLoop(
     BaseLib::ConfigTree const& config, std::string const& output_directory,
     std::map<std::string, std::unique_ptr<Process>> const& processes,
     std::map<std::string, std::unique_ptr<NumLib::NonlinearSolverBase>> const&