diff --git a/ProcessLib/BoundaryCondition/BoundaryCondition.h b/ProcessLib/BoundaryCondition/BoundaryCondition.h
index 127bbe49f24b29399f5fcbcec10980692e95e8a5..c9f201807c71a13a8c8c93d8883b209cbe13d4c6 100644
--- a/ProcessLib/BoundaryCondition/BoundaryCondition.h
+++ b/ProcessLib/BoundaryCondition/BoundaryCondition.h
@@ -22,11 +22,13 @@ class LocalToGlobalIndexMap;
 template <typename>
 struct IndexValueVector;
 }
-
+namespace ParameterLib
+{
+struct ParameterBase;
+}
 namespace ProcessLib
 {
 struct BoundaryConditionConfig;
-struct ParameterBase;
 class Process;
 
 class BoundaryCondition
diff --git a/ProcessLib/BoundaryCondition/BoundaryConditionCollection.h b/ProcessLib/BoundaryCondition/BoundaryConditionCollection.h
index b6bebef421be6022d3a1e7b8d146e77e8e86a873..8db720690fb145e70328b47fdb24dffbecc5ddf0 100644
--- a/ProcessLib/BoundaryCondition/BoundaryConditionCollection.h
+++ b/ProcessLib/BoundaryCondition/BoundaryConditionCollection.h
@@ -20,7 +20,8 @@ class BoundaryConditionCollection final
 {
 public:
     explicit BoundaryConditionCollection(
-        std::vector<std::unique_ptr<ParameterBase>> const& parameters)
+        std::vector<std::unique_ptr<ParameterLib::ParameterBase>> const&
+            parameters)
         : _parameters(parameters)
     {
     }
@@ -62,7 +63,8 @@ public:
 private:
     mutable std::vector<NumLib::IndexValueVector<GlobalIndexType>> _dirichlet_bcs;
     std::vector<std::unique_ptr<BoundaryCondition>> _boundary_conditions;
-    std::vector<std::unique_ptr<ParameterBase>> const& _parameters;
+    std::vector<std::unique_ptr<ParameterLib::ParameterBase>> const&
+        _parameters;
 };
 
 }  // namespace ProcessLib
diff --git a/ProcessLib/BoundaryCondition/ConstraintDirichletBoundaryCondition.cpp b/ProcessLib/BoundaryCondition/ConstraintDirichletBoundaryCondition.cpp
index 51e87faf7f4151c20bb5298abeef28fdad698510..1000972862ed17a5a96f825ddd3ca8bf9a4ad328 100644
--- a/ProcessLib/BoundaryCondition/ConstraintDirichletBoundaryCondition.cpp
+++ b/ProcessLib/BoundaryCondition/ConstraintDirichletBoundaryCondition.cpp
@@ -13,15 +13,15 @@
 #include <vector>
 #include <logog/include/logog.hpp>
 
-#include "MeshLib/Node.h"
 #include "MeshLib/MeshSearch/NodeSearch.h"  // for getUniqueNodes
+#include "MeshLib/Node.h"
+#include "ParameterLib/Utils.h"
 #include "ProcessLib/Utils/CreateLocalAssemblers.h"
