diff --git a/ProcessLib/BoundaryCondition/BoundaryCondition.cpp b/ProcessLib/BoundaryCondition/BoundaryCondition.cpp
index 7a50c929523747892c395dbd3ade4959a7678cb3..8232c573869b02239985f977a36a49e28b42b552 100644
--- a/ProcessLib/BoundaryCondition/BoundaryCondition.cpp
+++ b/ProcessLib/BoundaryCondition/BoundaryCondition.cpp
@@ -38,7 +38,8 @@ std::unique_ptr<BoundaryCondition> createBoundaryCondition(
     const NumLib::LocalToGlobalIndexMap& dof_table,
     const MeshLib::Mesh& mesh,
     const int variable_id,
-    const unsigned integration_order)
+    const unsigned integration_order,
+    std::vector<std::unique_ptr<ParameterBase>> const& parameters)
 {
     MeshGeoToolsLib::MeshNodeSearcher& mesh_node_searcher =
         MeshGeoToolsLib::MeshNodeSearcher::getMeshNodeSearcher(mesh);
@@ -66,7 +67,7 @@ std::unique_ptr<BoundaryCondition> createBoundaryCondition(
             config.config,
             getClonedElements(boundary_element_searcher, config.geometry),
             dof_table, variable_id, config.component_id, integration_order,
-            mesh.getDimension());
+            mesh.getDimension(), parameters);
     }
     else if (type == "UniformRobin") {
         return createUniformRobinBoundaryCondition(
diff --git a/ProcessLib/BoundaryCondition/BoundaryCondition.h b/ProcessLib/BoundaryCondition/BoundaryCondition.h
index d13ff3e8a9ce669760d53f16e69bab172023d411..ea15b454fee7bb1e2fa6feb8b3fd447d2f85e097 100644
--- a/ProcessLib/BoundaryCondition/BoundaryCondition.h
+++ b/ProcessLib/BoundaryCondition/BoundaryCondition.h
@@ -25,6 +25,7 @@ class LocalToGlobalIndexMap;
 namespace ProcessLib
 {
 struct BoundaryConditionConfig;
+struct ParameterBase;
 
 class BoundaryCondition
 {
@@ -39,10 +40,9 @@ public:
 
 std::unique_ptr<BoundaryCondition> createBoundaryCondition(
     const BoundaryConditionConfig& config,
-    const NumLib::LocalToGlobalIndexMap& dof_table,
-    const MeshLib::Mesh& mesh,
-    const int variable_id,
-    const unsigned integration_order);
+    const NumLib::LocalToGlobalIndexMap& dof_table, const MeshLib::Mesh& mesh,
+    const int variable_id, const unsigned integration_order,
+    const std::vector<std::unique_ptr<ProcessLib::ParameterBase>>& parameters);
 
 }  // ProcessLib
 
diff --git a/ProcessLib/BoundaryCondition/BoundaryConditionCollection.cpp b/ProcessLib/BoundaryCondition/BoundaryConditionCollection.cpp
index 0b88492f4ea1cb94abecea5430deafc67a3da602..df611ca5715f53a017e7e7810851e8e4dbf65dec 100644
--- a/ProcessLib/BoundaryCondition/BoundaryConditionCollection.cpp
+++ b/ProcessLib/BoundaryCondition/BoundaryConditionCollection.cpp
@@ -46,7 +46,7 @@ void BoundaryConditionCollection::addBCsForProcessVariables(
     {
         ProcessVariable& pv = process_variables[variable_id];
         auto bcs = pv.createBoundaryConditions(dof_table, variable_id,
-                                            integration_order);
+                                               integration_order, _parameters);
 
         std::move(bcs.begin(), bcs.end(),
                   std::back_inserter(_boundary_conditions));
diff --git a/ProcessLib/BoundaryCondition/BoundaryConditionCollection.h b/ProcessLib/BoundaryCondition/BoundaryConditionCollection.h
index a8f4a3cc7808ceaae1153b2e7779216cc6685b34..646aa2ce751f84c130aa113d4c9124b77686eade 100644
--- a/ProcessLib/BoundaryCondition/BoundaryConditionCollection.h
+++ b/ProcessLib/BoundaryCondition/BoundaryConditionCollection.h
@@ -19,6 +19,12 @@ namespace ProcessLib
 class BoundaryConditionCollection final
 {
 public:
+    BoundaryConditionCollection(
+        std::vector<std::unique_ptr<ParameterBase>> const& parameters)
+        : _parameters(parameters)
+    {
+    }
+
     void apply(const double t, GlobalVector const& x, GlobalMatrix& K,
                GlobalVector& b);
 
@@ -38,6 +44,7 @@ public:
 private:
     std::vector<NumLib::IndexValueVector<GlobalIndexType>> _dirichlet_bcs;
     std::vector<std::unique_ptr<BoundaryCondition>> _boundary_conditions;
+    std::vector<std::unique_ptr<ParameterBase>> const& _parameters;
 };
 
 
diff --git a/ProcessLib/GroundwaterFlow/CreateGroundwaterFlowProcess.cpp b/ProcessLib/GroundwaterFlow/CreateGroundwaterFlowProcess.cpp
index bb7919629c5d01e9f2f18985f6f4462fb4fd83ff..71728cf8ea658e8bc723cc357faa2e5b1a2dabcf 100644
--- a/ProcessLib/GroundwaterFlow/CreateGroundwaterFlowProcess.cpp
+++ b/ProcessLib/GroundwaterFlow/CreateGroundwaterFlowProcess.cpp
@@ -62,7 +62,7 @@ std::unique_ptr<Process> createGroundwaterFlowProcess(
     ProcessOutput process_output{config.getConfigSubtree("output")};
 
     return std::unique_ptr<Process>{new GroundwaterFlowProcess{
-        mesh, nonlinear_solver, std::move(time_discretization),
+        parameters, mesh, nonlinear_solver, std::move(time_discretization),
         std::move(convergence_criterion), std::move(process_variables),
         std::move(process_data), std::move(secondary_variables),
         std::move(process_output), std::move(named_function_caller)}};
diff --git a/ProcessLib/GroundwaterFlow/GroundwaterFlowProcess.cpp b/ProcessLib/GroundwaterFlow/GroundwaterFlowProcess.cpp
index f8345c265566f76d6efc53de745cbfe2f0d0beb6..46af91c86c16e7a5455a82d397de4604d68a232b 100644
--- a/ProcessLib/GroundwaterFlow/GroundwaterFlowProcess.cpp
+++ b/ProcessLib/GroundwaterFlow/GroundwaterFlowProcess.cpp
@@ -18,6 +18,7 @@ namespace ProcessLib
 namespace GroundwaterFlow
 {
 GroundwaterFlowProcess::GroundwaterFlowProcess(
+    std::vector<std::unique_ptr<ParameterBase>> const& parameters,
     MeshLib::Mesh& mesh,
     Base::NonlinearSolver& nonlinear_solver,
     std::unique_ptr<Base::TimeDiscretization>&& time_discretization,
@@ -27,7 +28,7 @@ GroundwaterFlowProcess::GroundwaterFlowProcess(
     SecondaryVariableCollection&& secondary_variables,
     ProcessOutput&& process_output,
     NumLib::NamedFunctionCaller&& named_function_caller)
-    : Process(mesh, nonlinear_solver, std::move(time_discretization),
+    : Process(parameters, mesh, nonlinear_solver, std::move(time_discretization),
               std::move(convergence_criterion), std::move(process_variables),
               std::move(secondary_variables), std::move(process_output),
               std::move(named_function_caller)),
diff --git a/ProcessLib/GroundwaterFlow/GroundwaterFlowProcess.h b/ProcessLib/GroundwaterFlow/GroundwaterFlowProcess.h
index 8856d8213c6cbb54f2f9f15af4f8c334427d14cb..b0e2365c3c893d7ec89a7060fe526217a2c86c89 100644
--- a/ProcessLib/GroundwaterFlow/GroundwaterFlowProcess.h
+++ b/ProcessLib/GroundwaterFlow/GroundwaterFlowProcess.h
@@ -26,6 +26,7 @@ class GroundwaterFlowProcess final : public Process
 
 public:
     GroundwaterFlowProcess(
+        std::vector<std::unique_ptr<ParameterBase>> const& parameters,
         MeshLib::Mesh& mesh,
         Base::NonlinearSolver& nonlinear_solver,
         std::unique_ptr<Base::TimeDiscretization>&& time_discretization,
diff --git a/ProcessLib/Process.cpp b/ProcessLib/Process.cpp
index 857e24c9689f68ffc691b585f9d3d637a6506224..8c42836da929cf8a07fa7cc5898f1b09a3a4fca9 100644
--- a/ProcessLib/Process.cpp
+++ b/ProcessLib/Process.cpp
@@ -19,6 +19,7 @@
 namespace ProcessLib
 {
 Process::Process(
+    std::vector<std::unique_ptr<ParameterBase>> const& parameters,
     MeshLib::Mesh& mesh,
     NonlinearSolver& nonlinear_solver,
     std::unique_ptr<TimeDiscretization>&& time_discretization,
@@ -34,7 +35,8 @@ Process::Process(
       _nonlinear_solver(nonlinear_solver),
       _time_discretization(std::move(time_discretization)),
       _convergence_criterion(std::move(convergence_criterion)),
-      _process_variables(std::move(process_variables))
+      _process_variables(std::move(process_variables)),
+      _boundary_conditions(parameters)
 {
 }
 
diff --git a/ProcessLib/Process.h b/ProcessLib/Process.h
index 1f04c0707da1716d7b78009f9d9ceff607c7b9ad..870960a97465c575c7790b481d275248480044ca 100644
--- a/ProcessLib/Process.h
+++ b/ProcessLib/Process.h
@@ -39,6 +39,7 @@ public:
     using TimeDiscretization = NumLib::TimeDiscretization;
 
     Process(
+        std::vector<std::unique_ptr<ParameterBase>> const& parameters,
         MeshLib::Mesh& mesh,
         NonlinearSolver& nonlinear_solver,
         std::unique_ptr<TimeDiscretization>&& time_discretization,
diff --git a/ProcessLib/ProcessVariable.cpp b/ProcessLib/ProcessVariable.cpp
index 6043cf3ee133c4460fa14fdf7f13b656d3bbb8f8..9ec3550201849ce563af204bf89e2fd5f16597ec 100644
--- a/ProcessLib/ProcessVariable.cpp
+++ b/ProcessLib/ProcessVariable.cpp
@@ -133,13 +133,14 @@ std::vector<std::unique_ptr<BoundaryCondition>>
 ProcessVariable::createBoundaryConditions(
     const NumLib::LocalToGlobalIndexMap& dof_table,
     const int variable_id,
-    unsigned const integration_order)
+    unsigned const integration_order,
+    std::vector<std::unique_ptr<ParameterBase>> const& parameters)
 {
     std::vector<std::unique_ptr<BoundaryCondition>> bcs;
 
     for (auto& config : _bc_configs)
         bcs.emplace_back(createBoundaryCondition(
-            config, dof_table, _mesh, variable_id, integration_order));
+            config, dof_table, _mesh, variable_id, integration_order, parameters));
 
     return bcs;
 }
diff --git a/ProcessLib/ProcessVariable.h b/ProcessLib/ProcessVariable.h
index 2a29dabc3fb860b7aa825dca4f22eca9d0e1dc8a..f722056647948abf92949eba77f084b54d9c762a 100644
--- a/ProcessLib/ProcessVariable.h
+++ b/ProcessLib/ProcessVariable.h
@@ -43,9 +43,9 @@ public:
     int getNumberOfComponents() const { return _n_components; }
 
     std::vector<std::unique_ptr<BoundaryCondition>> createBoundaryConditions(
-        const NumLib::LocalToGlobalIndexMap& dof_table,
-        const int variable_id,
-        unsigned const integration_order);
+        const NumLib::LocalToGlobalIndexMap& dof_table, const int variable_id,
+        unsigned const integration_order,
+        std::vector<std::unique_ptr<ParameterBase>> const& parameters);
 
     Parameter<double> const& getInitialCondition() const
     {
diff --git a/ProcessLib/TES/CreateTESProcess.cpp b/ProcessLib/TES/CreateTESProcess.cpp
index 43d7e8ccd8d9b9ccfac9e9150004f7988387dded..41748152207489528d9573349544ea59f2b1a4a2 100644
--- a/ProcessLib/TES/CreateTESProcess.cpp
+++ b/ProcessLib/TES/CreateTESProcess.cpp
@@ -22,7 +22,7 @@ std::unique_ptr<Process> createTESProcess(
     std::unique_ptr<Process::TimeDiscretization>&& time_discretization,
     std::unique_ptr<NumLib::ConvergenceCriterion>&& convergence_criterion,
     std::vector<ProcessVariable> const& variables,
-    std::vector<std::unique_ptr<ParameterBase>> const& /*parameters*/,
+    std::vector<std::unique_ptr<ParameterBase>> const& parameters,
     BaseLib::ConfigTree const& config)
 {
     //! \ogs_file_param{process__type}
@@ -46,7 +46,7 @@ std::unique_ptr<Process> createTESProcess(
     ProcessOutput process_output{config.getConfigSubtree("output")};
 
     return std::unique_ptr<Process>{new TESProcess{
-        mesh, nonlinear_solver, std::move(time_discretization),
+        parameters, mesh, nonlinear_solver, std::move(time_discretization),
         std::move(convergence_criterion), std::move(process_variables),
         std::move(secondary_variables), std::move(process_output),
         std::move(named_function_caller), config}};
diff --git a/ProcessLib/TES/TESProcess.cpp b/ProcessLib/TES/TESProcess.cpp
index 77493a774f4666587d4cfb25f69969e3691f661f..73affd4a52555b31f6f34307172fa015439617e5 100644
--- a/ProcessLib/TES/TESProcess.cpp
+++ b/ProcessLib/TES/TESProcess.cpp
@@ -54,6 +54,7 @@ namespace ProcessLib
 namespace TES
 {
 TESProcess::TESProcess(
+    std::vector<std::unique_ptr<ParameterBase>> const& parameters,
     MeshLib::Mesh& mesh,
     Process::NonlinearSolver& nonlinear_solver,
     std::unique_ptr<Process::TimeDiscretization>&& time_discretization,
@@ -63,7 +64,7 @@ TESProcess::TESProcess(
     ProcessOutput&& process_output,
     NumLib::NamedFunctionCaller&& named_function_caller,
     const BaseLib::ConfigTree& config)
-    : Process(mesh, nonlinear_solver, std::move(time_discretization),
+    : Process(parameters, mesh, nonlinear_solver, std::move(time_discretization),
               std::move(convergence_criterion), std::move(process_variables),
               std::move(secondary_variables), std::move(process_output),
               std::move(named_function_caller))
diff --git a/ProcessLib/TES/TESProcess.h b/ProcessLib/TES/TESProcess.h
index 33a0f883b181f67dd5915c3b9732a84cff1002c0..1546937f0b30b3f42feba22df206ce025a18a97f 100644
--- a/ProcessLib/TES/TESProcess.h
+++ b/ProcessLib/TES/TESProcess.h
@@ -32,6 +32,7 @@ class TESProcess final : public Process
 {
 public:
     TESProcess(
+        std::vector<std::unique_ptr<ParameterBase>> const& parameters,
         MeshLib::Mesh& mesh,
         Process::NonlinearSolver& nonlinear_solver,
         std::unique_ptr<Process::TimeDiscretization>&& time_discretization,