diff --git a/ProcessLib/CreateProcessData.cpp b/ProcessLib/CreateProcessData.cpp
index 7c8fe0a67f1cfbf45a12ee36a5f260d3bf6a5f54..1f6c00e25239532a27260801abc2f85c6678f908 100644
--- a/ProcessLib/CreateProcessData.cpp
+++ b/ProcessLib/CreateProcessData.cpp
@@ -35,7 +35,7 @@ static std::unique_ptr<ProcessData> makeProcessData(
         nonlinear_solver_picard->compensateNonEquilibriumInitialResiduum(
             compensate_non_equilibrium_initial_residuum);
         return std::make_unique<ProcessData>(
-            std::move(timestepper), *nonlinear_solver_picard,
+            std::move(timestepper), Tag::Picard, *nonlinear_solver_picard,
             std::move(conv_crit), std::move(time_disc), process_id, process);
     }
     if (auto* nonlinear_solver_newton =
@@ -45,7 +45,7 @@ static std::unique_ptr<ProcessData> makeProcessData(
         nonlinear_solver_newton->compensateNonEquilibriumInitialResiduum(
             compensate_non_equilibrium_initial_residuum);
         return std::make_unique<ProcessData>(
-            std::move(timestepper), *nonlinear_solver_newton,
+            std::move(timestepper), Tag::Newton, *nonlinear_solver_newton,
             std::move(conv_crit), std::move(time_disc), process_id, process);
     }
 
diff --git a/ProcessLib/ProcessData.h b/ProcessLib/ProcessData.h
index 1da814d8e99d86b0120e3842f32eec0d49933703..096ca1d5a5f6568a56c0a8e00eba4b26057d7dd1 100644
--- a/ProcessLib/ProcessData.h
+++ b/ProcessLib/ProcessData.h
@@ -22,16 +22,16 @@ namespace ProcessLib
 {
 struct ProcessData
 {
-    template <NumLib::NonlinearSolverTag NLTag>
     ProcessData(std::unique_ptr<NumLib::TimeStepAlgorithm>&& timestepper_,
-                NumLib::NonlinearSolver<NLTag>& nonlinear_solver,
+                NumLib::NonlinearSolverTag const nonlinear_solver_tag_,
+                NumLib::NonlinearSolverBase& nonlinear_solver_,
                 std::unique_ptr<NumLib::ConvergenceCriterion>&& conv_crit_,
                 std::unique_ptr<NumLib::TimeDiscretization>&& time_disc_,
                 int const process_id_,
                 Process& process_)
         : timestepper(std::move(timestepper_)),
-          nonlinear_solver_tag(NLTag),
-          nonlinear_solver(nonlinear_solver),
+          nonlinear_solver_tag(nonlinear_solver_tag_),
+          nonlinear_solver(nonlinear_solver_),
           nonlinear_solver_status{true, 0},
           conv_crit(std::move(conv_crit_)),
           time_disc(std::move(time_disc_)),