-#include "ProcessLib/Utils/ProcessUtils.h"
 
 namespace ProcessLib
 {
 ConstraintDirichletBoundaryCondition::ConstraintDirichletBoundaryCondition(
-    Parameter<double> const& parameter,
+    ParameterLib::Parameter<double> const& parameter,
     NumLib::LocalToGlobalIndexMap const& dof_table_bulk, int const variable_id,
     int const component_id, MeshLib::Mesh const& bc_mesh,
     unsigned const integration_order, MeshLib::Mesh const& bulk_mesh,
@@ -128,7 +128,7 @@ void ConstraintDirichletBoundaryCondition::getEssentialBCValues(
     const double t, const GlobalVector& /*x*/,
     NumLib::IndexValueVector<GlobalIndexType>& bc_values) const
 {
-    SpatialPosition pos;
+    ParameterLib::SpatialPosition pos;
 
     bc_values.ids.clear();
     bc_values.values.clear();
@@ -228,7 +228,7 @@ createConstraintDirichletBoundaryCondition(
     BaseLib::ConfigTree const& config, MeshLib::Mesh const& bc_mesh,
     NumLib::LocalToGlobalIndexMap const& dof_table_bulk, int const variable_id,
     unsigned const integration_order, int const component_id,
-    std::vector<std::unique_ptr<ProcessLib::ParameterBase>> const& parameters,
+    std::vector<std::unique_ptr<ParameterLib::ParameterBase>> const& parameters,
     Process const& constraining_process)
 {
     DBUG("Constructing ConstraintDirichletBoundaryCondition from config.");
@@ -298,7 +298,8 @@ createConstraintDirichletBoundaryCondition(
     auto const param_name = config.getConfigParameter<std::string>("parameter");
     DBUG("Using parameter %s", param_name.c_str());
 
-    auto& param = findParameter<double>(param_name, parameters, 1);
+    auto& param =
+        ParameterLib::findParameter<double>(param_name, parameters, 1);
 
     // In case of partitioned mesh the boundary could be empty, i.e. there is no
     // boundary condition.
diff --git a/ProcessLib/BoundaryCondition/ConstraintDirichletBoundaryCondition.h b/ProcessLib/BoundaryCondition/ConstraintDirichletBoundaryCondition.h
index 5d05b6e4bfd0567ee288b3ff5fb26978646bdd21..186542d89d26ab7a847db2dfe73ef1efc6f8a977 100644
--- a/ProcessLib/BoundaryCondition/ConstraintDirichletBoundaryCondition.h
+++ b/ProcessLib/BoundaryCondition/ConstraintDirichletBoundaryCondition.h
@@ -9,10 +9,10 @@
 
 #pragma once
 
+#include "BoundaryCondition.h"
 #include "NumLib/DOF/LocalToGlobalIndexMap.h"
 #include "NumLib/IndexValueVector.h"
-#include "ProcessLib/Parameter/Parameter.h"
-#include "BoundaryCondition.h"
+#include "ParameterLib/Parameter.h"
 
 #include "ConstraintDirichletBoundaryConditionLocalAssembler.h"
 
@@ -49,7 +49,7 @@ public:
     /// @note The function has to be stored by value, else the process value is
     /// not captured properly.
     ConstraintDirichletBoundaryCondition(
-        Parameter<double> const& parameter,
+        ParameterLib::Parameter<double> const& parameter,
         NumLib::LocalToGlobalIndexMap const& dof_table_bulk,
         int const variable_id, int const component_id,
         MeshLib::Mesh const& bc_mesh, unsigned const integration_order,
@@ -67,7 +67,7 @@ public:
         NumLib::IndexValueVector<GlobalIndexType>& bc_values) const override;
 
 private:
-    Parameter<double> const& _parameter;
+    ParameterLib::Parameter<double> const& _parameter;
 
     /// Local dof table, a subset of the global one restricted to the
     /// participating number of elements of the boundary condition.
@@ -123,6 +123,6 @@ createConstraintDirichletBoundaryCondition(
     BaseLib::ConfigTree const& config, MeshLib::Mesh const& bc_mesh,
     NumLib::LocalToGlobalIndexMap const& dof_table_bulk, int const variable_id,
     unsigned const integration_order, int const component_id,
-    std::vector<std::unique_ptr<ProcessLib::ParameterBase>> const& parameters,
+    std::vector<std::unique_ptr<ParameterLib::ParameterBase>> const& parameters,
     Process const& constraining_process);
 }  // namespace ProcessLib
diff --git a/ProcessLib/BoundaryCondition/ConstraintDirichletBoundaryConditionLocalAssembler.h b/ProcessLib/BoundaryCondition/ConstraintDirichletBoundaryConditionLocalAssembler.h
index 87a351ca4aa3d9a9836d55ee97a63196bf4f5544..9c214e163e3e389e931bc09db99f37e8dd7330c4 100644
--- a/ProcessLib/BoundaryCondition/ConstraintDirichletBoundaryConditionLocalAssembler.h
+++ b/ProcessLib/BoundaryCondition/ConstraintDirichletBoundaryConditionLocalAssembler.h
@@ -13,8 +13,8 @@
 
 #include "NumLib/DOF/DOFTableUtil.h"
 
+#include "ParameterLib/Parameter.h"
 #include "ProcessLib/Process.h"
-#include "ProcessLib/Parameter/Parameter.h"
 #include "ProcessLib/Utils/InitShapeMatrices.h"
 
 #include "MeshLib/Elements/MapBulkElementPoint.h"
diff --git a/ProcessLib/BoundaryCondition/CreateBoundaryCondition.cpp b/ProcessLib/BoundaryCondition/CreateBoundaryCondition.cpp
index 4efc1805feff70ab82ca80a24de38952e3bf9bdd..844d1e4586ac4d84c04ee34df94de447cb12f17e 100644
--- a/ProcessLib/BoundaryCondition/CreateBoundaryCondition.cpp
+++ b/ProcessLib/BoundaryCondition/CreateBoundaryCondition.cpp
@@ -33,7 +33,7 @@ std::unique_ptr<BoundaryCondition> createBoundaryCondition(
     const NumLib::LocalToGlobalIndexMap& dof_table,
     const MeshLib::Mesh& bulk_mesh, const int variable_id,
     const unsigned integration_order, const unsigned shapefunction_order,
-    const std::vector<std::unique_ptr<ProcessLib::ParameterBase>>& parameters,
+    const std::vector<std::unique_ptr<ParameterLib::ParameterBase>>& parameters,
     const Process& process)
 {
     // Surface mesh and bulk mesh must have equal axial symmetry flags!
diff --git a/ProcessLib/BoundaryCondition/CreateBoundaryCondition.h b/ProcessLib/BoundaryCondition/CreateBoundaryCondition.h
index 752d7a574a7014cac17f50dc3352ba9b03a0f070..7c36f45fab971b8bfd99f40be235d237e8e57c54 100644
--- a/ProcessLib/BoundaryCondition/CreateBoundaryCondition.h
+++ b/ProcessLib/BoundaryCondition/CreateBoundaryCondition.h
@@ -20,13 +20,15 @@ class Mesh;
 namespace NumLib
 {
 class LocalToGlobalIndexMap;
-}  // namespace NumLib
-
+}
+namespace ParameterLib
+{
+struct ParameterBase;
+}
 namespace ProcessLib
 {
 class BoundaryCondition;
 struct BoundaryConditionConfig;
-struct ParameterBase;
 class Process;
 
 std::unique_ptr<BoundaryCondition> createBoundaryCondition(
@@ -34,7 +36,7 @@ std::unique_ptr<BoundaryCondition> createBoundaryCondition(
     const NumLib::LocalToGlobalIndexMap& dof_table,
     const MeshLib::Mesh& bulk_mesh, const int variable_id,
     const unsigned integration_order, const unsigned shapefunction_order,
-    const std::vector<std::unique_ptr<ProcessLib::ParameterBase>>& parameters,
+    const std::vector<std::unique_ptr<ParameterLib::ParameterBase>>& parameters,
     const Process& process);
 
 }  // namespace ProcessLib
diff --git a/ProcessLib/BoundaryCondition/DirichletBoundaryCondition.cpp b/ProcessLib/BoundaryCondition/DirichletBoundaryCondition.cpp
index c714a531dec83f6ec4c75e076bfd18b546aa4d0d..1385562e9bdaf627c51da32595c14df5196661ca 100644
--- a/ProcessLib/BoundaryCondition/DirichletBoundaryCondition.cpp
+++ b/ProcessLib/BoundaryCondition/DirichletBoundaryCondition.cpp
@@ -16,15 +16,16 @@
 #include "DirichletBoundaryConditionAuxiliaryFunctions.h"
 
 #include "BaseLib/ConfigTree.h"
-#include "NumLib/IndexValueVector.h"
 #include "NumLib/DOF/LocalToGlobalIndexMap.h"
-#include "ProcessLib/Parameter/Parameter.h"
-#include "ProcessLib/Utils/ProcessUtils.h"
+#include "NumLib/IndexValueVector.h"
+#include "ParameterLib/Parameter.h"
+#include "ParameterLib/Utils.h"
 
 namespace ProcessLib
 {
 DirichletBoundaryCondition::DirichletBoundaryCondition(
-    Parameter<double> const& parameter, MeshLib::Mesh const& bc_mesh,
+    ParameterLib::Parameter<double> const& parameter,
+    MeshLib::Mesh const& bc_mesh,
     NumLib::LocalToGlobalIndexMap const& dof_table_bulk, int const variable_id,
     int const component_id)
     : _parameter(parameter),
@@ -57,7 +58,7 @@ std::unique_ptr<DirichletBoundaryCondition> createDirichletBoundaryCondition(
     BaseLib::ConfigTree const& config, MeshLib::Mesh const& bc_mesh,
     NumLib::LocalToGlobalIndexMap const& dof_table_bulk, int const variable_id,
     int const component_id,
-    const std::vector<std::unique_ptr<ProcessLib::ParameterBase>>& parameters)
+    const std::vector<std::unique_ptr<ParameterLib::ParameterBase>>& parameters)
 {
     DBUG("Constructing DirichletBoundaryCondition from config.");
     //! \ogs_file_param{prj__process_variables__process_variable__boundary_conditions__boundary_condition__type}
@@ -67,7 +68,8 @@ std::unique_ptr<DirichletBoundaryCondition> createDirichletBoundaryCondition(
     auto const param_name = config.getConfigParameter<std::string>("parameter");
     DBUG("Using parameter %s", param_name.c_str());
 
-    auto& parameter = findParameter<double>(param_name, parameters, 1);
+    auto& parameter =
+        ParameterLib::findParameter<double>(param_name, parameters, 1);
 
     if (parameter.mesh() && *parameter.mesh() != bc_mesh)
     {
diff --git a/ProcessLib/BoundaryCondition/DirichletBoundaryCondition.h b/ProcessLib/BoundaryCondition/DirichletBoundaryCondition.h
index 123ef2924cd4b52c503e4ac65169d78825ffa40a..1f3681199e0bf4e7c90685a44374be79f65a56e8 100644
--- a/ProcessLib/BoundaryCondition/DirichletBoundaryCondition.h
+++ b/ProcessLib/BoundaryCondition/DirichletBoundaryCondition.h
@@ -15,12 +15,14 @@ namespace BaseLib
 {
 class ConfigTree;
 }
-
-namespace ProcessLib
+namespace ParameterLib
 {
 template <typename T>
 struct Parameter;
+}
 
+namespace ProcessLib
+{
 // TODO docu
 /// The DirichletBoundaryCondition class describes a constant in space
 /// and time Dirichlet boundary condition.
@@ -30,7 +32,8 @@ class DirichletBoundaryCondition final : public BoundaryCondition
 {
 public:
     DirichletBoundaryCondition(
-        Parameter<double> const& parameter, MeshLib::Mesh const& bc_mesh,
+        ParameterLib::Parameter<double> const& parameter,
+        MeshLib::Mesh const& bc_mesh,
         NumLib::LocalToGlobalIndexMap const& dof_table_bulk,
         int const variable_id, int const component_id);
 
@@ -39,7 +42,7 @@ public:
         NumLib::IndexValueVector<GlobalIndexType>& bc_values) const override;
 
 private:
-    Parameter<double> const& _parameter;
+    ParameterLib::Parameter<double> const& _parameter;
 
     MeshLib::Mesh const& _bc_mesh;
     std::unique_ptr<NumLib::LocalToGlobalIndexMap const> _dof_table_boundary;
@@ -51,6 +54,7 @@ std::unique_ptr<DirichletBoundaryCondition> createDirichletBoundaryCondition(
     BaseLib::ConfigTree const& config, MeshLib::Mesh const& bc_mesh,
     NumLib::LocalToGlobalIndexMap const& dof_table_bulk, int const variable_id,
     int const component_id,
-    const std::vector<std::unique_ptr<ProcessLib::ParameterBase>>& parameters);
+    const std::vector<std::unique_ptr<ParameterLib::ParameterBase>>&
+        parameters);
 
 }  // namespace ProcessLib
diff --git a/ProcessLib/BoundaryCondition/DirichletBoundaryConditionAuxiliaryFunctions.cpp b/ProcessLib/BoundaryCondition/DirichletBoundaryConditionAuxiliaryFunctions.cpp
index 58f9714b057c4008a2969dbff16a060679bf70b3..05ff01e5848b5b0de41912cdabcebf84503d9cbd 100644
--- a/ProcessLib/BoundaryCondition/DirichletBoundaryConditionAuxiliaryFunctions.cpp
+++ b/ProcessLib/BoundaryCondition/DirichletBoundaryConditionAuxiliaryFunctions.cpp
@@ -15,9 +15,9 @@
 #include "MeshLib/Mesh.h"
 #include "MeshLib/Node.h"
 
-#include "NumLib/IndexValueVector.h"
 #include "NumLib/DOF/LocalToGlobalIndexMap.h"
-#include "ProcessLib/Parameter/Parameter.h"
+#include "NumLib/IndexValueVector.h"
+#include "ParameterLib/Parameter.h"
 
 namespace ProcessLib
 {
@@ -56,14 +56,15 @@ void checkParametersOfDirichletBoundaryCondition(
 }
 
 void getEssentialBCValuesLocal(
-    Parameter<double> const& parameter, MeshLib::Mesh const& bc_mesh,
+    ParameterLib::Parameter<double> const& parameter,
+    MeshLib::Mesh const& bc_mesh,
     std::vector<MeshLib::Node*> const& nodes_in_bc_mesh,
     NumLib::LocalToGlobalIndexMap const& dof_table_boundary,
     int const variable_id, int const component_id, const double t,
     GlobalVector const& /*x*/,
     NumLib::IndexValueVector<GlobalIndexType>& bc_values)
 {
-    SpatialPosition pos;
+    ParameterLib::SpatialPosition pos;
 
     bc_values.ids.clear();
     bc_values.values.clear();
diff --git a/ProcessLib/BoundaryCondition/DirichletBoundaryConditionAuxiliaryFunctions.h b/ProcessLib/BoundaryCondition/DirichletBoundaryConditionAuxiliaryFunctions.h
index db69d1b76a40fcd8c842f20655d30b5b07fd0ab0..8de251719ce58e37d51229d155a0930cd14fb4b6 100644
--- a/ProcessLib/BoundaryCondition/DirichletBoundaryConditionAuxiliaryFunctions.h
+++ b/ProcessLib/BoundaryCondition/DirichletBoundaryConditionAuxiliaryFunctions.h
@@ -33,11 +33,14 @@ template <typename>
 struct IndexValueVector;
 }
 
-namespace ProcessLib
+namespace ParameterLib
 {
 template <typename T>
 struct Parameter;
+}
 
+namespace ProcessLib
+{
 void checkParametersOfDirichletBoundaryCondition(
     MeshLib::Mesh const& bc_mesh,
     NumLib::LocalToGlobalIndexMap const& dof_table_bulk,
@@ -45,7 +48,8 @@ void checkParametersOfDirichletBoundaryCondition(
     int const component_id);
 
 void getEssentialBCValuesLocal(
-    Parameter<double> const& parameter, MeshLib::Mesh const& bc_mesh,
+    ParameterLib::Parameter<double> const& parameter,
+    MeshLib::Mesh const& bc_mesh,
     std::vector<MeshLib::Node*> const& nodes_in_bc_mesh,
     NumLib::LocalToGlobalIndexMap const& dof_table_boundary,
     int const variable_id, int const component_id, const double t,
diff --git a/ProcessLib/BoundaryCondition/DirichletBoundaryConditionWithinTimeInterval.cpp b/ProcessLib/BoundaryCondition/DirichletBoundaryConditionWithinTimeInterval.cpp
index 2392094e8bc2da30cc36ec71b2104822584a2220..1631031eada59b4492bf7247d45eae7a46dc1191 100644
--- a/ProcessLib/BoundaryCondition/DirichletBoundaryConditionWithinTimeInterval.cpp
+++ b/ProcessLib/BoundaryCondition/DirichletBoundaryConditionWithinTimeInterval.cpp
@@ -21,15 +21,16 @@
 #include "NumLib/DOF/LocalToGlobalIndexMap.h"
 #include "NumLib/IndexValueVector.h"
 
-#include "ProcessLib/Parameter/Parameter.h"
-#include "ProcessLib/Utils/ProcessUtils.h"
+#include "ParameterLib/Parameter.h"
+#include "ParameterLib/Utils.h"
 
 namespace ProcessLib
 {
 DirichletBoundaryConditionWithinTimeInterval::
     DirichletBoundaryConditionWithinTimeInterval(
         std::unique_ptr<BaseLib::TimeInterval> time_interval,
-        Parameter<double> const& parameter, MeshLib::Mesh const& bc_mesh,
+        ParameterLib::Parameter<double> const& parameter,
+        MeshLib::Mesh const& bc_mesh,
         NumLib::LocalToGlobalIndexMap const& dof_table_bulk,
         int const variable_id, int const component_id)
     : _parameter(parameter),
@@ -45,7 +46,8 @@ DirichletBoundaryConditionWithinTimeInterval::
 DirichletBoundaryConditionWithinTimeInterval::
     DirichletBoundaryConditionWithinTimeInterval(
         std::unique_ptr<BaseLib::TimeInterval> time_interval,
-        Parameter<double> const& parameter, MeshLib::Mesh const& bc_mesh,
+        ParameterLib::Parameter<double> const& parameter,
+        MeshLib::Mesh const& bc_mesh,
         std::vector<MeshLib::Node*> const& nodes_in_bc_mesh,
         NumLib::LocalToGlobalIndexMap const& dof_table_bulk,
         int const variable_id, int const component_id)
@@ -95,7 +97,7 @@ createDirichletBoundaryConditionWithinTimeInterval(
     BaseLib::ConfigTree const& config, MeshLib::Mesh const& bc_mesh,
     NumLib::LocalToGlobalIndexMap const& dof_table_bulk, int const variable_id,
     int const component_id,
-    const std::vector<std::unique_ptr<ProcessLib::ParameterBase>>& parameters)
+    const std::vector<std::unique_ptr<ParameterLib::ParameterBase>>& parameters)
 {
     DBUG(
         "Constructing DirichletBoundaryConditionWithinTimeInterval from "
@@ -108,7 +110,8 @@ createDirichletBoundaryConditionWithinTimeInterval(
     auto const param_name = config.getConfigParameter<std::string>("parameter");
     DBUG("Using parameter %s", param_name.c_str());
 
-    auto& param = findParameter<double>(param_name, parameters, 1);
+    auto& param =
+        ParameterLib::findParameter<double>(param_name, parameters, 1);
 
 // In case of partitioned mesh the boundary could be empty, i.e. there is no
 // boundary condition.
diff --git a/ProcessLib/BoundaryCondition/DirichletBoundaryConditionWithinTimeInterval.h b/ProcessLib/BoundaryCondition/DirichletBoundaryConditionWithinTimeInterval.h
index f5e9c2a70f1cfefc6b68ae5620d4c34f8ce6b915..89a4cc61233c0c8acd60be7ed1f7e3da7d042756 100644
--- a/ProcessLib/BoundaryCondition/DirichletBoundaryConditionWithinTimeInterval.h
+++ b/ProcessLib/BoundaryCondition/DirichletBoundaryConditionWithinTimeInterval.h
@@ -28,24 +28,29 @@ namespace MeshLib
 class Node;
 }
 
-namespace ProcessLib
+namespace ParameterLib
 {
 template <typename T>
 struct Parameter;
+}
 
+namespace ProcessLib
+{
 class DirichletBoundaryConditionWithinTimeInterval final
     : public BoundaryCondition
 {
 public:
     DirichletBoundaryConditionWithinTimeInterval(
         std::unique_ptr<BaseLib::TimeInterval> time_interval,
-        Parameter<double> const& parameter, MeshLib::Mesh const& bc_mesh,
+        ParameterLib::Parameter<double> const& parameter,
+        MeshLib::Mesh const& bc_mesh,
         NumLib::LocalToGlobalIndexMap const& dof_table_bulk,
         int const variable_id, int const component_id);
 
     DirichletBoundaryConditionWithinTimeInterval(
         std::unique_ptr<BaseLib::TimeInterval> time_interval,
-        Parameter<double> const& parameter, MeshLib::Mesh const& bc_mesh,
+        ParameterLib::Parameter<double> const& parameter,
+        MeshLib::Mesh const& bc_mesh,
         std::vector<MeshLib::Node*> const& nodes_in_bc_mesh,
         NumLib::LocalToGlobalIndexMap const& dof_table_bulk,
         int const variable_id, int const component_id);
@@ -55,7 +60,7 @@ public:
         NumLib::IndexValueVector<GlobalIndexType>& bc_values) const override;
 
 private:
-    Parameter<double> const& _parameter;
+    ParameterLib::Parameter<double> const& _parameter;
 
     MeshLib::Mesh const& _bc_mesh;
     /// Some nodes in _bc_mesh
@@ -75,6 +80,7 @@ createDirichletBoundaryConditionWithinTimeInterval(
     BaseLib::ConfigTree const& config, MeshLib::Mesh const& bc_mesh,
     NumLib::LocalToGlobalIndexMap const& dof_table_bulk, int const variable_id,
     int const component_id,
-    const std::vector<std::unique_ptr<ProcessLib::ParameterBase>>& parameters);
+    const std::vector<std::unique_ptr<ParameterLib::ParameterBase>>&
+        parameters);
 
 }  // namespace ProcessLib
diff --git a/ProcessLib/BoundaryCondition/NeumannBoundaryCondition.cpp b/ProcessLib/BoundaryCondition/NeumannBoundaryCondition.cpp
index a94d1f6588b788fa866e895fded3ff5413846df4..7f5d8b791941e7d8d765e826bedd33e14bbf2620 100644
--- a/ProcessLib/BoundaryCondition/NeumannBoundaryCondition.cpp
+++ b/ProcessLib/BoundaryCondition/NeumannBoundaryCondition.cpp
@@ -8,7 +8,7 @@
  */
 
 #include "NeumannBoundaryCondition.h"
-#include "ProcessLib/Utils/ProcessUtils.h"
+#include "ParameterLib/Utils.h"
 
 namespace ProcessLib
 {
@@ -17,7 +17,7 @@ std::unique_ptr<NeumannBoundaryCondition> createNeumannBoundaryCondition(
     NumLib::LocalToGlobalIndexMap const& dof_table, int const variable_id,
     int const component_id, unsigned const integration_order,
     unsigned const shapefunction_order, unsigned const global_dim,
-    std::vector<std::unique_ptr<ParameterBase>> const& parameters)
+    std::vector<std::unique_ptr<ParameterLib::ParameterBase>> const& parameters)
 {
     DBUG("Constructing Neumann BC from config.");
     //! \ogs_file_param{prj__process_variables__process_variable__boundary_conditions__boundary_condition__type}
@@ -27,7 +27,8 @@ std::unique_ptr<NeumannBoundaryCondition> createNeumannBoundaryCondition(
     auto const param_name = config.getConfigParameter<std::string>("parameter");
     DBUG("Using parameter %s", param_name.c_str());
 
-    auto const& param = findParameter<double>(param_name, parameters, 1);
+    auto const& param =
+        ParameterLib::findParameter<double>(param_name, parameters, 1);
 
     // In case of partitioned mesh the boundary could be empty, i.e. there is no
     // boundary condition.
diff --git a/ProcessLib/BoundaryCondition/NeumannBoundaryCondition.h b/ProcessLib/BoundaryCondition/NeumannBoundaryCondition.h
index e9dd44035d2921d2f9c8ff96cd8ff55f31697146..3b67bd65e79125afda7dfdf3eb53e7fbf0542987 100644
--- a/ProcessLib/BoundaryCondition/NeumannBoundaryCondition.h
+++ b/ProcessLib/BoundaryCondition/NeumannBoundaryCondition.h
@@ -9,20 +9,22 @@
 
 #pragma once
 
-#include "ProcessLib/Parameter/Parameter.h"
 #include "GenericNaturalBoundaryCondition.h"
 #include "NeumannBoundaryConditionLocalAssembler.h"
+#include "ParameterLib/Parameter.h"
 
 namespace ProcessLib
 {
-using NeumannBoundaryCondition = GenericNaturalBoundaryCondition<
-    Parameter<double> const&, NeumannBoundaryConditionLocalAssembler>;
+using NeumannBoundaryCondition =
+    GenericNaturalBoundaryCondition<ParameterLib::Parameter<double> const&,
+                                    NeumannBoundaryConditionLocalAssembler>;
 
 std::unique_ptr<NeumannBoundaryCondition> createNeumannBoundaryCondition(
     BaseLib::ConfigTree const& config, MeshLib::Mesh const& bc_mesh,
     NumLib::LocalToGlobalIndexMap const& dof_table, int const variable_id,
     int const component_id, unsigned const integration_order,
     unsigned const shapefunction_order, unsigned const global_dim,
-    std::vector<std::unique_ptr<ParameterBase>> const& parameters);
+    std::vector<std::unique_ptr<ParameterLib::ParameterBase>> const&
+        parameters);
 
 }  // namespace ProcessLib
diff --git a/ProcessLib/BoundaryCondition/NeumannBoundaryConditionLocalAssembler.h b/ProcessLib/BoundaryCondition/NeumannBoundaryConditionLocalAssembler.h
index 0f09c01d8a8d7d5be1a4ee471ef20da288defdfd..9296b1db422cc6ec61926127cc29a5d50856d309 100644
--- a/ProcessLib/BoundaryCondition/NeumannBoundaryConditionLocalAssembler.h
+++ b/ProcessLib/BoundaryCondition/NeumannBoundaryConditionLocalAssembler.h
@@ -12,7 +12,7 @@
 #include "GenericNaturalBoundaryConditionLocalAssembler.h"
 #include "NumLib/DOF/DOFTableUtil.h"
 #include "NumLib/Fem/ShapeMatrixPolicy.h"
-#include "ProcessLib/Parameter/Parameter.h"
+#include "ParameterLib/Parameter.h"
 #include "ProcessLib/Utils/InitShapeMatrices.h"
 
 namespace ProcessLib
@@ -36,7 +36,7 @@ public:
         std::size_t const local_matrix_size,
         bool const is_axially_symmetric,
         unsigned const integration_order,
-        Parameter<double> const& neumann_bc_parameter)
+        ParameterLib::Parameter<double> const& neumann_bc_parameter)
         : Base(e, is_axially_symmetric, integration_order),
           _neumann_bc_parameter(neumann_bc_parameter),
           _local_rhs(local_matrix_size)
@@ -73,7 +73,7 @@ public:
     }
 
 private:
-    Parameter<double> const& _neumann_bc_parameter;
+    ParameterLib::Parameter<double> const& _neumann_bc_parameter;
     NodalVectorType _local_rhs;
 
 public:
diff --git a/ProcessLib/BoundaryCondition/NormalTractionBoundaryCondition-impl.h b/ProcessLib/BoundaryCondition/NormalTractionBoundaryCondition-impl.h
index 68faa079cc93c47cb2f039f122d67f9d4ce26c1d..d02bff937f6e9d65d9b08a59b1bcfcd13b6b3f5e 100644
--- a/ProcessLib/BoundaryCondition/NormalTractionBoundaryCondition-impl.h
+++ b/ProcessLib/BoundaryCondition/NormalTractionBoundaryCondition-impl.h
@@ -13,8 +13,8 @@
 #include <numeric>
 
 #include "MeshLib/MeshSearch/NodeSearch.h"
+#include "ParameterLib/Utils.h"
 #include "ProcessLib/Utils/CreateLocalAssemblers.h"
-#include "ProcessLib/Utils/ProcessUtils.h"
 
 #include "NormalTractionBoundaryConditionLocalAssembler.h"
 
@@ -29,7 +29,8 @@ NormalTractionBoundaryCondition<LocalAssemblerImplementation>::
         unsigned const integration_order, unsigned const shapefunction_order,
         NumLib::LocalToGlobalIndexMap const& dof_table_bulk,
         int const variable_id, unsigned const global_dim,
-        MeshLib::Mesh const& bc_mesh, Parameter<double> const& pressure)
+        MeshLib::Mesh const& bc_mesh,
+        ParameterLib::Parameter<double> const& pressure)
     : _bc_mesh(bc_mesh),
       _integration_order(integration_order),
       _pressure(pressure)
@@ -79,7 +80,7 @@ createNormalTractionBoundaryCondition(
     NumLib::LocalToGlobalIndexMap const& dof_table, int const variable_id,
     unsigned const integration_order, unsigned const shapefunction_order,
     unsigned const global_dim,
-    std::vector<std::unique_ptr<ParameterBase>> const& parameters)
+    std::vector<std::unique_ptr<ParameterLib::ParameterBase>> const& parameters)
 {
     DBUG("Constructing NormalTractionBoundaryCondition from config.");
     //! \ogs_file_param{prj__process_variables__process_variable__boundary_conditions__boundary_condition__type}
@@ -90,7 +91,8 @@ createNormalTractionBoundaryCondition(
         config.getConfigParameter<std::string>("parameter");
     DBUG("Using parameter %s", parameter_name.c_str());
 
-    auto const& pressure = findParameter<double>(parameter_name, parameters, 1);
+    auto const& pressure =
+        ParameterLib::findParameter<double>(parameter_name, parameters, 1);
     return std::make_unique<NormalTractionBoundaryCondition<
         NormalTractionBoundaryConditionLocalAssembler>>(
         integration_order, shapefunction_order, dof_table, variable_id,
diff --git a/ProcessLib/BoundaryCondition/NormalTractionBoundaryCondition.h b/ProcessLib/BoundaryCondition/NormalTractionBoundaryCondition.h
index 9caeea9009dbc39ef61d8eb75b96cd1f48ce92ae..b13faa3dbffc2ea795c71a8c8d96970b93588791 100644
--- a/ProcessLib/BoundaryCondition/NormalTractionBoundaryCondition.h
+++ b/ProcessLib/BoundaryCondition/NormalTractionBoundaryCondition.h
@@ -39,7 +39,8 @@ public:
         unsigned const integration_order, unsigned const shapefunction_order,
         NumLib::LocalToGlobalIndexMap const& dof_table_bulk,
         int const variable_id, unsigned const global_dim,
-        MeshLib::Mesh const& bc_mesh, Parameter<double> const& pressure);
+        MeshLib::Mesh const& bc_mesh,
+        ParameterLib::Parameter<double> const& pressure);
 
     /// Calls local assemblers which calculate their contributions to the global
     /// matrix and the right-hand-side.
@@ -67,7 +68,7 @@ private:
         std::unique_ptr<NormalTractionBoundaryConditionLocalAssemblerInterface>>
         _local_assemblers;
 
-    Parameter<double> const& _pressure;
+    ParameterLib::Parameter<double> const& _pressure;
 };
 
 std::unique_ptr<NormalTractionBoundaryCondition<
@@ -77,7 +78,8 @@ createNormalTractionBoundaryCondition(
     NumLib::LocalToGlobalIndexMap const& dof_table, int const variable_id,
     unsigned const integration_order, unsigned const shapefunction_order,
     unsigned const global_dim,
-    std::vector<std::unique_ptr<ParameterBase>> const& parameters);
+    std::vector<std::unique_ptr<ParameterLib::ParameterBase>> const&
+        parameters);
 
 }  // namespace NormalTractionBoundaryCondition
 }  // namespace ProcessLib
diff --git a/ProcessLib/BoundaryCondition/NormalTractionBoundaryConditionLocalAssembler.h b/ProcessLib/BoundaryCondition/NormalTractionBoundaryConditionLocalAssembler.h
index 368a45ef2e88a1f4ac8025411eb383f054109a61..b6365f249751d04dbdb0f6488e0edc0166379bfa 100644
--- a/ProcessLib/BoundaryCondition/NormalTractionBoundaryConditionLocalAssembler.h
+++ b/ProcessLib/BoundaryCondition/NormalTractionBoundaryConditionLocalAssembler.h
@@ -13,7 +13,7 @@
 #include "MathLib/LinAlg/Eigen/EigenMapTools.h"
 #include "MeshLib/Elements/FaceRule.h"
 #include "NumLib/DOF/DOFTableUtil.h"
-#include "ProcessLib/Parameter/Parameter.h"
+#include "ParameterLib/Parameter.h"
 
 #include "GenericNaturalBoundaryConditionLocalAssembler.h"
 
@@ -64,7 +64,7 @@ public:
         std::size_t const local_matrix_size,
         bool const is_axially_symmetric,
         unsigned const integration_order,
-        Parameter<double> const& pressure)
+        ParameterLib::Parameter<double> const& pressure)
         : _integration_method(integration_order),
           _pressure(pressure),
           _element(e)
@@ -154,7 +154,7 @@ public:
 
 private:
     IntegrationMethod const _integration_method;
-    Parameter<double> const& _pressure;
+    ParameterLib::Parameter<double> const& _pressure;
 
     static const int displacement_size =
         ShapeFunctionDisplacement::NPOINTS * GlobalDim;
diff --git a/ProcessLib/BoundaryCondition/PhaseFieldIrreversibleDamageOracleBoundaryCondition.cpp b/ProcessLib/BoundaryCondition/PhaseFieldIrreversibleDamageOracleBoundaryCondition.cpp
index 2de4055ed37c67e3ec5c12635018c217f088b1a3..8e2d1e336ef3d72ce4ffd81ddb8c26c587113c82 100644
--- a/ProcessLib/BoundaryCondition/PhaseFieldIrreversibleDamageOracleBoundaryCondition.cpp
+++ b/ProcessLib/BoundaryCondition/PhaseFieldIrreversibleDamageOracleBoundaryCondition.cpp
@@ -12,7 +12,6 @@
 #include <algorithm>
 #include <logog/include/logog.hpp>
 #include <vector>
-#include "ProcessLib/Utils/ProcessUtils.h"
 
 namespace ProcessLib
 {
@@ -20,7 +19,7 @@ void PhaseFieldIrreversibleDamageOracleBoundaryCondition::getEssentialBCValues(
     const double /*t*/, GlobalVector const& /*x*/,
     NumLib::IndexValueVector<GlobalIndexType>& bc_values) const
 {
-    SpatialPosition pos;
+    ParameterLib::SpatialPosition pos;
 
     bc_values.ids.clear();
     bc_values.values.clear();
diff --git a/ProcessLib/BoundaryCondition/PhaseFieldIrreversibleDamageOracleBoundaryCondition.h b/ProcessLib/BoundaryCondition/PhaseFieldIrreversibleDamageOracleBoundaryCondition.h
index 47f0fd0c2f081b5df6b62bb68d9300ab352ca8c1..10fe3f2bd932ea55c2f5a1fdc96b74f50d43a4c5 100644
--- a/ProcessLib/BoundaryCondition/PhaseFieldIrreversibleDamageOracleBoundaryCondition.h
+++ b/ProcessLib/BoundaryCondition/PhaseFieldIrreversibleDamageOracleBoundaryCondition.h
@@ -12,7 +12,7 @@
 #include "BoundaryCondition.h"
 #include "NumLib/DOF/LocalToGlobalIndexMap.h"
 #include "NumLib/IndexValueVector.h"
-#include "ProcessLib/Parameter/Parameter.h"
+#include "ParameterLib/Parameter.h"
 
 namespace ProcessLib
 {
diff --git a/ProcessLib/BoundaryCondition/Python/PythonBoundaryCondition.cpp b/ProcessLib/BoundaryCondition/Python/PythonBoundaryCondition.cpp
index 83764467e52dffd9adb14443ec14be7d0bdad9bf..6797cfb6fff1ee63d34623c4bf75f327c34e8625 100644
--- a/ProcessLib/BoundaryCondition/Python/PythonBoundaryCondition.cpp
+++ b/ProcessLib/BoundaryCondition/Python/PythonBoundaryCondition.cpp
@@ -14,7 +14,6 @@
 
 #include "MeshLib/MeshSearch/NodeSearch.h"
 #include "ProcessLib/Utils/CreateLocalAssemblers.h"
-#include "ProcessLib/Utils/ProcessUtils.h"
 #include "PythonBoundaryConditionLocalAssembler.h"
 
 namespace
diff --git a/ProcessLib/BoundaryCondition/RobinBoundaryCondition.cpp b/ProcessLib/BoundaryCondition/RobinBoundaryCondition.cpp
index 3f7870f9dbd4cb6af58022b840d0ac0da75f37c0..8d2d0331e7fa3db8365110502eb9144291c8c3c4 100644
--- a/ProcessLib/BoundaryCondition/RobinBoundaryCondition.cpp
+++ b/ProcessLib/BoundaryCondition/RobinBoundaryCondition.cpp
@@ -8,7 +8,7 @@
  */
 
 #include "RobinBoundaryCondition.h"
-#include "ProcessLib/Utils/ProcessUtils.h"
+#include "ParameterLib/Utils.h"
 
 namespace ProcessLib
 {
@@ -17,7 +17,7 @@ std::unique_ptr<RobinBoundaryCondition> createRobinBoundaryCondition(
     NumLib::LocalToGlobalIndexMap const& dof_table, int const variable_id,
     int const component_id, unsigned const integration_order,
     unsigned const shapefunction_order, unsigned const global_dim,
-    std::vector<std::unique_ptr<ParameterBase>> const& parameters)
+    std::vector<std::unique_ptr<ParameterLib::ParameterBase>> const& parameters)
 {
     DBUG("Constructing RobinBcConfig from config.");
     //! \ogs_file_param{prj__process_variables__process_variable__boundary_conditions__boundary_condition__type}
@@ -28,8 +28,10 @@ std::unique_ptr<RobinBoundaryCondition> createRobinBoundaryCondition(
     //! \ogs_file_param{prj__process_variables__process_variable__boundary_conditions__boundary_condition__Robin__u_0}
     auto const u_0_name = config.getConfigParameter<std::string>("u_0");
 
-    auto const& alpha = findParameter<double>(alpha_name, parameters, 1);
-    auto const& u_0 = findParameter<double>(u_0_name, parameters, 1);
+    auto const& alpha =
+        ParameterLib::findParameter<double>(alpha_name, parameters, 1);
+    auto const& u_0 =
+        ParameterLib::findParameter<double>(u_0_name, parameters, 1);
 
     // In case of partitioned mesh the boundary could be empty, i.e. there is no
     // boundary condition.
diff --git a/ProcessLib/BoundaryCondition/RobinBoundaryCondition.h b/ProcessLib/BoundaryCondition/RobinBoundaryCondition.h
index 30b8c941df7ddde65665e5b4a52c2e60109f459b..1f91cf1f497292c423bf86fb73e1ebe8824bd698 100644
--- a/ProcessLib/BoundaryCondition/RobinBoundaryCondition.h
+++ b/ProcessLib/BoundaryCondition/RobinBoundaryCondition.h
@@ -34,6 +34,7 @@ std::unique_ptr<RobinBoundaryCondition> createRobinBoundaryCondition(
     NumLib::LocalToGlobalIndexMap const& dof_table, int const variable_id,
     int const component_id, unsigned const integration_order,
     unsigned const shapefunction_order, unsigned const global_dim,
-    std::vector<std::unique_ptr<ParameterBase>> const& parameters);
+    std::vector<std::unique_ptr<ParameterLib::ParameterBase>> const&
+        parameters);
 
 }  // namespace ProcessLib
diff --git a/ProcessLib/BoundaryCondition/RobinBoundaryConditionLocalAssembler.h b/ProcessLib/BoundaryCondition/RobinBoundaryConditionLocalAssembler.h
index 434afb14b34402374a9f42c87d7d92cb350d0779..762f6470493cf6fbae3b85ef63bb9526640b0c36 100644
--- a/ProcessLib/BoundaryCondition/RobinBoundaryConditionLocalAssembler.h
+++ b/ProcessLib/BoundaryCondition/RobinBoundaryConditionLocalAssembler.h
@@ -9,15 +9,15 @@
 
 #pragma once
 
-#include "NumLib/DOF/DOFTableUtil.h"
-#include "ProcessLib/Parameter/Parameter.h"
 #include "GenericNaturalBoundaryConditionLocalAssembler.h"
+#include "NumLib/DOF/DOFTableUtil.h"
+#include "ParameterLib/Parameter.h"
 
 namespace ProcessLib
 {
 struct RobinBoundaryConditionData final {
-    Parameter<double> const& alpha;
-    Parameter<double> const& u_0;
+    ParameterLib::Parameter<double> const& alpha;
+    ParameterLib::Parameter<double> const& u_0;
 };
 
 template <typename ShapeFunction, typename IntegrationMethod,
diff --git a/ProcessLib/BoundaryCondition/VariableDependentNeumannBoundaryCondition.cpp b/ProcessLib/BoundaryCondition/VariableDependentNeumannBoundaryCondition.cpp
index 36f30cd6753d1f4b4eb6fdeb092b11cd4dacbf9c..58ca3b6e1859cca4cfeb3b128d7c5a977f7407f9 100644
--- a/ProcessLib/BoundaryCondition/VariableDependentNeumannBoundaryCondition.cpp
+++ b/ProcessLib/BoundaryCondition/VariableDependentNeumannBoundaryCondition.cpp
@@ -9,7 +9,7 @@
 
 #include "VariableDependentNeumannBoundaryCondition.h"
 
-#include "ProcessLib/Utils/ProcessUtils.h"
+#include "ParameterLib/Utils.h"
 
 namespace ProcessLib
 {
@@ -19,7 +19,7 @@ createVariableDependentNeumannBoundaryCondition(
     NumLib::LocalToGlobalIndexMap const& dof_table, int const variable_id,
     int const component_id, unsigned const integration_order,
     unsigned const shapefunction_order, unsigned const global_dim,
-    std::vector<std::unique_ptr<ParameterBase>> const& parameters)
+    std::vector<std::unique_ptr<ParameterLib::ParameterBase>> const& parameters)
 {
     DBUG("Constructing VariableDependentNeumann BC from config.");
     //! \ogs_file_param{prj__process_variables__process_variable__boundary_conditions__boundary_condition__type}
@@ -35,28 +35,32 @@ createVariableDependentNeumannBoundaryCondition(
     auto const constant_name =
         //! \ogs_file_param{prj__process_variables__process_variable__boundary_conditions__boundary_condition__VariableDependentNeumann__constant_name}
         config.getConfigParameter<std::string>("constant_name");
-    auto const& constant = findParameter<double>(constant_name, parameters, 1);
+    auto const& constant =
+        ParameterLib::findParameter<double>(constant_name, parameters, 1);
 
     auto const coefficient_current_variable_name =
         //! \ogs_file_param{prj__process_variables__process_variable__boundary_conditions__boundary_condition__VariableDependentNeumann__coefficient_current_variable_name}
         config.getConfigParameter<std::string>(
             "coefficient_current_variable_name");
     auto const& coefficient_current_variable =
-        findParameter<double>(coefficient_current_variable_name, parameters, 1);
+        ParameterLib::findParameter<double>(coefficient_current_variable_name,
+                                            parameters, 1);
 
     auto const coefficient_other_variable_name =
         //! \ogs_file_param{prj__process_variables__process_variable__boundary_conditions__boundary_condition__VariableDependentNeumann__coefficient_other_variable_name}
         config.getConfigParameter<std::string>(
             "coefficient_other_variable_name");
     auto const& coefficient_other_variable =
-        findParameter<double>(coefficient_other_variable_name, parameters, 1);
+        ParameterLib::findParameter<double>(coefficient_other_variable_name,
+                                            parameters, 1);
 
     auto const coefficient_mixed_variables_name =
         //! \ogs_file_param{prj__process_variables__process_variable__boundary_conditions__boundary_condition__VariableDependentNeumann__coefficient_mixed_variables_name}
         config.getConfigParameter<std::string>(
             "coefficient_mixed_variables_name");
     auto const& coefficient_mixed_variables =
-        findParameter<double>(coefficient_mixed_variables_name, parameters, 1);
+        ParameterLib::findParameter<double>(coefficient_mixed_variables_name,
+                                            parameters, 1);
 
     std::vector<MeshLib::Node*> const& bc_nodes = bc_mesh.getNodes();
     MeshLib::MeshSubset bc_mesh_subset(bc_mesh, bc_nodes);
diff --git a/ProcessLib/BoundaryCondition/VariableDependentNeumannBoundaryCondition.h b/ProcessLib/BoundaryCondition/VariableDependentNeumannBoundaryCondition.h
index 82f1170ff5c824b5cad03e4ddfcabb119c3e8e42..0b3606cfcba0cf1cb27a97862e542b7694def3e0 100644
--- a/ProcessLib/BoundaryCondition/VariableDependentNeumannBoundaryCondition.h
+++ b/ProcessLib/BoundaryCondition/VariableDependentNeumannBoundaryCondition.h
@@ -26,6 +26,7 @@ createVariableDependentNeumannBoundaryCondition(
     NumLib::LocalToGlobalIndexMap const& dof_table, int const variable_id,
     int const component_id, unsigned const integration_order,
     unsigned const shapefunction_order, unsigned const global_dim,
-    std::vector<std::unique_ptr<ParameterBase>> const& parameters);
+    std::vector<std::unique_ptr<ParameterLib::ParameterBase>> const&
+        parameters);
 
 }  // namespace ProcessLib
diff --git a/ProcessLib/BoundaryCondition/VariableDependentNeumannBoundaryConditionLocalAssembler.h b/ProcessLib/BoundaryCondition/VariableDependentNeumannBoundaryConditionLocalAssembler.h
index b5e0b0112f1c4c736d1796e82f0e301e1e46cc16..471c2974b50eeb9ec9e1cfff5bce43318163394c 100644
--- a/ProcessLib/BoundaryCondition/VariableDependentNeumannBoundaryConditionLocalAssembler.h
+++ b/ProcessLib/BoundaryCondition/VariableDependentNeumannBoundaryConditionLocalAssembler.h
@@ -12,7 +12,7 @@
 #include "MeshLib/PropertyVector.h"
 #include "NumLib/DOF/DOFTableUtil.h"
 #include "NumLib/Function/Interpolation.h"
-#include "ProcessLib/Parameter/MeshNodeParameter.h"
+#include "ParameterLib/MeshNodeParameter.h"
 
 #include "GenericNaturalBoundaryConditionLocalAssembler.h"
 
@@ -20,10 +20,10 @@ namespace ProcessLib
 {
 struct VariableDependentNeumannBoundaryConditionData
 {
-    Parameter<double> const& constant;
-    Parameter<double> const& coefficient_current_variable;
-    Parameter<double> const& coefficient_other_variable;
-    Parameter<double> const& coefficient_mixed_variables;
+    ParameterLib::Parameter<double> const& constant;
+    ParameterLib::Parameter<double> const& coefficient_current_variable;
+    ParameterLib::Parameter<double> const& coefficient_other_variable;
+    ParameterLib::Parameter<double> const& coefficient_mixed_variables;
     // Used for mapping boundary nodes to bulk nodes.
     NumLib::LocalToGlobalIndexMap const& dof_table_boundary_other_variable;
 };
diff --git a/ProcessLib/SourceTerms/CreateNodalSourceTerm.cpp b/ProcessLib/SourceTerms/CreateNodalSourceTerm.cpp
index 2c8c5d3e14b278d851966a193b3b64077d4a3815..5e9e2afcab05374b1711ea5b451f9239d73f6be3 100644
--- a/ProcessLib/SourceTerms/CreateNodalSourceTerm.cpp
+++ b/ProcessLib/SourceTerms/CreateNodalSourceTerm.cpp
@@ -12,7 +12,7 @@
 #include <logog/include/logog.hpp>
 
 #include "BaseLib/ConfigTree.h"
-#include "ProcessLib/Utils/ProcessUtils.h"
+#include "ParameterLib/Utils.h"
 
 #include "NodalSourceTerm.h"
 
@@ -23,7 +23,7 @@ std::unique_ptr<SourceTerm> createNodalSourceTerm(
     std::unique_ptr<NumLib::LocalToGlobalIndexMap> dof_table,
     std::size_t const source_term_mesh_id, const int variable_id,
     const int component_id,
-    std::vector<std::unique_ptr<ProcessLib::ParameterBase>> const& parameters)
+    std::vector<std::unique_ptr<ParameterLib::ParameterBase>> const& parameters)
 {
     DBUG("Constructing NodalSourceTerm from config.");
     //! \ogs_file_param{prj__process_variables__process_variable__source_terms__source_term__type}
@@ -33,7 +33,8 @@ std::unique_ptr<SourceTerm> createNodalSourceTerm(
     auto const param_name = config.getConfigParameter<std::string>("parameter");
     DBUG("Using parameter %s as nodal source term.", param_name.c_str());
 
-    auto& param = findParameter<double>(param_name, parameters, 1);
+    auto& param =
+        ParameterLib::findParameter<double>(param_name, parameters, 1);
 
     return std::make_unique<NodalSourceTerm>(std::move(dof_table),
                                              source_term_mesh_id, st_mesh,
diff --git a/ProcessLib/SourceTerms/CreateNodalSourceTerm.h b/ProcessLib/SourceTerms/CreateNodalSourceTerm.h
index 7d56a0a1b680595454dbed81e282e77432620bb4..31413ceddca6b1685db75bc78b99b9dd3c177f67 100644
--- a/ProcessLib/SourceTerms/CreateNodalSourceTerm.h
+++ b/ProcessLib/SourceTerms/CreateNodalSourceTerm.h
@@ -24,11 +24,14 @@ namespace NumLib
 {
 class LocalToGlobalIndexMap;
 }
+namespace ParameterLib
+{
+struct ParameterBase;
+}
 namespace ProcessLib
 {
 class SourceTerm;
-struct ParameterBase;
-}  // namespace ProcessLib
+}
 
 namespace ProcessLib
 {
@@ -36,6 +39,7 @@ std::unique_ptr<SourceTerm> createNodalSourceTerm(
     BaseLib::ConfigTree const& config, MeshLib::Mesh const& st_mesh,
     std::unique_ptr<NumLib::LocalToGlobalIndexMap> dof_table,
     std::size_t mesh_id, const int variable_id, const int component_id,
-    std::vector<std::unique_ptr<ProcessLib::ParameterBase>> const& parameters);
+    std::vector<std::unique_ptr<ParameterLib::ParameterBase>> const&
+        parameters);
 
 }   // namespace ProcessLib
diff --git a/ProcessLib/SourceTerms/CreateSourceTerm.cpp b/ProcessLib/SourceTerms/CreateSourceTerm.cpp
index 2649720dd71efe2a999aa4bf2ba79dda72bca661..93e148daed4f0e623dfad2821842d3bcda7d1bb1 100644
--- a/ProcessLib/SourceTerms/CreateSourceTerm.cpp
+++ b/ProcessLib/SourceTerms/CreateSourceTerm.cpp
@@ -24,7 +24,7 @@ std::unique_ptr<SourceTerm> createSourceTerm(
     const NumLib::LocalToGlobalIndexMap& dof_table_bulk,
     const MeshLib::Mesh& source_term_mesh, const int variable_id,
     const unsigned integration_order, const unsigned shapefunction_order,
-    std::vector<std::unique_ptr<ProcessLib::ParameterBase>> const& parameters)
+    std::vector<std::unique_ptr<ParameterLib::ParameterBase>> const& parameters)
 {
     //! \ogs_file_param{prj__process_variables__process_variable__source_terms__source_term__type}
     auto const type = config.config.peekConfigParameter<std::string>("type");
diff --git a/ProcessLib/SourceTerms/CreateSourceTerm.h b/ProcessLib/SourceTerms/CreateSourceTerm.h
index e6a60639b1a808ba8a154322e116903884e13e45..0d0939294ca4516ed1ef2a85568eff81b48772ed 100644
--- a/ProcessLib/SourceTerms/CreateSourceTerm.h
+++ b/ProcessLib/SourceTerms/CreateSourceTerm.h
@@ -12,7 +12,7 @@
 #include <vector>
 #include <memory>
 
-#include "ProcessLib/Parameter/Parameter.h"
+#include "ParameterLib/Parameter.h"
 
 namespace MeshLib
 {
@@ -38,6 +38,7 @@ std::unique_ptr<SourceTerm> createSourceTerm(
     const NumLib::LocalToGlobalIndexMap& dof_table, const MeshLib::Mesh& mesh,
     const int variable_id, const unsigned integration_order,
     const unsigned shapefunction_order,
-    std::vector<std::unique_ptr<ProcessLib::ParameterBase>> const& parameters);
+    std::vector<std::unique_ptr<ParameterLib::ParameterBase>> const&
+        parameters);
 
 }  // namespace ProcessLib
diff --git a/ProcessLib/SourceTerms/CreateVolumetricSourceTerm.cpp b/ProcessLib/SourceTerms/CreateVolumetricSourceTerm.cpp
index 8f59ff3b262549730ebfff95b4735da632fdc2a7..bcb98b017cad4bffdc70fa81ed9f9f6318e4c220 100644
--- a/ProcessLib/SourceTerms/CreateVolumetricSourceTerm.cpp
+++ b/ProcessLib/SourceTerms/CreateVolumetricSourceTerm.cpp
@@ -13,16 +13,15 @@
 #include "BaseLib/FileTools.h"
 #include "MeshLib/Mesh.h"
 #include "NumLib/DOF/LocalToGlobalIndexMap.h"
-#include "ProcessLib/Utils/ProcessUtils.h"
+#include "ParameterLib/Utils.h"
 #include "VolumetricSourceTerm.h"
 
 namespace ProcessLib
 {
 std::unique_ptr<SourceTerm> createVolumetricSourceTerm(
-    BaseLib::ConfigTree const& config,
-    MeshLib::Mesh const& source_term_mesh,
+    BaseLib::ConfigTree const& config, MeshLib::Mesh const& source_term_mesh,
     std::unique_ptr<NumLib::LocalToGlobalIndexMap> source_term_dof_table,
-    std::vector<std::unique_ptr<ParameterBase>> const& parameters,
+    std::vector<std::unique_ptr<ParameterLib::ParameterBase>> const& parameters,
     unsigned const integration_order, unsigned const shapefunction_order)
 {
     //! \ogs_file_param{prj__process_variables__process_variable__source_terms__source_term__type}
@@ -34,7 +33,7 @@ std::unique_ptr<SourceTerm> createVolumetricSourceTerm(
     auto const& volumetric_source_term_parameter_name =
         //! \ogs_file_param{prj__process_variables__process_variable__source_terms__source_term__Volumetric__parameter}
         config.getConfigParameter<std::string>("parameter");
-    auto& volumetric_source_term = findParameter<double>(
+    auto& volumetric_source_term = ParameterLib::findParameter<double>(
         volumetric_source_term_parameter_name, parameters, 1);
 
     DBUG("Using '%s` as volumetric source term parameter.",
diff --git a/ProcessLib/SourceTerms/CreateVolumetricSourceTerm.h b/ProcessLib/SourceTerms/CreateVolumetricSourceTerm.h
index 18d2568388a98e55a33759c27b8264b13a2b3509..f60fa69cc51a6a722b01bbf4630276e3d94a0441 100644
--- a/ProcessLib/SourceTerms/CreateVolumetricSourceTerm.h
+++ b/ProcessLib/SourceTerms/CreateVolumetricSourceTerm.h
@@ -27,16 +27,19 @@ namespace NumLib
 class LocalToGlobalIndexMap;
 }
 
-namespace ProcessLib
+namespace ParameterLib
 {
 struct ParameterBase;
+}
+
+namespace ProcessLib
+{
 class SourceTerm;
 
 std::unique_ptr<SourceTerm> createVolumetricSourceTerm(
-    BaseLib::ConfigTree const& config,
-    MeshLib::Mesh const& source_term_mesh,
+    BaseLib::ConfigTree const& config, MeshLib::Mesh const& source_term_mesh,
     std::unique_ptr<NumLib::LocalToGlobalIndexMap> source_term_dof_table,
-    std::vector<std::unique_ptr<ParameterBase>> const& parameters,
+    std::vector<std::unique_ptr<ParameterLib::ParameterBase>> const& parameters,
     unsigned const integration_order, unsigned const shapefunction_order);
 
 }   // namespace ProcessLib
diff --git a/ProcessLib/SourceTerms/NodalSourceTerm.cpp b/ProcessLib/SourceTerms/NodalSourceTerm.cpp
index e32cd1a2a1971891faefa1c3106a270fcba71612..93ba965e2cb81e75b73bf4ca9c90f5ca1660b45d 100644
--- a/ProcessLib/SourceTerms/NodalSourceTerm.cpp
+++ b/ProcessLib/SourceTerms/NodalSourceTerm.cpp
@@ -19,7 +19,7 @@ NodalSourceTerm::NodalSourceTerm(
     MeshLib::Mesh const& st_mesh,
     const int variable_id,
     const int component_id,
-    Parameter<double> const& parameter)
+    ParameterLib::Parameter<double> const& parameter)
     : SourceTerm(std::move(source_term_dof_table)),
       _source_term_mesh_id(source_term_mesh_id),
       _st_mesh(st_mesh),
@@ -43,7 +43,7 @@ void NodalSourceTerm::integrate(const double t, GlobalVector const& /*x*/,
         auto const index = _source_term_dof_table->getGlobalIndex(
             l, _variable_id, _component_id);
 
-        SpatialPosition pos;
+        ParameterLib::SpatialPosition pos;
         pos.setNodeID(node_id);
 
         b.add(index, _parameter(t, pos).front());
diff --git a/ProcessLib/SourceTerms/NodalSourceTerm.h b/ProcessLib/SourceTerms/NodalSourceTerm.h
index 78f74842b97be3924cf8aa12819f336192972120..931577ec6e97a9367814dc0ba56a4027a4990567 100644
--- a/ProcessLib/SourceTerms/NodalSourceTerm.h
+++ b/ProcessLib/SourceTerms/NodalSourceTerm.h
@@ -20,7 +20,7 @@ public:
         std::unique_ptr<NumLib::LocalToGlobalIndexMap> dof_table,
         std::size_t const source_term_mesh_id, MeshLib::Mesh const& st_mesh,
         const int variable_id, const int component_id,
-        Parameter<double> const& parameter);
+        ParameterLib::Parameter<double> const& parameter);
 
     void integrate(const double t, GlobalVector const& x, GlobalVector& b,
                    GlobalMatrix* jac) const override;
@@ -30,7 +30,7 @@ private:
     MeshLib::Mesh const& _st_mesh;
     int const _variable_id;
     int const _component_id;
-    Parameter<double> const& _parameter;
+    ParameterLib::Parameter<double> const& _parameter;
 };
 
 }  // namespace ProcessLib
diff --git a/ProcessLib/SourceTerms/Python/PythonSourceTerm.cpp b/ProcessLib/SourceTerms/Python/PythonSourceTerm.cpp
index ae85a23db8c3b7caef6b9de5a7313ae42fe6f8be..06401a8660b3742c65e8ed6b39f9c8897dfe9e76 100644
--- a/ProcessLib/SourceTerms/Python/PythonSourceTerm.cpp
+++ b/ProcessLib/SourceTerms/Python/PythonSourceTerm.cpp
@@ -15,7 +15,6 @@
 #include "MeshLib/MeshSearch/NodeSearch.h"
 #include "NumLib/DOF/LocalToGlobalIndexMap.h"
 #include "ProcessLib/Utils/CreateLocalAssemblers.h"
-#include "ProcessLib/Utils/ProcessUtils.h"
 #include "PythonSourceTermLocalAssembler.h"
 
 namespace
diff --git a/ProcessLib/SourceTerms/SourceTerm.h b/ProcessLib/SourceTerms/SourceTerm.h
index 9ae1248df7872c92b11604b1579a17e9b23eebf1..1174e24f38dc4d375882a46b2ad39f75a9fd19af 100644
--- a/ProcessLib/SourceTerms/SourceTerm.h
+++ b/ProcessLib/SourceTerms/SourceTerm.h
@@ -12,7 +12,7 @@
 #include <memory>
 
 #include "NumLib/DOF/LocalToGlobalIndexMap.h"
-#include "ProcessLib/Parameter/Parameter.h"
+#include "ParameterLib/Parameter.h"
 
 namespace ProcessLib
 {
diff --git a/ProcessLib/SourceTerms/SourceTermCollection.h b/ProcessLib/SourceTerms/SourceTermCollection.h
index b27a51e878868f7458f1d4305867847ab2bf20a2..5351feb1c3dd9e42c2b5f903ab5bf482f3864faa 100644
--- a/ProcessLib/SourceTerms/SourceTermCollection.h
+++ b/ProcessLib/SourceTerms/SourceTermCollection.h
@@ -18,7 +18,8 @@ class SourceTermCollection final
 {
 public:
     explicit SourceTermCollection(
-        std::vector<std::unique_ptr<ParameterBase>> const& parameters)
+        std::vector<std::unique_ptr<ParameterLib::ParameterBase>> const&
+            parameters)
         : _parameters(parameters)
     {
     }
@@ -34,7 +35,8 @@ public:
 
 private:
     std::vector<std::unique_ptr<SourceTerm>> _source_terms;
-    std::vector<std::unique_ptr<ParameterBase>> const& _parameters;
+    std::vector<std::unique_ptr<ParameterLib::ParameterBase>> const&
+        _parameters;
 };
 
 }  // namespace ProcessLib
diff --git a/ProcessLib/SourceTerms/VolumetricSourceTerm.cpp b/ProcessLib/SourceTerms/VolumetricSourceTerm.cpp
index 55db90e52df9c820a1c64ea55866cbcd925bf32e..a973196058c9aeac84de5678ced50f1aaa15a703 100644
--- a/ProcessLib/SourceTerms/VolumetricSourceTerm.cpp
+++ b/ProcessLib/SourceTerms/VolumetricSourceTerm.cpp
@@ -17,7 +17,7 @@ VolumetricSourceTerm::VolumetricSourceTerm(
     MeshLib::Mesh const& source_term_mesh,
     std::unique_ptr<NumLib::LocalToGlobalIndexMap> source_term_dof_table,
     unsigned const integration_order, unsigned const shapefunction_order,
-    Parameter<double> const& volumetric_source_term)
+    ParameterLib::Parameter<double> const& volumetric_source_term)
     : SourceTerm(std::move(source_term_dof_table)),
       _volumetric_source_term(volumetric_source_term)
 {
diff --git a/ProcessLib/SourceTerms/VolumetricSourceTerm.h b/ProcessLib/SourceTerms/VolumetricSourceTerm.h
index 92e3bb7c74079ea036a03231ecc9ce8ad8cd788f..dcf3e55ae811d757e8a65dc2e44743bcd5866f0d 100644
--- a/ProcessLib/SourceTerms/VolumetricSourceTerm.h
+++ b/ProcessLib/SourceTerms/VolumetricSourceTerm.h
@@ -24,13 +24,13 @@ public:
         MeshLib::Mesh const& source_term_mesh,
         std::unique_ptr<NumLib::LocalToGlobalIndexMap> source_term_dof_table,
         unsigned const integration_order, unsigned const shapefunction_order,
-        Parameter<double> const& volumetric_source_term);
+        ParameterLib::Parameter<double> const& volumetric_source_term);
 
     void integrate(const double t, GlobalVector const& x, GlobalVector& b,
                    GlobalMatrix* jac) const override;
 
 private:
-    Parameter<double> const& _volumetric_source_term;
+    ParameterLib::Parameter<double> const& _volumetric_source_term;
     std::vector<std::unique_ptr<VolumetricSourceTermLocalAssemblerInterface>>
         _local_assemblers;
 };
diff --git a/ProcessLib/SourceTerms/VolumetricSourceTermFEM.h b/ProcessLib/SourceTerms/VolumetricSourceTermFEM.h
index 9e3d91ed3944145ca60884860e4c1cd214afaf09..b369b7f02c130a60461d74975416df68e32ca40d 100644
--- a/ProcessLib/SourceTerms/VolumetricSourceTermFEM.h
+++ b/ProcessLib/SourceTerms/VolumetricSourceTermFEM.h
@@ -14,8 +14,8 @@
 #include "MathLib/LinAlg/Eigen/EigenMapTools.h"
 #include "NumLib/DOF/DOFTableUtil.h"
 #include "NumLib/Fem/FiniteElement/TemplateIsoparametric.h"
+#include "ParameterLib/Parameter.h"
 #include "ProcessLib/LocalAssemblerTraits.h"
-#include "ProcessLib/Parameter/Parameter.h"
 #include "ProcessLib/Utils/InitShapeMatrices.h"
 
 namespace ProcessLib
@@ -65,7 +65,7 @@ public:
         std::size_t const local_matrix_size,
         bool is_axially_symmetric,
         unsigned const integration_order,
-        Parameter<double> const& volumetric_source_term)
+        ParameterLib::Parameter<double> const& volumetric_source_term)
         : _volumetric_source_term(volumetric_source_term),
           _integration_method(integration_order),
           _local_rhs(local_matrix_size)
@@ -97,7 +97,7 @@ public:
         unsigned const n_integration_points =
             _integration_method.getNumberOfPoints();
 
-        SpatialPosition pos;
+        ParameterLib::SpatialPosition pos;
         pos.setElementID(id);
 
         for (unsigned ip = 0; ip < n_integration_points; ip++)
@@ -113,7 +113,7 @@ public:
     }
 
 private:
-    Parameter<double> const& _volumetric_source_term;
+    ParameterLib::Parameter<double> const& _volumetric_source_term;
 
     IntegrationMethod const _integration_method;
     std::vector<