diff --git a/Applications/ApplicationsLib/CMakeLists.txt b/Applications/ApplicationsLib/CMakeLists.txt
index a0bbc6d0eb0276080e7d675c7519973903084ce6..1987e809d218093d1645170621a3742bbd2e1b01 100644
--- a/Applications/ApplicationsLib/CMakeLists.txt
+++ b/Applications/ApplicationsLib/CMakeLists.txt
@@ -10,7 +10,7 @@ endif()
 
 target_link_libraries(ApplicationsLib
     PUBLIC BaseLib GeoLib Processes logog
-    PRIVATE MathLib MeshLib MeshGeoToolsLib NumLib
+    PRIVATE MathLib MeshLib MeshGeoToolsLib NumLib ParameterLib
 )
 
 # Set cpp definitions if the cmake option is enabled for the given process.
diff --git a/Applications/ApplicationsLib/ProjectData.cpp b/Applications/ApplicationsLib/ProjectData.cpp
index 626c62d116ab6be17d7cf7ed46892a1965111a4c..3b3514884469b88d8f6565b77f217f580fa9d0d3 100644
--- a/Applications/ApplicationsLib/ProjectData.cpp
+++ b/Applications/ApplicationsLib/ProjectData.cpp
@@ -23,6 +23,7 @@
 #endif
 
 #include "BaseLib/Algorithm.h"
+#include "BaseLib/ConfigTree.h"
 #include "BaseLib/FileTools.h"
 
 #include "GeoLib/GEOObjects.h"
@@ -41,10 +42,10 @@
 #include "GeoLib/IO/XmlIO/Boost/BoostXmlGmlInterface.h"
 #include "MeshLib/IO/readMeshFromFile.h"
 
-#include "ProcessLib/Parameter/ConstantParameter.h"
-#include "ProcessLib/Parameter/CoordinateSystem.h"
+#include "ParameterLib/ConstantParameter.h"
+#include "ParameterLib/CoordinateSystem.h"
+#include "ParameterLib/Utils.h"
 #include "ProcessLib/UncoupledProcessesTimeLoop.h"
-#include "ProcessLib/Utils/ProcessUtils.h"
 
 #ifdef OGS_BUILD_PROCESS_COMPONENTTRANSPORT
 #include "ProcessLib/ComponentTransport/CreateComponentTransportProcess.h"
@@ -196,9 +197,9 @@ std::vector<std::unique_ptr<MeshLib::Mesh>> readMeshes(
     return meshes;
 }
 
-boost::optional<ProcessLib::CoordinateSystem> parseLocalCoordinateSystem(
+boost::optional<ParameterLib::CoordinateSystem> parseLocalCoordinateSystem(
     boost::optional<BaseLib::ConfigTree> const& config,
-    std::vector<std::unique_ptr<ProcessLib::ParameterBase>> const& parameters)
+    std::vector<std::unique_ptr<ParameterLib::ParameterBase>> const& parameters)
 {
     if (!config)
     {
@@ -210,7 +211,7 @@ boost::optional<ProcessLib::CoordinateSystem> parseLocalCoordinateSystem(
     //
     // Fetch the first basis vector; its length defines the dimension.
     //
-    auto const& basis_vector_0 = ProcessLib::findParameter<double>(
+    auto const& basis_vector_0 = ParameterLib::findParameter<double>(
         *config,
         //! \ogs_file_param_special{prj__local_coordinate_system__basis_vector_0}
         "basis_vector_0", parameters, 0 /* any dimension */);
@@ -229,7 +230,7 @@ boost::optional<ProcessLib::CoordinateSystem> parseLocalCoordinateSystem(
     // Fetch the second basis vector, which must be of the same dimension as the
     // first one.
     //
-    auto const& basis_vector_1 = ProcessLib::findParameter<double>(
+    auto const& basis_vector_1 = ParameterLib::findParameter<double>(
         *config,
         //! \ogs_file_param_special{prj__local_coordinate_system__basis_vector_1}
         "basis_vector_1", parameters, dimension);
@@ -239,18 +240,18 @@ boost::optional<ProcessLib::CoordinateSystem> parseLocalCoordinateSystem(
     //
     if (dimension == 2)
     {
-        return ProcessLib::CoordinateSystem{basis_vector_0, basis_vector_1};
+        return ParameterLib::CoordinateSystem{basis_vector_0, basis_vector_1};
     }
 
     //
     // Parse the third vector, for three dimensions.
     //
-    auto const& basis_vector_2 = ProcessLib::findParameter<double>(
+    auto const& basis_vector_2 = ParameterLib::findParameter<double>(
         *config,
         //! \ogs_file_param_special{prj__local_coordinate_system__basis_vector_2}
         "basis_vector_2", parameters, dimension);
-    return ProcessLib::CoordinateSystem{basis_vector_0, basis_vector_1,
-                                        basis_vector_2};
+    return ParameterLib::CoordinateSystem{basis_vector_0, basis_vector_1,
+                                          basis_vector_2};
 }
 }  // namespace
 
@@ -386,7 +387,7 @@ std::vector<std::string> ProjectData::parseParameters(
          parameters_config.getConfigSubtreeList("parameter"))
     {
         auto p =
-            ProcessLib::createParameter(parameter_config, _mesh_vec, _curves);
+            ParameterLib::createParameter(parameter_config, _mesh_vec, _curves);
         if (!names.insert(p->name).second)
         {
             OGS_FATAL("A parameter with name `%s' already exists.",
@@ -407,7 +408,7 @@ std::vector<std::string> ProjectData::parseParameters(
     }
 
     _parameters.push_back(
-        std::make_unique<ProcessLib::ConstantParameter<double>>(
+        std::make_unique<ParameterLib::ConstantParameter<double>>(
             ProcessLib::DeactivatedSubdomain::zero_parameter_name, 0.0));
 
     return parameter_names_for_transformation;
diff --git a/Applications/ApplicationsLib/ProjectData.h b/Applications/ApplicationsLib/ProjectData.h
index 2734994103ed12f3fa1a1206d83a284fec4c8ba9..932eb641de466c812be29f8c3d043b7913038aa9 100644
--- a/Applications/ApplicationsLib/ProjectData.h
+++ b/Applications/ApplicationsLib/ProjectData.h
@@ -21,7 +21,7 @@
 #include "MaterialLib/MPL/Medium.h"
 #include "MathLib/InterpolationAlgorithms/PiecewiseLinearInterpolation.h"
 
-#include "ProcessLib/Parameter/Parameter.h"
+#include "ParameterLib/Parameter.h"
 #include "ProcessLib/Process.h"
 #include "ProcessLib/ProcessVariable.h"
 
@@ -119,7 +119,7 @@ private:
     std::vector<ProcessLib::ProcessVariable> _process_variables;
 
     /// Buffer for each parameter config passed to the process.
-    std::vector<std::unique_ptr<ProcessLib::ParameterBase>> _parameters;
+    std::vector<std::unique_ptr<ParameterLib::ParameterBase>> _parameters;
 
     std::map<int, std::unique_ptr<MaterialPropertyLib::Medium>> _media;
 
diff --git a/CMakeLists.txt b/CMakeLists.txt
index f8194ee32cf823920ffb0bbd8b92e0100705f52e..8151513714f9be3927c8cc0da9530567a4fe80d2 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -333,6 +333,7 @@ add_subdirectory( MeshLib )
 add_subdirectory( MeshGeoToolsLib )
 add_subdirectory( NumLib )
 if(OGS_BUILD_CLI OR OGS_BUILD_UTILS OR BUILD_TESTING)
+    add_subdirectory( ParameterLib )
     add_subdirectory( MaterialLib )
     add_subdirectory( ProcessLib )
 endif()
diff --git a/MaterialLib/CMakeLists.txt b/MaterialLib/CMakeLists.txt
index 89f4ed54c2866a3cbf9a431e26c8930778f9a08d..7b7893c63c40e627a8512e383850cb0429d9977a 100644
--- a/MaterialLib/CMakeLists.txt
+++ b/MaterialLib/CMakeLists.txt
@@ -39,8 +39,8 @@ target_include_directories(MaterialLib
 )
 
 target_link_libraries(MaterialLib
-    PUBLIC MaterialLib_SolidModels_MFront # ProcessLib
-    PRIVATE MathLib MeshLib
+    PUBLIC MaterialLib_SolidModels_MFront
+    PRIVATE MathLib MeshLib ParameterLib
 )
 
 if(OGS_USE_PCH)
diff --git a/MaterialLib/FractureModels/CohesiveZoneModeI.cpp b/MaterialLib/FractureModels/CohesiveZoneModeI.cpp
index 928b642b17d51933d2d8f79b920e4cd2bd219cb8..4e1d9b823b071edbd7d17700d080b29ad7685c0e 100644
--- a/MaterialLib/FractureModels/CohesiveZoneModeI.cpp
+++ b/MaterialLib/FractureModels/CohesiveZoneModeI.cpp
@@ -38,10 +38,10 @@ double computeDamage(double const damage_prev,
 template <int DisplacementDim>
 void CohesiveZoneModeI<DisplacementDim>::computeConstitutiveRelation(
     double const t,
-    ProcessLib::SpatialPosition const& x,
+    ParameterLib::SpatialPosition const& x,
     double const aperture0,
     Eigen::Ref<Eigen::VectorXd const>
-        /*sigma0*/,
+    /*sigma0*/,
     Eigen::Ref<Eigen::VectorXd const>
     /*w_prev*/,
     Eigen::Ref<Eigen::VectorXd const>
diff --git a/MaterialLib/FractureModels/CohesiveZoneModeI.h b/MaterialLib/FractureModels/CohesiveZoneModeI.h
index 1b62cde9fbbea02a89167ffd42e774b46a5d59aa..b68aeb5f748e8c142198e32c84558ded207bfbeb 100644
--- a/MaterialLib/FractureModels/CohesiveZoneModeI.h
+++ b/MaterialLib/FractureModels/CohesiveZoneModeI.h
@@ -12,7 +12,7 @@
 #include <Eigen/Eigen>
 #include <utility>
 
-#include "ProcessLib/Parameter/Parameter.h"
+#include "ParameterLib/Parameter.h"
 
 #include "FractureModelBase.h"
 
@@ -25,8 +25,8 @@ namespace CohesiveZoneModeI
 /// Variables specific to the material model
 struct MaterialPropertiesParameters
 {
-    using P = ProcessLib::Parameter<double>;
-    using X = ProcessLib::SpatialPosition;
+    using P = ParameterLib::Parameter<double>;
+    using X = ParameterLib::SpatialPosition;
 
     MaterialPropertiesParameters(P const& normal_stiffness_,
                                  P const& shear_stiffness_,
@@ -84,7 +84,7 @@ struct MaterialPropertiesParameters
 /// details.
 struct MaterialProperties final
 {
-    MaterialProperties(double const t, ProcessLib::SpatialPosition const& x,
+    MaterialProperties(double const t, ParameterLib::SpatialPosition const& x,
                        MaterialPropertiesParameters const& mp)
         : Kn(mp.normal_stiffness(t, x)[0]),
           Ks(mp.shear_stiffness(t, x)[0]),
@@ -161,7 +161,7 @@ public:
      */
     void computeConstitutiveRelation(
         double const t,
-        ProcessLib::SpatialPosition const& x,
+        ParameterLib::SpatialPosition const& x,
         double const aperture0,
         Eigen::Ref<Eigen::VectorXd const>
             sigma0,
@@ -179,7 +179,7 @@ public:
             material_state_variables) override;
 
     MaterialProperties evaluatedMaterialProperties(
-        double const t, ProcessLib::SpatialPosition const& x) const
+        double const t, ParameterLib::SpatialPosition const& x) const
     {
         return MaterialProperties(t, x, _mp);
     }
diff --git a/MaterialLib/FractureModels/CreateCohesiveZoneModeI.cpp b/MaterialLib/FractureModels/CreateCohesiveZoneModeI.cpp
index fdbc4a408f9a9acd4ebcfef0afe95602a12ca5e6..125a9ef9a65cdacb46ee359843521dfe0a861131 100644
--- a/MaterialLib/FractureModels/CreateCohesiveZoneModeI.cpp
+++ b/MaterialLib/FractureModels/CreateCohesiveZoneModeI.cpp
@@ -9,8 +9,9 @@
 
 #include "CreateCohesiveZoneModeI.h"
 
+#include "ParameterLib/Utils.h"
+
 #include "CohesiveZoneModeI.h"
-#include "ProcessLib/Utils/ProcessUtils.h"  // required for findParameter
 
 namespace MaterialLib
 {
@@ -20,26 +21,26 @@ namespace CohesiveZoneModeI
 {
 template <int DisplacementDim>
 std::unique_ptr<FractureModelBase<DisplacementDim>> createCohesiveZoneModeI(
-    std::vector<std::unique_ptr<ProcessLib::ParameterBase>> const& parameters,
+    std::vector<std::unique_ptr<ParameterLib::ParameterBase>> const& parameters,
     BaseLib::ConfigTree const& config)
 {
     //! \ogs_file_param{material__fracture_model__type}
     config.checkConfigParameter("type", "CohesiveZoneModeI");
     DBUG("Create CohesiveZoneModeI material");
 
-    auto& Kn = ProcessLib::findParameter<double>(
+    auto& Kn = ParameterLib::findParameter<double>(
         //! \ogs_file_param_special{material__fracture_model__CohesiveZoneModeI__normal_stiffness}
         config, "normal_stiffness", parameters, 1);
 
-    auto& Ks = ProcessLib::findParameter<double>(
+    auto& Ks = ParameterLib::findParameter<double>(
         //! \ogs_file_param_special{material__fracture_model__CohesiveZoneModeI__shear_stiffness}
         config, "shear_stiffness", parameters, 1);
 
-    auto& Gc = ProcessLib::findParameter<double>(
+    auto& Gc = ParameterLib::findParameter<double>(
         //! \ogs_file_param_special{material__fracture_model__CohesiveZoneModeI__fracture_toughness}
         config, "fracture_toughness", parameters, 1);
 
-    auto& t_np = ProcessLib::findParameter<double>(
+    auto& t_np = ParameterLib::findParameter<double>(
         //! \ogs_file_param_special{material__fracture_model__CohesiveZoneModeI__peak_normal_traction}
         config, "peak_normal_traction", parameters, 1);
 
@@ -58,11 +59,11 @@ std::unique_ptr<FractureModelBase<DisplacementDim>> createCohesiveZoneModeI(
 }
 
 template std::unique_ptr<FractureModelBase<2>> createCohesiveZoneModeI(
-    std::vector<std::unique_ptr<ProcessLib::ParameterBase>> const& parameters,
+    std::vector<std::unique_ptr<ParameterLib::ParameterBase>> const& parameters,
     BaseLib::ConfigTree const& config);
 
 template std::unique_ptr<FractureModelBase<3>> createCohesiveZoneModeI(
-    std::vector<std::unique_ptr<ProcessLib::ParameterBase>> const& parameters,
+    std::vector<std::unique_ptr<ParameterLib::ParameterBase>> const& parameters,
     BaseLib::ConfigTree const& config);
 
 }  // namespace CohesiveZoneModeI
diff --git a/MaterialLib/FractureModels/CreateCohesiveZoneModeI.h b/MaterialLib/FractureModels/CreateCohesiveZoneModeI.h
index 10a7d8128f18c66df68834d01ca36300477f22a9..7e2967a0cc189ce972b6f59fb798bb5ac21f39b1 100644
--- a/MaterialLib/FractureModels/CreateCohesiveZoneModeI.h
+++ b/MaterialLib/FractureModels/CreateCohesiveZoneModeI.h
@@ -19,7 +19,7 @@ namespace CohesiveZoneModeI
 {
 template <int DisplacementDim>
 std::unique_ptr<FractureModelBase<DisplacementDim>> createCohesiveZoneModeI(
-    std::vector<std::unique_ptr<ProcessLib::ParameterBase>> const& parameters,
+    std::vector<std::unique_ptr<ParameterLib::ParameterBase>> const& parameters,
     BaseLib::ConfigTree const& config);
 
 }  // namespace CohesiveZoneModeI
diff --git a/MaterialLib/FractureModels/CreateLinearElasticIsotropic.cpp b/MaterialLib/FractureModels/CreateLinearElasticIsotropic.cpp
index e7929a988f0c4b7c1fd21e27e5d4e87ec882e061..83631fc235459c2eb52087e0b525056f64a741fe 100644
--- a/MaterialLib/FractureModels/CreateLinearElasticIsotropic.cpp
+++ b/MaterialLib/FractureModels/CreateLinearElasticIsotropic.cpp
@@ -9,29 +9,29 @@
 
 #include "CreateLinearElasticIsotropic.h"
 
-#include "ProcessLib/Utils/ProcessUtils.h"  // required for findParameter
+#include "ParameterLib/Utils.h"
+
 #include "LinearElasticIsotropic.h"
 
 namespace MaterialLib
 {
 namespace Fracture
 {
-
 template <int DisplacementDim>
 std::unique_ptr<FractureModelBase<DisplacementDim>>
 createLinearElasticIsotropic(
-    std::vector<std::unique_ptr<ProcessLib::ParameterBase>> const& parameters,
+    std::vector<std::unique_ptr<ParameterLib::ParameterBase>> const& parameters,
     BaseLib::ConfigTree const& config)
 {
     //! \ogs_file_param{material__fracture_model__type}
     config.checkConfigParameter("type", "LinearElasticIsotropic");
     DBUG("Create LinearElasticIsotropic material");
 
-    auto& Kn = ProcessLib::findParameter<double>(
+    auto& Kn = ParameterLib::findParameter<double>(
         //! \ogs_file_param_special{material__fracture_model__LinearElasticIsotropic__normal_stiffness}
         config, "normal_stiffness", parameters, 1);
 
-    auto& Ks = ProcessLib::findParameter<double>(
+    auto& Ks = ParameterLib::findParameter<double>(
         //! \ogs_file_param_special{material__fracture_model__LinearElasticIsotropic__shear_stiffness}
         config, "shear_stiffness", parameters, 1);
 
@@ -50,17 +50,12 @@ createLinearElasticIsotropic(
         penalty_aperture_cutoff, tension_cutoff, mp);
 }
 
-
-template
-std::unique_ptr<FractureModelBase<2>>
-createLinearElasticIsotropic(
-    std::vector<std::unique_ptr<ProcessLib::ParameterBase>> const& parameters,
+template std::unique_ptr<FractureModelBase<2>> createLinearElasticIsotropic(
+    std::vector<std::unique_ptr<ParameterLib::ParameterBase>> const& parameters,
     BaseLib::ConfigTree const& config);
 
-template
-std::unique_ptr<FractureModelBase<3>>
-createLinearElasticIsotropic(
-    std::vector<std::unique_ptr<ProcessLib::ParameterBase>> const& parameters,
+template std::unique_ptr<FractureModelBase<3>> createLinearElasticIsotropic(
+    std::vector<std::unique_ptr<ParameterLib::ParameterBase>> const& parameters,
     BaseLib::ConfigTree const& config);
 
 }  // namespace Fracture
diff --git a/MaterialLib/FractureModels/CreateLinearElasticIsotropic.h b/MaterialLib/FractureModels/CreateLinearElasticIsotropic.h
index b34e087109cfc8a95f90d74685c1b06f0b6fa249..330f21ee575dadaca59a25c9c3bb0c180f3d7141 100644
--- a/MaterialLib/FractureModels/CreateLinearElasticIsotropic.h
+++ b/MaterialLib/FractureModels/CreateLinearElasticIsotropic.h
@@ -15,11 +15,10 @@ namespace  MaterialLib
 {
 namespace Fracture
 {
-
 template <int DisplacementDim>
 std::unique_ptr<FractureModelBase<DisplacementDim>>
 createLinearElasticIsotropic(
-    std::vector<std::unique_ptr<ProcessLib::ParameterBase>> const& parameters,
+    std::vector<std::unique_ptr<ParameterLib::ParameterBase>> const& parameters,
     BaseLib::ConfigTree const& config);
 
 }  // namespace Fracture
diff --git a/MaterialLib/FractureModels/CreateMohrCoulomb.cpp b/MaterialLib/FractureModels/CreateMohrCoulomb.cpp
index 830522a54f0f07d8ca92426cb6e874b47097d618..cde42940c0536a5faf04269c41a386d530103f3b 100644
--- a/MaterialLib/FractureModels/CreateMohrCoulomb.cpp
+++ b/MaterialLib/FractureModels/CreateMohrCoulomb.cpp
@@ -9,41 +9,40 @@
 
 #include "CreateMohrCoulomb.h"
 
-#include "ProcessLib/Utils/ProcessUtils.h"  // required for findParameter
+#include "ParameterLib/Utils.h"
+
 #include "MohrCoulomb.h"
 
 namespace MaterialLib
 {
 namespace Fracture
 {
-
 template <int DisplacementDim>
-std::unique_ptr<FractureModelBase<DisplacementDim>>
-createMohrCoulomb(
-    std::vector<std::unique_ptr<ProcessLib::ParameterBase>> const& parameters,
+std::unique_ptr<FractureModelBase<DisplacementDim>> createMohrCoulomb(
+    std::vector<std::unique_ptr<ParameterLib::ParameterBase>> const& parameters,
     BaseLib::ConfigTree const& config)
 {
     //! \ogs_file_param{material__fracture_model__type}
     config.checkConfigParameter("type", "MohrCoulomb");
     DBUG("Create MohrCoulomb material");
 
-    auto& Kn = ProcessLib::findParameter<double>(
+    auto& Kn = ParameterLib::findParameter<double>(
         //! \ogs_file_param_special{material__fracture_model__MohrCoulomb__normal_stiffness}
         config, "normal_stiffness", parameters, 1);
 
-    auto& Ks = ProcessLib::findParameter<double>(
+    auto& Ks = ParameterLib::findParameter<double>(
         //! \ogs_file_param_special{material__fracture_model__MohrCoulomb__shear_stiffness}
         config, "shear_stiffness", parameters, 1);
 
-    auto& friction_angle = ProcessLib::findParameter<double>(
+    auto& friction_angle = ParameterLib::findParameter<double>(
         //! \ogs_file_param_special{material__fracture_model__MohrCoulomb__friction_angle}
         config, "friction_angle", parameters, 1);
 
-    auto& dilatancy_angle = ProcessLib::findParameter<double>(
+    auto& dilatancy_angle = ParameterLib::findParameter<double>(
         //! \ogs_file_param_special{material__fracture_model__MohrCoulomb__dilatancy_angle}
         config, "dilatancy_angle", parameters, 1);
 
-    auto& cohesion = ProcessLib::findParameter<double>(
+    auto& cohesion = ParameterLib::findParameter<double>(
         //! \ogs_file_param_special{material__fracture_model__MohrCoulomb__cohesion}
         config, "cohesion", parameters, 1);
 
@@ -62,17 +61,12 @@ createMohrCoulomb(
         penalty_aperture_cutoff, tension_cutoff, mp);
 }
 
-
-template
-std::unique_ptr<FractureModelBase<2>>
-createMohrCoulomb(
-    std::vector<std::unique_ptr<ProcessLib::ParameterBase>> const& parameters,
+template std::unique_ptr<FractureModelBase<2>> createMohrCoulomb(
+    std::vector<std::unique_ptr<ParameterLib::ParameterBase>> const& parameters,
     BaseLib::ConfigTree const& config);
 
-template
-std::unique_ptr<FractureModelBase<3>>
-createMohrCoulomb(
-    std::vector<std::unique_ptr<ProcessLib::ParameterBase>> const& parameters,
+template std::unique_ptr<FractureModelBase<3>> createMohrCoulomb(
+    std::vector<std::unique_ptr<ParameterLib::ParameterBase>> const& parameters,
     BaseLib::ConfigTree const& config);
 
 }  // namespace Fracture
diff --git a/MaterialLib/FractureModels/CreateMohrCoulomb.h b/MaterialLib/FractureModels/CreateMohrCoulomb.h
index 18b5797f5480e149622f3b5606e188fc92789817..e73781781ea5287a2953ada0fd94d175dd9779e0 100644
--- a/MaterialLib/FractureModels/CreateMohrCoulomb.h
+++ b/MaterialLib/FractureModels/CreateMohrCoulomb.h
@@ -15,11 +15,9 @@ namespace MaterialLib
 {
 namespace Fracture
 {
-
 template <int DisplacementDim>
-std::unique_ptr<FractureModelBase<DisplacementDim>>
-createMohrCoulomb(
-    std::vector<std::unique_ptr<ProcessLib::ParameterBase>> const& parameters,
+std::unique_ptr<FractureModelBase<DisplacementDim>> createMohrCoulomb(
+    std::vector<std::unique_ptr<ParameterLib::ParameterBase>> const& parameters,
     BaseLib::ConfigTree const& config);
 
 }  // namespace Fracture
diff --git a/MaterialLib/FractureModels/FractureModelBase.h b/MaterialLib/FractureModels/FractureModelBase.h
index 7cad143685b91441074d7fce08c0210bc17e7a4f..dc6cd9e135b8ad8e456a669ee43bd049af70a08b 100644
--- a/MaterialLib/FractureModels/FractureModelBase.h
+++ b/MaterialLib/FractureModels/FractureModelBase.h
@@ -11,7 +11,7 @@
 
 #include <Eigen/Eigen>
 
-#include "ProcessLib/Parameter/Parameter.h"
+#include "ParameterLib/Parameter.h"
 
 namespace MaterialLib
 {
@@ -77,7 +77,7 @@ public:
      */
     virtual void computeConstitutiveRelation(
         double const t,
-        ProcessLib::SpatialPosition const& x,
+        ParameterLib::SpatialPosition const& x,
         double const aperture0,
         Eigen::Ref<Eigen::VectorXd const>
             sigma0,
diff --git a/MaterialLib/FractureModels/LinearElasticIsotropic.cpp b/MaterialLib/FractureModels/LinearElasticIsotropic.cpp
index dbc3b4339900a79b0b3488a4c9176e04d8491220..74730170d7379a28ed29f46ecd31fbd7cd6baf94 100644
--- a/MaterialLib/FractureModels/LinearElasticIsotropic.cpp
+++ b/MaterialLib/FractureModels/LinearElasticIsotropic.cpp
@@ -18,7 +18,7 @@ namespace Fracture
 template <int DisplacementDim>
 void LinearElasticIsotropic<DisplacementDim>::computeConstitutiveRelation(
     double const t,
-    ProcessLib::SpatialPosition const& x,
+    ParameterLib::SpatialPosition const& x,
     double const aperture0,
     Eigen::Ref<Eigen::VectorXd const>
         sigma0,
diff --git a/MaterialLib/FractureModels/LinearElasticIsotropic.h b/MaterialLib/FractureModels/LinearElasticIsotropic.h
index 962a6e434ac7bcade94f3fbd8dfc5a6eea7178c6..25d586ac6f9daac66a84b4dd241b0d334bdad3cb 100644
--- a/MaterialLib/FractureModels/LinearElasticIsotropic.h
+++ b/MaterialLib/FractureModels/LinearElasticIsotropic.h
@@ -12,7 +12,7 @@
 #include <Eigen/Eigen>
 #include <utility>
 
-#include "ProcessLib/Parameter/Parameter.h"
+#include "ParameterLib/Parameter.h"
 
 #include "FractureModelBase.h"
 
@@ -28,8 +28,8 @@ public:
     /// Variables specific to the material model
     struct MaterialProperties
     {
-        using P = ProcessLib::Parameter<double>;
-        using X = ProcessLib::SpatialPosition;
+        using P = ParameterLib::Parameter<double>;
+        using X = ParameterLib::SpatialPosition;
 
         MaterialProperties(P const& normal_stiffness_, P const& shear_stiffness_)
             : normal_stiffness(normal_stiffness_), shear_stiffness(shear_stiffness_)
@@ -83,7 +83,7 @@ public:
      */
     void computeConstitutiveRelation(
         double const t,
-        ProcessLib::SpatialPosition const& x,
+        ParameterLib::SpatialPosition const& x,
         double const aperture0,
         Eigen::Ref<Eigen::VectorXd const>
             sigma0,
diff --git a/MaterialLib/FractureModels/MohrCoulomb.cpp b/MaterialLib/FractureModels/MohrCoulomb.cpp
index 1e86063670c244cf1c86f4ecdd38cb567790b3b6..80c8622829a130d4ddef788dd6820600cd1a39a5 100644
--- a/MaterialLib/FractureModels/MohrCoulomb.cpp
+++ b/MaterialLib/FractureModels/MohrCoulomb.cpp
@@ -30,10 +30,9 @@ struct MaterialPropertyValues
     double c = 0.0;
 
     template <typename MaterialProperties>
-    MaterialPropertyValues(
-            MaterialProperties const& mp,
-            double const t,
-            ProcessLib::SpatialPosition const& x)
+    MaterialPropertyValues(MaterialProperties const& mp,
+                           double const t,
+                           ParameterLib::SpatialPosition const& x)
     {
         Kn = mp.normal_stiffness(t,x)[0];
         Ks = mp.shear_stiffness(t,x)[0];
@@ -48,7 +47,7 @@ struct MaterialPropertyValues
 template <int DisplacementDim>
 void MohrCoulomb<DisplacementDim>::computeConstitutiveRelation(
     double const t,
-    ProcessLib::SpatialPosition const& x,
+    ParameterLib::SpatialPosition const& x,
     double const aperture0,
     Eigen::Ref<Eigen::VectorXd const>
         sigma0,
diff --git a/MaterialLib/FractureModels/MohrCoulomb.h b/MaterialLib/FractureModels/MohrCoulomb.h
index 2e47a1ad4544c5f9e803f77074b98c1bef7f74c9..eb6cd5db4a16b52f24c41aa47eb19115a7736b87 100644
--- a/MaterialLib/FractureModels/MohrCoulomb.h
+++ b/MaterialLib/FractureModels/MohrCoulomb.h
@@ -12,7 +12,7 @@
 #include <Eigen/Eigen>
 #include <utility>
 
-#include "ProcessLib/Parameter/Parameter.h"
+#include "ParameterLib/Parameter.h"
 
 #include "FractureModelBase.h"
 
@@ -28,8 +28,8 @@ public:
     /// Variables specific to the material model
     struct MaterialProperties
     {
-        using P = ProcessLib::Parameter<double>;
-        using X = ProcessLib::SpatialPosition;
+        using P = ParameterLib::Parameter<double>;
+        using X = ParameterLib::SpatialPosition;
 
         MaterialProperties(
                 P const& normal_stiffness_, P const& shear_stiffness_,
@@ -98,7 +98,7 @@ public:
      */
     void computeConstitutiveRelation(
         double const t,
-        ProcessLib::SpatialPosition const& x,
+        ParameterLib::SpatialPosition const& x,
         double const aperture0,
         Eigen::Ref<Eigen::VectorXd const>
             sigma0,
diff --git a/MaterialLib/PorousMedium/CreatePorousMediaProperties.cpp b/MaterialLib/PorousMedium/CreatePorousMediaProperties.cpp
index 27651ac36925715d1d97326ef93bbd9bb6c92eb4..2697d2cc9f8516d9854d40500a6eb708292fdc94 100644
--- a/MaterialLib/PorousMedium/CreatePorousMediaProperties.cpp
+++ b/MaterialLib/PorousMedium/CreatePorousMediaProperties.cpp
@@ -24,7 +24,7 @@ namespace PorousMedium
 {
 PorousMediaProperties createPorousMediaProperties(
     MeshLib::Mesh& mesh, BaseLib::ConfigTree const& configs,
-    std::vector<std::unique_ptr<ProcessLib::ParameterBase>> const& parameters)
+    std::vector<std::unique_ptr<ParameterLib::ParameterBase>> const& parameters)
 {
     DBUG("Create PorousMediaProperties.");
 
diff --git a/MaterialLib/PorousMedium/CreatePorousMediaProperties.h b/MaterialLib/PorousMedium/CreatePorousMediaProperties.h
index c91cf122a3ec6f3fa065a104333e785000d2ded7..c8181beab4b30470aa9ad59ae0ba7273f4bf9acb 100644
--- a/MaterialLib/PorousMedium/CreatePorousMediaProperties.h
+++ b/MaterialLib/PorousMedium/CreatePorousMediaProperties.h
@@ -11,9 +11,9 @@
 
 #pragma once
 
-#include "PorousMediaProperties.h"
 #include "BaseLib/ConfigTree.h"
-#include "ProcessLib/Parameter/Parameter.h"
+#include "ParameterLib/Parameter.h"
+#include "PorousMediaProperties.h"
 
 namespace MeshLib
 {
@@ -26,6 +26,7 @@ namespace PorousMedium
 {
 PorousMediaProperties createPorousMediaProperties(
     MeshLib::Mesh& mesh, BaseLib::ConfigTree const& porous_media_config,
-    std::vector<std::unique_ptr<ProcessLib::ParameterBase>> const& parameters);
+    std::vector<std::unique_ptr<ParameterLib::ParameterBase>> const&
+        parameters);
 }
 }
diff --git a/MaterialLib/PorousMedium/Permeability/Permeability.h b/MaterialLib/PorousMedium/Permeability/Permeability.h
index 4716f0135d2ef1c3c41b79283064a5ffa8937c6b..fa00cd304c1fdb51106226d08c26d3191573ffe1 100644
--- a/MaterialLib/PorousMedium/Permeability/Permeability.h
+++ b/MaterialLib/PorousMedium/Permeability/Permeability.h
@@ -14,7 +14,7 @@
 #include <Eigen/Dense>
 
 #include "BaseLib/Error.h"
-#include "ProcessLib/Parameter/Parameter.h"
+#include "ParameterLib/Parameter.h"
 
 namespace MaterialLib
 {
@@ -27,7 +27,7 @@ class Permeability
 {
 public:
     explicit Permeability(
-        ProcessLib::Parameter<double> const& permeability_parameter,
+        ParameterLib::Parameter<double> const& permeability_parameter,
         int const dimension)
         : _permeability_parameter(permeability_parameter), _dimension(dimension)
     {
@@ -52,11 +52,10 @@ public:
      *  @param variable    A variable with any double type value.
      *  @param temperature Temperature with any double type value.
      */
-    Eigen::MatrixXd const& getValue(
-        const double t,
-        ProcessLib::SpatialPosition const& pos,
-        const double variable,
-        const double temperature) const
+    Eigen::MatrixXd const& getValue(const double t,
+                                    ParameterLib::SpatialPosition const& pos,
+                                    const double variable,
+                                    const double temperature) const
     {
         (void)variable;
         (void)temperature;
@@ -72,7 +71,7 @@ public:
     }
 
 private:
-    ProcessLib::Parameter<double> const& _permeability_parameter;
+    ParameterLib::Parameter<double> const& _permeability_parameter;
     int const _dimension;
     mutable Eigen::MatrixXd _intrinsic_permeability_tensor;
 };
diff --git a/MaterialLib/PorousMedium/Permeability/createPermeabilityModel.cpp b/MaterialLib/PorousMedium/Permeability/createPermeabilityModel.cpp
index a8a510efa8bd6cb533357bfb899d66b822a3d1f4..c2f541d4e51584d7e9788a814e4b318ae687bd2e 100644
--- a/MaterialLib/PorousMedium/Permeability/createPermeabilityModel.cpp
+++ b/MaterialLib/PorousMedium/Permeability/createPermeabilityModel.cpp
@@ -18,9 +18,9 @@
 
 #include "BaseLib/Error.h"
 #include "MathLib/LinAlg/Eigen/EigenMapTools.h"
-#include "ProcessLib/Parameter/ConstantParameter.h"
-#include "ProcessLib/Parameter/SpatialPosition.h"
-#include "ProcessLib/Utils/ProcessUtils.h"
+#include "ParameterLib/ConstantParameter.h"
+#include "ParameterLib/SpatialPosition.h"
+#include "ParameterLib/Utils.h"
 
 namespace MaterialLib
 {
@@ -28,14 +28,15 @@ namespace PorousMedium
 {
 std::unique_ptr<Permeability> createPermeabilityModel(
     BaseLib::ConfigTree const& config,
-    std::vector<std::unique_ptr<ProcessLib::ParameterBase>> const& parameters)
+    std::vector<std::unique_ptr<ParameterLib::ParameterBase>> const& parameters)
 {
     //! \ogs_file_param{material__porous_medium__permeability__type}
     auto const type = config.getConfigParameter<std::string>("type");
 
     if (type == "Constant")
     {
-        auto const& permeability_parameter = ProcessLib::findParameter<double>(
+        auto const& permeability_parameter = ParameterLib::findParameter<
+            double>(
             config,
             //! \ogs_file_param_special{material__porous_medium__permeability__permeability_tensor_entries}
             "permeability_tensor_entries", parameters, 0);
diff --git a/MaterialLib/PorousMedium/Permeability/createPermeabilityModel.h b/MaterialLib/PorousMedium/Permeability/createPermeabilityModel.h
index 0237ebea93b4228b2a118477c10f6f7e7c0a6510..727029b051b4e8efb26a73a0d1f4977c9cb774b2 100644
--- a/MaterialLib/PorousMedium/Permeability/createPermeabilityModel.h
+++ b/MaterialLib/PorousMedium/Permeability/createPermeabilityModel.h
@@ -33,7 +33,8 @@ namespace PorousMedium
  */
 std::unique_ptr<Permeability> createPermeabilityModel(
     BaseLib::ConfigTree const& config,
-    std::vector<std::unique_ptr<ProcessLib::ParameterBase>> const& parameters);
+    std::vector<std::unique_ptr<ParameterLib::ParameterBase>> const&
+        parameters);
 
 }  // namespace PorousMedium
 }  // namespace MaterialLib
diff --git a/MaterialLib/PorousMedium/Porosity/Porosity.h b/MaterialLib/PorousMedium/Porosity/Porosity.h
index a4cca87dc1f838f09246c30ad62b0083e93ed268..e836f3b803194e332307b42a4d8b08db1c7788d1 100644
--- a/MaterialLib/PorousMedium/Porosity/Porosity.h
+++ b/MaterialLib/PorousMedium/Porosity/Porosity.h
@@ -14,7 +14,7 @@
 
 #include <string>
 
-#include "ProcessLib/Parameter/Parameter.h"
+#include "ParameterLib/Parameter.h"
 
 namespace MaterialLib
 {
@@ -23,8 +23,7 @@ namespace PorousMedium
 class Porosity
 {
 public:
-    explicit Porosity(
-        ProcessLib::Parameter<double> const& parameter)
+    explicit Porosity(ParameterLib::Parameter<double> const& parameter)
         : _parameter(parameter)
     {
     }
@@ -38,7 +37,7 @@ public:
      *  @param temperature Temperature with any double type value.
      */
     virtual double getValue(const double t,
-                            ProcessLib::SpatialPosition const& pos,
+                            ParameterLib::SpatialPosition const& pos,
                             const double variable,
                             const double temperature) const
     {
@@ -48,7 +47,7 @@ public:
     }
 
 private:
-    ProcessLib::Parameter<double> const& _parameter;
+    ParameterLib::Parameter<double> const& _parameter;
 };
 
 }  // namespace PorousMedium
diff --git a/MaterialLib/PorousMedium/Porosity/createPorosityModel.cpp b/MaterialLib/PorousMedium/Porosity/createPorosityModel.cpp
index de4cd5b11e81a627d87827746b0f203938ebe25a..97817932bbe83b2756e5c0fa83e70bbbaad3eeff 100644
--- a/MaterialLib/PorousMedium/Porosity/createPorosityModel.cpp
+++ b/MaterialLib/PorousMedium/Porosity/createPorosityModel.cpp
@@ -12,10 +12,9 @@
 
 #include "createPorosityModel.h"
 
-#include "BaseLib/Error.h"
 #include "BaseLib/ConfigTree.h"
-
-#include "ProcessLib/Utils/ProcessUtils.h"
+#include "BaseLib/Error.h"
+#include "ParameterLib/Utils.h"
 
 #include "Porosity.h"
 
@@ -23,15 +22,16 @@ namespace MaterialLib
 {
 namespace PorousMedium
 {
-std::unique_ptr<Porosity> createPorosityModel(BaseLib::ConfigTree const& config,
-    std::vector<std::unique_ptr<ProcessLib::ParameterBase>> const& parameters)
+std::unique_ptr<Porosity> createPorosityModel(
+    BaseLib::ConfigTree const& config,
+    std::vector<std::unique_ptr<ParameterLib::ParameterBase>> const& parameters)
 {
     //! \ogs_file_param{material__porous_medium__porosity__type}
     auto const type = config.getConfigParameter<std::string>("type");
 
     if (type == "Constant")
     {
-        auto const& constant_porosity = ProcessLib::findParameter<double>(
+        auto const& constant_porosity = ParameterLib::findParameter<double>(
             config,
             //! \ogs_file_param_special{material__porous_medium__porosity__porosity_parameter}
             "porosity_parameter", parameters, 1);
diff --git a/MaterialLib/PorousMedium/Porosity/createPorosityModel.h b/MaterialLib/PorousMedium/Porosity/createPorosityModel.h
index bdfb5602239a601481e20214379e2a8c70e3c9a3..fc0bfbbfe0b5dac8c1d4bcb50ab3bfa0de164375 100644
--- a/MaterialLib/PorousMedium/Porosity/createPorosityModel.h
+++ b/MaterialLib/PorousMedium/Porosity/createPorosityModel.h
@@ -13,7 +13,7 @@
 #pragma once
 
 #include <memory>
-#include "ProcessLib/Parameter/Parameter.h"
+#include "ParameterLib/Parameter.h"
 
 namespace BaseLib
 {
@@ -33,7 +33,8 @@ class Porosity;
  */
 std::unique_ptr<Porosity> createPorosityModel(
     BaseLib::ConfigTree const& config,
-    std::vector<std::unique_ptr<ProcessLib::ParameterBase>> const& parameters);
+    std::vector<std::unique_ptr<ParameterLib::ParameterBase>> const&
+        parameters);
 
 }  // namespace PorousMedium
 }  // namespace MaterialLib
diff --git a/MaterialLib/PorousMedium/PorousMediaProperties.cpp b/MaterialLib/PorousMedium/PorousMediaProperties.cpp
index 6c05d86e96b544a94849b2736c4eae43d4ed7217..e264f86799020d98c99068b4ccc532e80c32e503 100644
--- a/MaterialLib/PorousMedium/PorousMediaProperties.cpp
+++ b/MaterialLib/PorousMedium/PorousMediaProperties.cpp
@@ -16,27 +16,27 @@ namespace MaterialLib
 namespace PorousMedium
 {
 int PorousMediaProperties::getMaterialID(
-    ProcessLib::SpatialPosition const& pos) const
+    ParameterLib::SpatialPosition const& pos) const
 {
     return _material_ids ? (*_material_ids)[pos.getElementID().get()] : 0;
 }
 
 MaterialLib::PorousMedium::Porosity const& PorousMediaProperties::getPorosity(
-    double /*t*/, ProcessLib::SpatialPosition const& pos) const
+    double /*t*/, ParameterLib::SpatialPosition const& pos) const
 {
     return *_porosity_models[getMaterialID(pos)];
 }
 
 MaterialLib::PorousMedium::Permeability const&
 PorousMediaProperties::getIntrinsicPermeability(
-    double /*t*/, ProcessLib::SpatialPosition const& pos) const
+    double /*t*/, ParameterLib::SpatialPosition const& pos) const
 {
     return *_intrinsic_permeability_models[getMaterialID(pos)];
 }
 
 MaterialLib::PorousMedium::Storage const&
 PorousMediaProperties::getSpecificStorage(
-    double /*t*/, ProcessLib::SpatialPosition const& pos) const
+    double /*t*/, ParameterLib::SpatialPosition const& pos) const
 {
     return *_specific_storage_models[getMaterialID(pos)];
 }
diff --git a/MaterialLib/PorousMedium/PorousMediaProperties.h b/MaterialLib/PorousMedium/PorousMediaProperties.h
index cc5965c6e8b8fff6c0debf4576e237cb8d6a43f2..dfd3c8c75ba4a76bf7ecd772af8b74adb023db06 100644
--- a/MaterialLib/PorousMedium/PorousMediaProperties.h
+++ b/MaterialLib/PorousMedium/PorousMediaProperties.h
@@ -19,7 +19,7 @@
 #include "Porosity/Porosity.h"
 #include "Storage/Storage.h"
 
-#include "ProcessLib/Parameter/SpatialPosition.h"
+#include "ParameterLib/SpatialPosition.h"
 
 namespace MaterialLib
 {
@@ -48,16 +48,17 @@ public:
     PorousMediaProperties(PorousMediaProperties&& other) = default;
 
     MaterialLib::PorousMedium::Porosity const& getPorosity(
-        double t, ProcessLib::SpatialPosition const& pos) const;
+        double t, ParameterLib::SpatialPosition const& pos) const;
 
     MaterialLib::PorousMedium::Permeability const& getIntrinsicPermeability(
-        double t, ProcessLib::SpatialPosition const& pos) const;
+        double t, ParameterLib::SpatialPosition const& pos) const;
 
     MaterialLib::PorousMedium::Storage const& getSpecificStorage(
-        double t, ProcessLib::SpatialPosition const& pos) const;
+        double t, ParameterLib::SpatialPosition const& pos) const;
 
 private:
-    int getMaterialID(ProcessLib::SpatialPosition const& pos) const;
+    int getMaterialID(ParameterLib::SpatialPosition const& pos) const;
+
 private:
     std::vector<std::unique_ptr<MaterialLib::PorousMedium::Porosity>>
         _porosity_models;
diff --git a/MaterialLib/SolidModels/CreateConstitutiveRelation.cpp b/MaterialLib/SolidModels/CreateConstitutiveRelation.cpp
index 5eed2b314b2418ee3642c847feb25f72e2892333..b2a5edf2d7483719c802987dd14cba1c535c66fd 100644
--- a/MaterialLib/SolidModels/CreateConstitutiveRelation.cpp
+++ b/MaterialLib/SolidModels/CreateConstitutiveRelation.cpp
@@ -22,7 +22,7 @@
 #include "BaseLib/ConfigTree.h"
 #include "BaseLib/Error.h"
 
-#include "ProcessLib/Parameter/Parameter.h"
+#include "ParameterLib/Parameter.h"
 
 namespace MaterialLib
 {
@@ -31,7 +31,7 @@ namespace Solids
 template <int DisplacementDim>
 std::unique_ptr<MaterialLib::Solids::MechanicsBase<DisplacementDim>>
 createConstitutiveRelation(
-    std::vector<std::unique_ptr<ProcessLib::ParameterBase>> const& parameters,
+    std::vector<std::unique_ptr<ParameterLib::ParameterBase>> const& parameters,
     BaseLib::ConfigTree const& config)
 {
     auto const type =
@@ -72,7 +72,7 @@ template <int DisplacementDim>
 std::map<int,
          std::unique_ptr<MaterialLib::Solids::MechanicsBase<DisplacementDim>>>
 createConstitutiveRelations(
-    std::vector<std::unique_ptr<ProcessLib::ParameterBase>> const& parameters,
+    std::vector<std::unique_ptr<ParameterLib::ParameterBase>> const& parameters,
     BaseLib::ConfigTree const& config)
 {
     auto const constitutive_relation_configs =
@@ -112,12 +112,12 @@ createConstitutiveRelations(
 
 template std::map<int, std::unique_ptr<MaterialLib::Solids::MechanicsBase<2>>>
 createConstitutiveRelations<2>(
-    std::vector<std::unique_ptr<ProcessLib::ParameterBase>> const& parameters,
+    std::vector<std::unique_ptr<ParameterLib::ParameterBase>> const& parameters,
     BaseLib::ConfigTree const& config);
 
 template std::map<int, std::unique_ptr<MaterialLib::Solids::MechanicsBase<3>>>
 createConstitutiveRelations<3>(
-    std::vector<std::unique_ptr<ProcessLib::ParameterBase>> const& parameters,
+    std::vector<std::unique_ptr<ParameterLib::ParameterBase>> const& parameters,
     BaseLib::ConfigTree const& config);
 }  // namespace Solids
 }  // namespace MaterialLib
diff --git a/MaterialLib/SolidModels/CreateConstitutiveRelation.h b/MaterialLib/SolidModels/CreateConstitutiveRelation.h
index 9136a944b84dc804ba6b8421a273168db8ef436e..9c1d0bde62f8bf5069b343b3b5438ecebbc9ff87 100644
--- a/MaterialLib/SolidModels/CreateConstitutiveRelation.h
+++ b/MaterialLib/SolidModels/CreateConstitutiveRelation.h
@@ -20,7 +20,7 @@ namespace BaseLib
 class ConfigTree;
 }
 
-namespace ProcessLib
+namespace ParameterLib
 {
 struct ParameterBase;
 }
@@ -36,19 +36,19 @@ template <int DisplacementDim>
 std::map<int,
          std::unique_ptr<MaterialLib::Solids::MechanicsBase<DisplacementDim>>>
 createConstitutiveRelations(
-    std::vector<std::unique_ptr<ProcessLib::ParameterBase>> const& parameters,
+    std::vector<std::unique_ptr<ParameterLib::ParameterBase>> const& parameters,
     BaseLib::ConfigTree const& config);
 
 extern template std::map<int,
                          std::unique_ptr<MaterialLib::Solids::MechanicsBase<2>>>
 createConstitutiveRelations<2>(
-    std::vector<std::unique_ptr<ProcessLib::ParameterBase>> const& parameters,
+    std::vector<std::unique_ptr<ParameterLib::ParameterBase>> const& parameters,
     BaseLib::ConfigTree const& config);
 
 extern template std::map<int,
                          std::unique_ptr<MaterialLib::Solids::MechanicsBase<3>>>
 createConstitutiveRelations<3>(
-    std::vector<std::unique_ptr<ProcessLib::ParameterBase>> const& parameters,
+    std::vector<std::unique_ptr<ParameterLib::ParameterBase>> const& parameters,
     BaseLib::ConfigTree const& config);
 }  // namespace Solids
 }  // namespace MaterialLib
diff --git a/MaterialLib/SolidModels/CreateCreepBGRa.cpp b/MaterialLib/SolidModels/CreateCreepBGRa.cpp
index b8d08921856f614c5b261a58685f718d6ec8555c..9889c110bae54c9bde450abc6bd7baa5a4ebbd76 100644
--- a/MaterialLib/SolidModels/CreateCreepBGRa.cpp
+++ b/MaterialLib/SolidModels/CreateCreepBGRa.cpp
@@ -21,8 +21,8 @@
 #include "BaseLib/ConfigTree.h"
 #include "BaseLib/Error.h"
 
-#include "ProcessLib/Parameter/Parameter.h"
-#include "ProcessLib/Utils/ProcessUtils.h"  // required for findParameter
+#include "ParameterLib/Parameter.h"
+#include "ParameterLib/Utils.h"
 
 namespace MaterialLib
 {
@@ -33,7 +33,7 @@ namespace Creep
 template <int DisplacementDim>
 std::unique_ptr<MaterialLib::Solids::MechanicsBase<DisplacementDim>>
 createCreepBGRa(
-    std::vector<std::unique_ptr<ProcessLib::ParameterBase>> const& parameters,
+    std::vector<std::unique_ptr<ParameterLib::ParameterBase>> const& parameters,
     BaseLib::ConfigTree const& config)
 {
     //! \ogs_file_param{material__solid__constitutive_relation__type}
@@ -46,19 +46,19 @@ createCreepBGRa(
         MaterialLib::Solids::createLinearElasticIsotropic<DisplacementDim>(
             parameters, config, skip_type_checking);
 
-    auto& A = ProcessLib::findParameter<double>(
+    auto& A = ParameterLib::findParameter<double>(
         //! \ogs_file_param_special{material__solid__constitutive_relation__CreepBGRa__a}
         config, "a", parameters, 1);
 
-    auto& n = ProcessLib::findParameter<double>(
+    auto& n = ParameterLib::findParameter<double>(
         //! \ogs_file_param_special{material__solid__constitutive_relation__CreepBGRa__n}
         config, "n", parameters, 1);
 
-    auto& sigma0 = ProcessLib::findParameter<double>(
+    auto& sigma0 = ParameterLib::findParameter<double>(
         //! \ogs_file_param_special{material__solid__constitutive_relation__CreepBGRa__sigma0}
         config, "sigma0", parameters, 1);
 
-    auto& Q = ProcessLib::findParameter<double>(
+    auto& Q = ParameterLib::findParameter<double>(
         //! \ogs_file_param_special{material__solid__constitutive_relation__CreepBGRa__q}
         config, "q", parameters, 1);
 
@@ -73,12 +73,12 @@ createCreepBGRa(
 
 template std::unique_ptr<MaterialLib::Solids::MechanicsBase<2>>
 createCreepBGRa<2>(
-    std::vector<std::unique_ptr<ProcessLib::ParameterBase>> const& parameters,
+    std::vector<std::unique_ptr<ParameterLib::ParameterBase>> const& parameters,
     BaseLib::ConfigTree const& config);
 
 template std::unique_ptr<MaterialLib::Solids::MechanicsBase<3>>
 createCreepBGRa<3>(
-    std::vector<std::unique_ptr<ProcessLib::ParameterBase>> const& parameters,
+    std::vector<std::unique_ptr<ParameterLib::ParameterBase>> const& parameters,
     BaseLib::ConfigTree const& config);
 }  // namespace Creep
 }  // namespace Solids
diff --git a/MaterialLib/SolidModels/CreateCreepBGRa.h b/MaterialLib/SolidModels/CreateCreepBGRa.h
index 23b4c770c82ab14ec704edb42babcc81875dddc1..aa7f77d00a114edec25a1e5a896f06df1c707157 100644
--- a/MaterialLib/SolidModels/CreateCreepBGRa.h
+++ b/MaterialLib/SolidModels/CreateCreepBGRa.h
@@ -19,7 +19,7 @@ namespace BaseLib
 class ConfigTree;
 }
 
-namespace ProcessLib
+namespace ParameterLib
 {
 struct ParameterBase;
 }
@@ -36,17 +36,17 @@ namespace Creep
 template <int DisplacementDim>
 std::unique_ptr<MaterialLib::Solids::MechanicsBase<DisplacementDim>>
 createCreepBGRa(
-    std::vector<std::unique_ptr<ProcessLib::ParameterBase>> const& parameters,
+    std::vector<std::unique_ptr<ParameterLib::ParameterBase>> const& parameters,
     BaseLib::ConfigTree const& config);
 
 extern template std::unique_ptr<MaterialLib::Solids::MechanicsBase<2>>
 createCreepBGRa<2>(
-    std::vector<std::unique_ptr<ProcessLib::ParameterBase>> const& parameters,
+    std::vector<std::unique_ptr<ParameterLib::ParameterBase>> const& parameters,
     BaseLib::ConfigTree const& config);
 
 extern template std::unique_ptr<MaterialLib::Solids::MechanicsBase<3>>
 createCreepBGRa<3>(
-    std::vector<std::unique_ptr<ProcessLib::ParameterBase>> const& parameters,
+    std::vector<std::unique_ptr<ParameterLib::ParameterBase>> const& parameters,
     BaseLib::ConfigTree const& config);
 }  // namespace Creep
 }  // namespace Solids
diff --git a/MaterialLib/SolidModels/CreateEhlers.h b/MaterialLib/SolidModels/CreateEhlers.h
index 0d4884449d634821027463bd21b3035814b4cb76..7b0002feedbc387ec8ca234d93036f0fe8f5ad1a 100644
--- a/MaterialLib/SolidModels/CreateEhlers.h
+++ b/MaterialLib/SolidModels/CreateEhlers.h
@@ -10,7 +10,8 @@
 #pragma once
 
 #include "CreateNewtonRaphsonSolverParameters.h"
-#include "ProcessLib/Utils/ProcessUtils.h"  // required for findParameter
+#include "ParameterLib/Utils.h"
+
 #include "Ehlers.h"
 
 namespace MaterialLib
@@ -20,23 +21,24 @@ namespace Solids
 namespace Ehlers
 {
 inline std::unique_ptr<DamagePropertiesParameters> createDamageProperties(
-    std::vector<std::unique_ptr<ProcessLib::ParameterBase>> const& parameters,
+    std::vector<std::unique_ptr<ParameterLib::ParameterBase>> const& parameters,
     BaseLib::ConfigTree const& config)
 {
     //! \ogs_file_param_special{material__solid__constitutive_relation__Ehlers__damage_properties__alpha_d}
     auto& alpha_d =
-        ProcessLib::findParameter<double>(config, "alpha_d", parameters, 1);
+        ParameterLib::findParameter<double>(config, "alpha_d", parameters, 1);
 
     DBUG("Use '%s' as alpha_d.", alpha_d.name.c_str());
 
     //! \ogs_file_param_special{material__solid__constitutive_relation__Ehlers__damage_properties__beta_d}
     auto& beta_d =
-        ProcessLib::findParameter<double>(config, "beta_d", parameters, 1);
+        ParameterLib::findParameter<double>(config, "beta_d", parameters, 1);
 
     DBUG("Use '%s' as beta_d.", beta_d.name.c_str());
 
     //! \ogs_file_param_special{material__solid__constitutive_relation__Ehlers__damage_properties__h_d}
-    auto& h_d = ProcessLib::findParameter<double>(config, "h_d", parameters, 1);
+    auto& h_d =
+        ParameterLib::findParameter<double>(config, "h_d", parameters, 1);
 
     DBUG("Use '%s' as h_d.", h_d.name.c_str());
 
@@ -46,7 +48,7 @@ inline std::unique_ptr<DamagePropertiesParameters> createDamageProperties(
 
 template <int DisplacementDim>
 std::unique_ptr<SolidEhlers<DisplacementDim>> createEhlers(
-    std::vector<std::unique_ptr<ProcessLib::ParameterBase>> const& parameters,
+    std::vector<std::unique_ptr<ParameterLib::ParameterBase>> const& parameters,
     BaseLib::ConfigTree const& config)
 {
     //! \ogs_file_param{material__solid__constitutive_relation__type}
@@ -54,37 +56,37 @@ std::unique_ptr<SolidEhlers<DisplacementDim>> createEhlers(
     DBUG("Create Ehlers material");
 
     //! \ogs_file_param_special{material__solid__constitutive_relation__Ehlers__shear_modulus}
-    auto& shear_modulus = ProcessLib::findParameter<double>(
+    auto& shear_modulus = ParameterLib::findParameter<double>(
         config, "shear_modulus", parameters, 1);
 
     DBUG("Use '%s' as shear modulus parameter.", shear_modulus.name.c_str());
 
     //! \ogs_file_param_special{material__solid__constitutive_relation__Ehlers__bulk_modulus}
-    auto& bulk_modulus = ProcessLib::findParameter<double>(
+    auto& bulk_modulus = ParameterLib::findParameter<double>(
         config, "bulk_modulus", parameters, 1);
 
     DBUG("Use '%s' as bulk modulus parameter.", bulk_modulus.name.c_str());
 
     //! \ogs_file_param_special{material__solid__constitutive_relation__Ehlers__kappa}
     auto& kappa =
-        ProcessLib::findParameter<double>(config, "kappa", parameters, 1);
+        ParameterLib::findParameter<double>(config, "kappa", parameters, 1);
 
     DBUG("Use '%s' as kappa.", kappa.name.c_str());
 
     //! \ogs_file_param_special{material__solid__constitutive_relation__Ehlers__beta}
     auto& beta =
-        ProcessLib::findParameter<double>(config, "beta", parameters, 1);
+        ParameterLib::findParameter<double>(config, "beta", parameters, 1);
 
     DBUG("Use '%s' as beta.", beta.name.c_str());
 
     //! \ogs_file_param_special{material__solid__constitutive_relation__Ehlers__gamma}
     auto& gamma =
-        ProcessLib::findParameter<double>(config, "gamma", parameters, 1);
+        ParameterLib::findParameter<double>(config, "gamma", parameters, 1);
 
     DBUG("Use '%s' as gamma.", gamma.name.c_str());
 
     //! \ogs_file_param_special{material__solid__constitutive_relation__Ehlers__hardening_modulus}
-    auto& hardening_modulus = ProcessLib::findParameter<double>(
+    auto& hardening_modulus = ParameterLib::findParameter<double>(
         config, "hardening_modulus", parameters, 1);
 
     DBUG("Use '%s' as hardening modulus parameter.",
@@ -92,59 +94,60 @@ std::unique_ptr<SolidEhlers<DisplacementDim>> createEhlers(
 
     //! \ogs_file_param_special{material__solid__constitutive_relation__Ehlers__alpha}
     auto& alpha =
-        ProcessLib::findParameter<double>(config, "alpha", parameters, 1);
+        ParameterLib::findParameter<double>(config, "alpha", parameters, 1);
 
     DBUG("Use '%s' as alpha.", alpha.name.c_str());
 
     //! \ogs_file_param_special{material__solid__constitutive_relation__Ehlers__delta}
     auto& delta =
-        ProcessLib::findParameter<double>(config, "delta", parameters, 1);
+        ParameterLib::findParameter<double>(config, "delta", parameters, 1);
 
     DBUG("Use '%s' as delta.", delta.name.c_str());
 
     //! \ogs_file_param_special{material__solid__constitutive_relation__Ehlers__eps}
-    auto& eps = ProcessLib::findParameter<double>(config, "eps", parameters, 1);
+    auto& eps =
+        ParameterLib::findParameter<double>(config, "eps", parameters, 1);
 
     DBUG("Use '%s' as eps.", eps.name.c_str());
 
     //! \ogs_file_param_special{material__solid__constitutive_relation__Ehlers__m}
-    auto& m = ProcessLib::findParameter<double>(config, "m", parameters, 1);
+    auto& m = ParameterLib::findParameter<double>(config, "m", parameters, 1);
 
     DBUG("Use '%s' as m.", m.name.c_str());
 
     //! \ogs_file_param_special{material__solid__constitutive_relation__Ehlers__alphap}
     auto& alphap =
-        ProcessLib::findParameter<double>(config, "alphap", parameters, 1);
+        ParameterLib::findParameter<double>(config, "alphap", parameters, 1);
 
     DBUG("Use '%s' as alphap.", alphap.name.c_str());
 
     //! \ogs_file_param_special{material__solid__constitutive_relation__Ehlers__deltap}
     auto& deltap =
-        ProcessLib::findParameter<double>(config, "deltap", parameters, 1);
+        ParameterLib::findParameter<double>(config, "deltap", parameters, 1);
 
     DBUG("Use '%s' as deltap.", deltap.name.c_str());
 
     //! \ogs_file_param_special{material__solid__constitutive_relation__Ehlers__epsp}
     auto& epsp =
-        ProcessLib::findParameter<double>(config, "epsp", parameters, 1);
+        ParameterLib::findParameter<double>(config, "epsp", parameters, 1);
 
     DBUG("Use '%s' as epsp.", epsp.name.c_str());
 
     //! \ogs_file_param_special{material__solid__constitutive_relation__Ehlers__mp}
     auto& paremeter_mp =
-        ProcessLib::findParameter<double>(config, "mp", parameters, 1);
+        ParameterLib::findParameter<double>(config, "mp", parameters, 1);
 
     DBUG("Use '%s' as mp.", paremeter_mp.name.c_str());
 
     //! \ogs_file_param_special{material__solid__constitutive_relation__Ehlers__betap}
     auto& betap =
-        ProcessLib::findParameter<double>(config, "betap", parameters, 1);
+        ParameterLib::findParameter<double>(config, "betap", parameters, 1);
 
     DBUG("Use '%s' as betap.", betap.name.c_str());
 
     //! \ogs_file_param_special{material__solid__constitutive_relation__Ehlers__gammap}
     auto& gammap =
-        ProcessLib::findParameter<double>(config, "gammap", parameters, 1);
+        ParameterLib::findParameter<double>(config, "gammap", parameters, 1);
 
     DBUG("Use '%s' as gammap.", gammap.name.c_str());
 
diff --git a/MaterialLib/SolidModels/CreateLinearElasticIsotropic.h b/MaterialLib/SolidModels/CreateLinearElasticIsotropic.h
index cdf7826cdeb80ba39845ad1ea18ef8b56d3adc3c..ead3d10296cf2cef14e893f2c81644dcd634ad0a 100644
--- a/MaterialLib/SolidModels/CreateLinearElasticIsotropic.h
+++ b/MaterialLib/SolidModels/CreateLinearElasticIsotropic.h
@@ -9,7 +9,8 @@
 
 #pragma once
 
-#include "ProcessLib/Utils/ProcessUtils.h"  // required for findParameter
+#include "ParameterLib/Utils.h"
+
 #include "LinearElasticIsotropic.h"
 
 namespace MaterialLib
@@ -19,7 +20,7 @@ namespace Solids
 template <int DisplacementDim>
 std::unique_ptr<LinearElasticIsotropic<DisplacementDim>>
 createLinearElasticIsotropic(
-    std::vector<std::unique_ptr<ProcessLib::ParameterBase>> const& parameters,
+    std::vector<std::unique_ptr<ParameterLib::ParameterBase>> const& parameters,
     BaseLib::ConfigTree const& config, const bool skip_type_checking)
 {
     if (!skip_type_checking)
@@ -30,14 +31,14 @@ createLinearElasticIsotropic(
     }
 
     // Youngs modulus
-    auto& youngs_modulus = ProcessLib::findParameter<double>(
+    auto& youngs_modulus = ParameterLib::findParameter<double>(
         //! \ogs_file_param_special{material__solid__constitutive_relation__LinearElasticIsotropic__youngs_modulus}
         config, "youngs_modulus", parameters, 1);
 
     DBUG("Use '%s' as youngs_modulus parameter.", youngs_modulus.name.c_str());
 
     // Poissons ratio
-    auto& poissons_ratio = ProcessLib::findParameter<double>(
+    auto& poissons_ratio = ParameterLib::findParameter<double>(
         //! \ogs_file_param_special{material__solid__constitutive_relation__LinearElasticIsotropic__poissons_ratio}
         config, "poissons_ratio", parameters, 1);
 
diff --git a/MaterialLib/SolidModels/CreateLubby2.h b/MaterialLib/SolidModels/CreateLubby2.h
index 7b2427a228c3c898208fa4934bd356b637e3db40..8ea24ea44f2c8f1a6f0170bd3da1c5d2dc02cf6d 100644
--- a/MaterialLib/SolidModels/CreateLubby2.h
+++ b/MaterialLib/SolidModels/CreateLubby2.h
@@ -10,7 +10,7 @@
 #pragma once
 
 #include "CreateNewtonRaphsonSolverParameters.h"
-#include "ProcessLib/Utils/ProcessUtils.h"  // required for findParameter
+#include "ParameterLib/Utils.h"
 
 #include "Lubby2.h"
 
@@ -22,7 +22,7 @@ namespace Lubby2
 {
 template <int DisplacementDim>
 std::unique_ptr<Lubby2<DisplacementDim>> createLubby2(
-    std::vector<std::unique_ptr<ProcessLib::ParameterBase>> const& parameters,
+    std::vector<std::unique_ptr<ParameterLib::ParameterBase>> const& parameters,
     BaseLib::ConfigTree const& config)
 {
     //! \ogs_file_param{material__solid__constitutive_relation__type}
@@ -30,7 +30,7 @@ std::unique_ptr<Lubby2<DisplacementDim>> createLubby2(
     DBUG("Create Lubby2 material");
 
     // Kelvin shear modulus.
-    auto& kelvin_shear_modulus = ProcessLib::findParameter<double>(
+    auto& kelvin_shear_modulus = ParameterLib::findParameter<double>(
         //! \ogs_file_param_special{material__solid__constitutive_relation__Lubby2__kelvin_shear_modulus}
         config, "kelvin_shear_modulus", parameters, 1);
 
@@ -38,7 +38,7 @@ std::unique_ptr<Lubby2<DisplacementDim>> createLubby2(
          kelvin_shear_modulus.name.c_str());
 
     // Kelvin viscosity.
-    auto& kelvin_viscosity = ProcessLib::findParameter<double>(
+    auto& kelvin_viscosity = ParameterLib::findParameter<double>(
         //! \ogs_file_param_special{material__solid__constitutive_relation__Lubby2__kelvin_viscosity}
         config, "kelvin_viscosity", parameters, 1);
 
@@ -46,7 +46,7 @@ std::unique_ptr<Lubby2<DisplacementDim>> createLubby2(
          kelvin_viscosity.name.c_str());
 
     // Maxwell shear modulus.
-    auto& maxwell_shear_modulus = ProcessLib::findParameter<double>(
+    auto& maxwell_shear_modulus = ParameterLib::findParameter<double>(
         //! \ogs_file_param_special{material__solid__constitutive_relation__Lubby2__maxwell_shear_modulus}
         config, "maxwell_shear_modulus", parameters, 1);
 
@@ -54,7 +54,7 @@ std::unique_ptr<Lubby2<DisplacementDim>> createLubby2(
          maxwell_shear_modulus.name.c_str());
 
     // Maxwell bulk modulus.
-    auto& maxwell_bulk_modulus = ProcessLib::findParameter<double>(
+    auto& maxwell_bulk_modulus = ParameterLib::findParameter<double>(
         //! \ogs_file_param_special{material__solid__constitutive_relation__Lubby2__maxwell_bulk_modulus}
         config, "maxwell_bulk_modulus", parameters, 1);
 
@@ -62,7 +62,7 @@ std::unique_ptr<Lubby2<DisplacementDim>> createLubby2(
          maxwell_bulk_modulus.name.c_str());
 
     // Maxwell viscosity.
-    auto& maxwell_viscosity = ProcessLib::findParameter<double>(
+    auto& maxwell_viscosity = ParameterLib::findParameter<double>(
         //! \ogs_file_param_special{material__solid__constitutive_relation__Lubby2__maxwell_viscosity}
         config, "maxwell_viscosity", parameters, 1);
 
@@ -70,7 +70,7 @@ std::unique_ptr<Lubby2<DisplacementDim>> createLubby2(
          maxwell_viscosity.name.c_str());
 
     // Dependency parameter for mK.
-    auto& dependency_parameter_mK = ProcessLib::findParameter<double>(
+    auto& dependency_parameter_mK = ParameterLib::findParameter<double>(
         //! \ogs_file_param_special{material__solid__constitutive_relation__Lubby2__dependency_parameter_mk}
         config, "dependency_parameter_mk", parameters, 1);
 
@@ -78,7 +78,7 @@ std::unique_ptr<Lubby2<DisplacementDim>> createLubby2(
          dependency_parameter_mK.name.c_str());
 
     // Dependency parameter for mvK.
-    auto& dependency_parameter_mvK = ProcessLib::findParameter<double>(
+    auto& dependency_parameter_mvK = ParameterLib::findParameter<double>(
         //! \ogs_file_param_special{material__solid__constitutive_relation__Lubby2__dependency_parameter_mvk}
         config, "dependency_parameter_mvk", parameters, 1);
 
@@ -86,7 +86,7 @@ std::unique_ptr<Lubby2<DisplacementDim>> createLubby2(
          dependency_parameter_mvK.name.c_str());
 
     // Dependency parameter for mvM.
-    auto& dependency_parameter_mvM = ProcessLib::findParameter<double>(
+    auto& dependency_parameter_mvM = ParameterLib::findParameter<double>(
         //! \ogs_file_param_special{material__solid__constitutive_relation__Lubby2__dependency_parameter_mvm}
         config, "dependency_parameter_mvm", parameters, 1);
 
diff --git a/MaterialLib/SolidModels/CreepBGRa.cpp b/MaterialLib/SolidModels/CreepBGRa.cpp
index 0c58a8469f5277ed0d964b4ca526a83b214a192e..9671153de1ea580d94825371c536f82b13633f64 100644
--- a/MaterialLib/SolidModels/CreepBGRa.cpp
+++ b/MaterialLib/SolidModels/CreepBGRa.cpp
@@ -34,7 +34,7 @@ boost::optional<std::tuple<typename CreepBGRa<DisplacementDim>::KelvinVector,
                                DisplacementDim>::MaterialStateVariables>,
                            typename CreepBGRa<DisplacementDim>::KelvinMatrix>>
 CreepBGRa<DisplacementDim>::integrateStress(
-    double const t, ProcessLib::SpatialPosition const& x, double const dt,
+    double const t, ParameterLib::SpatialPosition const& x, double const dt,
     KelvinVector const& eps_prev, KelvinVector const& eps,
     KelvinVector const& sigma_prev,
     typename MechanicsBase<DisplacementDim>::MaterialStateVariables const&
@@ -134,7 +134,7 @@ CreepBGRa<DisplacementDim>::integrateStress(
 
 template <int DisplacementDim>
 double CreepBGRa<DisplacementDim>::getTemperatureRelatedCoefficient(
-    double const t, double const dt, ProcessLib::SpatialPosition const& x,
+    double const t, double const dt, ParameterLib::SpatialPosition const& x,
     double const T, double const deviatoric_stress_norm) const
 {
     const double A = _a(t, x)[0];
diff --git a/MaterialLib/SolidModels/CreepBGRa.h b/MaterialLib/SolidModels/CreepBGRa.h
index 31b8d9126151607d4c3d6c1ffdfe94f8a0459acd..d8c02d0f5ef0cc7647ad5b717b871d8df40db0a8 100644
--- a/MaterialLib/SolidModels/CreepBGRa.h
+++ b/MaterialLib/SolidModels/CreepBGRa.h
@@ -18,7 +18,7 @@
 #include "LinearElasticIsotropic.h"
 #include "MathLib/KelvinVector.h"
 #include "NumLib/NewtonRaphson.h"
-#include "ProcessLib/Parameter/Parameter.h"
+#include "ParameterLib/Parameter.h"
 
 namespace MaterialLib
 {
@@ -50,7 +50,7 @@ public:
     using KelvinMatrix =
         MathLib::KelvinVector::KelvinMatrixType<DisplacementDim>;
 
-    using Parameter = ProcessLib::Parameter<double>;
+    using Parameter = ParameterLib::Parameter<double>;
 
     std::unique_ptr<
         typename MechanicsBase<DisplacementDim>::MaterialStateVariables>
@@ -79,7 +79,7 @@ public:
                                    DisplacementDim>::MaterialStateVariables>,
                                KelvinMatrix>>
     integrateStress(
-        double const t, ProcessLib::SpatialPosition const& x, double const dt,
+        double const t, ParameterLib::SpatialPosition const& x, double const dt,
         KelvinVector const& eps_prev, KelvinVector const& eps,
         KelvinVector const& sigma_prev,
         typename MechanicsBase<DisplacementDim>::MaterialStateVariables const&
@@ -92,7 +92,7 @@ public:
     }
 
     double getTemperatureRelatedCoefficient(
-        double const t, double const dt, ProcessLib::SpatialPosition const& x,
+        double const t, double const dt, ParameterLib::SpatialPosition const& x,
         double const T, double const deviatoric_stress_norm) const override;
 
 private:
diff --git a/MaterialLib/SolidModels/Ehlers.cpp b/MaterialLib/SolidModels/Ehlers.cpp
index efece2a3756a84a2403c6c99087dff88f68e7d87..d9be5cbe16dfee062837cc578794b7fa12992260 100644
--- a/MaterialLib/SolidModels/Ehlers.cpp
+++ b/MaterialLib/SolidModels/Ehlers.cpp
@@ -484,7 +484,7 @@ SolidEhlers<DisplacementDim>::SolidEhlers(
 template <int DisplacementDim>
 double SolidEhlers<DisplacementDim>::computeFreeEnergyDensity(
     double const /*t*/,
-    ProcessLib::SpatialPosition const& /*x*/,
+    ParameterLib::SpatialPosition const& /*x*/,
     double const /*dt*/,
     KelvinVector const& eps,
     KelvinVector const& sigma,
@@ -508,7 +508,7 @@ boost::optional<std::tuple<typename SolidEhlers<DisplacementDim>::KelvinVector,
                                DisplacementDim>::MaterialStateVariables>,
                            typename SolidEhlers<DisplacementDim>::KelvinMatrix>>
 SolidEhlers<DisplacementDim>::integrateStress(
-    double const t, ProcessLib::SpatialPosition const& x, double const dt,
+    double const t, ParameterLib::SpatialPosition const& x, double const dt,
     KelvinVector const& eps_prev, KelvinVector const& eps,
     KelvinVector const& sigma_prev,
     typename MechanicsBase<DisplacementDim>::MaterialStateVariables const&
diff --git a/MaterialLib/SolidModels/Ehlers.h b/MaterialLib/SolidModels/Ehlers.h
index 3734d0fb2831f3c2962f06745ecdc08366c17ecd..9b892428a64aaa5bb33ed6b732a63041f4942ee8 100644
--- a/MaterialLib/SolidModels/Ehlers.h
+++ b/MaterialLib/SolidModels/Ehlers.h
@@ -25,7 +25,7 @@
 #include "BaseLib/Error.h"
 #include "MathLib/KelvinVector.h"
 #include "NumLib/NewtonRaphson.h"
-#include "ProcessLib/Parameter/Parameter.h"
+#include "ParameterLib/Parameter.h"
 
 #include "MechanicsBase.h"
 
@@ -64,7 +64,7 @@ inline TangentType makeTangentType(std::string const& s)
 /// \cite Ehlers1995.
 struct MaterialPropertiesParameters
 {
-    using P = ProcessLib::Parameter<double>;
+    using P = ParameterLib::Parameter<double>;
 
     MaterialPropertiesParameters(P const& G_, P const& K_, P const& alpha_,
                                  P const& beta_, P const& gamma_,
@@ -117,7 +117,7 @@ struct MaterialPropertiesParameters
 
 struct DamagePropertiesParameters
 {
-    using P = ProcessLib::Parameter<double>;
+    using P = ParameterLib::Parameter<double>;
     P const& alpha_d;
     P const& beta_d;
     P const& h_d;
@@ -127,7 +127,7 @@ struct DamagePropertiesParameters
 /// details.
 struct MaterialProperties final
 {
-    MaterialProperties(double const t, ProcessLib::SpatialPosition const& x,
+    MaterialProperties(double const t, ParameterLib::SpatialPosition const& x,
                        MaterialPropertiesParameters const& mp)
         : G(mp.G(t, x)[0]),
           K(mp.K(t, x)[0]),
@@ -173,7 +173,7 @@ struct MaterialProperties final
 struct DamageProperties
 {
     DamageProperties(double const t,
-                     ProcessLib::SpatialPosition const& x,
+                     ParameterLib::SpatialPosition const& x,
                      DamagePropertiesParameters const& dp)
         : alpha_d(dp.alpha_d(t, x)[0]),
           beta_d(dp.beta_d(t, x)[0]),
@@ -311,7 +311,7 @@ public:
 
     double computeFreeEnergyDensity(
         double const /*t*/,
-        ProcessLib::SpatialPosition const& /*x*/,
+        ParameterLib::SpatialPosition const& /*x*/,
         double const /*dt*/,
         KelvinVector const& eps,
         KelvinVector const& sigma,
@@ -323,7 +323,7 @@ public:
                                    DisplacementDim>::MaterialStateVariables>,
                                KelvinMatrix>>
     integrateStress(
-        double const t, ProcessLib::SpatialPosition const& x, double const dt,
+        double const t, ParameterLib::SpatialPosition const& x, double const dt,
         KelvinVector const& eps_prev, KelvinVector const& eps,
         KelvinVector const& sigma_prev,
         typename MechanicsBase<DisplacementDim>::MaterialStateVariables const&
@@ -334,13 +334,13 @@ public:
     getInternalVariables() const override;
 
     MaterialProperties evaluatedMaterialProperties(
-        double const t, ProcessLib::SpatialPosition const& x) const
+        double const t, ParameterLib::SpatialPosition const& x) const
     {
         return MaterialProperties(t, x, _mp);
     }
 
     DamageProperties evaluatedDamageProperties(
-        double const t, ProcessLib::SpatialPosition const& x) const
+        double const t, ParameterLib::SpatialPosition const& x) const
     {
         return DamageProperties(t, x, *_damage_properties);
     }
diff --git a/MaterialLib/SolidModels/LinearElasticIsotropic.cpp b/MaterialLib/SolidModels/LinearElasticIsotropic.cpp
index 866f28751a4ebb4885eaa11835966270e52733e4..03c08c56f160a16c01d2a8bf3711889a31f2ab81 100644
--- a/MaterialLib/SolidModels/LinearElasticIsotropic.cpp
+++ b/MaterialLib/SolidModels/LinearElasticIsotropic.cpp
@@ -20,7 +20,7 @@ boost::optional<
                    DisplacementDim>::MaterialStateVariables>,
                typename LinearElasticIsotropic<DisplacementDim>::KelvinMatrix>>
 LinearElasticIsotropic<DisplacementDim>::integrateStress(
-    double const t, ProcessLib::SpatialPosition const& x, double const /*dt*/,
+    double const t, ParameterLib::SpatialPosition const& x, double const /*dt*/,
     KelvinVector const& eps_prev, KelvinVector const& eps,
     KelvinVector const& sigma_prev,
     typename MechanicsBase<DisplacementDim>::MaterialStateVariables const&
@@ -44,7 +44,7 @@ LinearElasticIsotropic<DisplacementDim>::integrateStress(
 template <int DisplacementDim>
 typename LinearElasticIsotropic<DisplacementDim>::KelvinMatrix
 LinearElasticIsotropic<DisplacementDim>::getElasticTensor(
-    double const t, ProcessLib::SpatialPosition const& x,
+    double const t, ParameterLib::SpatialPosition const& x,
     double const /*T*/) const
 {
     return elasticTangentStiffness<DisplacementDim>(_mp.lambda(t, x),
diff --git a/MaterialLib/SolidModels/LinearElasticIsotropic.h b/MaterialLib/SolidModels/LinearElasticIsotropic.h
index c6e91526e8eaa86636940d3479ec393ac04d7574..27aed3ee69316de8c7dac1b021e39a2c9dab438e 100644
--- a/MaterialLib/SolidModels/LinearElasticIsotropic.h
+++ b/MaterialLib/SolidModels/LinearElasticIsotropic.h
@@ -10,7 +10,7 @@
 #pragma once
 
 #include "MechanicsBase.h"
-#include "ProcessLib/Parameter/Parameter.h"
+#include "ParameterLib/Parameter.h"
 
 namespace MaterialLib
 {
@@ -23,8 +23,8 @@ public:
     /// Variables specific to the material model
     class MaterialProperties
     {
-        using P = ProcessLib::Parameter<double>;
-        using X = ProcessLib::SpatialPosition;
+        using P = ParameterLib::Parameter<double>;
+        using X = ParameterLib::SpatialPosition;
 
     public:
         MaterialProperties(P const& youngs_modulus, P const& poissons_ratio)
@@ -97,7 +97,7 @@ public:
 
     double computeFreeEnergyDensity(
         double const /*t*/,
-        ProcessLib::SpatialPosition const& /*x*/,
+        ParameterLib::SpatialPosition const& /*x*/,
         double const /*dt*/,
         KelvinVector const& eps,
         KelvinVector const& sigma,
@@ -113,7 +113,7 @@ public:
                                    DisplacementDim>::MaterialStateVariables>,
                                KelvinMatrix>>
     integrateStress(
-        double const t, ProcessLib::SpatialPosition const& x,
+        double const t, ParameterLib::SpatialPosition const& x,
         double const /*dt*/, KelvinVector const& eps_prev,
         KelvinVector const& eps, KelvinVector const& sigma_prev,
         typename MechanicsBase<DisplacementDim>::MaterialStateVariables const&
@@ -121,7 +121,7 @@ public:
         double const T) const override;
 
     KelvinMatrix getElasticTensor(double const t,
-                                  ProcessLib::SpatialPosition const& x,
+                                  ParameterLib::SpatialPosition const& x,
                                   double const T) const;
 
     MaterialProperties getMaterialProperties() const { return _mp; }
diff --git a/MaterialLib/SolidModels/Lubby2.cpp b/MaterialLib/SolidModels/Lubby2.cpp
index f804c9d8da1d6a23bc4826e5043aba5a8521b07a..bb735a625bbc54c1ecc725c618f219d2aa1b09a1 100644
--- a/MaterialLib/SolidModels/Lubby2.cpp
+++ b/MaterialLib/SolidModels/Lubby2.cpp
@@ -73,7 +73,7 @@ boost::optional<std::tuple<typename Lubby2<DisplacementDim>::KelvinVector,
                                DisplacementDim>::MaterialStateVariables>,
                            typename Lubby2<DisplacementDim>::KelvinMatrix>>
 Lubby2<DisplacementDim>::integrateStress(
-    double const t, ProcessLib::SpatialPosition const& x, double const dt,
+    double const t, ParameterLib::SpatialPosition const& x, double const dt,
     KelvinVector const& /*eps_prev*/, KelvinVector const& eps,
     KelvinVector const& /*sigma_prev*/,
     typename MechanicsBase<DisplacementDim>::MaterialStateVariables const&
@@ -227,7 +227,7 @@ void Lubby2<DisplacementDim>::calculateResidualBurgers(
 template <int DisplacementDim>
 void Lubby2<DisplacementDim>::calculateJacobianBurgers(
     double const t,
-    ProcessLib::SpatialPosition const& x,
+    ParameterLib::SpatialPosition const& x,
     const double dt,
     JacobianMatrix& Jac,
     double s_eff,
diff --git a/MaterialLib/SolidModels/Lubby2.h b/MaterialLib/SolidModels/Lubby2.h
index 58a0ebe58321c1a9786529bd21d761afd9279c26..cae32b1447145d80f2d3b0fe6f5797599aea53ed 100644
--- a/MaterialLib/SolidModels/Lubby2.h
+++ b/MaterialLib/SolidModels/Lubby2.h
@@ -11,7 +11,7 @@
 
 #include "MathLib/KelvinVector.h"
 #include "NumLib/NewtonRaphson.h"
-#include "ProcessLib/Parameter/Parameter.h"
+#include "ParameterLib/Parameter.h"
 
 #include "MechanicsBase.h"
 
@@ -26,7 +26,7 @@ namespace Lubby2
 //
 struct Lubby2MaterialProperties
 {
-    using P = ProcessLib::Parameter<double>;
+    using P = ParameterLib::Parameter<double>;
     Lubby2MaterialProperties(P const& GK0_,
                              P const& GM0_,
                              P const& KM0_,
@@ -63,7 +63,7 @@ template <int DisplacementDim>
 struct LocalLubby2Properties
 {
     LocalLubby2Properties(double const t,
-                          ProcessLib::SpatialPosition const& x,
+                          ParameterLib::SpatialPosition const& x,
                           Lubby2MaterialProperties const& mp)
         : GM0(mp.GM0(t, x)[0]),
           KM0(mp.KM0(t, x)[0]),
@@ -192,7 +192,7 @@ public:
 
     double computeFreeEnergyDensity(
         double const t,
-        ProcessLib::SpatialPosition const& x,
+        ParameterLib::SpatialPosition const& x,
         double const dt,
         KelvinVector const& eps,
         KelvinVector const& sigma,
@@ -224,7 +224,7 @@ public:
                                    DisplacementDim>::MaterialStateVariables>,
                                KelvinMatrix>>
     integrateStress(
-        double const t, ProcessLib::SpatialPosition const& x, double const dt,
+        double const t, ParameterLib::SpatialPosition const& x, double const dt,
         KelvinVector const& eps_prev, KelvinVector const& eps,
         KelvinVector const& sigma_prev,
         typename MechanicsBase<DisplacementDim>::MaterialStateVariables const&
@@ -247,7 +247,7 @@ private:
     /// Calculates the 18x18 Jacobian.
     void calculateJacobianBurgers(
         double const t,
-        ProcessLib::SpatialPosition const& x,
+        ParameterLib::SpatialPosition const& x,
         double const dt,
         JacobianMatrix& Jac,
         double s_eff,
diff --git a/MaterialLib/SolidModels/MFront/CreateMFront.cpp b/MaterialLib/SolidModels/MFront/CreateMFront.cpp
index 3d32185f92dd0bf16b30a668cdb6b7f9a4bf6479..97446167c46e28f6e5408233cdc9f3806f12bb17 100644
--- a/MaterialLib/SolidModels/MFront/CreateMFront.cpp
+++ b/MaterialLib/SolidModels/MFront/CreateMFront.cpp
@@ -11,11 +11,10 @@
 
 #ifdef OGS_USE_MFRONT
 
-#include "MFront.h"
-
 #include "BaseLib/FileTools.h"
-#include "ProcessLib/Utils/ProcessUtils.h"
+#include "ParameterLib/Utils.h"
 
+#include "MFront.h"
 namespace
 {
 /// Prints info about MFront variables.
@@ -46,7 +45,7 @@ namespace MFront
 {
 template <int DisplacementDim>
 std::unique_ptr<MechanicsBase<DisplacementDim>> createMFront(
-    std::vector<std::unique_ptr<ProcessLib::ParameterBase>> const& parameters,
+    std::vector<std::unique_ptr<ParameterLib::ParameterBase>> const& parameters,
     BaseLib::ConfigTree const& config)
 {
     INFO("### MFRONT ########################################################");
@@ -102,7 +101,7 @@ std::unique_ptr<MechanicsBase<DisplacementDim>> createMFront(
     // MGIS library.
     varInfo("Parameters", behaviour.parameters, hypothesis);
 
-    std::vector<ProcessLib::Parameter<double> const*> material_properties;
+    std::vector<ParameterLib::Parameter<double> const*> material_properties;
 
     if (!behaviour.mps.empty())
     {
@@ -137,7 +136,7 @@ std::unique_ptr<MechanicsBase<DisplacementDim>> createMFront(
             auto const param_name = it->second;
             auto const num_comp =
                 mgis::behaviour::getVariableSize(mp, hypothesis);
-            auto const* param = &ProcessLib::findParameter<double>(
+            auto const* param = &ParameterLib::findParameter<double>(
                 param_name, parameters, num_comp);
 
             INFO("Using OGS parameter `%s' for material property `%s'.",
@@ -194,7 +193,7 @@ namespace MFront
 template <int DisplacementDim>
 std::unique_ptr<MechanicsBase<DisplacementDim>> createMFront(
     std::vector<
-        std::unique_ptr<ProcessLib::ParameterBase>> const& /*parameters*/,
+        std::unique_ptr<ParameterLib::ParameterBase>> const& /*parameters*/,
     BaseLib::ConfigTree const& /*config*/)
 {
     OGS_FATAL("OpenGeoSys has not been build with MFront support.");
@@ -212,10 +211,10 @@ namespace Solids
 namespace MFront
 {
 template std::unique_ptr<MechanicsBase<2>> createMFront<2>(
-    std::vector<std::unique_ptr<ProcessLib::ParameterBase>> const& parameters,
+    std::vector<std::unique_ptr<ParameterLib::ParameterBase>> const& parameters,
     BaseLib::ConfigTree const& config);
 template std::unique_ptr<MechanicsBase<3>> createMFront<3>(
-    std::vector<std::unique_ptr<ProcessLib::ParameterBase>> const& parameters,
+    std::vector<std::unique_ptr<ParameterLib::ParameterBase>> const& parameters,
     BaseLib::ConfigTree const& config);
 }  // namespace MFront
 }  // namespace Solids
diff --git a/MaterialLib/SolidModels/MFront/CreateMFront.h b/MaterialLib/SolidModels/MFront/CreateMFront.h
index 26997aefae1cd2d956e207bee502c7535a551e88..638ca136a47c2c9b7f9b805053da4b59dddf497c 100644
--- a/MaterialLib/SolidModels/MFront/CreateMFront.h
+++ b/MaterialLib/SolidModels/MFront/CreateMFront.h
@@ -14,7 +14,7 @@
 
 #include "BaseLib/ConfigTree.h"
 #include "MaterialLib/SolidModels/MechanicsBase.h"
-#include "ProcessLib/Parameter/Parameter.h"
+#include "ParameterLib/Parameter.h"
 
 namespace MaterialLib
 {
@@ -24,14 +24,14 @@ namespace MFront
 {
 template <int DisplacementDim>
 std::unique_ptr<MechanicsBase<DisplacementDim>> createMFront(
-    std::vector<std::unique_ptr<ProcessLib::ParameterBase>> const& parameters,
+    std::vector<std::unique_ptr<ParameterLib::ParameterBase>> const& parameters,
     BaseLib::ConfigTree const& config);
 
 extern template std::unique_ptr<MechanicsBase<2>> createMFront<2>(
-    std::vector<std::unique_ptr<ProcessLib::ParameterBase>> const& parameters,
+    std::vector<std::unique_ptr<ParameterLib::ParameterBase>> const& parameters,
     BaseLib::ConfigTree const& config);
 extern template std::unique_ptr<MechanicsBase<3>> createMFront<3>(
-    std::vector<std::unique_ptr<ProcessLib::ParameterBase>> const& parameters,
+    std::vector<std::unique_ptr<ParameterLib::ParameterBase>> const& parameters,
     BaseLib::ConfigTree const& config);
 }  // namespace MFront
 }  // namespace Solids
diff --git a/MaterialLib/SolidModels/MFront/MFront.cpp b/MaterialLib/SolidModels/MFront/MFront.cpp
index 081f760d00d6129d47c0a78d998a5bd83bcc4422..95e076e543a7471881fbb3b5925015cfd1f5f52f 100644
--- a/MaterialLib/SolidModels/MFront/MFront.cpp
+++ b/MaterialLib/SolidModels/MFront/MFront.cpp
@@ -157,7 +157,7 @@ const char* varTypeToString(int v)
 template <int DisplacementDim>
 MFront<DisplacementDim>::MFront(
     mgis::behaviour::Behaviour&& behaviour,
-    std::vector<ProcessLib::Parameter<double> const*>&& material_properties)
+    std::vector<ParameterLib::Parameter<double> const*>&& material_properties)
     : _behaviour(std::move(behaviour)),
       _material_properties(std::move(material_properties))
 {
@@ -238,7 +238,7 @@ boost::optional<std::tuple<typename MFront<DisplacementDim>::KelvinVector,
                            typename MFront<DisplacementDim>::KelvinMatrix>>
 MFront<DisplacementDim>::integrateStress(
     double const t,
-    ProcessLib::SpatialPosition const& x,
+    ParameterLib::SpatialPosition const& x,
     double const dt,
     KelvinVector const& /*eps_prev*/,
     KelvinVector const& eps,
@@ -317,7 +317,7 @@ MFront<DisplacementDim>::integrateStress(
 template <int DisplacementDim>
 double MFront<DisplacementDim>::computeFreeEnergyDensity(
     double const /*t*/,
-    ProcessLib::SpatialPosition const& /*x*/,
+    ParameterLib::SpatialPosition const& /*x*/,
     double const /*dt*/,
     KelvinVector const& /*eps*/,
     KelvinVector const& /*sigma*/,
diff --git a/MaterialLib/SolidModels/MFront/MFront.h b/MaterialLib/SolidModels/MFront/MFront.h
index d59c742a86b3deb177f20ec115404bbc91e8ec8e..5f886b22d690d0c33a80f17ce300c8f89e4a6afc 100644
--- a/MaterialLib/SolidModels/MFront/MFront.h
+++ b/MaterialLib/SolidModels/MFront/MFront.h
@@ -14,7 +14,7 @@
 #include <MGIS/Behaviour/Behaviour.hxx>
 #include <MGIS/Behaviour/BehaviourData.hxx>
 
-#include "ProcessLib/Parameter/Parameter.h"
+#include "ParameterLib/Parameter.h"
 
 namespace MaterialLib
 {
@@ -72,7 +72,7 @@ public:
         MathLib::KelvinVector::KelvinMatrixType<DisplacementDim>;
 
     MFront(mgis::behaviour::Behaviour&& behaviour,
-           std::vector<ProcessLib::Parameter<double> const*>&&
+           std::vector<ParameterLib::Parameter<double> const*>&&
                material_properties);
 
     std::unique_ptr<
@@ -85,7 +85,7 @@ public:
                                KelvinMatrix>>
     integrateStress(
         double const t,
-        ProcessLib::SpatialPosition const& x,
+        ParameterLib::SpatialPosition const& x,
         double const dt,
         KelvinVector const& eps_prev,
         KelvinVector const& eps,
@@ -96,7 +96,7 @@ public:
 
     double computeFreeEnergyDensity(
         double const t,
-        ProcessLib::SpatialPosition const& x,
+        ParameterLib::SpatialPosition const& x,
         double const dt,
         KelvinVector const& eps,
         KelvinVector const& sigma,
@@ -105,7 +105,7 @@ public:
 
 private:
     mgis::behaviour::Behaviour _behaviour;
-    std::vector<ProcessLib::Parameter<double> const*> _material_properties;
+    std::vector<ParameterLib::Parameter<double> const*> _material_properties;
 };
 
 extern template class MFront<2>;
diff --git a/MaterialLib/SolidModels/MechanicsBase.h b/MaterialLib/SolidModels/MechanicsBase.h
index 5082bb27ffd4a222d2e575ed7a98de0aa580d8f6..379b7970e83531f9d0bb0da09de379715cfd4f85 100644
--- a/MaterialLib/SolidModels/MechanicsBase.h
+++ b/MaterialLib/SolidModels/MechanicsBase.h
@@ -16,9 +16,9 @@
 #include <vector>
 
 #include "BaseLib/Error.h"
-#include "ProcessLib/Deformation/BMatrixPolicy.h"
+#include "MathLib/KelvinVector.h"
 
-namespace ProcessLib
+namespace ParameterLib
 {
 class SpatialPosition;
 }
@@ -80,7 +80,7 @@ struct MechanicsBase
     boost::optional<std::tuple<
         KelvinVector, std::unique_ptr<MaterialStateVariables>, KelvinMatrix>>
     integrateStress(double const t,
-                    ProcessLib::SpatialPosition const& x,
+                    ParameterLib::SpatialPosition const& x,
                     double const dt,
                     Eigen::Matrix<double, Eigen::Dynamic, 1> const& eps_prev,
                     Eigen::Matrix<double, Eigen::Dynamic, 1> const& eps,
@@ -111,7 +111,7 @@ struct MechanicsBase
     virtual boost::optional<std::tuple<
         KelvinVector, std::unique_ptr<MaterialStateVariables>, KelvinMatrix>>
     integrateStress(double const t,
-                    ProcessLib::SpatialPosition const& x,
+                    ParameterLib::SpatialPosition const& x,
                     double const dt,
                     KelvinVector const& eps_prev,
                     KelvinVector const& eps,
@@ -152,7 +152,7 @@ struct MechanicsBase
     /// one.
     virtual double getTemperatureRelatedCoefficient(
         double const /*t*/, double const /*dt*/,
-        ProcessLib::SpatialPosition const& /*x*/, double const /*T*/,
+        ParameterLib::SpatialPosition const& /*x*/, double const /*T*/,
         double const /*deviatoric_stress_norm*/) const
     {
         return 0.0;
@@ -160,7 +160,7 @@ struct MechanicsBase
 
     virtual double computeFreeEnergyDensity(
         double const t,
-        ProcessLib::SpatialPosition const& x,
+        ParameterLib::SpatialPosition const& x,
         double const dt,
         KelvinVector const& eps,
         KelvinVector const& sigma,
diff --git a/MaterialLib/TwoPhaseModels/CreateTwoPhaseFlowMaterialProperties.cpp b/MaterialLib/TwoPhaseModels/CreateTwoPhaseFlowMaterialProperties.cpp
index 891ff1653ddf8fbf9a582c9f4f2c7c93118c9406..6fb4325312c8d16729d5cf3a84a09085d571f767 100644
--- a/MaterialLib/TwoPhaseModels/CreateTwoPhaseFlowMaterialProperties.cpp
+++ b/MaterialLib/TwoPhaseModels/CreateTwoPhaseFlowMaterialProperties.cpp
@@ -20,8 +20,8 @@
 #include "MathLib/InterpolationAlgorithms/PiecewiseLinearInterpolation.h"
 #include "MeshLib/Mesh.h"
 #include "MeshLib/PropertyVector.h"
-#include "ProcessLib/Parameter/Parameter.h"
-#include "ProcessLib/Parameter/SpatialPosition.h"
+#include "ParameterLib/Parameter.h"
+#include "ParameterLib/SpatialPosition.h"
 
 #include "TwoPhaseFlowWithPPMaterialProperties.h"
 
@@ -34,7 +34,7 @@ std::tuple<std::unique_ptr<TwoPhaseFlowWithPPMaterialProperties>,
 createTwoPhaseFlowMaterialProperties(
     BaseLib::ConfigTree const& config,
     MeshLib::PropertyVector<int> const& material_ids,
-    std::vector<std::unique_ptr<ProcessLib::ParameterBase>> const& parameters)
+    std::vector<std::unique_ptr<ParameterLib::ParameterBase>> const& parameters)
 {
     DBUG("Reading material properties of two-phase flow process.");
 
diff --git a/MaterialLib/TwoPhaseModels/CreateTwoPhaseFlowMaterialProperties.h b/MaterialLib/TwoPhaseModels/CreateTwoPhaseFlowMaterialProperties.h
index 021ac92e594c1c6d03d1388e2bb4479e77720bda..6f1d3bc69d4e93b3d23143d8011524dd0fdc7cf3 100644
--- a/MaterialLib/TwoPhaseModels/CreateTwoPhaseFlowMaterialProperties.h
+++ b/MaterialLib/TwoPhaseModels/CreateTwoPhaseFlowMaterialProperties.h
@@ -32,7 +32,8 @@ std::tuple<std::unique_ptr<TwoPhaseFlowWithPPMaterialProperties>,
 createTwoPhaseFlowMaterialProperties(
     BaseLib::ConfigTree const& config,
     MeshLib::PropertyVector<int> const& material_ids,
-    std::vector<std::unique_ptr<ProcessLib::ParameterBase>> const& parameters);
+    std::vector<std::unique_ptr<ParameterLib::ParameterBase>> const&
+        parameters);
 
 }  // end namespace
 }  // namespace MaterialLib
diff --git a/MaterialLib/TwoPhaseModels/TwoPhaseFlowWithPPMaterialProperties.cpp b/MaterialLib/TwoPhaseModels/TwoPhaseFlowWithPPMaterialProperties.cpp
index b7a71d1922954c9eb4cb6f807bbc3583120509f3..5a50c0fd37d0332b516aade4f42e208e44fceb69 100644
--- a/MaterialLib/TwoPhaseModels/TwoPhaseFlowWithPPMaterialProperties.cpp
+++ b/MaterialLib/TwoPhaseModels/TwoPhaseFlowWithPPMaterialProperties.cpp
@@ -21,8 +21,8 @@
 #include "MathLib/InterpolationAlgorithms/PiecewiseLinearInterpolation.h"
 #include "MeshLib/Mesh.h"
 #include "MeshLib/PropertyVector.h"
-#include "ProcessLib/Parameter/Parameter.h"
-#include "ProcessLib/Parameter/SpatialPosition.h"
+#include "ParameterLib/Parameter.h"
+#include "ParameterLib/SpatialPosition.h"
 
 namespace MaterialLib
 {
@@ -120,14 +120,14 @@ double TwoPhaseFlowWithPPMaterialProperties::getGasViscosity(
 
 Eigen::MatrixXd const& TwoPhaseFlowWithPPMaterialProperties::getPermeability(
     const int material_id, const double t,
-    const ProcessLib::SpatialPosition& pos, const int /*dim*/) const
+    const ParameterLib::SpatialPosition& pos, const int /*dim*/) const
 {
     return _intrinsic_permeability_models[material_id]->getValue(t, pos, 0, 0);
 }
 
 double TwoPhaseFlowWithPPMaterialProperties::getPorosity(
     const int material_id, const double t,
-    const ProcessLib::SpatialPosition& pos, const double /*p*/,
+    const ParameterLib::SpatialPosition& pos, const double /*p*/,
     const double T, const double porosity_variable) const
 {
     return _porosity_models[material_id]->getValue(t, pos, porosity_variable,
@@ -136,7 +136,7 @@ double TwoPhaseFlowWithPPMaterialProperties::getPorosity(
 
 double TwoPhaseFlowWithPPMaterialProperties::getSaturation(
     const int material_id, const double /*t*/,
-    const ProcessLib::SpatialPosition& /*pos*/, const double /*p*/,
+    const ParameterLib::SpatialPosition& /*pos*/, const double /*p*/,
     const double /*T*/, const double pc) const
 {
     return _capillary_pressure_models[material_id]->getSaturation(pc);
@@ -144,7 +144,7 @@ double TwoPhaseFlowWithPPMaterialProperties::getSaturation(
 
 double TwoPhaseFlowWithPPMaterialProperties::getCapillaryPressure(
     const int material_id, const double /*t*/,
-    const ProcessLib::SpatialPosition& /*pos*/, const double /*p*/,
+    const ParameterLib::SpatialPosition& /*pos*/, const double /*p*/,
     const double /*T*/, const double saturation) const
 {
     return _capillary_pressure_models[material_id]->getCapillaryPressure(
@@ -153,7 +153,7 @@ double TwoPhaseFlowWithPPMaterialProperties::getCapillaryPressure(
 
 double TwoPhaseFlowWithPPMaterialProperties::getSaturationDerivative(
     const int material_id, const double /*t*/,
-    const ProcessLib::SpatialPosition& /*pos*/, const double /*p*/,
+    const ParameterLib::SpatialPosition& /*pos*/, const double /*p*/,
     const double /*T*/, const double saturation) const
 {
     const double dpcdsw =
@@ -162,7 +162,7 @@ double TwoPhaseFlowWithPPMaterialProperties::getSaturationDerivative(
 }
 
 double TwoPhaseFlowWithPPMaterialProperties::getNonwetRelativePermeability(
-    const double /*t*/, const ProcessLib::SpatialPosition& /*pos*/,
+    const double /*t*/, const ParameterLib::SpatialPosition& /*pos*/,
     const double /*p*/, const double /*T*/, const double saturation) const
 {
     if (saturation < 0.)
@@ -177,7 +177,7 @@ double TwoPhaseFlowWithPPMaterialProperties::getNonwetRelativePermeability(
 }
 
 double TwoPhaseFlowWithPPMaterialProperties::getWetRelativePermeability(
-    const double /*t*/, const ProcessLib::SpatialPosition& /*pos*/,
+    const double /*t*/, const ParameterLib::SpatialPosition& /*pos*/,
     const double /*p*/, const double /*T*/, const double saturation) const
 {
     if (saturation < 0)
diff --git a/MaterialLib/TwoPhaseModels/TwoPhaseFlowWithPPMaterialProperties.h b/MaterialLib/TwoPhaseModels/TwoPhaseFlowWithPPMaterialProperties.h
index 4adb66bad51f2f10424b5ad3687742aa72e76596..b6f2811a39916bdd5a97194b70a5ee377173d9c6 100644
--- a/MaterialLib/TwoPhaseModels/TwoPhaseFlowWithPPMaterialProperties.h
+++ b/MaterialLib/TwoPhaseModels/TwoPhaseFlowWithPPMaterialProperties.h
@@ -82,21 +82,21 @@ public:
     Eigen::MatrixXd const& getPermeability(
         const int material_id,
         const double t,
-        const ProcessLib::SpatialPosition& pos,
+        const ParameterLib::SpatialPosition& pos,
         const int dim) const;
 
     double getPorosity(const int material_id, const double t,
-                       const ProcessLib::SpatialPosition& pos, const double p,
+                       const ParameterLib::SpatialPosition& pos, const double p,
                        const double T, const double porosity_variable) const;
     double getSaturation(const int material_id, const double t,
-                         const ProcessLib::SpatialPosition& pos, const double p,
-                         const double T, const double pc) const;
+                         const ParameterLib::SpatialPosition& pos,
+                         const double p, const double T, const double pc) const;
     double getCapillaryPressure(const int material_id, const double t,
-                                const ProcessLib::SpatialPosition& pos,
+                                const ParameterLib::SpatialPosition& pos,
                                 const double p, const double T,
                                 const double saturation) const;
     double getSaturationDerivative(const int material_id, const double t,
-                                   const ProcessLib::SpatialPosition& pos,
+                                   const ParameterLib::SpatialPosition& pos,
                                    const double p, const double T,
                                    const double saturation) const;
     double getLiquidDensity(const double p, const double T) const;
@@ -104,12 +104,11 @@ public:
     double getGasViscosity(const double p, const double T) const;
     double getLiquidViscosity(const double p, const double T) const;
     double getGasDensityDerivative(double const p, double const T) const;
-    double getNonwetRelativePermeability(const double t,
-                                         const ProcessLib::SpatialPosition& pos,
-                                         const double p, const double T,
-                                         const double saturation) const;
+    double getNonwetRelativePermeability(
+        const double t, const ParameterLib::SpatialPosition& pos,
+        const double p, const double T, const double saturation) const;
     double getWetRelativePermeability(const double t,
-                                      const ProcessLib::SpatialPosition& pos,
+                                      const ParameterLib::SpatialPosition& pos,
                                       const double p, const double T,
                                       const double saturation) const;
 
diff --git a/MeshGeoToolsLib/MeshEditing/ResetMeshElementProperty.h b/MeshGeoToolsLib/MeshEditing/ResetMeshElementProperty.h
index 9d8e36723ff4f37dac165d3d6fbcebe10ef63493..15173e04e570ff80cd4067882646e9eccd488927 100644
--- a/MeshGeoToolsLib/MeshEditing/ResetMeshElementProperty.h
+++ b/MeshGeoToolsLib/MeshEditing/ResetMeshElementProperty.h
@@ -13,11 +13,6 @@
 #include <cstdlib>
 #include <vector>
 
-#include <tclap/CmdLine.h>
-
-#include "Applications/ApplicationsLib/LogogSetup.h"
-#include "Applications/FileIO/readGeometryFromFile.h"
-
 #include "MeshLib/IO/readMeshFromFile.h"
 #include "MeshLib/IO/writeMeshToFile.h"
 
diff --git a/ParameterLib/CMakeLists.txt b/ParameterLib/CMakeLists.txt
new file mode 100644
index 0000000000000000000000000000000000000000..857be4c14f894b64dcde14ebb56845a4d783b822
--- /dev/null
+++ b/ParameterLib/CMakeLists.txt
@@ -0,0 +1,19 @@
+# Source files
+get_source_files(SOURCES)
+
+add_library(ParameterLib ${SOURCES})
+if(BUILD_SHARED_LIBS)
+    install(TARGETS ParameterLib LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR})
+endif()
+
+include(GenerateExportHeader)
+generate_export_header(ParameterLib)
+target_include_directories(ParameterLib
+    PUBLIC ${CMAKE_CURRENT_BINARY_DIR}
+)
+
+target_link_libraries(ParameterLib PRIVATE BaseLib MeshLib)
+
+if(OGS_USE_PCH)
+    cotire(ParameterLib)
+endif()
diff --git a/ProcessLib/Parameter/ConstantParameter.cpp b/ParameterLib/ConstantParameter.cpp
similarity index 96%
rename from ProcessLib/Parameter/ConstantParameter.cpp
rename to ParameterLib/ConstantParameter.cpp
index 5ccaab1592aa49d332a435957a832c4de3fa302c..8a296d70523869368d5fc7eea28f9144b2f5a978 100644
--- a/ProcessLib/Parameter/ConstantParameter.cpp
+++ b/ParameterLib/ConstantParameter.cpp
@@ -8,11 +8,10 @@
  */
 
 #include "ConstantParameter.h"
-#include <logog/include/logog.hpp>
 #include "BaseLib/ConfigTree.h"
 #include "BaseLib/Error.h"
 
-namespace ProcessLib
+namespace ParameterLib
 {
 std::unique_ptr<ParameterBase> createConstantParameter(
     std::string const& name, BaseLib::ConfigTree const& config)
@@ -62,4 +61,4 @@ std::unique_ptr<ParameterBase> createConstantParameter(
     return std::make_unique<ConstantParameter<double>>(name, values);
 }
 
-}  // namespace ProcessLib
+}  // namespace ParameterLib
diff --git a/ProcessLib/Parameter/ConstantParameter.h b/ParameterLib/ConstantParameter.h
similarity index 96%
rename from ProcessLib/Parameter/ConstantParameter.h
rename to ParameterLib/ConstantParameter.h
index 920322fa539f64ce3405a7fde4d19ad3489c2574..ab42c80c341a773978d838aa21417bfec50587bf 100644
--- a/ProcessLib/Parameter/ConstantParameter.h
+++ b/ParameterLib/ConstantParameter.h
@@ -9,11 +9,9 @@
 
 #pragma once
 
-#include <utility>
-
 #include "Parameter.h"
 
-namespace ProcessLib
+namespace ParameterLib
 {
 /// Single, constant value parameter.
 template <typename T>
@@ -76,4 +74,4 @@ private:
 std::unique_ptr<ParameterBase> createConstantParameter(
     std::string const& name, BaseLib::ConfigTree const& config);
 
-}  // namespace ProcessLib
+}  // namespace ParameterLib
diff --git a/ProcessLib/Parameter/CoordinateSystem.cpp b/ParameterLib/CoordinateSystem.cpp
similarity index 98%
rename from ProcessLib/Parameter/CoordinateSystem.cpp
rename to ParameterLib/CoordinateSystem.cpp
index 5b14e428e7163589e56e0940b8109e80a8a552bd..3e16da75c729015c3a3d68dff953c25948180588 100644
--- a/ProcessLib/Parameter/CoordinateSystem.cpp
+++ b/ParameterLib/CoordinateSystem.cpp
@@ -14,7 +14,7 @@
 
 #include "Parameter.h"
 
-namespace ProcessLib
+namespace ParameterLib
 {
 CoordinateSystem::CoordinateSystem(Parameter<double> const& e0,
                                    Parameter<double> const& e1)
@@ -116,4 +116,4 @@ Eigen::Matrix<double, 3, 3> CoordinateSystem::transformation<3>(
 #endif  // NDEBUG
     return t;
 }
-}  // namespace ProcessLib
+}  // namespace ParameterLib
diff --git a/ProcessLib/Parameter/CoordinateSystem.h b/ParameterLib/CoordinateSystem.h
similarity index 95%
rename from ProcessLib/Parameter/CoordinateSystem.h
rename to ParameterLib/CoordinateSystem.h
index 0469cbd4e64a976401eda5040161072852bf734c..91fe860b9bb43407c731ed7f4882186003636a87 100644
--- a/ProcessLib/Parameter/CoordinateSystem.h
+++ b/ParameterLib/CoordinateSystem.h
@@ -14,14 +14,14 @@
 #include <array>
 #include <vector>
 
-namespace ProcessLib
+namespace ParameterLib
 {
 template <typename T>
 struct Parameter;
 class SpatialPosition;
-}
+}  // namespace ParameterLib
 
-namespace ProcessLib
+namespace ParameterLib
 {
 struct CoordinateSystem final
 {
@@ -65,4 +65,4 @@ private:
     std::array<Parameter<double> const*, 3> _base;
 };
 
-}  // namespace ProcessLib
+}  // namespace ParameterLib
diff --git a/ProcessLib/Parameter/CurveScaledParameter.cpp b/ParameterLib/CurveScaledParameter.cpp
similarity index 94%
rename from ProcessLib/Parameter/CurveScaledParameter.cpp
rename to ParameterLib/CurveScaledParameter.cpp
index 0f941c7d7fdc0ed45c1b46d90749fb30b75c9f66..44335e00116da01c202f32ce7aae3ed79a322010 100644
--- a/ProcessLib/Parameter/CurveScaledParameter.cpp
+++ b/ParameterLib/CurveScaledParameter.cpp
@@ -8,9 +8,9 @@
  */
 
 #include "CurveScaledParameter.h"
-#include "ProcessLib/Utils/ProcessUtils.h"
+#include "Utils.h"
 
-namespace ProcessLib
+namespace ParameterLib
 {
 std::unique_ptr<ParameterBase> createCurveScaledParameter(
     std::string const& name,
@@ -42,4 +42,4 @@ std::unique_ptr<ParameterBase> createCurveScaledParameter(
         name, *curve_it->second, referenced_parameter_name);
 }
 
-}  // namespace ProcessLib
+}  // namespace ParameterLib
diff --git a/ProcessLib/Parameter/CurveScaledParameter.h b/ParameterLib/CurveScaledParameter.h
similarity index 86%
rename from ProcessLib/Parameter/CurveScaledParameter.h
rename to ParameterLib/CurveScaledParameter.h
index 04ed950db4d91c6a42e41fbb30da098e7d8afb6a..e9504e59db92fdb40726a9fd45c3f36da58d50c3 100644
--- a/ProcessLib/Parameter/CurveScaledParameter.h
+++ b/ParameterLib/CurveScaledParameter.h
@@ -13,12 +13,13 @@
 #include <utility>
 #include "MathLib/InterpolationAlgorithms/PiecewiseLinearInterpolation.h"
 #include "Parameter.h"
-#include "ProcessLib/Utils/ProcessUtils.h"
+#include "Utils.h"
 
-namespace ProcessLib
+namespace ParameterLib
 {
 template <typename T>
-struct CurveScaledParameter final : public Parameter<T> {
+struct CurveScaledParameter final : public Parameter<T>
+{
     CurveScaledParameter(std::string const& name_,
                          MathLib::PiecewiseLinearInterpolation const& curve,
                          std::string referenced_parameter_name)
@@ -30,8 +31,7 @@ struct CurveScaledParameter final : public Parameter<T> {
 
     bool isTimeDependent() const override { return true; }
     void initialize(
-        std::vector<std::unique_ptr<ProcessLib::ParameterBase>> const&
-            parameters) override
+        std::vector<std::unique_ptr<ParameterBase>> const& parameters) override
     {
         _parameter =
             &findParameter<T>(_referenced_parameter_name, parameters, 0);
@@ -44,7 +44,7 @@ struct CurveScaledParameter final : public Parameter<T> {
     }
 
     std::vector<T> operator()(double const t,
-                                     SpatialPosition const& pos) const override
+                              SpatialPosition const& pos) const override
     {
         // No local coordinate transformation here, which might happen twice
         // otherwise.
@@ -77,4 +77,4 @@ std::unique_ptr<ParameterBase> createCurveScaledParameter(
              std::unique_ptr<MathLib::PiecewiseLinearInterpolation>> const&
         curves);
 
-}  // namespace ProcessLib
+}  // namespace ParameterLib
diff --git a/ProcessLib/Parameter/FunctionParameter.cpp b/ParameterLib/FunctionParameter.cpp
similarity index 83%
rename from ProcessLib/Parameter/FunctionParameter.cpp
rename to ParameterLib/FunctionParameter.cpp
index 2a943202e54dd6ec8c7eea4f1b3ad0bc39b97a1b..e27062cae04b922edbf358200eb4195b225ce1b2 100644
--- a/ProcessLib/Parameter/FunctionParameter.cpp
+++ b/ParameterLib/FunctionParameter.cpp
@@ -12,7 +12,7 @@
 #include "BaseLib/ConfigTree.h"
 #include "MeshLib/Mesh.h"
 
-namespace ProcessLib
+namespace ParameterLib
 {
 std::unique_ptr<ParameterBase> createFunctionParameter(
     std::string const& name, BaseLib::ConfigTree const& config,
@@ -30,8 +30,8 @@ std::unique_ptr<ParameterBase> createFunctionParameter(
         vec_expressions.emplace_back(expression_str);
     }
 
-    return std::make_unique<FunctionParameter<double>>(
-        name, mesh, vec_expressions);
+    return std::make_unique<FunctionParameter<double>>(name, mesh,
+                                                       vec_expressions);
 }
 
-}  // namespace ProcessLib
+}  // namespace ParameterLib
diff --git a/ProcessLib/Parameter/FunctionParameter.h b/ParameterLib/FunctionParameter.h
similarity index 92%
rename from ProcessLib/Parameter/FunctionParameter.h
rename to ParameterLib/FunctionParameter.h
index e0e65af60781cf3bd9eadb32865f98e9e4692679..a919b6a54899c4c50d6698baa5cbf9e9605a212e 100644
--- a/ProcessLib/Parameter/FunctionParameter.h
+++ b/ParameterLib/FunctionParameter.h
@@ -18,11 +18,10 @@
 #include "MeshLib/Node.h"
 
 #include "Parameter.h"
-#include "ProcessLib/Utils/ProcessUtils.h"
+#include "Utils.h"
 
-namespace ProcessLib
+namespace ParameterLib
 {
-
 /// A parameter class evaluating functions defined by
 /// user-provided mathematical expressions.
 ///
@@ -55,14 +54,14 @@ struct FunctionParameter final : public Parameter<T>
         _symbol_table.create_variable("z");
 
         _vec_expression.resize(_vec_expression_str.size());
-        for (unsigned i=0; i<_vec_expression_str.size(); i++)
+        for (unsigned i = 0; i < _vec_expression_str.size(); i++)
         {
             _vec_expression[i].register_symbol_table(_symbol_table);
             parser_t parser;
             if (!parser.compile(_vec_expression_str[i], _vec_expression[i]))
             {
                 OGS_FATAL("Error: %s\tExpression: %s\n", parser.error().c_str(),
-                    _vec_expression_str[i].c_str());
+                          _vec_expression_str[i].c_str());
             }
         }
     }
@@ -75,7 +74,7 @@ struct FunctionParameter final : public Parameter<T>
     }
 
     std::vector<T> operator()(double const /*t*/,
-                                     SpatialPosition const& pos) const override
+                              SpatialPosition const& pos) const override
     {
         std::vector<T> cache(getNumberOfComponents());
         auto& x = _symbol_table.get_variable("x")->ref();
@@ -120,4 +119,4 @@ std::unique_ptr<ParameterBase> createFunctionParameter(
     std::string const& name, BaseLib::ConfigTree const& config,
     MeshLib::Mesh const& mesh);
 
-}  // namespace ProcessLib
+}  // namespace ParameterLib
diff --git a/ProcessLib/Parameter/GroupBasedParameter.cpp b/ParameterLib/GroupBasedParameter.cpp
similarity index 92%
rename from ProcessLib/Parameter/GroupBasedParameter.cpp
rename to ParameterLib/GroupBasedParameter.cpp
index e939846c857bb92794305146a3be0f224026f23f..b6d4a3f7247892dc9249d822a214ff0f97e8ef68 100644
--- a/ProcessLib/Parameter/GroupBasedParameter.cpp
+++ b/ParameterLib/GroupBasedParameter.cpp
@@ -13,7 +13,7 @@
 #include "BaseLib/Error.h"
 #include "MeshLib/Mesh.h"
 
-namespace ProcessLib
+namespace ParameterLib
 {
 std::unique_ptr<ParameterBase> createGroupBasedParameter(
     std::string const& name, BaseLib::ConfigTree const& config,
@@ -24,7 +24,8 @@ std::unique_ptr<ParameterBase> createGroupBasedParameter(
 
     // get a property vector of group IDs
     //! \ogs_file_param{prj__parameters__parameter__Group__group_id_property}
-    std::string const group_id_property_name = config.getConfigParameter<std::string>("group_id_property");
+    std::string const group_id_property_name =
+        config.getConfigParameter<std::string>("group_id_property");
     DBUG("Using group_id_property %s", group_id_property_name.c_str());
 
     auto const& group_id_property =
@@ -67,7 +68,8 @@ std::unique_ptr<ParameterBase> createGroupBasedParameter(
     unsigned n_values = vec_index_values.front().second.size();
     for (auto p : vec_index_values)
     {
-        auto itr = std::find(group_id_property->begin(), group_id_property->end(), p.first);
+        auto itr = std::find(group_id_property->begin(),
+                             group_id_property->end(), p.first);
         if (itr == group_id_property->end())
         {
             OGS_FATAL(
@@ -111,4 +113,4 @@ std::unique_ptr<ParameterBase> createGroupBasedParameter(
     OGS_FATAL("Mesh item type of the specified property is not supported.");
 }
 
-}  // namespace ProcessLib
+}  // namespace ParameterLib
diff --git a/ProcessLib/Parameter/GroupBasedParameter.h b/ParameterLib/GroupBasedParameter.h
similarity index 82%
rename from ProcessLib/Parameter/GroupBasedParameter.h
rename to ParameterLib/GroupBasedParameter.h
index a34c57eb563b81b4b3695cb5d1ef7613e16d4933..71d9d979cdfcba3fa5d18f21c107f9771e5059ae 100644
--- a/ProcessLib/Parameter/GroupBasedParameter.h
+++ b/ParameterLib/GroupBasedParameter.h
@@ -16,21 +16,18 @@
 
 #include "Parameter.h"
 
-
 namespace MeshLib
 {
 template <typename T>
 class PropertyVector;
-}  // MeshLib
+}  // namespace MeshLib
 
-namespace ProcessLib
+namespace ParameterLib
 {
-
 /// A parameter class looking for values from indices in a property vector.
 /// This class can be used for material ID dependent parameters.
 template <typename T, MeshLib::MeshItemType MeshItemType>
-struct GroupBasedParameter final
-    : public Parameter<T>
+struct GroupBasedParameter final : public Parameter<T>
 {
     /**
      * Constructing from a property vector of index and corresponding values
@@ -61,7 +58,7 @@ struct GroupBasedParameter final
     }
 
     std::vector<T> operator()(double const /*t*/,
-                                     SpatialPosition const& pos) const override
+                              SpatialPosition const& pos) const override
     {
         auto const item_id = getMeshItemID(pos, type<MeshItemType>());
         assert(item_id);
@@ -81,16 +78,19 @@ struct GroupBasedParameter final
     }
 
 private:
-    template <MeshLib::MeshItemType ITEM_TYPE> struct type {};
+    template <MeshLib::MeshItemType ITEM_TYPE>
+    struct type
+    {
+    };
 
-    static boost::optional<std::size_t>
-    getMeshItemID(SpatialPosition const& pos, type<MeshLib::MeshItemType::Cell>)
+    static boost::optional<std::size_t> getMeshItemID(
+        SpatialPosition const& pos, type<MeshLib::MeshItemType::Cell>)
     {
         return pos.getElementID();
     }
 
-    static boost::optional<std::size_t>
-    getMeshItemID(SpatialPosition const& pos, type<MeshLib::MeshItemType::Node>)
+    static boost::optional<std::size_t> getMeshItemID(
+        SpatialPosition const& pos, type<MeshLib::MeshItemType::Node>)
     {
         return pos.getNodeID();
     }
@@ -104,4 +104,4 @@ std::unique_ptr<ParameterBase> createGroupBasedParameter(
     BaseLib::ConfigTree const& config,
     MeshLib::Mesh const& mesh);
 
-}  // namespace ProcessLib
+}  // namespace ParameterLib
diff --git a/ProcessLib/Parameter/MeshElementParameter.cpp b/ParameterLib/MeshElementParameter.cpp
similarity index 89%
rename from ProcessLib/Parameter/MeshElementParameter.cpp
rename to ParameterLib/MeshElementParameter.cpp
index 8c707397d762ec99737dbcc916871b4eabe2e35f..0968906ca777329eafcbd03ac847778797ff9438 100644
--- a/ProcessLib/Parameter/MeshElementParameter.cpp
+++ b/ParameterLib/MeshElementParameter.cpp
@@ -11,7 +11,7 @@
 #include "BaseLib/ConfigTree.h"
 #include "MeshLib/Mesh.h"
 
-namespace ProcessLib
+namespace ParameterLib
 {
 std::unique_ptr<ParameterBase> createMeshElementParameter(
     std::string const& name, BaseLib::ConfigTree const& config,
@@ -20,14 +20,16 @@ std::unique_ptr<ParameterBase> createMeshElementParameter(
     //! \ogs_file_param{prj__parameters__parameter__type}
     config.checkConfigParameter("type", "MeshElement");
     //! \ogs_file_param{prj__parameters__parameter__MeshElement__field_name}
-    auto const field_name = config.getConfigParameter<std::string>("field_name");
+    auto const field_name =
+        config.getConfigParameter<std::string>("field_name");
     DBUG("Using field_name %s", field_name.c_str());
 
     // TODO other data types than only double
     auto const& property =
         mesh.getProperties().getPropertyVector<double>(field_name);
 
-    if (property->getMeshItemType() != MeshLib::MeshItemType::Cell) {
+    if (property->getMeshItemType() != MeshLib::MeshItemType::Cell)
+    {
         OGS_FATAL("The mesh property `%s' is not an element property.",
                   field_name.c_str());
     }
@@ -36,4 +38,4 @@ std::unique_ptr<ParameterBase> createMeshElementParameter(
                                                           *property);
 }
 
-}  // namespace ProcessLib
+}  // namespace ParameterLib
diff --git a/ProcessLib/Parameter/MeshElementParameter.h b/ParameterLib/MeshElementParameter.h
similarity index 92%
rename from ProcessLib/Parameter/MeshElementParameter.h
rename to ParameterLib/MeshElementParameter.h
index ac86c05b6e83dc26ae7f2bb836e0418ee9d767fd..a94ab3f1fd078e809b4d7df4de6282b10697b39b 100644
--- a/ProcessLib/Parameter/MeshElementParameter.h
+++ b/ParameterLib/MeshElementParameter.h
@@ -15,13 +15,14 @@ namespace MeshLib
 {
 template <typename T>
 class PropertyVector;
-}  // MeshLib
+}  // namespace MeshLib
 
-namespace ProcessLib
+namespace ParameterLib
 {
 /// A parameter represented by a mesh property vector.
 template <typename T>
-struct MeshElementParameter final : public Parameter<T> {
+struct MeshElementParameter final : public Parameter<T>
+{
     MeshElementParameter(std::string const& name_,
                          MeshLib::Mesh const& mesh,
                          MeshLib::PropertyVector<T> const& property)
@@ -37,7 +38,7 @@ struct MeshElementParameter final : public Parameter<T> {
     }
 
     std::vector<T> operator()(double const /*t*/,
-                                     SpatialPosition const& pos) const override
+                              SpatialPosition const& pos) const override
     {
         auto const e = pos.getElementID();
         if (!e)
@@ -90,4 +91,4 @@ std::unique_ptr<ParameterBase> createMeshElementParameter(
     std::string const& name, BaseLib::ConfigTree const& config,
     MeshLib::Mesh const& mesh);
 
-}  // namespace ProcessLib
+}  // namespace ParameterLib
diff --git a/ProcessLib/Parameter/MeshNodeParameter.cpp b/ParameterLib/MeshNodeParameter.cpp
similarity index 88%
rename from ProcessLib/Parameter/MeshNodeParameter.cpp
rename to ParameterLib/MeshNodeParameter.cpp
index 11b9ecbabe2186d6c82605503bf7ad8560c262ea..6f360a068c85184c34b17bed3fbd712b3d33b8e8 100644
--- a/ProcessLib/Parameter/MeshNodeParameter.cpp
+++ b/ParameterLib/MeshNodeParameter.cpp
@@ -11,7 +11,7 @@
 #include "BaseLib/ConfigTree.h"
 #include "MeshLib/Mesh.h"
 
-namespace ProcessLib
+namespace ParameterLib
 {
 std::unique_ptr<ParameterBase> createMeshNodeParameter(
     std::string const& name, BaseLib::ConfigTree const& config,
@@ -20,14 +20,16 @@ std::unique_ptr<ParameterBase> createMeshNodeParameter(
     //! \ogs_file_param{prj__parameters__parameter__type}
     config.checkConfigParameter("type", "MeshNode");
     //! \ogs_file_param{prj__parameters__parameter__MeshNode__field_name}
-    auto const field_name = config.getConfigParameter<std::string>("field_name");
+    auto const field_name =
+        config.getConfigParameter<std::string>("field_name");
     DBUG("Using field_name %s", field_name.c_str());
 
     // TODO other data types than only double
     auto const& property =
         mesh.getProperties().getPropertyVector<double>(field_name);
 
-    if (property->getMeshItemType() != MeshLib::MeshItemType::Node) {
+    if (property->getMeshItemType() != MeshLib::MeshItemType::Node)
+    {
         OGS_FATAL("The mesh property `%s' is not a nodal property.",
                   field_name.c_str());
     }
@@ -35,4 +37,4 @@ std::unique_ptr<ParameterBase> createMeshNodeParameter(
     return std::make_unique<MeshNodeParameter<double>>(name, mesh, *property);
 }
 
-}  // namespace ProcessLib
+}  // namespace ParameterLib
diff --git a/ProcessLib/Parameter/MeshNodeParameter.h b/ParameterLib/MeshNodeParameter.h
similarity index 92%
rename from ProcessLib/Parameter/MeshNodeParameter.h
rename to ParameterLib/MeshNodeParameter.h
index 5f5286d98994197af77f937e1be9e5233dea64b3..7bfd7c4e1ad9d0f36339144d88b9a3559430dfd7 100644
--- a/ProcessLib/Parameter/MeshNodeParameter.h
+++ b/ParameterLib/MeshNodeParameter.h
@@ -19,13 +19,14 @@ namespace MeshLib
 {
 template <typename T>
 class PropertyVector;
-}  // MeshLib
+}  // namespace MeshLib
 
-namespace ProcessLib
+namespace ParameterLib
 {
 /// A parameter represented by a mesh property vector.
 template <typename T>
-struct MeshNodeParameter final : public Parameter<T> {
+struct MeshNodeParameter final : public Parameter<T>
+{
     MeshNodeParameter(std::string const& name_,
                       MeshLib::Mesh const& mesh,
                       MeshLib::PropertyVector<T> const& property)
@@ -41,7 +42,7 @@ struct MeshNodeParameter final : public Parameter<T> {
     }
 
     std::vector<T> operator()(double const /*t*/,
-                                     SpatialPosition const& pos) const override
+                              SpatialPosition const& pos) const override
     {
         auto const n = pos.getNodeID();
         if (!n)
@@ -94,4 +95,4 @@ std::unique_ptr<ParameterBase> createMeshNodeParameter(
     std::string const& name, BaseLib::ConfigTree const& config,
     MeshLib::Mesh const& mesh);
 
-}  // namespace ProcessLib
+}  // namespace ParameterLib
diff --git a/ProcessLib/Parameter/Parameter.cpp b/ParameterLib/Parameter.cpp
similarity index 98%
rename from ProcessLib/Parameter/Parameter.cpp
rename to ParameterLib/Parameter.cpp
index 2cddcff1c57459e195d3c1b417d94cf0e8d25c9d..c535765cbc9895f06f7d908c59d72c4ef4bf08fe 100644
--- a/ProcessLib/Parameter/Parameter.cpp
+++ b/ParameterLib/Parameter.cpp
@@ -18,7 +18,7 @@
 #include "MeshElementParameter.h"
 #include "MeshNodeParameter.h"
 
-namespace ProcessLib
+namespace ParameterLib
 {
 std::unique_ptr<ParameterBase> createParameter(
     BaseLib::ConfigTree const& config,
@@ -27,7 +27,6 @@ std::unique_ptr<ParameterBase> createParameter(
              std::unique_ptr<MathLib::PiecewiseLinearInterpolation>> const&
         curves)
 {
-
     //! \ogs_file_param{prj__parameters__parameter__name}
     auto const name = config.getConfigParameter<std::string>("name");
     //! \ogs_file_param{prj__parameters__parameter__type}
@@ -85,4 +84,4 @@ std::unique_ptr<ParameterBase> createParameter(
     OGS_FATAL("Cannot construct a parameter of given type '%s'.", type.c_str());
 }
 
-}  // namespace ProcessLib
+}  // namespace ParameterLib
diff --git a/ProcessLib/Parameter/Parameter.h b/ParameterLib/Parameter.h
similarity index 94%
rename from ProcessLib/Parameter/Parameter.h
rename to ParameterLib/Parameter.h
index e359ed8f414ae93ed64bffc1946f0deeba32170c..6a6ec97860f56f0c07d79729bc145007977606fb 100644
--- a/ProcessLib/Parameter/Parameter.h
+++ b/ParameterLib/Parameter.h
@@ -27,19 +27,19 @@
 namespace BaseLib
 {
 class ConfigTree;
-}  // BaseLib
+}  // namespace BaseLib
 
 namespace MathLib
 {
 class PiecewiseLinearInterpolation;
-}  // MathLib
+}  // namespace MathLib
 
 namespace MeshLib
 {
 class Mesh;
-}  // MeshLib
+}  // namespace MeshLib
 
-namespace ProcessLib
+namespace ParameterLib
 {
 /// Base class for all parameters, not an interface class. This avoids using of
 /// void* when storing parameters and convenient destruction.
@@ -64,8 +64,7 @@ struct ParameterBase
     /// Parameters might depend on each other; this method allows to set up the
     /// dependencies between parameters after they have been constructed.
     virtual void initialize(
-        std::vector<
-            std::unique_ptr<ProcessLib::ParameterBase>> const& /*parameters*/)
+        std::vector<std::unique_ptr<ParameterBase>> const& /*parameters*/)
     {
     }
 
@@ -144,13 +143,13 @@ struct Parameter : public ParameterBase
 
     ~Parameter() override = default;
 
-    //! Returns the number of components this Parameter has at every position and
-    //! point in time.
+    //! Returns the number of components this Parameter has at every position
+    //! and point in time.
     virtual int getNumberOfComponents() const = 0;
 
     //! Returns the parameter value at the given time and position.
-    virtual std::vector<T> operator()(
-        double const t, SpatialPosition const& pos) const = 0;
+    virtual std::vector<T> operator()(double const t,
+                                      SpatialPosition const& pos) const = 0;
 
     //! Returns a matrix of values for all nodes of the given element.
     //
@@ -198,4 +197,4 @@ std::unique_ptr<ParameterBase> createParameter(
              std::unique_ptr<MathLib::PiecewiseLinearInterpolation>> const&
         curves);
 
-}  // namespace ProcessLib
+}  // namespace ParameterLib
diff --git a/ProcessLib/Parameter/SpatialPosition.h b/ParameterLib/SpatialPosition.h
similarity index 97%
rename from ProcessLib/Parameter/SpatialPosition.h
rename to ParameterLib/SpatialPosition.h
index 30a87e0973348680a2f3474f699b54845094e2e7..e1d98fea26607fd5a56440fdef548522bf7b1f7e 100644
--- a/ProcessLib/Parameter/SpatialPosition.h
+++ b/ParameterLib/SpatialPosition.h
@@ -12,7 +12,7 @@
 #include <boost/optional.hpp>
 #include "MathLib/TemplatePoint.h"
 
-namespace ProcessLib
+namespace ParameterLib
 {
 //! Represents a position in space which can be either one of
 //! a node, an element, an integration point or a cartesian coordinates triple.
@@ -86,4 +86,4 @@ private:
     boost::optional<MathLib::TemplatePoint<double, 3>> _coordinates;
 };
 
-}  // namespace ProcessLib
+}  // namespace ParameterLib
diff --git a/ParameterLib/Utils.cpp b/ParameterLib/Utils.cpp
new file mode 100644
index 0000000000000000000000000000000000000000..b903042c5529e78053ce2e656aa1931d04804f01
--- /dev/null
+++ b/ParameterLib/Utils.cpp
@@ -0,0 +1,33 @@
+/**
+ * \copyright
+ * Copyright (c) 2012-2019, OpenGeoSys Community (http://www.opengeosys.org)
+ *            Distributed under a Modified BSD License.
+ *              See accompanying file LICENSE.txt or
+ *              http://www.opengeosys.org/project/license
+ *
+ */
+
+#include "Utils.h"
+
+namespace ParameterLib
+{
+ParameterBase* findParameterByName(
+    std::string const& parameter_name,
+    std::vector<std::unique_ptr<ParameterBase>> const& parameters)
+{
+    // Find corresponding parameter by name.
+    auto const it = std::find_if(
+        parameters.cbegin(), parameters.cend(),
+        [&parameter_name](std::unique_ptr<ParameterBase> const& p) {
+            return p->name == parameter_name;
+        });
+
+    if (it == parameters.end())
+    {
+        return nullptr;
+    }
+
+    DBUG("Found parameter `%s'.", (*it)->name.c_str());
+    return it->get();
+}
+}  // namespace ParameterLib
diff --git a/ParameterLib/Utils.h b/ParameterLib/Utils.h
new file mode 100644
index 0000000000000000000000000000000000000000..fd191cdb83e4123f4abdbb058dec1af204a84019
--- /dev/null
+++ b/ParameterLib/Utils.h
@@ -0,0 +1,127 @@
+/**
+ * \copyright
+ * Copyright (c) 2012-2019, OpenGeoSys Community (http://www.opengeosys.org)
+ *            Distributed under a Modified BSD License.
+ *              See accompanying file LICENSE.txt or
+ *              http://www.opengeosys.org/project/license
+ *
+ */
+
+#pragma once
+
+#include <vector>
+#include "BaseLib/ConfigTree.h"
+#include "BaseLib/Error.h"
+
+#include "Parameter.h"
+
+namespace ParameterLib
+{
+/// Find an optional parameter of specific type for a given name.
+///
+/// \tparam ParameterDataType the data type of the parameter
+/// \param parameter_name name of the requested parameter
+/// \param parameters list of parameters in which it will be searched
+ParameterBase* findParameterByName(
+    std::string const& parameter_name,
+    std::vector<std::unique_ptr<ParameterBase>> const& parameters);
+
+/// Find an optional parameter of specific type for a given name.
+///
+/// \tparam ParameterDataType the data type of the parameter
+/// \param parameter_name name of the requested parameter
+/// \param parameters list of parameters in which it will be searched
+/// \param num_components the number of components of the parameters or zero if
+/// any number is acceptable
+///
+/// \see The documentation of the other findParameter() function.
+template <typename ParameterDataType>
+Parameter<ParameterDataType>* findParameterOptional(
+    std::string const& parameter_name,
+    std::vector<std::unique_ptr<ParameterBase>> const& parameters,
+    int const num_components)
+{
+    // Find corresponding parameter by name.
+    ParameterBase* parameter_ptr =
+        findParameterByName(parameter_name, parameters);
+    if (parameter_ptr == nullptr)
+    {
+        return nullptr;
+    }
+
+    // Check the type correctness of the found parameter.
+    auto* const parameter =
+        dynamic_cast<Parameter<ParameterDataType>*>(parameter_ptr);
+    if (!parameter)
+    {
+        OGS_FATAL("The read parameter `%s' is of incompatible type.",
+                  parameter_name.c_str());
+    }
+
+    if (num_components != 0 &&
+        parameter->getNumberOfComponents() != num_components)
+    {
+        OGS_FATAL(
+            "The read parameter `%s' has the wrong number of components (%lu "
+            "instead of %u).",
+            parameter_name.c_str(), parameter->getNumberOfComponents(),
+            num_components);
+    }
+
+    return parameter;
+}
+
+/// Find a parameter of specific type for a given name.
+///
+/// \tparam ParameterDataType the data type of the parameter
+/// \param parameter_name name of the requested parameter
+/// \param parameters list of parameters in which it will be searched
+/// \param num_components the number of components of the parameters or zero if
+/// any number is acceptable
+///
+/// \see The documentation of the other findParameter() function.
+template <typename ParameterDataType>
+Parameter<ParameterDataType>& findParameter(
+    std::string const& parameter_name,
+    std::vector<std::unique_ptr<ParameterBase>> const& parameters,
+    int const num_components)
+{
+    auto* parameter = findParameterOptional<ParameterDataType>(
+        parameter_name, parameters, num_components);
+
+    if (!parameter)
+    {
+        OGS_FATAL(
+            "Could not find parameter `%s' in the provided parameters list.",
+            parameter_name.c_str());
+    }
+    return *parameter;
+}
+
+/// Find a parameter of specific type for a name given in the process
+/// configuration under the tag.
+/// The parameter must have the specified number of components.
+/// In the process config a parameter is referenced by a name. For example it
+/// will be looking for a parameter named "K" in the list of parameters
+/// when the tag is "hydraulic_conductivity":
+/// \code
+///     <process>
+///         ...
+///         <hydraulic_conductivity>K</hydraulic_conductivity>
+///     </process>
+/// \endcode
+/// and return a reference to that parameter. Additionally it checks for the
+/// type of the found parameter.
+template <typename ParameterDataType>
+Parameter<ParameterDataType>& findParameter(
+    BaseLib::ConfigTree const& process_config, std::string const& tag,
+    std::vector<std::unique_ptr<ParameterBase>> const& parameters,
+    int const num_components)
+{
+    // Find parameter name in process config.
+    //! \ogs_file_special
+    auto const name = process_config.getConfigParameter<std::string>(tag);
+
+    return findParameter<ParameterDataType>(name, parameters, num_components);
+}
+}  // namespace ParameterLib
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/CMakeLists.txt b/ProcessLib/CMakeLists.txt
index 162ba4aacc5185ee79e8b4ad4f3c706984316932..eaae9cbab5f7ad8657a8ff2cbc638f2a2a2c712e 100644
--- a/ProcessLib/CMakeLists.txt
+++ b/ProcessLib/CMakeLists.txt
@@ -15,7 +15,6 @@ APPEND_SOURCE_FILES(SOURCES)
 APPEND_SOURCE_FILES(SOURCES BoundaryCondition)
 APPEND_SOURCE_FILES(SOURCES SurfaceFlux)
 APPEND_SOURCE_FILES(SOURCES Output)
-APPEND_SOURCE_FILES(SOURCES Parameter)
 APPEND_SOURCE_FILES(SOURCES SourceTerms)
 APPEND_SOURCE_FILES(SOURCES Utils)
 
@@ -25,7 +24,16 @@ if(BUILD_SHARED_LIBS)
 endif()
 
 target_link_libraries(ProcessLib
-    PUBLIC BaseLib MaterialLib MathLib MeshLib NumLib logog MeshGeoToolsLib
+    PUBLIC
+        BaseLib
+        MaterialLib
+        MathLib
+        MeshGeoToolsLib
+        MeshLib
+        NumLib
+        logog
+    PRIVATE
+        ParameterLib
 )
 
 if(OGS_USE_PYTHON)
diff --git a/ProcessLib/ComponentTransport/CMakeLists.txt b/ProcessLib/ComponentTransport/CMakeLists.txt
index 0b90efa851b2a1bfa9101674341b65f3d6012e0c..15a0a6a3c54b221d2da26472c72344de90303e29 100644
--- a/ProcessLib/ComponentTransport/CMakeLists.txt
+++ b/ProcessLib/ComponentTransport/CMakeLists.txt
@@ -7,6 +7,7 @@ endif()
 
 target_link_libraries(ComponentTransport
     PUBLIC ProcessLib
+    PRIVATE ParameterLib
 )
 
 include(Tests.cmake)
diff --git a/ProcessLib/ComponentTransport/ComponentTransportFEM.h b/ProcessLib/ComponentTransport/ComponentTransportFEM.h
index 5a6939ed1908905d834233c317d03dad58241fb9..8f150157ca44c45dba5cfc63adad990cafb1244b 100644
--- a/ProcessLib/ComponentTransport/ComponentTransportFEM.h
+++ b/ProcessLib/ComponentTransport/ComponentTransportFEM.h
@@ -23,9 +23,9 @@
 #include "NumLib/Fem/FiniteElement/TemplateIsoparametric.h"
 #include "NumLib/Fem/ShapeMatrixPolicy.h"
 #include "NumLib/Function/Interpolation.h"
+#include "ParameterLib/Parameter.h"
 #include "ProcessLib/CoupledSolutionsForStaggeredScheme.h"
 #include "ProcessLib/LocalAssemblerInterface.h"
-#include "ProcessLib/Parameter/Parameter.h"
 #include "ProcessLib/ProcessVariable.h"
 #include "ProcessLib/Utils/InitShapeMatrices.h"
 
@@ -228,7 +228,7 @@ public:
         unsigned const n_integration_points =
             _integration_method.getNumberOfPoints();
 
-        SpatialPosition pos;
+        ParameterLib::SpatialPosition pos;
         pos.setElementID(_element.getID());
 
         auto const& b = _process_data.specific_body_force;
@@ -418,7 +418,7 @@ public:
         unsigned const n_integration_points =
             _integration_method.getNumberOfPoints();
 
-        SpatialPosition pos;
+        ParameterLib::SpatialPosition pos;
         pos.setElementID(_element.getID());
 
         auto const& b = _process_data.specific_body_force;
@@ -519,7 +519,7 @@ public:
         unsigned const n_integration_points =
             _integration_method.getNumberOfPoints();
 
-        SpatialPosition pos;
+        ParameterLib::SpatialPosition pos;
         pos.setElementID(_element.getID());
 
         auto const& b = _process_data.specific_body_force;
@@ -700,7 +700,7 @@ public:
             Eigen::Matrix<double, GlobalDim, Eigen::Dynamic, Eigen::RowMajor>>(
             cache, GlobalDim, n_integration_points);
 
-        SpatialPosition pos;
+        ParameterLib::SpatialPosition pos;
         pos.setElementID(_element.getID());
 
         MaterialLib::Fluid::FluidProperty::ArrayType vars;
@@ -802,7 +802,7 @@ public:
             return shape_matrices;
         }();
 
-        SpatialPosition pos;
+        ParameterLib::SpatialPosition pos;
         pos.setElementID(_element.getID());
 
         MaterialLib::Fluid::FluidProperty::ArrayType vars;
diff --git a/ProcessLib/ComponentTransport/ComponentTransportProcess.cpp b/ProcessLib/ComponentTransport/ComponentTransportProcess.cpp
index 40aa75f8e6dd3d693f9cfdaeb6d4f743abb0659f..3e77b63db2ba1c334af7bb45ecda3cfc4e135d25 100644
--- a/ProcessLib/ComponentTransport/ComponentTransportProcess.cpp
+++ b/ProcessLib/ComponentTransport/ComponentTransportProcess.cpp
@@ -22,7 +22,7 @@ namespace ComponentTransport
 ComponentTransportProcess::ComponentTransportProcess(
     MeshLib::Mesh& mesh,
     std::unique_ptr<ProcessLib::AbstractJacobianAssembler>&& jacobian_assembler,
-    std::vector<std::unique_ptr<ParameterBase>> const& parameters,
+    std::vector<std::unique_ptr<ParameterLib::ParameterBase>> const& parameters,
     unsigned const integration_order,
     std::vector<std::vector<std::reference_wrapper<ProcessVariable>>>&&
         process_variables,
diff --git a/ProcessLib/ComponentTransport/ComponentTransportProcess.h b/ProcessLib/ComponentTransport/ComponentTransportProcess.h
index 04b1a141a403692ac775813935f48ac0cd44c090..4e02bfa0efd190ea02711c0dc2196c2ec2b500ab 100644
--- a/ProcessLib/ComponentTransport/ComponentTransportProcess.h
+++ b/ProcessLib/ComponentTransport/ComponentTransportProcess.h
@@ -92,7 +92,8 @@ public:
         MeshLib::Mesh& mesh,
         std::unique_ptr<ProcessLib::AbstractJacobianAssembler>&&
             jacobian_assembler,
-        std::vector<std::unique_ptr<ParameterBase>> const& parameters,
+        std::vector<std::unique_ptr<ParameterLib::ParameterBase>> const&
+            parameters,
         unsigned const integration_order,
         std::vector<std::vector<std::reference_wrapper<ProcessVariable>>>&&
             process_variables,
diff --git a/ProcessLib/ComponentTransport/ComponentTransportProcessData.h b/ProcessLib/ComponentTransport/ComponentTransportProcessData.h
index 4ca9c3bf8e3d1bb86d82f2fc6fb73dc91dfe35f0..33c12649f735a42e41666e79ea40e90a6d1b07ee 100644
--- a/ProcessLib/ComponentTransport/ComponentTransportProcessData.h
+++ b/ProcessLib/ComponentTransport/ComponentTransportProcessData.h
@@ -34,13 +34,13 @@ struct ComponentTransportProcessData
     ComponentTransportProcessData(
         MaterialLib::PorousMedium::PorousMediaProperties&&
             porous_media_properties_,
-        ProcessLib::Parameter<double> const& fluid_reference_density_,
+        ParameterLib::Parameter<double> const& fluid_reference_density_,
         std::unique_ptr<MaterialLib::Fluid::FluidProperties>&&
             fluid_properties_,
         std::unique_ptr<MaterialPropertyLib::MaterialSpatialDistributionMap>&&
             media_map_,
-        ProcessLib::Parameter<double> const& retardation_factor_,
-        ProcessLib::Parameter<double> const& decay_rate_,
+        ParameterLib::Parameter<double> const& retardation_factor_,
+        ParameterLib::Parameter<double> const& decay_rate_,
         Eigen::VectorXd const& specific_body_force_,
         bool const has_gravity_)
         : porous_media_properties(std::move(porous_media_properties_)),
@@ -67,12 +67,12 @@ struct ComponentTransportProcessData
     void operator=(ComponentTransportProcessData&&) = delete;
 
     MaterialLib::PorousMedium::PorousMediaProperties porous_media_properties;
-    Parameter<double> const& fluid_reference_density;
+    ParameterLib::Parameter<double> const& fluid_reference_density;
     std::unique_ptr<MaterialLib::Fluid::FluidProperties> fluid_properties;
     std::unique_ptr<MaterialPropertyLib::MaterialSpatialDistributionMap>
         media_map;
-    Parameter<double> const& retardation_factor;
-    Parameter<double> const& decay_rate;
+    ParameterLib::Parameter<double> const& retardation_factor;
+    ParameterLib::Parameter<double> const& decay_rate;
     Eigen::VectorXd const specific_body_force;
     bool const has_gravity;
 };
diff --git a/ProcessLib/ComponentTransport/CreateComponentTransportProcess.cpp b/ProcessLib/ComponentTransport/CreateComponentTransportProcess.cpp
index 640fb0cd63127cfec1cc0692ec7debf9e4e1c970..c919fe849a2ffd26d24d450116e69d343252b95b 100644
--- a/ProcessLib/ComponentTransport/CreateComponentTransportProcess.cpp
+++ b/ProcessLib/ComponentTransport/CreateComponentTransportProcess.cpp
@@ -12,12 +12,11 @@
 #include "MaterialLib/Fluid/FluidProperties/CreateFluidProperties.h"
 #include "MaterialLib/MPL/CreateMaterialSpatialDistributionMap.h"
 #include "MaterialLib/PorousMedium/CreatePorousMediaProperties.h"
-
 #include "MeshLib/IO/readMeshFromFile.h"
-
-#include "ProcessLib/SurfaceFlux/SurfaceFluxData.h"
+#include "ParameterLib/ConstantParameter.h"
+#include "ParameterLib/Utils.h"
 #include "ProcessLib/Output/CreateSecondaryVariables.h"
-#include "ProcessLib/Parameter/ConstantParameter.h"
+#include "ProcessLib/SurfaceFlux/SurfaceFluxData.h"
 #include "ProcessLib/Utils/ProcessUtils.h"
 
 #include "ComponentTransportProcess.h"
@@ -30,7 +29,7 @@ std::unique_ptr<Process> createComponentTransportProcess(
     MeshLib::Mesh& mesh,
     std::unique_ptr<ProcessLib::AbstractJacobianAssembler>&& jacobian_assembler,
     std::vector<ProcessVariable> const& variables,
-    std::vector<std::unique_ptr<ParameterBase>> const& parameters,
+    std::vector<std::unique_ptr<ParameterLib::ParameterBase>> const& parameters,
     unsigned const integration_order,
     BaseLib::ConfigTree const& config,
     std::vector<std::unique_ptr<MeshLib::Mesh>> const& meshes,
@@ -110,7 +109,7 @@ std::unique_ptr<Process> createComponentTransportProcess(
         MaterialLib::Fluid::createFluidProperties(fluid_config);
 
     // Parameter for the density of the fluid.
-    auto& fluid_reference_density= findParameter<double>(
+    auto& fluid_reference_density = ParameterLib::findParameter<double>(
         config,
         //! \ogs_file_param_special{prj__processes__process__ComponentTransport__fluid_reference_density}
         "fluid_reference_density", parameters, 1);
@@ -118,14 +117,14 @@ std::unique_ptr<Process> createComponentTransportProcess(
          fluid_reference_density.name.c_str());
 
     // Parameter for the retardation factor.
-    auto const& retardation_factor =
-        findParameter<double>(config,
+    auto const& retardation_factor = ParameterLib::findParameter<double>(
+        config,
         //! \ogs_file_param_special{prj__processes__process__ComponentTransport__retardation_factor}
         "retardation_factor", parameters, 1);
 
     // Parameter for the decay rate.
-    auto const& decay_rate =
-        findParameter<double>(config,
+    auto const& decay_rate = ParameterLib::findParameter<double>(
+        config,
         //! \ogs_file_param_special{prj__processes__process__ComponentTransport__decay_rate}
         "decay_rate", parameters, 1);
 
diff --git a/ProcessLib/ComponentTransport/CreateComponentTransportProcess.h b/ProcessLib/ComponentTransport/CreateComponentTransportProcess.h
index beb66dd3180dabd51de7c67001bcf4cfd51a1d23..7f85498bdfbeb831716efa37b37107b045a58f2e 100644
--- a/ProcessLib/ComponentTransport/CreateComponentTransportProcess.h
+++ b/ProcessLib/ComponentTransport/CreateComponentTransportProcess.h
@@ -25,7 +25,7 @@ std::unique_ptr<Process> createComponentTransportProcess(
     MeshLib::Mesh& mesh,
     std::unique_ptr<ProcessLib::AbstractJacobianAssembler>&& jacobian_assembler,
     std::vector<ProcessVariable> const& variables,
-    std::vector<std::unique_ptr<ParameterBase>> const& parameters,
+    std::vector<std::unique_ptr<ParameterLib::ParameterBase>> const& parameters,
     unsigned const integration_order,
     BaseLib::ConfigTree const& config,
     std::vector<std::unique_ptr<MeshLib::Mesh>> const& meshes,
diff --git a/ProcessLib/GroundwaterFlow/CMakeLists.txt b/ProcessLib/GroundwaterFlow/CMakeLists.txt
index b60fc65b178c3b2b4b210a034cfdfbc41415e9a3..c2aa630efeb6d20e878a5497ba0f7f526d104e43 100644
--- a/ProcessLib/GroundwaterFlow/CMakeLists.txt
+++ b/ProcessLib/GroundwaterFlow/CMakeLists.txt
@@ -7,6 +7,7 @@ endif()
 
 target_link_libraries(GroundwaterFlow
     PUBLIC ProcessLib
+    PRIVATE ParameterLib
 )
 
 include(Tests.cmake)
diff --git a/ProcessLib/GroundwaterFlow/CreateGroundwaterFlowProcess.cpp b/ProcessLib/GroundwaterFlow/CreateGroundwaterFlowProcess.cpp
index f5aa21684d70d54d82dddf3f20d80506203b352e..772e003eb281dedcab53dd94ce65b87a38e834e7 100644
--- a/ProcessLib/GroundwaterFlow/CreateGroundwaterFlowProcess.cpp
+++ b/ProcessLib/GroundwaterFlow/CreateGroundwaterFlowProcess.cpp
@@ -12,11 +12,11 @@
 #include "BaseLib/FileTools.h"
 #include "GroundwaterFlowProcess.h"
 #include "GroundwaterFlowProcessData.h"
+#include "MeshLib/IO/readMeshFromFile.h"
+#include "ParameterLib/Utils.h"
 #include "ProcessLib/Output/CreateSecondaryVariables.h"
 #include "ProcessLib/Utils/ProcessUtils.h"
 
-#include "MeshLib/IO/readMeshFromFile.h"
-
 namespace ProcessLib
 {
 namespace GroundwaterFlow
@@ -25,7 +25,7 @@ std::unique_ptr<Process> createGroundwaterFlowProcess(
     MeshLib::Mesh& mesh,
     std::unique_ptr<ProcessLib::AbstractJacobianAssembler>&& jacobian_assembler,
     std::vector<ProcessVariable> const& variables,
-    std::vector<std::unique_ptr<ParameterBase>> const& parameters,
+    std::vector<std::unique_ptr<ParameterLib::ParameterBase>> const& parameters,
     unsigned const integration_order,
     BaseLib::ConfigTree const& config,
     std::vector<std::unique_ptr<MeshLib::Mesh>> const& meshes,
@@ -50,7 +50,7 @@ std::unique_ptr<Process> createGroundwaterFlowProcess(
     process_variables.push_back(std::move(per_process_variables));
 
     // Hydraulic conductivity parameter.
-    auto& hydraulic_conductivity = findParameter<double>(
+    auto& hydraulic_conductivity = ParameterLib::findParameter<double>(
         config,
         //! \ogs_file_param_special{prj__processes__process__GROUNDWATER_FLOW__hydraulic_conductivity}
         "hydraulic_conductivity", parameters, 0 /*arbitrary many components*/);
diff --git a/ProcessLib/GroundwaterFlow/CreateGroundwaterFlowProcess.h b/ProcessLib/GroundwaterFlow/CreateGroundwaterFlowProcess.h
index 2398e105a8fe284964ddf3e65006148ff86973ec..009fc80362712b4cefdc04b6ddc2bae59145d5ed 100644
--- a/ProcessLib/GroundwaterFlow/CreateGroundwaterFlowProcess.h
+++ b/ProcessLib/GroundwaterFlow/CreateGroundwaterFlowProcess.h
@@ -21,7 +21,7 @@ std::unique_ptr<Process> createGroundwaterFlowProcess(
     MeshLib::Mesh& mesh,
     std::unique_ptr<ProcessLib::AbstractJacobianAssembler>&& jacobian_assembler,
     std::vector<ProcessVariable> const& variables,
-    std::vector<std::unique_ptr<ParameterBase>> const& parameters,
+    std::vector<std::unique_ptr<ParameterLib::ParameterBase>> const& parameters,
     unsigned const integration_order,
     BaseLib::ConfigTree const& config,
     std::vector<std::unique_ptr<MeshLib::Mesh>> const& meshes,
diff --git a/ProcessLib/GroundwaterFlow/GroundwaterFlowFEM.h b/ProcessLib/GroundwaterFlow/GroundwaterFlowFEM.h
index 2bc3727aee66a3b1ec96329c354e4536b5537332..c4be98e8eacbe3ef909294170144b6c07e9b0149 100644
--- a/ProcessLib/GroundwaterFlow/GroundwaterFlowFEM.h
+++ b/ProcessLib/GroundwaterFlow/GroundwaterFlowFEM.h
@@ -17,9 +17,9 @@
 #include "NumLib/Extrapolation/ExtrapolatableElement.h"
 #include "NumLib/Fem/FiniteElement/TemplateIsoparametric.h"
 #include "NumLib/Fem/ShapeMatrixPolicy.h"
+#include "ParameterLib/Parameter.h"
 #include "ProcessLib/LocalAssemblerInterface.h"
 #include "ProcessLib/LocalAssemblerTraits.h"
-#include "ProcessLib/Parameter/Parameter.h"
 #include "ProcessLib/Utils/InitShapeMatrices.h"
 
 namespace ProcessLib
@@ -115,7 +115,7 @@ public:
         unsigned const n_integration_points =
             _integration_method.getNumberOfPoints();
 
-        SpatialPosition pos;
+        ParameterLib::SpatialPosition pos;
         pos.setElementID(_element.getID());
 
         for (unsigned ip = 0; ip < n_integration_points; ip++)
@@ -153,7 +153,7 @@ public:
                                  GlobalDim, false);
 
         // fetch hydraulic conductivity
-        SpatialPosition pos;
+        ParameterLib::SpatialPosition pos;
         pos.setElementID(_element.getID());
         auto const k = _process_data.hydraulic_conductivity(t, pos)[0];
 
@@ -195,7 +195,7 @@ public:
             Eigen::Matrix<double, GlobalDim, Eigen::Dynamic, Eigen::RowMajor>>(
             cache, GlobalDim, n_integration_points);
 
-        SpatialPosition pos;
+        ParameterLib::SpatialPosition pos;
         pos.setElementID(_element.getID());
 
         for (unsigned i = 0; i < n_integration_points; ++i)
diff --git a/ProcessLib/GroundwaterFlow/GroundwaterFlowProcess.cpp b/ProcessLib/GroundwaterFlow/GroundwaterFlowProcess.cpp
index 8af6f1f5f9b16ebfcfc2e162ec27ba8c1b34aaf2..e25befb3081b458a75f959d0bb23250ca32472c3 100644
--- a/ProcessLib/GroundwaterFlow/GroundwaterFlowProcess.cpp
+++ b/ProcessLib/GroundwaterFlow/GroundwaterFlowProcess.cpp
@@ -20,7 +20,7 @@ namespace GroundwaterFlow
 GroundwaterFlowProcess::GroundwaterFlowProcess(
     MeshLib::Mesh& mesh,
     std::unique_ptr<ProcessLib::AbstractJacobianAssembler>&& jacobian_assembler,
-    std::vector<std::unique_ptr<ParameterBase>> const& parameters,
+    std::vector<std::unique_ptr<ParameterLib::ParameterBase>> const& parameters,
     unsigned const integration_order,
     std::vector<std::vector<std::reference_wrapper<ProcessVariable>>>&&
         process_variables,
diff --git a/ProcessLib/GroundwaterFlow/GroundwaterFlowProcess.h b/ProcessLib/GroundwaterFlow/GroundwaterFlowProcess.h
index ff879376800bf3723bec4f3405e9c954679132e0..c25f2dba7c6a0368d28cfb258fa44ef1a329447b 100644
--- a/ProcessLib/GroundwaterFlow/GroundwaterFlowProcess.h
+++ b/ProcessLib/GroundwaterFlow/GroundwaterFlowProcess.h
@@ -29,7 +29,8 @@ public:
         MeshLib::Mesh& mesh,
         std::unique_ptr<ProcessLib::AbstractJacobianAssembler>&&
             jacobian_assembler,
-        std::vector<std::unique_ptr<ParameterBase>> const& parameters,
+        std::vector<std::unique_ptr<ParameterLib::ParameterBase>> const&
+            parameters,
         unsigned const integration_order,
         std::vector<std::vector<std::reference_wrapper<ProcessVariable>>>&&
             process_variables,
diff --git a/ProcessLib/GroundwaterFlow/GroundwaterFlowProcessData.h b/ProcessLib/GroundwaterFlow/GroundwaterFlowProcessData.h
index a6280ac7d7863a06d7fdad183fc403c314876808..37d4e339b8eab0722ba7ab012a779036efaef6a0 100644
--- a/ProcessLib/GroundwaterFlow/GroundwaterFlowProcessData.h
+++ b/ProcessLib/GroundwaterFlow/GroundwaterFlowProcessData.h
@@ -21,7 +21,7 @@ namespace GroundwaterFlow
 struct GroundwaterFlowProcessData
 {
     GroundwaterFlowProcessData(
-        Parameter<double> const& hydraulic_conductivity_)
+        ParameterLib::Parameter<double> const& hydraulic_conductivity_)
         : hydraulic_conductivity(hydraulic_conductivity_)
     {}
 
@@ -38,7 +38,7 @@ struct GroundwaterFlowProcessData
     //! Assignments are not needed.
     void operator=(GroundwaterFlowProcessData&&) = delete;
 
-    Parameter<double> const& hydraulic_conductivity;
+    ParameterLib::Parameter<double> const& hydraulic_conductivity;
 };
 
 } // namespace GroundwaterFlow
diff --git a/ProcessLib/HT/CMakeLists.txt b/ProcessLib/HT/CMakeLists.txt
index 0adfff1a8c7d0074814fcb0a09c0f5672fc37be7..1cf1581847e218a58452bd21cf1f249545c069a4 100644
--- a/ProcessLib/HT/CMakeLists.txt
+++ b/ProcessLib/HT/CMakeLists.txt
@@ -4,6 +4,9 @@ add_library(HT ${SOURCES})
 if(BUILD_SHARED_LIBS)
     install(TARGETS HT LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR})
 endif()
-target_link_libraries(HT PUBLIC ProcessLib)
+target_link_libraries(HT
+    PUBLIC ProcessLib
+    PRIVATE ParameterLib
+)
 
 include(Tests.cmake)
diff --git a/ProcessLib/HT/CreateHTProcess.cpp b/ProcessLib/HT/CreateHTProcess.cpp
index ca665c136bea98c4cd6982489c60c1d229f6c7f4..24023603476b7dca5bcccddd07ec9ebb42d159c4 100644
--- a/ProcessLib/HT/CreateHTProcess.cpp
+++ b/ProcessLib/HT/CreateHTProcess.cpp
@@ -11,13 +11,12 @@
 
 #include "MaterialLib/Fluid/FluidProperties/CreateFluidProperties.h"
 #include "MaterialLib/PorousMedium/CreatePorousMediaProperties.h"
-
 #include "MeshLib/IO/readMeshFromFile.h"
-
+#include "ParameterLib/ConstantParameter.h"
+#include "ParameterLib/Utils.h"
 #include "ProcessLib/Output/CreateSecondaryVariables.h"
-#include "ProcessLib/Parameter/ConstantParameter.h"
-#include "ProcessLib/Utils/ProcessUtils.h"
 #include "ProcessLib/SurfaceFlux/SurfaceFluxData.h"
+#include "ProcessLib/Utils/ProcessUtils.h"
 
 #include "HTProcess.h"
 #include "HTMaterialProperties.h"
@@ -31,7 +30,7 @@ std::unique_ptr<Process> createHTProcess(
     MeshLib::Mesh& mesh,
     std::unique_ptr<ProcessLib::AbstractJacobianAssembler>&& jacobian_assembler,
     std::vector<ProcessVariable> const& variables,
-    std::vector<std::unique_ptr<ParameterBase>> const& parameters,
+    std::vector<std::unique_ptr<ParameterLib::ParameterBase>> const& parameters,
     unsigned const integration_order,
     BaseLib::ConfigTree const& config,
     std::vector<std::unique_ptr<MeshLib::Mesh>> const& meshes,
@@ -90,14 +89,14 @@ std::unique_ptr<Process> createHTProcess(
         MaterialLib::Fluid::createFluidProperties(fluid_config);
 
     // Parameter for the density of the solid.
-    auto& density_solid = findParameter<double>(
+    auto& density_solid = ParameterLib::findParameter<double>(
         config,
         //! \ogs_file_param_special{prj__processes__process__HT__density_solid}
         "density_solid", parameters, 1);
     DBUG("Use '%s' as density_solid parameter.", density_solid.name.c_str());
 
     // Parameter for the specific heat capacity of the solid.
-    auto& specific_heat_capacity_solid = findParameter<double>(
+    auto& specific_heat_capacity_solid = ParameterLib::findParameter<double>(
         config,
         //! \ogs_file_param_special{prj__processes__process__HT__specific_heat_capacity_solid}
         "specific_heat_capacity_solid", parameters, 1);
@@ -107,14 +106,16 @@ std::unique_ptr<Process> createHTProcess(
     // Parameter for the thermal conductivity of the solid (only one scalar per
     // element, i.e., the isotropic case is handled at the moment)
 
-    ConstantParameter<double> default_thermal_dispersivity_longitudinal(
-        "default thermal dispersivity longitudinal", 0.);
-    ConstantParameter<double> default_thermal_dispersivity_transversal(
-        "default thermal dispersivity transversal", 0.);
+    ParameterLib::ConstantParameter<double>
+        default_thermal_dispersivity_longitudinal(
+            "default thermal dispersivity longitudinal", 0.);
+    ParameterLib::ConstantParameter<double>
+        default_thermal_dispersivity_transversal(
+            "default thermal dispersivity transversal", 0.);
 
-    Parameter<double>* thermal_dispersivity_longitudinal =
+    ParameterLib::Parameter<double>* thermal_dispersivity_longitudinal =
         &default_thermal_dispersivity_longitudinal;
-    Parameter<double>* thermal_dispersivity_transversal =
+    ParameterLib::Parameter<double>* thermal_dispersivity_transversal =
         &default_thermal_dispersivity_transversal;
     auto const dispersion_config =
         //! \ogs_file_param{prj__processes__process__HT__thermal_dispersivity}
@@ -123,7 +124,8 @@ std::unique_ptr<Process> createHTProcess(
         static_cast<bool>(dispersion_config);
     if (dispersion_config)
     {
-        thermal_dispersivity_longitudinal = &findParameter<double>(
+        thermal_dispersivity_longitudinal = &ParameterLib::findParameter<
+            double>(
             *dispersion_config,
             //! \ogs_file_param_special{prj__processes__process__HT__thermal_dispersivity__longitudinal}
             "longitudinal", parameters, 1);
@@ -133,7 +135,7 @@ std::unique_ptr<Process> createHTProcess(
         // Parameter for the thermal conductivity of the solid (only one scalar
         // per
         // element, i.e., the isotropic case is handled at the moment)
-        thermal_dispersivity_transversal = &findParameter<double>(
+        thermal_dispersivity_transversal = &ParameterLib::findParameter<double>(
             *dispersion_config,
             //! \ogs_file_param_special{prj__processes__process__HT__thermal_dispersivity__transversal}
             "transversal", parameters, 1);
@@ -143,7 +145,7 @@ std::unique_ptr<Process> createHTProcess(
 
     // Parameter for the thermal conductivity of the solid (only one scalar per
     // element, i.e., the isotropic case is handled at the moment)
-    auto& thermal_conductivity_solid = findParameter<double>(
+    auto& thermal_conductivity_solid = ParameterLib::findParameter<double>(
         config,
         //! \ogs_file_param_special{prj__processes__process__HT__thermal_conductivity_solid}
         "thermal_conductivity_solid", parameters, 1);
@@ -151,7 +153,7 @@ std::unique_ptr<Process> createHTProcess(
          thermal_conductivity_solid.name.c_str());
 
     // Parameter for the thermal conductivity of the fluid.
-    auto& thermal_conductivity_fluid = findParameter<double>(
+    auto& thermal_conductivity_fluid = ParameterLib::findParameter<double>(
         config,
         //! \ogs_file_param_special{prj__processes__process__HT__thermal_conductivity_fluid}
         "thermal_conductivity_fluid", parameters, 1);
@@ -178,13 +180,13 @@ std::unique_ptr<Process> createHTProcess(
         std::copy_n(b.data(), b.size(), specific_body_force.data());
     }
 
-    ConstantParameter<double> default_solid_thermal_expansion(
+    ParameterLib::ConstantParameter<double> default_solid_thermal_expansion(
         "default solid thermal expansion", 0.);
-    ConstantParameter<double> default_biot_constant("default_biot constant",
-                                                    0.);
-    Parameter<double>* solid_thermal_expansion =
+    ParameterLib::ConstantParameter<double> default_biot_constant(
+        "default_biot constant", 0.);
+    ParameterLib::Parameter<double>* solid_thermal_expansion =
         &default_solid_thermal_expansion;
-    Parameter<double>* biot_constant = &default_biot_constant;
+    ParameterLib::Parameter<double>* biot_constant = &default_biot_constant;
 
     auto const solid_config =
         //! \ogs_file_param{prj__processes__process__HT__solid_thermal_expansion}
@@ -192,12 +194,12 @@ std::unique_ptr<Process> createHTProcess(
     const bool has_fluid_thermal_expansion = static_cast<bool>(solid_config);
     if (solid_config)
     {
-        solid_thermal_expansion = &findParameter<double>(
+        solid_thermal_expansion = &ParameterLib::findParameter<double>(
             //! \ogs_file_param_special{prj__processes__process__HT__solid_thermal_expansion__thermal_expansion}
             *solid_config, "thermal_expansion", parameters, 1);
         DBUG("Use '%s' as solid thermal expansion.",
              solid_thermal_expansion->name.c_str());
-        biot_constant = &findParameter<double>(
+        biot_constant = &ParameterLib::findParameter<double>(
             //! \ogs_file_param_special{prj__processes__process__HT__solid_thermal_expansion__biot_constant}
             *solid_config, "biot_constant", parameters, 1);
         DBUG("Use '%s' as Biot's constant.", biot_constant->name.c_str());
diff --git a/ProcessLib/HT/CreateHTProcess.h b/ProcessLib/HT/CreateHTProcess.h
index 8d711cf0b5e428bce82adc77bd0b58181428bd6c..2e3e78644e1bef2bbba9e36273f1341e178c95a5 100644
--- a/ProcessLib/HT/CreateHTProcess.h
+++ b/ProcessLib/HT/CreateHTProcess.h
@@ -20,7 +20,7 @@ std::unique_ptr<Process> createHTProcess(
     MeshLib::Mesh& mesh,
     std::unique_ptr<ProcessLib::AbstractJacobianAssembler>&& jacobian_assembler,
     std::vector<ProcessVariable> const& variables,
-    std::vector<std::unique_ptr<ParameterBase>> const& parameters,
+    std::vector<std::unique_ptr<ParameterLib::ParameterBase>> const& parameters,
     unsigned const integration_order,
     BaseLib::ConfigTree const& config,
     std::vector<std::unique_ptr<MeshLib::Mesh>> const& meshes,
diff --git a/ProcessLib/HT/HTFEM.h b/ProcessLib/HT/HTFEM.h
index 2ac9e6274e57aca51e23ae3b24afd0314592f5d1..bf6372035e13d6e153d59a76095f3371412afa09 100644
--- a/ProcessLib/HT/HTFEM.h
+++ b/ProcessLib/HT/HTFEM.h
@@ -18,7 +18,7 @@
 #include "NumLib/Extrapolation/ExtrapolatableElement.h"
 #include "NumLib/Fem/FiniteElement/TemplateIsoparametric.h"
 #include "NumLib/Fem/ShapeMatrixPolicy.h"
-#include "ProcessLib/Parameter/Parameter.h"
+#include "ParameterLib/Parameter.h"
 #include "ProcessLib/Utils/InitShapeMatrices.h"
 
 #include "HTLocalAssemblerInterface.h"
@@ -111,7 +111,7 @@ public:
                                  GlobalDim, false);
 
         // fetch permeability, viscosity, density
-        SpatialPosition pos;
+        ParameterLib::SpatialPosition pos;
         pos.setElementID(this->_element.getID());
 
         MaterialLib::Fluid::FluidProperty::ArrayType vars;
@@ -164,7 +164,8 @@ protected:
             IntegrationPointData<NodalRowVectorType, GlobalDimNodalMatrixType>>>
         _ip_data;
 
-    double getHeatEnergyCoefficient(const double t, const SpatialPosition& pos,
+    double getHeatEnergyCoefficient(const double t,
+                                    const ParameterLib::SpatialPosition& pos,
                                     const double porosity,
                                     const double fluid_density,
                                     const double specific_heat_capacity_fluid)
@@ -179,8 +180,9 @@ protected:
     }
 
     GlobalDimMatrixType getThermalConductivityDispersivity(
-        const double t, const SpatialPosition& pos, const double porosity,
-        const double fluid_density, const double specific_heat_capacity_fluid,
+        const double t, const ParameterLib::SpatialPosition& pos,
+        const double porosity, const double fluid_density,
+        const double specific_heat_capacity_fluid,
         const GlobalDimVectorType& velocity, const GlobalDimMatrixType& I)
     {
         auto const thermal_conductivity_solid =
@@ -229,7 +231,7 @@ protected:
             Eigen::Matrix<double, GlobalDim, Eigen::Dynamic, Eigen::RowMajor>>(
             cache, GlobalDim, n_integration_points);
 
-        SpatialPosition pos;
+        ParameterLib::SpatialPosition pos;
         pos.setElementID(_element.getID());
 
         MaterialLib::Fluid::FluidProperty::ArrayType vars;
diff --git a/ProcessLib/HT/HTMaterialProperties.h b/ProcessLib/HT/HTMaterialProperties.h
index 94a251167e8107ca226de0d7074adb4f0a21add4..a80663c2489c116651b95a8b4cfdcde50de0985b 100644
--- a/ProcessLib/HT/HTMaterialProperties.h
+++ b/ProcessLib/HT/HTMaterialProperties.h
@@ -27,18 +27,20 @@ struct HTMaterialProperties
     HTMaterialProperties(
         MaterialLib::PorousMedium::PorousMediaProperties&&
             porous_media_properties_,
-        ProcessLib::Parameter<double> const& density_solid_,
+        ParameterLib::Parameter<double> const& density_solid_,
         std::unique_ptr<MaterialLib::Fluid::FluidProperties>&&
             fluid_properties_,
         bool const has_fluid_thermal_dispersivity_,
-        ProcessLib::Parameter<double> const& thermal_dispersivity_longitudinal_,
-        ProcessLib::Parameter<double> const& thermal_dispersivity_transversal_,
-        ProcessLib::Parameter<double> const& specific_heat_capacity_solid_,
-        ProcessLib::Parameter<double> const& thermal_conductivity_solid_,
-        ProcessLib::Parameter<double> const& thermal_conductivity_fluid_,
+        ParameterLib::Parameter<double> const&
+            thermal_dispersivity_longitudinal_,
+        ParameterLib::Parameter<double> const&
+            thermal_dispersivity_transversal_,
+        ParameterLib::Parameter<double> const& specific_heat_capacity_solid_,
+        ParameterLib::Parameter<double> const& thermal_conductivity_solid_,
+        ParameterLib::Parameter<double> const& thermal_conductivity_fluid_,
         bool const has_fluid_thermal_expansion_,
-        Parameter<double> const& solid_thermal_expansion_,
-        Parameter<double> const& biot_constant_,
+        ParameterLib::Parameter<double> const& solid_thermal_expansion_,
+        ParameterLib::Parameter<double> const& biot_constant_,
         Eigen::VectorXd specific_body_force_,
         bool const has_gravity_)
         : porous_media_properties(std::move(porous_media_properties_)),
@@ -59,18 +61,18 @@ struct HTMaterialProperties
     }
 
     MaterialLib::PorousMedium::PorousMediaProperties porous_media_properties;
-    Parameter<double> const& density_solid;
+    ParameterLib::Parameter<double> const& density_solid;
     std::unique_ptr<MaterialLib::Fluid::FluidProperties> fluid_properties;
-    Parameter<double> const& specific_heat_capacity_solid;
+    ParameterLib::Parameter<double> const& specific_heat_capacity_solid;
     bool const has_fluid_thermal_dispersivity;
-    Parameter<double> const& thermal_dispersivity_longitudinal;
-    Parameter<double> const& thermal_dispersivity_transversal;
-    Parameter<double> const& thermal_conductivity_solid;
-    Parameter<double> const& thermal_conductivity_fluid;
+    ParameterLib::Parameter<double> const& thermal_dispersivity_longitudinal;
+    ParameterLib::Parameter<double> const& thermal_dispersivity_transversal;
+    ParameterLib::Parameter<double> const& thermal_conductivity_solid;
+    ParameterLib::Parameter<double> const& thermal_conductivity_fluid;
 
     bool const has_fluid_thermal_expansion;
-    Parameter<double> const& solid_thermal_expansion;
-    Parameter<double> const& biot_constant;
+    ParameterLib::Parameter<double> const& solid_thermal_expansion;
+    ParameterLib::Parameter<double> const& biot_constant;
 
     Eigen::VectorXd const specific_body_force;
     bool const has_gravity;
diff --git a/ProcessLib/HT/HTProcess.cpp b/ProcessLib/HT/HTProcess.cpp
index d19f57f597b89dcecb5c982326f7f2fc589d7293..300725dd1fc51499c54dd52ec1ecc7a5ef6bef3a 100644
--- a/ProcessLib/HT/HTProcess.cpp
+++ b/ProcessLib/HT/HTProcess.cpp
@@ -27,7 +27,7 @@ namespace HT
 HTProcess::HTProcess(
     MeshLib::Mesh& mesh,
     std::unique_ptr<ProcessLib::AbstractJacobianAssembler>&& jacobian_assembler,
-    std::vector<std::unique_ptr<ParameterBase>> const& parameters,
+    std::vector<std::unique_ptr<ParameterLib::ParameterBase>> const& parameters,
     unsigned const integration_order,
     std::vector<std::vector<std::reference_wrapper<ProcessVariable>>>&&
         process_variables,
diff --git a/ProcessLib/HT/HTProcess.h b/ProcessLib/HT/HTProcess.h
index a955d35d4ae8402d0a6075ac83cbd94249e6edbb..d5f03eb344ea6bc2d06e0af9ecc5ea0fd394f537 100644
--- a/ProcessLib/HT/HTProcess.h
+++ b/ProcessLib/HT/HTProcess.h
@@ -53,7 +53,8 @@ public:
         MeshLib::Mesh& mesh,
         std::unique_ptr<ProcessLib::AbstractJacobianAssembler>&&
             jacobian_assembler,
-        std::vector<std::unique_ptr<ParameterBase>> const& parameters,
+        std::vector<std::unique_ptr<ParameterLib::ParameterBase>> const&
+            parameters,
         unsigned const integration_order,
         std::vector<std::vector<std::reference_wrapper<ProcessVariable>>>&&
             process_variables,
diff --git a/ProcessLib/HT/MonolithicHTFEM.h b/ProcessLib/HT/MonolithicHTFEM.h
index a9a7e20bf6d1c66c2deb7e293d8290d1d2ae5b85..31986d6cae17374974329e2699f5fa55c8c8960a 100644
--- a/ProcessLib/HT/MonolithicHTFEM.h
+++ b/ProcessLib/HT/MonolithicHTFEM.h
@@ -19,7 +19,7 @@
 #include "NumLib/Extrapolation/ExtrapolatableElement.h"
 #include "NumLib/Fem/FiniteElement/TemplateIsoparametric.h"
 #include "NumLib/Fem/ShapeMatrixPolicy.h"
-#include "ProcessLib/Parameter/Parameter.h"
+#include "ParameterLib/Parameter.h"
 #include "ProcessLib/Utils/InitShapeMatrices.h"
 
 #include "HTFEM.h"
@@ -90,7 +90,7 @@ public:
             local_M.template block<num_nodes, num_nodes>(num_nodes, num_nodes);
         auto Bp = local_b.template block<num_nodes, 1>(num_nodes, 0);
 
-        SpatialPosition pos;
+        ParameterLib::SpatialPosition pos;
         pos.setElementID(this->_element.getID());
 
         auto p_nodal_values =
diff --git a/ProcessLib/HT/StaggeredHTFEM-impl.h b/ProcessLib/HT/StaggeredHTFEM-impl.h
index 0308f8608bc07d9c7bda5d103c2e6d75c2e74310..8f1b0b798a69385b431daeab3ce3a8fbebdcb1ed 100644
--- a/ProcessLib/HT/StaggeredHTFEM-impl.h
+++ b/ProcessLib/HT/StaggeredHTFEM-impl.h
@@ -66,7 +66,7 @@ void StaggeredHTFEM<ShapeFunction, IntegrationMethod, GlobalDim>::
     auto local_b = MathLib::createZeroedVector<LocalVectorType>(
         local_b_data, local_matrix_size);
 
-    SpatialPosition pos;
+    ParameterLib::SpatialPosition pos;
     pos.setElementID(this->_element.getID());
 
     auto const& material_properties = this->_material_properties;
@@ -193,7 +193,7 @@ void StaggeredHTFEM<ShapeFunction, IntegrationMethod, GlobalDim>::
     auto local_K = MathLib::createZeroedMatrix<LocalMatrixType>(
         local_K_data, local_matrix_size, local_matrix_size);
 
-    SpatialPosition pos;
+    ParameterLib::SpatialPosition pos;
     pos.setElementID(this->_element.getID());
 
     auto const& material_properties = this->_material_properties;
diff --git a/ProcessLib/HT/StaggeredHTFEM.h b/ProcessLib/HT/StaggeredHTFEM.h
index e451c77a1caed592aadfa294a7648a9616c4f7f2..8a8c5e47baec5111d7c5922e524d1e304e4cea85 100644
--- a/ProcessLib/HT/StaggeredHTFEM.h
+++ b/ProcessLib/HT/StaggeredHTFEM.h
@@ -18,7 +18,7 @@
 #include "NumLib/Extrapolation/ExtrapolatableElement.h"
 #include "NumLib/Fem/FiniteElement/TemplateIsoparametric.h"
 #include "NumLib/Fem/ShapeMatrixPolicy.h"
-#include "ProcessLib/Parameter/Parameter.h"
+#include "ParameterLib/Parameter.h"
 #include "ProcessLib/Utils/InitShapeMatrices.h"
 
 #include "HTFEM.h"
diff --git a/ProcessLib/HeatConduction/CMakeLists.txt b/ProcessLib/HeatConduction/CMakeLists.txt
index d254ac48d5593c99de3c32811d2f3b825781d51e..5b1b842b98b83b0b5960dcc78ea090f9a6a5837c 100644
--- a/ProcessLib/HeatConduction/CMakeLists.txt
+++ b/ProcessLib/HeatConduction/CMakeLists.txt
@@ -4,6 +4,9 @@ add_library(HeatConduction ${SOURCES})
 if(BUILD_SHARED_LIBS)
     install(TARGETS HeatConduction LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR})
 endif()
-target_link_libraries(HeatConduction PUBLIC ProcessLib)
+target_link_libraries(HeatConduction
+    PUBLIC ProcessLib
+    PRIVATE ParameterLib
+)
 
 include(Tests.cmake)
diff --git a/ProcessLib/HeatConduction/CreateHeatConductionProcess.cpp b/ProcessLib/HeatConduction/CreateHeatConductionProcess.cpp
index 563d50afc0d83d623991eec455868c8ebee41583..69b0f8c5ec37408d701ffe45ad6a33dec10c7267 100644
--- a/ProcessLib/HeatConduction/CreateHeatConductionProcess.cpp
+++ b/ProcessLib/HeatConduction/CreateHeatConductionProcess.cpp
@@ -11,6 +11,7 @@
 
 #include "HeatConductionProcess.h"
 #include "HeatConductionProcessData.h"
+#include "ParameterLib/Utils.h"
 #include "ProcessLib/Output/CreateSecondaryVariables.h"
 #include "ProcessLib/Utils/ProcessUtils.h"
 
@@ -22,7 +23,7 @@ std::unique_ptr<Process> createHeatConductionProcess(
     MeshLib::Mesh& mesh,
     std::unique_ptr<ProcessLib::AbstractJacobianAssembler>&& jacobian_assembler,
     std::vector<ProcessVariable> const& variables,
-    std::vector<std::unique_ptr<ParameterBase>> const& parameters,
+    std::vector<std::unique_ptr<ParameterLib::ParameterBase>> const& parameters,
     unsigned const integration_order,
     BaseLib::ConfigTree const& config)
 {
@@ -45,7 +46,7 @@ std::unique_ptr<Process> createHeatConductionProcess(
     process_variables.push_back(std::move(per_process_variables));
 
     // thermal conductivity parameter.
-    auto& thermal_conductivity = findParameter<double>(
+    auto& thermal_conductivity = ParameterLib::findParameter<double>(
         config,
         //! \ogs_file_param_special{prj__processes__process__HEAT_CONDUCTION__thermal_conductivity}
         "thermal_conductivity", parameters, 1);
@@ -54,7 +55,7 @@ std::unique_ptr<Process> createHeatConductionProcess(
          thermal_conductivity.name.c_str());
 
     // heat capacity parameter.
-    auto& heat_capacity = findParameter<double>(
+    auto& heat_capacity = ParameterLib::findParameter<double>(
         config,
         //! \ogs_file_param_special{prj__processes__process__HEAT_CONDUCTION__heat_capacity}
         "heat_capacity", parameters, 1);
@@ -62,7 +63,7 @@ std::unique_ptr<Process> createHeatConductionProcess(
     DBUG("Use '%s' as heat capacity parameter.", heat_capacity.name.c_str());
 
     // density parameter.
-    auto& density = findParameter<double>(
+    auto& density = ParameterLib::findParameter<double>(
         config,
         //! \ogs_file_param_special{prj__processes__process__HEAT_CONDUCTION__density}
         "density", parameters, 1);
diff --git a/ProcessLib/HeatConduction/CreateHeatConductionProcess.h b/ProcessLib/HeatConduction/CreateHeatConductionProcess.h
index 594629f216eb1d12696b3a33a9552e1d872d4d00..5c9481568bccc305fb9925ad28b8c5bbe13ef1fd 100644
--- a/ProcessLib/HeatConduction/CreateHeatConductionProcess.h
+++ b/ProcessLib/HeatConduction/CreateHeatConductionProcess.h
@@ -20,7 +20,7 @@ std::unique_ptr<Process> createHeatConductionProcess(
     MeshLib::Mesh& mesh,
     std::unique_ptr<ProcessLib::AbstractJacobianAssembler>&& jacobian_assembler,
     std::vector<ProcessVariable> const& variables,
-    std::vector<std::unique_ptr<ParameterBase>> const& parameters,
+    std::vector<std::unique_ptr<ParameterLib::ParameterBase>> const& parameters,
     unsigned const integration_order,
     BaseLib::ConfigTree const& config);
 
diff --git a/ProcessLib/HeatConduction/HeatConductionFEM.h b/ProcessLib/HeatConduction/HeatConductionFEM.h
index 33142679aa48c6c19fcd6c4339d07750fee709d6..bee07d3f3118196acc3d5ffe8464c0a0662e54b7 100644
--- a/ProcessLib/HeatConduction/HeatConductionFEM.h
+++ b/ProcessLib/HeatConduction/HeatConductionFEM.h
@@ -16,9 +16,9 @@
 #include "NumLib/Extrapolation/ExtrapolatableElement.h"
 #include "NumLib/Fem/FiniteElement/TemplateIsoparametric.h"
 #include "NumLib/Fem/ShapeMatrixPolicy.h"
+#include "ParameterLib/Parameter.h"
 #include "ProcessLib/LocalAssemblerInterface.h"
 #include "ProcessLib/LocalAssemblerTraits.h"
-#include "ProcessLib/Parameter/Parameter.h"
 #include "ProcessLib/Utils/InitShapeMatrices.h"
 
 namespace ProcessLib
@@ -107,7 +107,7 @@ public:
         unsigned const n_integration_points =
             _integration_method.getNumberOfPoints();
 
-        SpatialPosition pos;
+        ParameterLib::SpatialPosition pos;
         pos.setElementID(_element.getID());
 
         for (unsigned ip = 0; ip < n_integration_points; ip++)
@@ -138,7 +138,7 @@ public:
         unsigned const n_integration_points =
             _integration_method.getNumberOfPoints();
 
-        SpatialPosition pos;
+        ParameterLib::SpatialPosition pos;
         pos.setElementID(_element.getID());
         const auto local_x_vec =
             MathLib::toVector<NodalVectorType>(local_x, local_matrix_size);
diff --git a/ProcessLib/HeatConduction/HeatConductionProcess.cpp b/ProcessLib/HeatConduction/HeatConductionProcess.cpp
index a60192b80abf0981c038d1c06a1142012e43dd29..2e0f2c37fb1a577798bd99906b888b61c732c099 100644
--- a/ProcessLib/HeatConduction/HeatConductionProcess.cpp
+++ b/ProcessLib/HeatConduction/HeatConductionProcess.cpp
@@ -20,7 +20,7 @@ namespace HeatConduction
 HeatConductionProcess::HeatConductionProcess(
     MeshLib::Mesh& mesh,
     std::unique_ptr<ProcessLib::AbstractJacobianAssembler>&& jacobian_assembler,
-    std::vector<std::unique_ptr<ParameterBase>> const& parameters,
+    std::vector<std::unique_ptr<ParameterLib::ParameterBase>> const& parameters,
     unsigned const integration_order,
     std::vector<std::vector<std::reference_wrapper<ProcessVariable>>>&&
         process_variables,
diff --git a/ProcessLib/HeatConduction/HeatConductionProcess.h b/ProcessLib/HeatConduction/HeatConductionProcess.h
index 4e204abf0c3c46401b16c8c09c85d5c795f225ec..b073add6204e33101738604c785a43534c5972fe 100644
--- a/ProcessLib/HeatConduction/HeatConductionProcess.h
+++ b/ProcessLib/HeatConduction/HeatConductionProcess.h
@@ -25,7 +25,8 @@ public:
         MeshLib::Mesh& mesh,
         std::unique_ptr<ProcessLib::AbstractJacobianAssembler>&&
             jacobian_assembler,
-        std::vector<std::unique_ptr<ParameterBase>> const& parameters,
+        std::vector<std::unique_ptr<ParameterLib::ParameterBase>> const&
+            parameters,
         unsigned const integration_order,
         std::vector<std::vector<std::reference_wrapper<ProcessVariable>>>&&
             process_variables,
diff --git a/ProcessLib/HeatConduction/HeatConductionProcessData.h b/ProcessLib/HeatConduction/HeatConductionProcessData.h
index 288e0e3cbfee207fdad7f8a87a492f9b0e84292f..e1d641d457060ef57c6b5480646379ff0f108f9d 100644
--- a/ProcessLib/HeatConduction/HeatConductionProcessData.h
+++ b/ProcessLib/HeatConduction/HeatConductionProcessData.h
@@ -9,19 +9,20 @@
 
 #pragma once
 
-namespace ProcessLib
+namespace ParameterLib
 {
 template <typename T>
 struct Parameter;
+}
 
-namespace HeatConduction
+namespace ProcessLib::HeatConduction
 {
-
 struct HeatConductionProcessData
 {
-    HeatConductionProcessData(Parameter<double> const& thermal_conductivity_,
-                              Parameter<double> const& heat_capacity_,
-                              Parameter<double> const& density_)
+    HeatConductionProcessData(
+        ParameterLib::Parameter<double> const& thermal_conductivity_,
+        ParameterLib::Parameter<double> const& heat_capacity_,
+        ParameterLib::Parameter<double> const& density_)
         : thermal_conductivity(thermal_conductivity_),
           heat_capacity(heat_capacity_),
           density(density_)
@@ -44,10 +45,8 @@ struct HeatConductionProcessData
     //! Assignments are not needed.
     void operator=(HeatConductionProcessData&&) = delete;
 
-    Parameter<double> const& thermal_conductivity;
-    Parameter<double> const& heat_capacity;
-    Parameter<double> const& density;
+    ParameterLib::Parameter<double> const& thermal_conductivity;
+    ParameterLib::Parameter<double> const& heat_capacity;
+    ParameterLib::Parameter<double> const& density;
 };
-
-}  // namespace HeatConduction
-}  // namespace ProcessLib
+}  // namespace ProcessLib::HeatConduction
diff --git a/ProcessLib/HeatTransportBHE/CMakeLists.txt b/ProcessLib/HeatTransportBHE/CMakeLists.txt
index df2b08f43964b5c5535834342543fd056eea6333..76f61d448c91b312dccc5c228465d434d5938611 100644
--- a/ProcessLib/HeatTransportBHE/CMakeLists.txt
+++ b/ProcessLib/HeatTransportBHE/CMakeLists.txt
@@ -3,9 +3,12 @@ APPEND_SOURCE_FILES(SOURCES BHE)
 APPEND_SOURCE_FILES(SOURCES LocalAssemblers)
 
 add_library(HeatTransportBHE ${SOURCES})
-target_link_libraries(HeatTransportBHE PUBLIC ProcessLib)
 if(BUILD_SHARED_LIBS)
     install(TARGETS HeatTransportBHE LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR})
 endif()
+target_link_libraries(HeatTransportBHE
+    PUBLIC ProcessLib
+    PRIVATE ParameterLib
+)
 
 include(Tests.cmake)
diff --git a/ProcessLib/HeatTransportBHE/CreateHeatTransportBHEProcess.cpp b/ProcessLib/HeatTransportBHE/CreateHeatTransportBHEProcess.cpp
index 2028bcbe9dc18c78db25901990c82b4418dc105d..2af6e6ab19758c8fbb84b6181440f1e40915d2c0 100644
--- a/ProcessLib/HeatTransportBHE/CreateHeatTransportBHEProcess.cpp
+++ b/ProcessLib/HeatTransportBHE/CreateHeatTransportBHEProcess.cpp
@@ -11,8 +11,8 @@
 
 #include <vector>
 
+#include "ParameterLib/Utils.h"
 #include "ProcessLib/Output/CreateSecondaryVariables.h"
-#include "ProcessLib/Utils/ProcessUtils.h"
 
 #include "BHE/BHETypes.h"
 #include "BHE/CreateBHE1U.h"
@@ -28,7 +28,7 @@ std::unique_ptr<Process> createHeatTransportBHEProcess(
     MeshLib::Mesh& mesh,
     std::unique_ptr<ProcessLib::AbstractJacobianAssembler>&& jacobian_assembler,
     std::vector<ProcessVariable> const& variables,
-    std::vector<std::unique_ptr<ParameterBase>> const& parameters,
+    std::vector<std::unique_ptr<ParameterLib::ParameterBase>> const& parameters,
     unsigned const integration_order,
     BaseLib::ConfigTree const& config,
     std::map<std::string,
@@ -87,7 +87,7 @@ std::unique_ptr<Process> createHeatTransportBHEProcess(
     // BHE----------------------------------------------------------
 
     // solid phase thermal conductivity parameter.
-    auto& thermal_conductivity_solid = findParameter<double>(
+    auto& thermal_conductivity_solid = ParameterLib::findParameter<double>(
         config,
         //! \ogs_file_param_special{prj__processes__process__HEAT_TRANSPORT_BHE__thermal_conductivity_solid}
         "thermal_conductivity_solid", parameters, 1);
@@ -96,7 +96,7 @@ std::unique_ptr<Process> createHeatTransportBHEProcess(
          thermal_conductivity_solid.name.c_str());
 
     // solid phase thermal conductivity parameter.
-    auto& thermal_conductivity_fluid = findParameter<double>(
+    auto& thermal_conductivity_fluid = ParameterLib::findParameter<double>(
         config,
         //! \ogs_file_param_special{prj__processes__process__HEAT_TRANSPORT_BHE__thermal_conductivity_fluid}
         "thermal_conductivity_fluid", parameters, 1);
@@ -105,7 +105,7 @@ std::unique_ptr<Process> createHeatTransportBHEProcess(
          thermal_conductivity_fluid.name.c_str());
 
     // gas phase thermal conductivity parameter.
-    auto& thermal_conductivity_gas = findParameter<double>(
+    auto& thermal_conductivity_gas = ParameterLib::findParameter<double>(
         config,
         //! \ogs_file_param_special{prj__processes__process__HEAT_TRANSPORT_BHE__thermal_conductivity_gas}
         "thermal_conductivity_gas", parameters, 1);
@@ -114,7 +114,7 @@ std::unique_ptr<Process> createHeatTransportBHEProcess(
          thermal_conductivity_gas.name.c_str());
 
     // solid phase heat capacity parameter.
-    auto& heat_capacity_solid = findParameter<double>(
+    auto& heat_capacity_solid = ParameterLib::findParameter<double>(
         config,
         //! \ogs_file_param_special{prj__processes__process__HEAT_TRANSPORT_BHE__heat_capacity_solid}
         "heat_capacity_solid", parameters, 1);
@@ -123,7 +123,7 @@ std::unique_ptr<Process> createHeatTransportBHEProcess(
          heat_capacity_solid.name.c_str());
 
     // fluid phase heat capacity parameter.
-    auto& heat_capacity_fluid = findParameter<double>(
+    auto& heat_capacity_fluid = ParameterLib::findParameter<double>(
         config,
         //! \ogs_file_param_special{prj__processes__process__HEAT_TRANSPORT_BHE__heat_capacity_fluid}
         "heat_capacity_fluid", parameters, 1);
@@ -132,7 +132,7 @@ std::unique_ptr<Process> createHeatTransportBHEProcess(
          heat_capacity_fluid.name.c_str());
 
     // gas phase heat capacity parameter.
-    auto& heat_capacity_gas = findParameter<double>(
+    auto& heat_capacity_gas = ParameterLib::findParameter<double>(
         config,
         //! \ogs_file_param_special{prj__processes__process__HEAT_TRANSPORT_BHE__heat_capacity_gas}
         "heat_capacity_gas", parameters, 1);
@@ -141,7 +141,7 @@ std::unique_ptr<Process> createHeatTransportBHEProcess(
          heat_capacity_gas.name.c_str());
 
     // solid phase density parameter.
-    auto& density_solid = findParameter<double>(
+    auto& density_solid = ParameterLib::findParameter<double>(
         config,
         //! \ogs_file_param_special{prj__processes__process__HEAT_TRANSPORT_BHE__density_solid}
         "density_solid", parameters, 1);
@@ -150,7 +150,7 @@ std::unique_ptr<Process> createHeatTransportBHEProcess(
          density_solid.name.c_str());
 
     // fluid phase density parameter.
-    auto& density_fluid = findParameter<double>(
+    auto& density_fluid = ParameterLib::findParameter<double>(
         config,
         //! \ogs_file_param_special{prj__processes__process__HEAT_TRANSPORT_BHE__density_fluid}
         "density_fluid", parameters, 1);
@@ -159,7 +159,7 @@ std::unique_ptr<Process> createHeatTransportBHEProcess(
          density_fluid.name.c_str());
 
     // gas phase density parameter.
-    auto& density_gas = findParameter<double>(
+    auto& density_gas = ParameterLib::findParameter<double>(
         config,
         //! \ogs_file_param_special{prj__processes__process__HEAT_TRANSPORT_BHE__density_gas}
         "density_gas", parameters, 1);
diff --git a/ProcessLib/HeatTransportBHE/CreateHeatTransportBHEProcess.h b/ProcessLib/HeatTransportBHE/CreateHeatTransportBHEProcess.h
index 7f83a24b21707ffbbfca873cc55e6b1c87bd1ec8..12571971481e63e15c907e233267eee599661885 100644
--- a/ProcessLib/HeatTransportBHE/CreateHeatTransportBHEProcess.h
+++ b/ProcessLib/HeatTransportBHE/CreateHeatTransportBHEProcess.h
@@ -20,7 +20,7 @@ std::unique_ptr<Process> createHeatTransportBHEProcess(
     MeshLib::Mesh& mesh,
     std::unique_ptr<ProcessLib::AbstractJacobianAssembler>&& jacobian_assembler,
     std::vector<ProcessVariable> const& variables,
-    std::vector<std::unique_ptr<ParameterBase>> const& parameters,
+    std::vector<std::unique_ptr<ParameterLib::ParameterBase>> const& parameters,
     unsigned const integration_order,
     BaseLib::ConfigTree const& config,
     std::map<std::string,
diff --git a/ProcessLib/HeatTransportBHE/HeatTransportBHEProcess.cpp b/ProcessLib/HeatTransportBHE/HeatTransportBHEProcess.cpp
index 352cba5e762376fbe021ad2809588e1da2ea17ab..c1269c7d28e485112b28a8bc44cd580627b37246 100644
--- a/ProcessLib/HeatTransportBHE/HeatTransportBHEProcess.cpp
+++ b/ProcessLib/HeatTransportBHE/HeatTransportBHEProcess.cpp
@@ -26,7 +26,7 @@ namespace HeatTransportBHE
 HeatTransportBHEProcess::HeatTransportBHEProcess(
     MeshLib::Mesh& mesh,
     std::unique_ptr<ProcessLib::AbstractJacobianAssembler>&& jacobian_assembler,
-    std::vector<std::unique_ptr<ParameterBase>> const& parameters,
+    std::vector<std::unique_ptr<ParameterLib::ParameterBase>> const& parameters,
     unsigned const integration_order,
     std::vector<std::vector<std::reference_wrapper<ProcessVariable>>>&&
         process_variables,
diff --git a/ProcessLib/HeatTransportBHE/HeatTransportBHEProcess.h b/ProcessLib/HeatTransportBHE/HeatTransportBHEProcess.h
index 6a53a9fdece750ff6e838d3ae5eeaa659c886170..11ce3d4d90254be7a45b66faaf9ed30fc73482be 100644
--- a/ProcessLib/HeatTransportBHE/HeatTransportBHEProcess.h
+++ b/ProcessLib/HeatTransportBHE/HeatTransportBHEProcess.h
@@ -27,7 +27,8 @@ public:
         MeshLib::Mesh& mesh,
         std::unique_ptr<ProcessLib::AbstractJacobianAssembler>&&
             jacobian_assembler,
-        std::vector<std::unique_ptr<ParameterBase>> const& parameters,
+        std::vector<std::unique_ptr<ParameterLib::ParameterBase>> const&
+            parameters,
         unsigned const integration_order,
         std::vector<std::vector<std::reference_wrapper<ProcessVariable>>>&&
             process_variables,
diff --git a/ProcessLib/HeatTransportBHE/HeatTransportBHEProcessData.h b/ProcessLib/HeatTransportBHE/HeatTransportBHEProcessData.h
index f028243ee92c31dcdf5a472978084c1d151d6062..658206e8cc51878d5e0e4d38b596a6debde9c369 100644
--- a/ProcessLib/HeatTransportBHE/HeatTransportBHEProcessData.h
+++ b/ProcessLib/HeatTransportBHE/HeatTransportBHEProcessData.h
@@ -19,25 +19,26 @@ namespace MeshLib
 class Element;
 }
 
-namespace ProcessLib
+namespace ParameterLib
 {
 template <typename T>
 struct Parameter;
+}
 
-namespace HeatTransportBHE
+namespace ProcessLib::HeatTransportBHE
 {
 struct HeatTransportBHEProcessData
 {
     HeatTransportBHEProcessData(
-        Parameter<double> const& thermal_conductivity_solid_,
-        Parameter<double> const& thermal_conductivity_fluid_,
-        Parameter<double> const& thermal_conductivity_gas_,
-        Parameter<double> const& heat_capacity_solid_,
-        Parameter<double> const& heat_capacity_fluid_,
-        Parameter<double> const& heat_capacity_gas_,
-        Parameter<double> const& density_solid_,
-        Parameter<double> const& density_fluid_,
-        Parameter<double> const& density_gas_,
+        ParameterLib::Parameter<double> const& thermal_conductivity_solid_,
+        ParameterLib::Parameter<double> const& thermal_conductivity_fluid_,
+        ParameterLib::Parameter<double> const& thermal_conductivity_gas_,
+        ParameterLib::Parameter<double> const& heat_capacity_solid_,
+        ParameterLib::Parameter<double> const& heat_capacity_fluid_,
+        ParameterLib::Parameter<double> const& heat_capacity_gas_,
+        ParameterLib::Parameter<double> const& density_solid_,
+        ParameterLib::Parameter<double> const& density_fluid_,
+        ParameterLib::Parameter<double> const& density_gas_,
         std::vector<BHE::BHETypes>&& vec_BHEs_)
         : thermal_conductivity_solid(thermal_conductivity_solid_),
           thermal_conductivity_fluid(thermal_conductivity_fluid_),
@@ -64,24 +65,23 @@ struct HeatTransportBHEProcessData
     void operator=(HeatTransportBHEProcessData&&) = delete;
 
     // ! thermal conductivity values for the three phases
-    Parameter<double> const& thermal_conductivity_solid;
-    Parameter<double> const& thermal_conductivity_fluid;
-    Parameter<double> const& thermal_conductivity_gas;
+    ParameterLib::Parameter<double> const& thermal_conductivity_solid;
+    ParameterLib::Parameter<double> const& thermal_conductivity_fluid;
+    ParameterLib::Parameter<double> const& thermal_conductivity_gas;
 
     // ! heat capacity values for the three phases
-    Parameter<double> const& heat_capacity_solid;
-    Parameter<double> const& heat_capacity_fluid;
-    Parameter<double> const& heat_capacity_gas;
+    ParameterLib::Parameter<double> const& heat_capacity_solid;
+    ParameterLib::Parameter<double> const& heat_capacity_fluid;
+    ParameterLib::Parameter<double> const& heat_capacity_gas;
 
     // ! density values for the three phases
-    Parameter<double> const& density_solid;
-    Parameter<double> const& density_fluid;
-    Parameter<double> const& density_gas;
+    ParameterLib::Parameter<double> const& density_solid;
+    ParameterLib::Parameter<double> const& density_fluid;
+    ParameterLib::Parameter<double> const& density_gas;
 
     MeshLib::PropertyVector<int> const* _mesh_prop_materialIDs = nullptr;
     std::unordered_map<int, int> _map_materialID_to_BHE_ID;
 
     std::vector<BHE::BHETypes> _vec_BHE_property;
 };
-}  // namespace HeatTransportBHE
-}  // namespace ProcessLib
+}  // namespace ProcessLib::HeatTransportBHE
diff --git a/ProcessLib/HeatTransportBHE/LocalAssemblers/HeatTransportBHELocalAssemblerSoil-impl.h b/ProcessLib/HeatTransportBHE/LocalAssemblers/HeatTransportBHELocalAssemblerSoil-impl.h
index f00b211a02893fde477dfd78d0a3cdbaa66471db..35c0efa165fe025174b601a8e0f1fddc658ee234 100644
--- a/ProcessLib/HeatTransportBHE/LocalAssemblers/HeatTransportBHELocalAssemblerSoil-impl.h
+++ b/ProcessLib/HeatTransportBHE/LocalAssemblers/HeatTransportBHELocalAssemblerSoil-impl.h
@@ -47,7 +47,7 @@ HeatTransportBHELocalAssemblerSoil<ShapeFunction, IntegrationMethod>::
                                         3 /* GlobalDim */>(
         e, is_axially_symmetric, _integration_method);
 
-    SpatialPosition x_position;
+    ParameterLib::SpatialPosition x_position;
     x_position.setElementID(_element_id);
 
     // ip data initialization
@@ -85,7 +85,7 @@ void HeatTransportBHELocalAssemblerSoil<ShapeFunction, IntegrationMethod>::
     unsigned const n_integration_points =
         _integration_method.getNumberOfPoints();
 
-    SpatialPosition pos;
+    ParameterLib::SpatialPosition pos;
     pos.setElementID(_element_id);
 
     for (unsigned ip = 0; ip < n_integration_points; ip++)
diff --git a/ProcessLib/HydroMechanics/CMakeLists.txt b/ProcessLib/HydroMechanics/CMakeLists.txt
index abd91957bfbd49272c4a49101081df12e33cbc87..924a3aec796c880dea61704475e70f2f53092ea6 100644
--- a/ProcessLib/HydroMechanics/CMakeLists.txt
+++ b/ProcessLib/HydroMechanics/CMakeLists.txt
@@ -4,6 +4,9 @@ add_library(HydroMechanics ${SOURCES})
 if(BUILD_SHARED_LIBS)
     install(TARGETS HydroMechanics LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR})
 endif()
-target_link_libraries(HydroMechanics PUBLIC ProcessLib)
+target_link_libraries(HydroMechanics
+    PUBLIC ProcessLib
+    PRIVATE ParameterLib
+)
 
 include(Tests.cmake)
diff --git a/ProcessLib/HydroMechanics/CreateHydroMechanicsProcess.cpp b/ProcessLib/HydroMechanics/CreateHydroMechanicsProcess.cpp
index 226449735e7c687531bd22afa72c7c5fbc025be4..7a95b4d9a7988b6d8748d8150b4b38bdf6163811 100644
--- a/ProcessLib/HydroMechanics/CreateHydroMechanicsProcess.cpp
+++ b/ProcessLib/HydroMechanics/CreateHydroMechanicsProcess.cpp
@@ -11,8 +11,9 @@
 
 #include <cassert>
 
-#include "MaterialLib/SolidModels/MechanicsBase.h"
 #include "MaterialLib/SolidModels/CreateConstitutiveRelation.h"
+#include "MaterialLib/SolidModels/MechanicsBase.h"
+#include "ParameterLib/Utils.h"
 #include "ProcessLib/Output/CreateSecondaryVariables.h"
 #include "ProcessLib/Utils/ProcessUtils.h"
 
@@ -23,13 +24,12 @@ namespace ProcessLib
 {
 namespace HydroMechanics
 {
-
 template <int DisplacementDim>
 std::unique_ptr<Process> createHydroMechanicsProcess(
     MeshLib::Mesh& mesh,
     std::unique_ptr<ProcessLib::AbstractJacobianAssembler>&& jacobian_assembler,
     std::vector<ProcessVariable> const& variables,
-    std::vector<std::unique_ptr<ParameterBase>> const& parameters,
+    std::vector<std::unique_ptr<ParameterLib::ParameterBase>> const& parameters,
     unsigned const integration_order,
     BaseLib::ConfigTree const& config)
 {
@@ -106,7 +106,7 @@ std::unique_ptr<Process> createHydroMechanicsProcess(
             parameters, config);
 
     // Intrinsic permeability
-    auto& intrinsic_permeability = findParameter<double>(
+    auto& intrinsic_permeability = ParameterLib::findParameter<double>(
         config,
         //! \ogs_file_param_special{prj__processes__process__HYDRO_MECHANICS__intrinsic_permeability}
         "intrinsic_permeability", parameters, 1);
@@ -115,7 +115,7 @@ std::unique_ptr<Process> createHydroMechanicsProcess(
          intrinsic_permeability.name.c_str());
 
     // Storage coefficient
-    auto& specific_storage = findParameter<double>(
+    auto& specific_storage = ParameterLib::findParameter<double>(
         config,
         //! \ogs_file_param_special{prj__processes__process__HYDRO_MECHANICS__specific_storage}
         "specific_storage", parameters, 1);
@@ -124,7 +124,7 @@ std::unique_ptr<Process> createHydroMechanicsProcess(
          specific_storage.name.c_str());
 
     // Fluid viscosity
-    auto& fluid_viscosity = findParameter<double>(
+    auto& fluid_viscosity = ParameterLib::findParameter<double>(
         config,
         //! \ogs_file_param_special{prj__processes__process__HYDRO_MECHANICS__fluid_viscosity}
         "fluid_viscosity", parameters, 1);
@@ -132,14 +132,14 @@ std::unique_ptr<Process> createHydroMechanicsProcess(
          fluid_viscosity.name.c_str());
 
     // Fluid density
-    auto& fluid_density = findParameter<double>(
+    auto& fluid_density = ParameterLib::findParameter<double>(
         config,
         //! \ogs_file_param_special{prj__processes__process__HYDRO_MECHANICS__fluid_density}
         "fluid_density", parameters, 1);
     DBUG("Use '%s' as fluid density parameter.", fluid_density.name.c_str());
 
     // Biot coefficient
-    auto& biot_coefficient = findParameter<double>(
+    auto& biot_coefficient = ParameterLib::findParameter<double>(
         config,
         //! \ogs_file_param_special{prj__processes__process__HYDRO_MECHANICS__biot_coefficient}
         "biot_coefficient", parameters, 1);
@@ -147,14 +147,14 @@ std::unique_ptr<Process> createHydroMechanicsProcess(
          biot_coefficient.name.c_str());
 
     // Porosity
-    auto& porosity = findParameter<double>(
+    auto& porosity = ParameterLib::findParameter<double>(
         config,
         //! \ogs_file_param_special{prj__processes__process__HYDRO_MECHANICS__porosity}
         "porosity", parameters, 1);
     DBUG("Use '%s' as porosity parameter.", porosity.name.c_str());
 
     // Solid density
-    auto& solid_density = findParameter<double>(
+    auto& solid_density = ParameterLib::findParameter<double>(
         config,
         //! \ogs_file_param_special{prj__processes__process__HYDRO_MECHANICS__solid_density}
         "solid_density", parameters, 1);
@@ -212,7 +212,7 @@ template std::unique_ptr<Process> createHydroMechanicsProcess<2>(
     MeshLib::Mesh& mesh,
     std::unique_ptr<ProcessLib::AbstractJacobianAssembler>&& jacobian_assembler,
     std::vector<ProcessVariable> const& variables,
-    std::vector<std::unique_ptr<ParameterBase>> const& parameters,
+    std::vector<std::unique_ptr<ParameterLib::ParameterBase>> const& parameters,
     unsigned const integration_order,
     BaseLib::ConfigTree const& config);
 
@@ -220,7 +220,7 @@ template std::unique_ptr<Process> createHydroMechanicsProcess<3>(
     MeshLib::Mesh& mesh,
     std::unique_ptr<ProcessLib::AbstractJacobianAssembler>&& jacobian_assembler,
     std::vector<ProcessVariable> const& variables,
-    std::vector<std::unique_ptr<ParameterBase>> const& parameters,
+    std::vector<std::unique_ptr<ParameterLib::ParameterBase>> const& parameters,
     unsigned const integration_order,
     BaseLib::ConfigTree const& config);
 
diff --git a/ProcessLib/HydroMechanics/CreateHydroMechanicsProcess.h b/ProcessLib/HydroMechanics/CreateHydroMechanicsProcess.h
index 3965efb0d82f36d4885234a85fcbbe7055c221ec..5a523b325d47fa3be6ca8f4f3ea6acb782a867d8 100644
--- a/ProcessLib/HydroMechanics/CreateHydroMechanicsProcess.h
+++ b/ProcessLib/HydroMechanics/CreateHydroMechanicsProcess.h
@@ -20,10 +20,13 @@ namespace MeshLib
 {
 class Mesh;
 }
+namespace ParameterLib
+{
+struct ParameterBase;
+}
 namespace ProcessLib
 {
 class AbstractJacobianAssembler;
-struct ParameterBase;
 class Process;
 class ProcessVariable;
 }
@@ -37,7 +40,7 @@ std::unique_ptr<Process> createHydroMechanicsProcess(
     MeshLib::Mesh& mesh,
     std::unique_ptr<ProcessLib::AbstractJacobianAssembler>&& jacobian_assembler,
     std::vector<ProcessVariable> const& variables,
-    std::vector<std::unique_ptr<ParameterBase>> const& parameters,
+    std::vector<std::unique_ptr<ParameterLib::ParameterBase>> const& parameters,
     unsigned const integration_order,
     BaseLib::ConfigTree const& config);
 
@@ -45,7 +48,7 @@ extern template std::unique_ptr<Process> createHydroMechanicsProcess<2>(
     MeshLib::Mesh& mesh,
     std::unique_ptr<ProcessLib::AbstractJacobianAssembler>&& jacobian_assembler,
     std::vector<ProcessVariable> const& variables,
-    std::vector<std::unique_ptr<ParameterBase>> const& parameters,
+    std::vector<std::unique_ptr<ParameterLib::ParameterBase>> const& parameters,
     unsigned const integration_order,
     BaseLib::ConfigTree const& config);
 
@@ -53,7 +56,7 @@ extern template std::unique_ptr<Process> createHydroMechanicsProcess<3>(
     MeshLib::Mesh& mesh,
     std::unique_ptr<ProcessLib::AbstractJacobianAssembler>&& jacobian_assembler,
     std::vector<ProcessVariable> const& variables,
-    std::vector<std::unique_ptr<ParameterBase>> const& parameters,
+    std::vector<std::unique_ptr<ParameterLib::ParameterBase>> const& parameters,
     unsigned const integration_order,
     BaseLib::ConfigTree const& config);
 }  // namespace HydroMechanics
diff --git a/ProcessLib/HydroMechanics/HydroMechanicsFEM-impl.h b/ProcessLib/HydroMechanics/HydroMechanicsFEM-impl.h
index 1e730badd8dde31195cfa1f4edb93d11a56b3025..ad8b7de7c5fb65bbf86ac1c6fec8b80f1aa48ad7 100644
--- a/ProcessLib/HydroMechanics/HydroMechanicsFEM-impl.h
+++ b/ProcessLib/HydroMechanics/HydroMechanicsFEM-impl.h
@@ -160,7 +160,7 @@ void HydroMechanicsLocalAssembler<ShapeFunctionDisplacement,
 
     double const& dt = _process_data.dt;
 
-    SpatialPosition x_position;
+    ParameterLib::SpatialPosition x_position;
     x_position.setElementID(_element.getID());
 
     unsigned const n_integration_points =
@@ -296,7 +296,7 @@ HydroMechanicsLocalAssembler<ShapeFunctionDisplacement, ShapeFunctionPressure,
     unsigned const n_integration_points =
         _integration_method.getNumberOfPoints();
 
-    SpatialPosition x_position;
+    ParameterLib::SpatialPosition x_position;
     x_position.setElementID(_element.getID());
     for (unsigned ip = 0; ip < n_integration_points; ip++)
     {
@@ -341,7 +341,7 @@ void HydroMechanicsLocalAssembler<ShapeFunctionDisplacement,
                                         template VectorType<pressure_size>>(
             local_b_data, local_matrix_size);
 
-    SpatialPosition pos;
+    ParameterLib::SpatialPosition pos;
     pos.setElementID(this->_element.getID());
 
     auto p = Eigen::Map<typename ShapeMatricesTypePressure::template VectorType<
@@ -368,7 +368,7 @@ void HydroMechanicsLocalAssembler<ShapeFunctionDisplacement,
 
     double const& dt = _process_data.dt;
 
-    SpatialPosition x_position;
+    ParameterLib::SpatialPosition x_position;
     x_position.setElementID(_element.getID());
 
     int const n_integration_points = _integration_method.getNumberOfPoints();
@@ -453,7 +453,7 @@ void HydroMechanicsLocalAssembler<ShapeFunctionDisplacement,
 
     double const& dt = _process_data.dt;
 
-    SpatialPosition x_position;
+    ParameterLib::SpatialPosition x_position;
     x_position.setElementID(_element.getID());
 
     int const n_integration_points = _integration_method.getNumberOfPoints();
@@ -557,7 +557,7 @@ void HydroMechanicsLocalAssembler<ShapeFunctionDisplacement,
             displacement_size> const>(local_x.data() + displacement_offset,
                                       displacement_size);
     double const& dt = _process_data.dt;
-    SpatialPosition x_position;
+    ParameterLib::SpatialPosition x_position;
     x_position.setElementID(_element.getID());
 
     int const n_integration_points = _integration_method.getNumberOfPoints();
diff --git a/ProcessLib/HydroMechanics/HydroMechanicsFEM.h b/ProcessLib/HydroMechanics/HydroMechanicsFEM.h
index e56ae1a01dbf56c59e6a99ed399a72f585bf2cd7..c91b80179a623ff2e91604dc67b73e62ab3dcd98 100644
--- a/ProcessLib/HydroMechanics/HydroMechanicsFEM.h
+++ b/ProcessLib/HydroMechanics/HydroMechanicsFEM.h
@@ -18,10 +18,10 @@
 #include "MathLib/LinAlg/Eigen/EigenMapTools.h"
 #include "NumLib/DOF/DOFTableUtil.h"
 #include "NumLib/Fem/ShapeMatrixPolicy.h"
+#include "ParameterLib/Parameter.h"
 #include "ProcessLib/Deformation/BMatrixPolicy.h"
 #include "ProcessLib/Deformation/LinearBMatrix.h"
 #include "ProcessLib/LocalAssemblerTraits.h"
-#include "ProcessLib/Parameter/Parameter.h"
 #include "ProcessLib/Utils/InitShapeMatrices.h"
 
 #include "HydroMechanicsProcessData.h"
@@ -72,7 +72,7 @@ struct IntegrationPointData final
     template <typename DisplacementVectorType>
     typename BMatricesType::KelvinMatrixType updateConstitutiveRelation(
         double const t,
-        SpatialPosition const& x_position,
+        ParameterLib::SpatialPosition const& x_position,
         double const dt,
         DisplacementVectorType const& /*u*/,
         double const T)
diff --git a/ProcessLib/HydroMechanics/HydroMechanicsProcess.cpp b/ProcessLib/HydroMechanics/HydroMechanicsProcess.cpp
index b4f7639c85d217c267736b4d6a4bdba90b97bc71..3ed900d0a0b0a5c0315a301f78d668c8d5b7c8f1 100644
--- a/ProcessLib/HydroMechanics/HydroMechanicsProcess.cpp
+++ b/ProcessLib/HydroMechanics/HydroMechanicsProcess.cpp
@@ -27,7 +27,7 @@ template <int DisplacementDim>
 HydroMechanicsProcess<DisplacementDim>::HydroMechanicsProcess(
     MeshLib::Mesh& mesh,
     std::unique_ptr<ProcessLib::AbstractJacobianAssembler>&& jacobian_assembler,
-    std::vector<std::unique_ptr<ParameterBase>> const& parameters,
+    std::vector<std::unique_ptr<ParameterLib::ParameterBase>> const& parameters,
     unsigned const integration_order,
     std::vector<std::vector<std::reference_wrapper<ProcessVariable>>>&&
         process_variables,
diff --git a/ProcessLib/HydroMechanics/HydroMechanicsProcess.h b/ProcessLib/HydroMechanics/HydroMechanicsProcess.h
index bec3237060ad9bef87a5ac27e5358e96465179a8..ece83764fa4304c48b3326efb9fcd05ff8b8b019 100644
--- a/ProcessLib/HydroMechanics/HydroMechanicsProcess.h
+++ b/ProcessLib/HydroMechanics/HydroMechanicsProcess.h
@@ -31,7 +31,8 @@ public:
         MeshLib::Mesh& mesh,
         std::unique_ptr<ProcessLib::AbstractJacobianAssembler>&&
             jacobian_assembler,
-        std::vector<std::unique_ptr<ParameterBase>> const& parameters,
+        std::vector<std::unique_ptr<ParameterLib::ParameterBase>> const&
+            parameters,
         unsigned const integration_order,
         std::vector<std::vector<std::reference_wrapper<ProcessVariable>>>&&
             process_variables,
diff --git a/ProcessLib/HydroMechanics/HydroMechanicsProcessData.h b/ProcessLib/HydroMechanics/HydroMechanicsProcessData.h
index 2b2c3c1785b86895a8cde623a7a301bf7850f7fa..42213c18a3934dea560c09371a290e8578c93713 100644
--- a/ProcessLib/HydroMechanics/HydroMechanicsProcessData.h
+++ b/ProcessLib/HydroMechanics/HydroMechanicsProcessData.h
@@ -9,7 +9,7 @@
 
 #pragma once
 
-#include "ProcessLib/Parameter/Parameter.h"
+#include "ParameterLib/Parameter.h"
 
 #include <memory>
 #include <utility>
@@ -37,13 +37,13 @@ struct HydroMechanicsProcessData
                  std::unique_ptr<
                      MaterialLib::Solids::MechanicsBase<DisplacementDim>>>&&
             solid_materials_,
-        Parameter<double> const& intrinsic_permeability_,
-        Parameter<double> const& specific_storage_,
-        Parameter<double> const& fluid_viscosity_,
-        Parameter<double> const& fluid_density_,
-        Parameter<double> const& biot_coefficient_,
-        Parameter<double> const& porosity_,
-        Parameter<double> const& solid_density_,
+        ParameterLib::Parameter<double> const& intrinsic_permeability_,
+        ParameterLib::Parameter<double> const& specific_storage_,
+        ParameterLib::Parameter<double> const& fluid_viscosity_,
+        ParameterLib::Parameter<double> const& fluid_density_,
+        ParameterLib::Parameter<double> const& biot_coefficient_,
+        ParameterLib::Parameter<double> const& porosity_,
+        ParameterLib::Parameter<double> const& solid_density_,
         Eigen::Matrix<double, DisplacementDim, 1>
             specific_body_force_,
         double const reference_temperature_)
@@ -80,21 +80,23 @@ struct HydroMechanicsProcessData
         int,
         std::unique_ptr<MaterialLib::Solids::MechanicsBase<DisplacementDim>>>
         solid_materials;
-    /// Permeability of the solid. A scalar quantity, Parameter<double>.
-    Parameter<double> const& intrinsic_permeability;
+    /// Permeability of the solid. A scalar quantity,
+    /// ParameterLib::Parameter<double>.
+    ParameterLib::Parameter<double> const& intrinsic_permeability;
     /// Volumetric average specific storage of the solid and fluid phases.
-    /// A scalar quantity, Parameter<double>.
-    Parameter<double> const& specific_storage;
-    /// Fluid's viscosity. A scalar quantity, Parameter<double>.
-    Parameter<double> const& fluid_viscosity;
-    /// Fluid's density. A scalar quantity, Parameter<double>.
-    Parameter<double> const& fluid_density;
-    /// Biot coefficient. A scalar quantity, Parameter<double>.
-    Parameter<double> const& biot_coefficient;
-    /// Porosity of the solid. A scalar quantity, Parameter<double>.
-    Parameter<double> const& porosity;
-    /// Solid's density. A scalar quantity, Parameter<double>.
-    Parameter<double> const& solid_density;
+    /// A scalar quantity, ParameterLib::Parameter<double>.
+    ParameterLib::Parameter<double> const& specific_storage;
+    /// Fluid's viscosity. A scalar quantity, ParameterLib::Parameter<double>.
+    ParameterLib::Parameter<double> const& fluid_viscosity;
+    /// Fluid's density. A scalar quantity, ParameterLib::Parameter<double>.
+    ParameterLib::Parameter<double> const& fluid_density;
+    /// Biot coefficient. A scalar quantity, ParameterLib::Parameter<double>.
+    ParameterLib::Parameter<double> const& biot_coefficient;
+    /// Porosity of the solid. A scalar quantity,
+    /// ParameterLib::Parameter<double>.
+    ParameterLib::Parameter<double> const& porosity;
+    /// Solid's density. A scalar quantity, ParameterLib::Parameter<double>.
+    ParameterLib::Parameter<double> const& solid_density;
     /// Specific body forces applied to solid and fluid.
     /// It is usually used to apply gravitational forces.
     /// A vector of displacement dimension's length.
diff --git a/ProcessLib/LIE/CMakeLists.txt b/ProcessLib/LIE/CMakeLists.txt
index f8057b51edca3a641ff9f80e2b42fc4884b19add..8f82689a0e2fb74a6df19c514f3fb0e013b35e48 100644
--- a/ProcessLib/LIE/CMakeLists.txt
+++ b/ProcessLib/LIE/CMakeLists.txt
@@ -8,7 +8,10 @@ add_library(LIE ${SOURCES})
 if(BUILD_SHARED_LIBS)
     install(TARGETS LIE LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR})
 endif()
-target_link_libraries(LIE PUBLIC ProcessLib LIECommon)
+target_link_libraries(LIE
+    PUBLIC ProcessLib LIECommon
+    PRIVATE ParameterLib
+)
 
 include(HydroMechanics/Tests.cmake)
 include(SmallDeformation/Tests.cmake)
diff --git a/ProcessLib/LIE/Common/FractureProperty.h b/ProcessLib/LIE/Common/FractureProperty.h
index 393df6239ae1d2683903866a1296f4dfc72c7e1b..c273dfdef916aa71248eb21382e8d8ade2c52bcc 100644
--- a/ProcessLib/LIE/Common/FractureProperty.h
+++ b/ProcessLib/LIE/Common/FractureProperty.h
@@ -21,11 +21,12 @@ namespace MeshLib
 {
 class Element;
 }
-namespace ProcessLib
+namespace ParameterLib
 {
 template <typename T>
 struct Parameter;
 }
+
 namespace ProcessLib
 {
 namespace LIE
@@ -39,12 +40,12 @@ struct FractureProperty
     /// Rotation matrix from global to local coordinates
     Eigen::MatrixXd R;
     /// Initial aperture
-    ProcessLib::Parameter<double> const& aperture0;
+    ParameterLib::Parameter<double> const& aperture0;
     std::vector<BranchProperty> branches_master;
     std::vector<BranchProperty> branches_slave;
 
     FractureProperty(int const fracture_id_, int const material_id,
-                     ProcessLib::Parameter<double> const& initial_aperture)
+                     ParameterLib::Parameter<double> const& initial_aperture)
         : fracture_id(fracture_id_),
           mat_id(material_id),
           aperture0(initial_aperture)
@@ -57,16 +58,16 @@ struct FractureProperty
 struct FracturePropertyHM : public FractureProperty
 {
     FracturePropertyHM(int const fracture_id_, int const material_id,
-                       ProcessLib::Parameter<double> const& initial_aperture,
-                       ProcessLib::Parameter<double> const& specific_storage_,
-                       ProcessLib::Parameter<double> const& biot_coefficient_)
+                       ParameterLib::Parameter<double> const& initial_aperture,
+                       ParameterLib::Parameter<double> const& specific_storage_,
+                       ParameterLib::Parameter<double> const& biot_coefficient_)
         : FractureProperty(fracture_id_, material_id, initial_aperture),
           specific_storage(specific_storage_),
           biot_coefficient(biot_coefficient_)
     {
     }
-    ProcessLib::Parameter<double> const& specific_storage;
-    ProcessLib::Parameter<double> const& biot_coefficient;
+    ParameterLib::Parameter<double> const& specific_storage;
+    ParameterLib::Parameter<double> const& biot_coefficient;
 };
 
 /// configure fracture property based on a fracture element assuming
diff --git a/ProcessLib/LIE/HydroMechanics/CreateHydroMechanicsProcess.cpp b/ProcessLib/LIE/HydroMechanics/CreateHydroMechanicsProcess.cpp
index 5477b7f48a31fc491facd4529c4688db05854c93..dd66e4bfdb5b40ed80265083dcc43c1b638541eb 100644
--- a/ProcessLib/LIE/HydroMechanics/CreateHydroMechanicsProcess.cpp
+++ b/ProcessLib/LIE/HydroMechanics/CreateHydroMechanicsProcess.cpp
@@ -15,9 +15,8 @@
 #include "MaterialLib/FractureModels/CreateLinearElasticIsotropic.h"
 #include "MaterialLib/FractureModels/CreateMohrCoulomb.h"
 #include "MaterialLib/SolidModels/CreateConstitutiveRelation.h"
-
+#include "ParameterLib/Utils.h"
 #include "ProcessLib/Output/CreateSecondaryVariables.h"
-#include "ProcessLib/Utils/ProcessUtils.h"  // required for findParameter
 
 #include "HydroMechanicsProcess.h"
 #include "HydroMechanicsProcessData.h"
@@ -33,7 +32,7 @@ std::unique_ptr<Process> createHydroMechanicsProcess(
     MeshLib::Mesh& mesh,
     std::unique_ptr<ProcessLib::AbstractJacobianAssembler>&& jacobian_assembler,
     std::vector<ProcessVariable> const& variables,
-    std::vector<std::unique_ptr<ParameterBase>> const& parameters,
+    std::vector<std::unique_ptr<ParameterLib::ParameterBase>> const& parameters,
     unsigned const integration_order,
     BaseLib::ConfigTree const& config)
 {
@@ -134,7 +133,7 @@ std::unique_ptr<Process> createHydroMechanicsProcess(
                                                                     config);
 
     // Intrinsic permeability
-    auto& intrinsic_permeability = findParameter<double>(
+    auto& intrinsic_permeability = ParameterLib::findParameter<double>(
         config,
         //! \ogs_file_param_special{prj__processes__process__HYDRO_MECHANICS_WITH_LIE__intrinsic_permeability}
         "intrinsic_permeability", parameters, 1);
@@ -143,7 +142,7 @@ std::unique_ptr<Process> createHydroMechanicsProcess(
          intrinsic_permeability.name.c_str());
 
     // Storage coefficient
-    auto& specific_storage = findParameter<double>(
+    auto& specific_storage = ParameterLib::findParameter<double>(
         config,
         //! \ogs_file_param_special{prj__processes__process__HYDRO_MECHANICS_WITH_LIE__specific_storage}
         "specific_storage", parameters, 1);
@@ -152,7 +151,7 @@ std::unique_ptr<Process> createHydroMechanicsProcess(
          specific_storage.name.c_str());
 
     // Fluid viscosity
-    auto& fluid_viscosity = findParameter<double>(
+    auto& fluid_viscosity = ParameterLib::findParameter<double>(
         config,
         //! \ogs_file_param_special{prj__processes__process__HYDRO_MECHANICS_WITH_LIE__fluid_viscosity}
         "fluid_viscosity", parameters, 1);
@@ -160,14 +159,14 @@ std::unique_ptr<Process> createHydroMechanicsProcess(
          fluid_viscosity.name.c_str());
 
     // Fluid density
-    auto& fluid_density = findParameter<double>(
+    auto& fluid_density = ParameterLib::findParameter<double>(
         config,
         //! \ogs_file_param_special{prj__processes__process__HYDRO_MECHANICS_WITH_LIE__fluid_density}
         "fluid_density", parameters, 1);
     DBUG("Use '%s' as fluid density parameter.", fluid_density.name.c_str());
 
     // Biot coefficient
-    auto& biot_coefficient = findParameter<double>(
+    auto& biot_coefficient = ParameterLib::findParameter<double>(
         config,
         //! \ogs_file_param_special{prj__processes__process__HYDRO_MECHANICS_WITH_LIE__biot_coefficient}
         "biot_coefficient", parameters, 1);
@@ -175,14 +174,14 @@ std::unique_ptr<Process> createHydroMechanicsProcess(
          biot_coefficient.name.c_str());
 
     // Porosity
-    auto& porosity = findParameter<double>(
+    auto& porosity = ParameterLib::findParameter<double>(
         config,
         //! \ogs_file_param_special{prj__processes__process__HYDRO_MECHANICS_WITH_LIE__porosity}
         "porosity", parameters, 1);
     DBUG("Use '%s' as porosity parameter.", porosity.name.c_str());
 
     // Solid density
-    auto& solid_density = findParameter<double>(
+    auto& solid_density = ParameterLib::findParameter<double>(
         config,
         //! \ogs_file_param_special{prj__processes__process__HYDRO_MECHANICS_WITH_LIE__solid_density}
         "solid_density", parameters, 1);
@@ -261,13 +260,13 @@ std::unique_ptr<Process> createHydroMechanicsProcess(
             0 /*fracture_id*/,
             //! \ogs_file_param{prj__processes__process__HYDRO_MECHANICS_WITH_LIE__fracture_properties__material_id}
             fracture_properties_config.getConfigParameter<int>("material_id"),
-            ProcessLib::findParameter<double>(
+            ParameterLib::findParameter<double>(
                 //! \ogs_file_param_special{prj__processes__process__HYDRO_MECHANICS_WITH_LIE__fracture_properties__initial_aperture}
                 fracture_properties_config, "initial_aperture", parameters, 1),
-            ProcessLib::findParameter<double>(
+            ParameterLib::findParameter<double>(
                 //! \ogs_file_param_special{prj__processes__process__HYDRO_MECHANICS_WITH_LIE__fracture_properties__specific_storage}
                 fracture_properties_config, "specific_storage", parameters, 1),
-            ProcessLib::findParameter<double>(
+            ParameterLib::findParameter<double>(
                 //! \ogs_file_param_special{prj__processes__process__HYDRO_MECHANICS_WITH_LIE__fracture_properties__biot_coefficient}
                 fracture_properties_config, "biot_coefficient", parameters, 1));
         if (frac_prop->aperture0.isTimeDependent())
@@ -280,7 +279,7 @@ std::unique_ptr<Process> createHydroMechanicsProcess(
     }
 
     // initial effective stress in matrix
-    auto& initial_effective_stress = findParameter<double>(
+    auto& initial_effective_stress = ParameterLib::findParameter<double>(
         config,
         //! \ogs_file_param_special{prj__processes__process__HYDRO_MECHANICS_WITH_LIE__initial_effective_stress}
         "initial_effective_stress", parameters,
@@ -289,7 +288,8 @@ std::unique_ptr<Process> createHydroMechanicsProcess(
          initial_effective_stress.name.c_str());
 
     // initial effective stress in fracture
-    auto& initial_fracture_effective_stress = findParameter<double>(
+    auto& initial_fracture_effective_stress = ParameterLib::findParameter<
+        double>(
         config,
         //! \ogs_file_param_special{prj__processes__process__HYDRO_MECHANICS_WITH_LIE__initial_fracture_effective_stress}
         "initial_fracture_effective_stress", parameters, GlobalDim);
@@ -349,14 +349,14 @@ template std::unique_ptr<Process> createHydroMechanicsProcess<2>(
     MeshLib::Mesh& mesh,
     std::unique_ptr<ProcessLib::AbstractJacobianAssembler>&& jacobian_assembler,
     std::vector<ProcessVariable> const& variables,
-    std::vector<std::unique_ptr<ParameterBase>> const& parameters,
+    std::vector<std::unique_ptr<ParameterLib::ParameterBase>> const& parameters,
     unsigned const integration_order,
     BaseLib::ConfigTree const& config);
 template std::unique_ptr<Process> createHydroMechanicsProcess<3>(
     MeshLib::Mesh& mesh,
     std::unique_ptr<ProcessLib::AbstractJacobianAssembler>&& jacobian_assembler,
     std::vector<ProcessVariable> const& variables,
-    std::vector<std::unique_ptr<ParameterBase>> const& parameters,
+    std::vector<std::unique_ptr<ParameterLib::ParameterBase>> const& parameters,
     unsigned const integration_order,
     BaseLib::ConfigTree const& config);
 
diff --git a/ProcessLib/LIE/HydroMechanics/CreateHydroMechanicsProcess.h b/ProcessLib/LIE/HydroMechanics/CreateHydroMechanicsProcess.h
index 9d66a35b8480e4605a7b81bff48a29f15feb86e9..e6b0c65ae97082dac525bf882e4050b3e52cc605 100644
--- a/ProcessLib/LIE/HydroMechanics/CreateHydroMechanicsProcess.h
+++ b/ProcessLib/LIE/HydroMechanics/CreateHydroMechanicsProcess.h
@@ -15,15 +15,18 @@
 namespace BaseLib
 {
 class ConfigTree;
-}  // namespace BaseLib
+}
 namespace MeshLib
 {
 class Mesh;
-}  // namespace MeshLib
+}
+namespace ParameterLib
+{
+struct ParameterBase;
+}
 namespace ProcessLib
 {
 class AbstractJacobianAssembler;
-struct ParameterBase;
 class Process;
 class ProcessVariable;
 }  // namespace ProcessLib
@@ -39,7 +42,7 @@ std::unique_ptr<Process> createHydroMechanicsProcess(
     MeshLib::Mesh& mesh,
     std::unique_ptr<ProcessLib::AbstractJacobianAssembler>&& jacobian_assembler,
     std::vector<ProcessVariable> const& variables,
-    std::vector<std::unique_ptr<ParameterBase>> const& parameters,
+    std::vector<std::unique_ptr<ParameterLib::ParameterBase>> const& parameters,
     unsigned const integration_order,
     BaseLib::ConfigTree const& config);
 
diff --git a/ProcessLib/LIE/HydroMechanics/HydroMechanicsProcess.cpp b/ProcessLib/LIE/HydroMechanics/HydroMechanicsProcess.cpp
index 1358a8eb538829d25f1da58a46dd2198ee1c33ae..32503e146947094638d128240a3c0752b8373f99 100644
--- a/ProcessLib/LIE/HydroMechanics/HydroMechanicsProcess.cpp
+++ b/ProcessLib/LIE/HydroMechanics/HydroMechanicsProcess.cpp
@@ -19,10 +19,10 @@
 #include "NumLib/DOF/DOFTableUtil.h"
 #include "NumLib/DOF/LocalToGlobalIndexMap.h"
 
+#include "ParameterLib/MeshElementParameter.h"
 #include "ProcessLib/LIE/Common/BranchProperty.h"
 #include "ProcessLib/LIE/Common/JunctionProperty.h"
 #include "ProcessLib/LIE/Common/MeshUtils.h"
-#include "ProcessLib/Parameter/MeshElementParameter.h"
 
 #include "LocalAssembler/CreateLocalAssemblers.h"
 #include "LocalAssembler/HydroMechanicsLocalAssemblerFracture.h"
@@ -39,9 +39,10 @@ template <int GlobalDim>
 HydroMechanicsProcess<GlobalDim>::HydroMechanicsProcess(
     MeshLib::Mesh& mesh,
     std::unique_ptr<ProcessLib::AbstractJacobianAssembler>&& jacobian_assembler,
-    std::vector<std::unique_ptr<ParameterBase>> const& parameters,
+    std::vector<std::unique_ptr<ParameterLib::ParameterBase>> const& parameters,
     unsigned const integration_order,
-    std::vector<std::vector<std::reference_wrapper<ProcessVariable>>>&& process_variables,
+    std::vector<std::vector<std::reference_wrapper<ProcessVariable>>>&&
+        process_variables,
     HydroMechanicsProcessData<GlobalDim>&& process_data,
     SecondaryVariableCollection&& secondary_variables,
     NumLib::NamedFunctionCaller&& named_function_caller,
@@ -347,7 +348,7 @@ void HydroMechanicsProcess<GlobalDim>::initializeConcreteProcess(
             {
                 continue;
             }
-            ProcessLib::SpatialPosition x;
+            ParameterLib::SpatialPosition x;
             x.setElementID(e->getID());
             (*mesh_prop_b)[e->getID()] = frac->aperture0(0, x)[0];
         }
@@ -515,12 +516,13 @@ void HydroMechanicsProcess<GlobalDim>::computeSecondaryVariableConcrete(
                                       double const w_n) {
         // skip aperture computation for element-wise defined b0 because there
         // are jumps on the nodes between the element's values.
-        if (dynamic_cast<MeshElementParameter<double> const*>(&b0))
+        if (dynamic_cast<ParameterLib::MeshElementParameter<double> const*>(
+                &b0))
         {
             return std::numeric_limits<double>::quiet_NaN();
         }
 
-        ProcessLib::SpatialPosition x;
+        ParameterLib::SpatialPosition x;
         x.setNodeID(node_id);
         return w_n + b0(/*time independent*/ 0, x)[0];
     };
diff --git a/ProcessLib/LIE/HydroMechanics/HydroMechanicsProcess.h b/ProcessLib/LIE/HydroMechanics/HydroMechanicsProcess.h
index 5c6f84e7d419830df59ad90cb8a3d219172d3982..cff95684784e1be498a22680ab8ef8b72592fb8c 100644
--- a/ProcessLib/LIE/HydroMechanics/HydroMechanicsProcess.h
+++ b/ProcessLib/LIE/HydroMechanics/HydroMechanicsProcess.h
@@ -34,7 +34,8 @@ public:
         MeshLib::Mesh& mesh,
         std::unique_ptr<ProcessLib::AbstractJacobianAssembler>&&
             jacobian_assembler,
-        std::vector<std::unique_ptr<ParameterBase>> const& parameters,
+        std::vector<std::unique_ptr<ParameterLib::ParameterBase>> const&
+            parameters,
         unsigned const integration_order,
         std::vector<std::vector<std::reference_wrapper<ProcessVariable>>>&&
             process_variables,
diff --git a/ProcessLib/LIE/HydroMechanics/HydroMechanicsProcessData.h b/ProcessLib/LIE/HydroMechanics/HydroMechanicsProcessData.h
index c0dcf8033c3e7d13f0339f296077dfeb85952518..d7010524d3c3595dd60c98be91c226e920d9ca38 100644
--- a/ProcessLib/LIE/HydroMechanics/HydroMechanicsProcessData.h
+++ b/ProcessLib/LIE/HydroMechanics/HydroMechanicsProcessData.h
@@ -41,20 +41,21 @@ struct HydroMechanicsProcessData
             int,
             std::unique_ptr<MaterialLib::Solids::MechanicsBase<GlobalDim>>>&&
             solid_materials_,
-        Parameter<double> const& intrinsic_permeability_,
-        Parameter<double> const& specific_storage_,
-        Parameter<double> const& fluid_viscosity_,
-        Parameter<double> const& fluid_density_,
-        Parameter<double> const& biot_coefficient_,
-        Parameter<double> const& porosity_,
-        Parameter<double> const& solid_density_,
+        ParameterLib::Parameter<double> const& intrinsic_permeability_,
+        ParameterLib::Parameter<double> const& specific_storage_,
+        ParameterLib::Parameter<double> const& fluid_viscosity_,
+        ParameterLib::Parameter<double> const& fluid_density_,
+        ParameterLib::Parameter<double> const& biot_coefficient_,
+        ParameterLib::Parameter<double> const& porosity_,
+        ParameterLib::Parameter<double> const& solid_density_,
         Eigen::Matrix<double, GlobalDim, 1>
             specific_body_force_,
         std::unique_ptr<MaterialLib::Fracture::FractureModelBase<GlobalDim>>&&
             fracture_model,
         std::unique_ptr<FracturePropertyHM>&& fracture_prop,
-        Parameter<double> const& initial_effective_stress_,
-        Parameter<double> const& initial_fracture_effective_stress_,
+        ParameterLib::Parameter<double> const& initial_effective_stress_,
+        ParameterLib::Parameter<double> const&
+            initial_fracture_effective_stress_,
         bool const deactivate_matrix_in_flow_,
         double const reference_temperature_)
         : material_ids(material_ids_),
@@ -91,23 +92,23 @@ struct HydroMechanicsProcessData
     std::map<int,
              std::unique_ptr<MaterialLib::Solids::MechanicsBase<GlobalDim>>>
         solid_materials;
-    Parameter<double> const& intrinsic_permeability;
-    Parameter<double> const& specific_storage;
-    Parameter<double> const& fluid_viscosity;
-    Parameter<double> const& fluid_density;
-    Parameter<double> const& biot_coefficient;
-    Parameter<double> const& porosity;
-    Parameter<double> const& solid_density;
+    ParameterLib::Parameter<double> const& intrinsic_permeability;
+    ParameterLib::Parameter<double> const& specific_storage;
+    ParameterLib::Parameter<double> const& fluid_viscosity;
+    ParameterLib::Parameter<double> const& fluid_density;
+    ParameterLib::Parameter<double> const& biot_coefficient;
+    ParameterLib::Parameter<double> const& porosity;
+    ParameterLib::Parameter<double> const& solid_density;
     Eigen::Matrix<double, GlobalDim, 1> const specific_body_force;
     std::unique_ptr<MaterialLib::Fracture::FractureModelBase<GlobalDim>>
         fracture_model;
     std::unique_ptr<FracturePropertyHM> fracture_property;
-    Parameter<double> const& initial_effective_stress;
-    Parameter<double> const& initial_fracture_effective_stress;
+    ParameterLib::Parameter<double> const& initial_effective_stress;
+    ParameterLib::Parameter<double> const& initial_fracture_effective_stress;
 
     bool const deactivate_matrix_in_flow;
     std::unique_ptr<MeshLib::ElementStatus> p_element_status;
-    Parameter<double> const* p0 = nullptr;
+    ParameterLib::Parameter<double> const* p0 = nullptr;
 
     double dt = 0.0;
     double t = 0.0;
diff --git a/ProcessLib/LIE/HydroMechanics/LocalAssembler/HydroMechanicsLocalAssemblerFracture-impl.h b/ProcessLib/LIE/HydroMechanics/LocalAssembler/HydroMechanicsLocalAssemblerFracture-impl.h
index 9bbf15bcc3546eb4fece014d9ab5d0853566afa6..e274b06ba37f1a6c3b4adb2b33446a36b169a022 100644
--- a/ProcessLib/LIE/HydroMechanics/LocalAssembler/HydroMechanicsLocalAssemblerFracture-impl.h
+++ b/ProcessLib/LIE/HydroMechanics/LocalAssembler/HydroMechanicsLocalAssemblerFracture-impl.h
@@ -69,7 +69,7 @@ HydroMechanicsLocalAssemblerFracture<ShapeFunctionDisplacement,
         aperture0_node_values = frac_prop.aperture0.getNodalValuesOnElement(
             e, /*time independent*/ 0);
 
-    SpatialPosition x_position;
+    ParameterLib::SpatialPosition x_position;
     x_position.setElementID(e.getID());
     for (unsigned ip = 0; ip < n_integration_points; ip++)
     {
@@ -188,7 +188,7 @@ void HydroMechanicsLocalAssemblerFracture<ShapeFunctionDisplacement,
 
     auto const& gravity_vec = _process_data.specific_body_force;
 
-    SpatialPosition x_position;
+    ParameterLib::SpatialPosition x_position;
     x_position.setElementID(_element.getID());
 
     unsigned const n_integration_points = _ip_data.size();
@@ -329,7 +329,7 @@ void HydroMechanicsLocalAssemblerFracture<ShapeFunctionDisplacement,
     // in a displacement vector
     auto constexpr index_normal = GlobalDim - 1;
 
-    SpatialPosition x_position;
+    ParameterLib::SpatialPosition x_position;
     x_position.setElementID(_element.getID());
 
     unsigned const n_integration_points = _ip_data.size();
diff --git a/ProcessLib/LIE/HydroMechanics/LocalAssembler/HydroMechanicsLocalAssemblerMatrix-impl.h b/ProcessLib/LIE/HydroMechanics/LocalAssembler/HydroMechanicsLocalAssemblerMatrix-impl.h
index 150260e3d414865878ea283b4a57e9a66d88f1f4..6146b3c0c98954f5f84a402baa5e52931972942b 100644
--- a/ProcessLib/LIE/HydroMechanics/LocalAssembler/HydroMechanicsLocalAssemblerMatrix-impl.h
+++ b/ProcessLib/LIE/HydroMechanics/LocalAssembler/HydroMechanicsLocalAssemblerMatrix-impl.h
@@ -65,7 +65,7 @@ HydroMechanicsLocalAssemblerMatrix<ShapeFunctionDisplacement,
     auto& solid_material = MaterialLib::Solids::selectSolidConstitutiveRelation(
         _process_data.solid_materials, _process_data.material_ids, e.getID());
 
-    SpatialPosition x_position;
+    ParameterLib::SpatialPosition x_position;
     x_position.setElementID(e.getID());
     for (unsigned ip = 0; ip < n_integration_points; ip++)
     {
@@ -194,7 +194,7 @@ void HydroMechanicsLocalAssemblerMatrix<ShapeFunctionDisplacement,
     double const& dt = _process_data.dt;
     auto const& gravity_vec = _process_data.specific_body_force;
 
-    SpatialPosition x_position;
+    ParameterLib::SpatialPosition x_position;
     x_position.setElementID(_element.getID());
 
     unsigned const n_integration_points = _ip_data.size();
@@ -330,7 +330,7 @@ void HydroMechanicsLocalAssemblerMatrix<ShapeFunctionDisplacement,
         Eigen::Ref<const Eigen::VectorXd> const& p,
         Eigen::Ref<const Eigen::VectorXd> const& u)
 {
-    SpatialPosition x_position;
+    ParameterLib::SpatialPosition x_position;
     x_position.setElementID(_element.getID());
 
     unsigned const n_integration_points = _ip_data.size();
@@ -446,7 +446,7 @@ void HydroMechanicsLocalAssemblerMatrix<
                                            Eigen::Ref<Eigen::VectorXd>
                                                p)
 {
-    SpatialPosition x_position;
+    ParameterLib::SpatialPosition x_position;
     x_position.setElementID(_element.getID());
     for (unsigned i = 0; i < pressure_size; i++)
     {
diff --git a/ProcessLib/LIE/SmallDeformation/CreateSmallDeformationProcess.cpp b/ProcessLib/LIE/SmallDeformation/CreateSmallDeformationProcess.cpp
index afff8e5cf6e3b91319f59ac588cc71fec04cf9ce..28ccb4baa3405a3369bab519b6129b0bdc23dabf 100644
--- a/ProcessLib/LIE/SmallDeformation/CreateSmallDeformationProcess.cpp
+++ b/ProcessLib/LIE/SmallDeformation/CreateSmallDeformationProcess.cpp
@@ -15,9 +15,8 @@
 #include "MaterialLib/FractureModels/CreateLinearElasticIsotropic.h"
 #include "MaterialLib/FractureModels/CreateMohrCoulomb.h"
 #include "MaterialLib/SolidModels/CreateConstitutiveRelation.h"
-
+#include "ParameterLib/Utils.h"
 #include "ProcessLib/Output/CreateSecondaryVariables.h"
-#include "ProcessLib/Utils/ProcessUtils.h"  // required for findParameter
 
 #include "SmallDeformationProcess.h"
 #include "SmallDeformationProcessData.h"
@@ -33,7 +32,7 @@ std::unique_ptr<Process> createSmallDeformationProcess(
     MeshLib::Mesh& mesh,
     std::unique_ptr<ProcessLib::AbstractJacobianAssembler>&& jacobian_assembler,
     std::vector<ProcessVariable> const& variables,
-    std::vector<std::unique_ptr<ParameterBase>> const& parameters,
+    std::vector<std::unique_ptr<ParameterLib::ParameterBase>> const& parameters,
     unsigned const integration_order,
     BaseLib::ConfigTree const& config)
 {
@@ -158,7 +157,7 @@ std::unique_ptr<Process> createSmallDeformationProcess(
             fracture_properties.size(),
             //! \ogs_file_param{prj__processes__process__SMALL_DEFORMATION_WITH_LIE__fracture_properties__material_id}
             fracture_properties_config.getConfigParameter<int>("material_id"),
-            ProcessLib::findParameter<double>(
+            ParameterLib::findParameter<double>(
                 //! \ogs_file_param_special{prj__processes__process__SMALL_DEFORMATION_WITH_LIE__fracture_properties__initial_aperture}
                 fracture_properties_config, "initial_aperture", parameters, 1));
     }
@@ -200,7 +199,7 @@ template std::unique_ptr<Process> createSmallDeformationProcess<2>(
     MeshLib::Mesh& mesh,
     std::unique_ptr<ProcessLib::AbstractJacobianAssembler>&& jacobian_assembler,
     std::vector<ProcessVariable> const& variables,
-    std::vector<std::unique_ptr<ParameterBase>> const& parameters,
+    std::vector<std::unique_ptr<ParameterLib::ParameterBase>> const& parameters,
     unsigned const integration_order,
     BaseLib::ConfigTree const& config);
 
@@ -208,7 +207,7 @@ template std::unique_ptr<Process> createSmallDeformationProcess<3>(
     MeshLib::Mesh& mesh,
     std::unique_ptr<ProcessLib::AbstractJacobianAssembler>&& jacobian_assembler,
     std::vector<ProcessVariable> const& variables,
-    std::vector<std::unique_ptr<ParameterBase>> const& parameters,
+    std::vector<std::unique_ptr<ParameterLib::ParameterBase>> const& parameters,
     unsigned const integration_order,
     BaseLib::ConfigTree const& config);
 
diff --git a/ProcessLib/LIE/SmallDeformation/CreateSmallDeformationProcess.h b/ProcessLib/LIE/SmallDeformation/CreateSmallDeformationProcess.h
index a546bd8dfaaeea6e0f6eff200352577e1a44768a..96a17d0b36be9dab7329c4ae193a8474bdfe9f32 100644
--- a/ProcessLib/LIE/SmallDeformation/CreateSmallDeformationProcess.h
+++ b/ProcessLib/LIE/SmallDeformation/CreateSmallDeformationProcess.h
@@ -15,15 +15,18 @@
 namespace BaseLib
 {
 class ConfigTree;
-}  // namespace BaseLib
+}
 namespace MeshLib
 {
 class Mesh;
-}  // namespace MeshLib
+}
+namespace ParameterLib
+{
+struct ParameterBase;
+}
 namespace ProcessLib
 {
 class AbstractJacobianAssembler;
-struct ParameterBase;
 class Process;
 class ProcessVariable;
 }  // namespace ProcessLib
@@ -39,7 +42,7 @@ std::unique_ptr<Process> createSmallDeformationProcess(
     MeshLib::Mesh& mesh,
     std::unique_ptr<ProcessLib::AbstractJacobianAssembler>&& jacobian_assembler,
     std::vector<ProcessVariable> const& variables,
-    std::vector<std::unique_ptr<ParameterBase>> const& parameters,
+    std::vector<std::unique_ptr<ParameterLib::ParameterBase>> const& parameters,
     unsigned const integration_order,
     BaseLib::ConfigTree const& config);
 
diff --git a/ProcessLib/LIE/SmallDeformation/LocalAssembler/SmallDeformationLocalAssemblerFracture-impl.h b/ProcessLib/LIE/SmallDeformation/LocalAssembler/SmallDeformationLocalAssemblerFracture-impl.h
index a180c7fc5e14008e331239b91fda90794ea60824..46e30af5c34bdf136cd4970577e8b2dc06ecf3ab 100644
--- a/ProcessLib/LIE/SmallDeformation/LocalAssembler/SmallDeformationLocalAssemblerFracture-impl.h
+++ b/ProcessLib/LIE/SmallDeformation/LocalAssembler/SmallDeformationLocalAssemblerFracture-impl.h
@@ -69,7 +69,7 @@ SmallDeformationLocalAssemblerFracture<ShapeFunction, IntegrationMethod,
         _junction_props.push_back(&_process_data.junction_properties[jid]);
     }
 
-    SpatialPosition x_position;
+    ParameterLib::SpatialPosition x_position;
     x_position.setElementID(_element.getID());
     for (unsigned ip = 0; ip < n_integration_points; ip++)
     {
@@ -172,7 +172,7 @@ void SmallDeformationLocalAssemblerFracture<
     unsigned const n_integration_points =
         _integration_method.getNumberOfPoints();
 
-    SpatialPosition x_position;
+    ParameterLib::SpatialPosition x_position;
     x_position.setElementID(_element.getID());
 
     for (unsigned ip = 0; ip < n_integration_points; ip++)
@@ -264,7 +264,7 @@ void SmallDeformationLocalAssemblerFracture<ShapeFunction, IntegrationMethod,
     unsigned const n_integration_points =
         _integration_method.getNumberOfPoints();
 
-    SpatialPosition x_position;
+    ParameterLib::SpatialPosition x_position;
     x_position.setElementID(_element.getID());
 
     std::vector<Eigen::VectorXd> vec_nodal_g;
diff --git a/ProcessLib/LIE/SmallDeformation/LocalAssembler/SmallDeformationLocalAssemblerMatrix-impl.h b/ProcessLib/LIE/SmallDeformation/LocalAssembler/SmallDeformationLocalAssemblerMatrix-impl.h
index b8fda67a40d75e62265dbeaadcb8e954e987eaa4..ed4d89efb08f7a2d36e59697856e52d269c0049c 100644
--- a/ProcessLib/LIE/SmallDeformation/LocalAssembler/SmallDeformationLocalAssemblerMatrix-impl.h
+++ b/ProcessLib/LIE/SmallDeformation/LocalAssembler/SmallDeformationLocalAssemblerMatrix-impl.h
@@ -119,7 +119,7 @@ void SmallDeformationLocalAssemblerMatrix<ShapeFunction, IntegrationMethod,
     unsigned const n_integration_points =
         _integration_method.getNumberOfPoints();
 
-    SpatialPosition x_position;
+    ParameterLib::SpatialPosition x_position;
     x_position.setElementID(_element.getID());
 
     for (unsigned ip = 0; ip < n_integration_points; ip++)
diff --git a/ProcessLib/LIE/SmallDeformation/LocalAssembler/SmallDeformationLocalAssemblerMatrixNearFracture-impl.h b/ProcessLib/LIE/SmallDeformation/LocalAssembler/SmallDeformationLocalAssemblerMatrixNearFracture-impl.h
index 0bff13ab6a01d92a5d6dbc630ad32e6f2361c61f..a7c521995ead46ee867125305b7c9077857229ba 100644
--- a/ProcessLib/LIE/SmallDeformation/LocalAssembler/SmallDeformationLocalAssemblerMatrixNearFracture-impl.h
+++ b/ProcessLib/LIE/SmallDeformation/LocalAssembler/SmallDeformationLocalAssemblerMatrixNearFracture-impl.h
@@ -206,7 +206,7 @@ void SmallDeformationLocalAssemblerMatrixNearFracture<
     unsigned const n_integration_points =
         _integration_method.getNumberOfPoints();
 
-    SpatialPosition x_position;
+    ParameterLib::SpatialPosition x_position;
     x_position.setElementID(_element.getID());
 
     for (unsigned ip = 0; ip < n_integration_points; ip++)
diff --git a/ProcessLib/LIE/SmallDeformation/SmallDeformationProcess.cpp b/ProcessLib/LIE/SmallDeformation/SmallDeformationProcess.cpp
index 37f878fd6504b4019f1e96ff4a425ffd7e331002..416501e73c5d1c5b1fdcb65c60d15913783c7b99 100644
--- a/ProcessLib/LIE/SmallDeformation/SmallDeformationProcess.cpp
+++ b/ProcessLib/LIE/SmallDeformation/SmallDeformationProcess.cpp
@@ -32,7 +32,7 @@ template <int DisplacementDim>
 SmallDeformationProcess<DisplacementDim>::SmallDeformationProcess(
     MeshLib::Mesh& mesh,
     std::unique_ptr<ProcessLib::AbstractJacobianAssembler>&& jacobian_assembler,
-    std::vector<std::unique_ptr<ParameterBase>> const& parameters,
+    std::vector<std::unique_ptr<ParameterLib::ParameterBase>> const& parameters,
     unsigned const integration_order,
     std::vector<std::vector<std::reference_wrapper<ProcessVariable>>>&&
         process_variables,
@@ -495,7 +495,7 @@ void SmallDeformationProcess<DisplacementDim>::initializeConcreteProcess(
             {
                 continue;
             }
-            ProcessLib::SpatialPosition x;
+            ParameterLib::SpatialPosition x;
             x.setElementID(e->getID());
             (*mesh_prop_b)[e->getID()] = fracture_prop.aperture0(0, x)[0];
         }
diff --git a/ProcessLib/LIE/SmallDeformation/SmallDeformationProcess.h b/ProcessLib/LIE/SmallDeformation/SmallDeformationProcess.h
index 1c98bdfc879da73a8a9bdd2fed467e6455049142..706f198d43f0a3ffcc63dfd131b9de6cb3b323ac 100644
--- a/ProcessLib/LIE/SmallDeformation/SmallDeformationProcess.h
+++ b/ProcessLib/LIE/SmallDeformation/SmallDeformationProcess.h
@@ -31,7 +31,8 @@ public:
         MeshLib::Mesh& mesh,
         std::unique_ptr<ProcessLib::AbstractJacobianAssembler>&&
             jacobian_assembler,
-        std::vector<std::unique_ptr<ParameterBase>> const& parameters,
+        std::vector<std::unique_ptr<ParameterLib::ParameterBase>> const&
+            parameters,
         unsigned const integration_order,
         std::vector<std::vector<std::reference_wrapper<ProcessVariable>>>&&
             process_variables,
diff --git a/ProcessLib/LiquidFlow/CMakeLists.txt b/ProcessLib/LiquidFlow/CMakeLists.txt
index b6a430d96d2d33749bff5253cadea6ad9b9c9ea8..ff8694cc576af6e9f0fcabea5a591636685d6560 100644
--- a/ProcessLib/LiquidFlow/CMakeLists.txt
+++ b/ProcessLib/LiquidFlow/CMakeLists.txt
@@ -4,6 +4,9 @@ add_library(LiquidFlow ${SOURCES})
 if(BUILD_SHARED_LIBS)
     install(TARGETS LiquidFlow LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR})
 endif()
-target_link_libraries(LiquidFlow PUBLIC ProcessLib)
+target_link_libraries(LiquidFlow
+    PUBLIC ProcessLib
+    PRIVATE ParameterLib
+)
 
 include(Tests.cmake)
diff --git a/ProcessLib/LiquidFlow/CreateLiquidFlowMaterialProperties.cpp b/ProcessLib/LiquidFlow/CreateLiquidFlowMaterialProperties.cpp
index fff96752fab05c40f110fd29a362cf9cc0f624fe..f14f3e341b7b9d43fdda3d20b90bb22810828667 100644
--- a/ProcessLib/LiquidFlow/CreateLiquidFlowMaterialProperties.cpp
+++ b/ProcessLib/LiquidFlow/CreateLiquidFlowMaterialProperties.cpp
@@ -14,22 +14,22 @@
 
 #include "BaseLib/Algorithm.h"
 #include "BaseLib/ConfigTree.h"
-
-#include "MeshLib/PropertyVector.h"
-
+#include "MaterialLib/Fluid/FluidProperties/CreateFluidProperties.h"
 #include "MaterialLib/Fluid/FluidProperty.h"
+#include "MaterialLib/Fluid/FluidPropertyHeaders.h"
 #include "MaterialLib/PorousMedium/Permeability/Permeability.h"
 #include "MaterialLib/PorousMedium/Porosity/Porosity.h"
-#include "MaterialLib/PorousMedium/Storage/Storage.h"
-#include "MaterialLib/Fluid/FluidProperties/CreateFluidProperties.h"
-
-#include "MaterialLib/Fluid/FluidPropertyHeaders.h"
 #include "MaterialLib/PorousMedium/PorousPropertyHeaders.h"
-
-#include "ProcessLib/Utils/ProcessUtils.h"
+#include "MaterialLib/PorousMedium/Storage/Storage.h"
+#include "MeshLib/PropertyVector.h"
 
 #include "LiquidFlowMaterialProperties.h"
 
+namespace ParameterLib
+{
+struct ParameterBase;
+}
+
 namespace ProcessLib
 {
 namespace LiquidFlow
@@ -39,7 +39,7 @@ class LiquidFlowMaterialProperties;
 std::unique_ptr<LiquidFlowMaterialProperties>
 createLiquidFlowMaterialProperties(
     BaseLib::ConfigTree const& config,
-    std::vector<std::unique_ptr<ParameterBase>> const& parameters,
+    std::vector<std::unique_ptr<ParameterLib::ParameterBase>> const& parameters,
     MeshLib::PropertyVector<int> const* const material_ids)
 {
     DBUG("Reading material properties of liquid flow process.");
diff --git a/ProcessLib/LiquidFlow/CreateLiquidFlowMaterialProperties.h b/ProcessLib/LiquidFlow/CreateLiquidFlowMaterialProperties.h
index 6721514df1baf9c78a3ceb2d830fbadf9a57bcf2..86199632a824c34e503238a227ef6b2738fff380 100644
--- a/ProcessLib/LiquidFlow/CreateLiquidFlowMaterialProperties.h
+++ b/ProcessLib/LiquidFlow/CreateLiquidFlowMaterialProperties.h
@@ -26,11 +26,12 @@ template <typename PROP_VAL_TYPE>
 class PropertyVector;
 }
 
-namespace ProcessLib
+namespace ParameterLib
 {
 struct ParameterBase;
+}
 
-namespace LiquidFlow
+namespace ProcessLib::LiquidFlow
 {
 class LiquidFlowMaterialProperties;
 
@@ -44,8 +45,7 @@ class LiquidFlowMaterialProperties;
 std::unique_ptr<LiquidFlowMaterialProperties>
 createLiquidFlowMaterialProperties(
     BaseLib::ConfigTree const& config,
-    std::vector<std::unique_ptr<ParameterBase>> const& parameters,
+    std::vector<std::unique_ptr<ParameterLib::ParameterBase>> const& parameters,
     MeshLib::PropertyVector<int> const* const material_ids);
 
-}  // namespace LiquidFlow
-}  // namespace ProcessLib
+}  // namespace ProcessLib::LiquidFlow
diff --git a/ProcessLib/LiquidFlow/CreateLiquidFlowProcess.cpp b/ProcessLib/LiquidFlow/CreateLiquidFlowProcess.cpp
index e9a2ec112fa8bce5a5ff547a479a2e230a9a3b3b..17ad2706f14e8d3f0f8fbe36f63090ea1c070557 100644
--- a/ProcessLib/LiquidFlow/CreateLiquidFlowProcess.cpp
+++ b/ProcessLib/LiquidFlow/CreateLiquidFlowProcess.cpp
@@ -13,9 +13,9 @@
 
 #include <algorithm>
 
-#include "MeshLib/MeshGenerators/MeshGenerator.h"
-
 #include "MaterialLib/PhysicalConstant.h"
+#include "MeshLib/MeshGenerators/MeshGenerator.h"
+#include "ParameterLib/Utils.h"
 #include "ProcessLib/Output/CreateSecondaryVariables.h"
 #include "ProcessLib/Utils/ProcessUtils.h"
 
@@ -29,7 +29,7 @@ std::unique_ptr<Process> createLiquidFlowProcess(
     MeshLib::Mesh& mesh,
     std::unique_ptr<ProcessLib::AbstractJacobianAssembler>&& jacobian_assembler,
     std::vector<ProcessVariable> const& variables,
-    std::vector<std::unique_ptr<ParameterBase>> const& parameters,
+    std::vector<std::unique_ptr<ParameterLib::ParameterBase>> const& parameters,
     unsigned const integration_order,
     BaseLib::ConfigTree const& config)
 {
diff --git a/ProcessLib/LiquidFlow/CreateLiquidFlowProcess.h b/ProcessLib/LiquidFlow/CreateLiquidFlowProcess.h
index 2ae8ebce567d18cea6456d2bf8d620f9c031827e..b333fe1818616dc47dd3815147c9fb15a80e7c01 100644
--- a/ProcessLib/LiquidFlow/CreateLiquidFlowProcess.h
+++ b/ProcessLib/LiquidFlow/CreateLiquidFlowProcess.h
@@ -23,7 +23,7 @@ std::unique_ptr<Process> createLiquidFlowProcess(
     MeshLib::Mesh& mesh,
     std::unique_ptr<ProcessLib::AbstractJacobianAssembler>&& jacobian_assembler,
     std::vector<ProcessVariable> const& variables,
-    std::vector<std::unique_ptr<ParameterBase>> const& parameters,
+    std::vector<std::unique_ptr<ParameterLib::ParameterBase>> const& parameters,
     unsigned const integration_order,
     BaseLib::ConfigTree const& config);
 }  // end of namespace
diff --git a/ProcessLib/LiquidFlow/LiquidFlowLocalAssembler-impl.h b/ProcessLib/LiquidFlow/LiquidFlowLocalAssembler-impl.h
index eeff64bb5309618883c3c923c6204f1f99ce1cb0..10db2179c6e15ae8ec894d2cb5aadeefacc02190 100644
--- a/ProcessLib/LiquidFlow/LiquidFlowLocalAssembler-impl.h
+++ b/ProcessLib/LiquidFlow/LiquidFlowLocalAssembler-impl.h
@@ -28,7 +28,7 @@ void LiquidFlowLocalAssembler<ShapeFunction, IntegrationMethod, GlobalDim>::
              std::vector<double>& local_K_data,
              std::vector<double>& local_b_data)
 {
-    SpatialPosition pos;
+    ParameterLib::SpatialPosition pos;
     pos.setElementID(_element.getID());
     const int material_id = _material_properties.getMaterialID(pos);
 
@@ -62,7 +62,7 @@ void LiquidFlowLocalAssembler<ShapeFunction, IntegrationMethod, GlobalDim>::
                             std::vector<double>& local_M_data,
                             std::vector<double>& local_K_data,
                             std::vector<double>& local_b_data,
-                            SpatialPosition const& pos,
+                            ParameterLib::SpatialPosition const& pos,
                             Eigen::MatrixXd const& permeability)
 {
     auto const local_matrix_size = local_x.size();
@@ -128,7 +128,7 @@ LiquidFlowLocalAssembler<ShapeFunction, IntegrationMethod, GlobalDim>::
         Eigen::Matrix<double, GlobalDim, Eigen::Dynamic, Eigen::RowMajor>>(
         velocity_cache, GlobalDim, num_intpts);
 
-    SpatialPosition pos;
+    ParameterLib::SpatialPosition pos;
     pos.setElementID(_element.getID());
     const int material_id = _material_properties.getMaterialID(pos);
     const Eigen::MatrixXd& permeability = _material_properties.getPermeability(
diff --git a/ProcessLib/LiquidFlow/LiquidFlowLocalAssembler.h b/ProcessLib/LiquidFlow/LiquidFlowLocalAssembler.h
index da251f2404dfa866b99579f8ab21c0aa2d7be6ab..f1845b8c2ea828fdde487f93e43b50f1c3407bdb 100644
--- a/ProcessLib/LiquidFlow/LiquidFlowLocalAssembler.h
+++ b/ProcessLib/LiquidFlow/LiquidFlowLocalAssembler.h
@@ -20,13 +20,13 @@
 #include "MaterialLib/PorousMedium/Permeability/Permeability.h"
 #include "MaterialLib/PorousMedium/Storage/Storage.h"
 #include "MathLib/LinAlg/Eigen/EigenMapTools.h"
-#include "NumLib/Extrapolation/ExtrapolatableElement.h"
 #include "NumLib/DOF/DOFTableUtil.h"
+#include "NumLib/Extrapolation/ExtrapolatableElement.h"
 #include "NumLib/Fem/FiniteElement/TemplateIsoparametric.h"
 #include "NumLib/Fem/ShapeMatrixPolicy.h"
+#include "ParameterLib/Parameter.h"
 #include "ProcessLib/LocalAssemblerInterface.h"
 #include "ProcessLib/LocalAssemblerTraits.h"
-#include "ProcessLib/Parameter/Parameter.h"
 #include "ProcessLib/Utils/InitShapeMatrices.h"
 
 #include "LiquidFlowMaterialProperties.h"
@@ -205,7 +205,7 @@ private:
                                  std::vector<double>& local_M_data,
                                  std::vector<double>& local_K_data,
                                  std::vector<double>& local_b_data,
-                                 SpatialPosition const& pos,
+                                 ParameterLib::SpatialPosition const& pos,
                                  Eigen::MatrixXd const& permeability);
 
     template <typename LaplacianGravityVelocityCalculator>
diff --git a/ProcessLib/LiquidFlow/LiquidFlowMaterialProperties.cpp b/ProcessLib/LiquidFlow/LiquidFlowMaterialProperties.cpp
index 014d585f99a164aa241d41d3d2fb28ada934bbfb..908b2dd0f2b6898ede45a19d575823b5505e8821 100644
--- a/ProcessLib/LiquidFlow/LiquidFlowMaterialProperties.cpp
+++ b/ProcessLib/LiquidFlow/LiquidFlowMaterialProperties.cpp
@@ -17,7 +17,7 @@
 
 #include "MeshLib/PropertyVector.h"
 
-#include "ProcessLib/Parameter/SpatialPosition.h"
+#include "ParameterLib/SpatialPosition.h"
 
 #include "MaterialLib/PorousMedium/Permeability/Permeability.h"
 #include "MaterialLib/PorousMedium/Porosity/Porosity.h"
@@ -31,7 +31,7 @@ namespace ProcessLib
 namespace LiquidFlow
 {
 int LiquidFlowMaterialProperties::getMaterialID(
-    const SpatialPosition& pos) const
+    const ParameterLib::SpatialPosition& pos) const
 {
     if (!_material_ids)
     {
@@ -62,20 +62,21 @@ double LiquidFlowMaterialProperties::getViscosity(const double p,
         MaterialLib::Fluid::FluidPropertyType::Viscosity, vars);
 }
 
-double LiquidFlowMaterialProperties::getPorosity(const int material_id,
-                                                 const double t,
-                                                 const SpatialPosition& pos,
-                                                 const double porosity_variable,
-                                                 const double T) const
+double LiquidFlowMaterialProperties::getPorosity(
+    const int material_id,
+    const double t,
+    const ParameterLib::SpatialPosition& pos,
+    const double porosity_variable,
+    const double T) const
 {
     return _porosity_models[material_id]->getValue(t, pos, porosity_variable,
                                                    T);
 }
 
 double LiquidFlowMaterialProperties::getMassCoefficient(
-    const int material_id, const double t, const SpatialPosition& pos,
-    const double p, const double T, const double porosity_variable,
-    const double storage_variable) const
+    const int material_id, const double t,
+    const ParameterLib::SpatialPosition& pos, const double p, const double T,
+    const double porosity_variable, const double storage_variable) const
 {
     ArrayType vars;
     vars[static_cast<int>(MaterialLib::Fluid::PropertyVariableType::T)] = T;
@@ -95,8 +96,8 @@ double LiquidFlowMaterialProperties::getMassCoefficient(
 }
 
 Eigen::MatrixXd const& LiquidFlowMaterialProperties::getPermeability(
-    const int material_id, const double t, const SpatialPosition& pos,
-    const int /*dim*/) const
+    const int material_id, const double t,
+    const ParameterLib::SpatialPosition& pos, const int /*dim*/) const
 {
     return _intrinsic_permeability_models[material_id]->getValue(t, pos, 0.0,
                                                                  0.0);
diff --git a/ProcessLib/LiquidFlow/LiquidFlowMaterialProperties.h b/ProcessLib/LiquidFlow/LiquidFlowMaterialProperties.h
index 2fdc8c838930c27a9e67815d0978f37eb4ae51e9..09eb9d85e2472764ff684d19f2ad574d3fcaaf51 100644
--- a/ProcessLib/LiquidFlow/LiquidFlowMaterialProperties.h
+++ b/ProcessLib/LiquidFlow/LiquidFlowMaterialProperties.h
@@ -66,7 +66,7 @@ public:
     {
     }
 
-    int getMaterialID(const SpatialPosition& pos) const;
+    int getMaterialID(const ParameterLib::SpatialPosition& pos) const;
 
     /**
      * \brief Compute the coefficient of the mass term by
@@ -86,21 +86,23 @@ public:
      * \param storage_variable   Variable for storage model.
      */
     double getMassCoefficient(const int material_id, const double t,
-                              const SpatialPosition& pos, const double p,
-                              const double T, const double porosity_variable,
+                              const ParameterLib::SpatialPosition& pos,
+                              const double p, const double T,
+                              const double porosity_variable,
                               const double storage_variable) const;
 
-    Eigen::MatrixXd const& getPermeability(const int material_id,
-                                           const double t,
-                                           const SpatialPosition& pos,
-                                           const int dim) const;
+    Eigen::MatrixXd const& getPermeability(
+        const int material_id,
+        const double t,
+        const ParameterLib::SpatialPosition& pos,
+        const int dim) const;
 
     double getLiquidDensity(const double p, const double T) const;
 
     double getViscosity(const double p, const double T) const;
 
     double getPorosity(const int material_id, const double t,
-                       const SpatialPosition& pos,
+                       const ParameterLib::SpatialPosition& pos,
                        const double porosity_variable, const double T) const;
 
 private:
diff --git a/ProcessLib/LiquidFlow/LiquidFlowProcess.cpp b/ProcessLib/LiquidFlow/LiquidFlowProcess.cpp
index a2f82b798fa94de43dfcce984a3b26bfec23e4f8..c477aa1f4230cebf1623001ce8c6ff14f907840c 100644
--- a/ProcessLib/LiquidFlow/LiquidFlowProcess.cpp
+++ b/ProcessLib/LiquidFlow/LiquidFlowProcess.cpp
@@ -33,7 +33,7 @@ namespace LiquidFlow
 LiquidFlowProcess::LiquidFlowProcess(
     MeshLib::Mesh& mesh,
     std::unique_ptr<AbstractJacobianAssembler>&& jacobian_assembler,
-    std::vector<std::unique_ptr<ParameterBase>> const& parameters,
+    std::vector<std::unique_ptr<ParameterLib::ParameterBase>> const& parameters,
     unsigned const integration_order,
     std::vector<std::vector<std::reference_wrapper<ProcessVariable>>>&&
         process_variables,
diff --git a/ProcessLib/LiquidFlow/LiquidFlowProcess.h b/ProcessLib/LiquidFlow/LiquidFlowProcess.h
index 21259b69d0443530e35f6cf28818b3fb939e45f8..6e839dcbb15ffaf7b0561f278dc211370f2ebb63 100644
--- a/ProcessLib/LiquidFlow/LiquidFlowProcess.h
+++ b/ProcessLib/LiquidFlow/LiquidFlowProcess.h
@@ -60,7 +60,8 @@ public:
     LiquidFlowProcess(
         MeshLib::Mesh& mesh,
         std::unique_ptr<AbstractJacobianAssembler>&& jacobian_assembler,
-        std::vector<std::unique_ptr<ParameterBase>> const& parameters,
+        std::vector<std::unique_ptr<ParameterLib::ParameterBase>> const&
+            parameters,
         unsigned const integration_order,
         std::vector<std::vector<std::reference_wrapper<ProcessVariable>>>&&
             process_variables,
diff --git a/ProcessLib/PhaseField/CMakeLists.txt b/ProcessLib/PhaseField/CMakeLists.txt
index d3575e49e7e03d07dbc2ba61dc9df7d102ade163..03c6de7205b747233cd055394adca8f800276105 100644
--- a/ProcessLib/PhaseField/CMakeLists.txt
+++ b/ProcessLib/PhaseField/CMakeLists.txt
@@ -4,6 +4,9 @@ add_library(PhaseField ${SOURCES})
 if(BUILD_SHARED_LIBS)
     install(TARGETS PhaseField LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR})
 endif()
-target_link_libraries(PhaseField PUBLIC ProcessLib)
+target_link_libraries(PhaseField
+    PUBLIC ProcessLib
+    PRIVATE ParameterLib
+)
 
 include(Tests.cmake)
diff --git a/ProcessLib/PhaseField/CreatePhaseFieldProcess.cpp b/ProcessLib/PhaseField/CreatePhaseFieldProcess.cpp
index 9df731fb6564858d278bf0979b49d59963d8c881..c88edf1c9d04a050847ac63079478f38b7549992 100644
--- a/ProcessLib/PhaseField/CreatePhaseFieldProcess.cpp
+++ b/ProcessLib/PhaseField/CreatePhaseFieldProcess.cpp
@@ -13,6 +13,7 @@
 
 #include "MaterialLib/SolidModels/CreateConstitutiveRelation.h"
 #include "MaterialLib/SolidModels/MechanicsBase.h"
+#include "ParameterLib/Utils.h"
 #include "ProcessLib/Output/CreateSecondaryVariables.h"
 #include "ProcessLib/Utils/ProcessUtils.h"
 
@@ -28,7 +29,7 @@ std::unique_ptr<Process> createPhaseFieldProcess(
     MeshLib::Mesh& mesh,
     std::unique_ptr<ProcessLib::AbstractJacobianAssembler>&& jacobian_assembler,
     std::vector<ProcessVariable> const& variables,
-    std::vector<std::unique_ptr<ParameterBase>> const& parameters,
+    std::vector<std::unique_ptr<ParameterLib::ParameterBase>> const& parameters,
     unsigned const integration_order,
     BaseLib::ConfigTree const& config)
 {
@@ -106,42 +107,42 @@ std::unique_ptr<Process> createPhaseFieldProcess(
         config.getConfigSubtree("phasefield_parameters");
 
     // Residual stiffness
-    auto& residual_stiffness = findParameter<double>(
+    auto& residual_stiffness = ParameterLib::findParameter<double>(
         phasefield_parameters_config,
         //! \ogs_file_param_special{prj__processes__process__PHASE_FIELD__phasefield_parameters__residual_stiffness}
         "residual_stiffness", parameters, 1);
     DBUG("Use '%s' as residual stiffness.", residual_stiffness.name.c_str());
 
     // Crack resistance
-    auto& crack_resistance = findParameter<double>(
+    auto& crack_resistance = ParameterLib::findParameter<double>(
         phasefield_parameters_config,
         //! \ogs_file_param_special{prj__processes__process__PHASE_FIELD__phasefield_parameters__crack_resistance}
         "crack_resistance", parameters, 1);
     DBUG("Use '%s' as crack resistance.", crack_resistance.name.c_str());
 
     // Crack length scale
-    auto& crack_length_scale = findParameter<double>(
+    auto& crack_length_scale = ParameterLib::findParameter<double>(
         phasefield_parameters_config,
         //! \ogs_file_param_special{prj__processes__process__PHASE_FIELD__phasefield_parameters__crack_length_scale}
         "crack_length_scale", parameters, 1);
     DBUG("Use '%s' as crack length scale.", crack_length_scale.name.c_str());
 
     // Kinetic coefficient
-    auto& kinetic_coefficient = findParameter<double>(
+    auto& kinetic_coefficient = ParameterLib::findParameter<double>(
         phasefield_parameters_config,
         //! \ogs_file_param_special{prj__processes__process__PHASE_FIELD__phasefield_parameters__kinetic_coefficient}
         "kinetic_coefficient", parameters, 1);
     DBUG("Use '%s' as kinetic coefficient.", kinetic_coefficient.name.c_str());
 
     // Solid density
-    auto& solid_density = findParameter<double>(
+    auto& solid_density = ParameterLib::findParameter<double>(
         config,
         //! \ogs_file_param_special{prj__processes__process__PHASE_FIELD__solid_density}
         "solid_density", parameters, 1);
     DBUG("Use '%s' as solid density parameter.", solid_density.name.c_str());
 
     // History field
-    auto& history_field = findParameter<double>(
+    auto& history_field = ParameterLib::findParameter<double>(
         phasefield_parameters_config,
         //! \ogs_file_param_special{prj__processes__process__PHASE_FIELD__phasefield_parameters__history_field}
         "history_field", parameters, 1);
@@ -211,7 +212,7 @@ template std::unique_ptr<Process> createPhaseFieldProcess<2>(
     MeshLib::Mesh& mesh,
     std::unique_ptr<ProcessLib::AbstractJacobianAssembler>&& jacobian_assembler,
     std::vector<ProcessVariable> const& variables,
-    std::vector<std::unique_ptr<ParameterBase>> const& parameters,
+    std::vector<std::unique_ptr<ParameterLib::ParameterBase>> const& parameters,
     unsigned const integration_order,
     BaseLib::ConfigTree const& config);
 
@@ -219,7 +220,7 @@ template std::unique_ptr<Process> createPhaseFieldProcess<3>(
     MeshLib::Mesh& mesh,
     std::unique_ptr<ProcessLib::AbstractJacobianAssembler>&& jacobian_assembler,
     std::vector<ProcessVariable> const& variables,
-    std::vector<std::unique_ptr<ParameterBase>> const& parameters,
+    std::vector<std::unique_ptr<ParameterLib::ParameterBase>> const& parameters,
     unsigned const integration_order,
     BaseLib::ConfigTree const& config);
 
diff --git a/ProcessLib/PhaseField/CreatePhaseFieldProcess.h b/ProcessLib/PhaseField/CreatePhaseFieldProcess.h
index 2c396135cee8d3f7137d64ff8f0f725f67462c0e..d096dc71d66736d2df250884aa462a85e3d6fdc4 100644
--- a/ProcessLib/PhaseField/CreatePhaseFieldProcess.h
+++ b/ProcessLib/PhaseField/CreatePhaseFieldProcess.h
@@ -20,10 +20,13 @@ namespace MeshLib
 {
 class Mesh;
 }
+namespace ParameterLib
+{
+struct ParameterBase;
+}
 namespace ProcessLib
 {
 class AbstractJacobianAssembler;
-struct ParameterBase;
 class Process;
 class ProcessVariable;
 }
@@ -37,7 +40,7 @@ std::unique_ptr<Process> createPhaseFieldProcess(
     MeshLib::Mesh& mesh,
     std::unique_ptr<ProcessLib::AbstractJacobianAssembler>&& jacobian_assembler,
     std::vector<ProcessVariable> const& variables,
-    std::vector<std::unique_ptr<ParameterBase>> const& parameters,
+    std::vector<std::unique_ptr<ParameterLib::ParameterBase>> const& parameters,
     unsigned const integration_order,
     BaseLib::ConfigTree const& config);
 
@@ -45,7 +48,7 @@ extern template std::unique_ptr<Process> createPhaseFieldProcess<2>(
     MeshLib::Mesh& mesh,
     std::unique_ptr<ProcessLib::AbstractJacobianAssembler>&& jacobian_assembler,
     std::vector<ProcessVariable> const& variables,
-    std::vector<std::unique_ptr<ParameterBase>> const& parameters,
+    std::vector<std::unique_ptr<ParameterLib::ParameterBase>> const& parameters,
     unsigned const integration_order,
     BaseLib::ConfigTree const& config);
 
@@ -53,7 +56,7 @@ extern template std::unique_ptr<Process> createPhaseFieldProcess<3>(
     MeshLib::Mesh& mesh,
     std::unique_ptr<ProcessLib::AbstractJacobianAssembler>&& jacobian_assembler,
     std::vector<ProcessVariable> const& variables,
-    std::vector<std::unique_ptr<ParameterBase>> const& parameters,
+    std::vector<std::unique_ptr<ParameterLib::ParameterBase>> const& parameters,
     unsigned const integration_order,
     BaseLib::ConfigTree const& config);
 }  // namespace PhaseField
diff --git a/ProcessLib/PhaseField/PhaseFieldFEM-impl.h b/ProcessLib/PhaseField/PhaseFieldFEM-impl.h
index f0140afa87d89c027667731afae3ccf82a37ba37..82f5c2b91aac9cd982e7d9494f6a0e1303b652e0 100644
--- a/ProcessLib/PhaseField/PhaseFieldFEM-impl.h
+++ b/ProcessLib/PhaseField/PhaseFieldFEM-impl.h
@@ -81,7 +81,7 @@ void PhaseFieldLocalAssembler<ShapeFunction, IntegrationMethod,
     auto local_rhs = MathLib::createZeroedVector<DeformationVector>(
         local_b_data, local_matrix_size);
 
-    SpatialPosition x_position;
+    ParameterLib::SpatialPosition x_position;
     x_position.setElementID(_element.getID());
     double const& dt = _process_data.dt;
 
@@ -183,7 +183,7 @@ void PhaseFieldLocalAssembler<ShapeFunction, IntegrationMethod,
     auto local_rhs = MathLib::createZeroedVector<PhaseFieldVector>(
         local_b_data, local_matrix_size);
 
-    SpatialPosition x_position;
+    ParameterLib::SpatialPosition x_position;
     x_position.setElementID(_element.getID());
     double const& dt = _process_data.dt;
 
@@ -298,7 +298,7 @@ void PhaseFieldLocalAssembler<ShapeFunction, IntegrationMethod,
     auto u = Eigen::Map<typename ShapeMatricesType::template VectorType<
         displacement_size> const>(local_u.data(), displacement_size);
 
-    SpatialPosition x_position;
+    ParameterLib::SpatialPosition x_position;
     x_position.setElementID(_element.getID());
 
     int const n_integration_points = _integration_method.getNumberOfPoints();
@@ -365,7 +365,7 @@ void PhaseFieldLocalAssembler<ShapeFunction, IntegrationMethod,
     auto u = Eigen::Map<typename ShapeMatricesType::template VectorType<
         displacement_size> const>(local_u.data(), displacement_size);
 
-    SpatialPosition x_position;
+    ParameterLib::SpatialPosition x_position;
     x_position.setElementID(_element.getID());
 
     int const n_integration_points = _integration_method.getNumberOfPoints();
diff --git a/ProcessLib/PhaseField/PhaseFieldFEM.h b/ProcessLib/PhaseField/PhaseFieldFEM.h
index fe20b9a87ed47650b84a9193b2adf1298958fba5..458cde06b9132acdb07f41df2dab3def80b82b44 100644
--- a/ProcessLib/PhaseField/PhaseFieldFEM.h
+++ b/ProcessLib/PhaseField/PhaseFieldFEM.h
@@ -18,9 +18,9 @@
 #include "MathLib/LinAlg/Eigen/EigenMapTools.h"
 #include "NumLib/Fem/FiniteElement/TemplateIsoparametric.h"
 #include "NumLib/Fem/ShapeMatrixPolicy.h"
+#include "ParameterLib/SpatialPosition.h"
 #include "ProcessLib/Deformation/BMatrixPolicy.h"
 #include "ProcessLib/Deformation/LinearBMatrix.h"
-#include "ProcessLib/Parameter/SpatialPosition.h"
 #include "ProcessLib/Utils/InitShapeMatrices.h"
 
 #include "LocalAssemblerInterface.h"
@@ -70,7 +70,7 @@ struct IntegrationPointData final
 
     template <typename DisplacementVectorType>
     void updateConstitutiveRelation(double const t,
-                                    SpatialPosition const& x,
+                                    ParameterLib::SpatialPosition const& x,
                                     double const /*dt*/,
                                     DisplacementVectorType const& /*u*/,
                                     double const degradation)
@@ -154,7 +154,7 @@ public:
                               IntegrationMethod, DisplacementDim>(
                 e, is_axially_symmetric, _integration_method);
 
-        SpatialPosition x_position;
+        ParameterLib::SpatialPosition x_position;
         x_position.setElementID(_element.getID());
 
         for (unsigned ip = 0; ip < n_integration_points; ip++)
diff --git a/ProcessLib/PhaseField/PhaseFieldProcess.cpp b/ProcessLib/PhaseField/PhaseFieldProcess.cpp
index 38f88283a3b4457d2f4d8df75234a57210a8595a..f33ba34db09d1f147ce8f3bed4d91ce9ed83a512 100644
--- a/ProcessLib/PhaseField/PhaseFieldProcess.cpp
+++ b/ProcessLib/PhaseField/PhaseFieldProcess.cpp
@@ -28,7 +28,7 @@ template <int DisplacementDim>
 PhaseFieldProcess<DisplacementDim>::PhaseFieldProcess(
     MeshLib::Mesh& mesh,
     std::unique_ptr<ProcessLib::AbstractJacobianAssembler>&& jacobian_assembler,
-    std::vector<std::unique_ptr<ParameterBase>> const& parameters,
+    std::vector<std::unique_ptr<ParameterLib::ParameterBase>> const& parameters,
     unsigned const integration_order,
     std::vector<std::vector<std::reference_wrapper<ProcessVariable>>>&&
         process_variables,
diff --git a/ProcessLib/PhaseField/PhaseFieldProcess.h b/ProcessLib/PhaseField/PhaseFieldProcess.h
index 02e83b9923ee0da8a182a575bd001d6c2f6ff98a..d552a483864975d5f473f7aebc8ec3c76ce1e4a1 100644
--- a/ProcessLib/PhaseField/PhaseFieldProcess.h
+++ b/ProcessLib/PhaseField/PhaseFieldProcess.h
@@ -52,7 +52,8 @@ public:
         MeshLib::Mesh& mesh,
         std::unique_ptr<ProcessLib::AbstractJacobianAssembler>&&
             jacobian_assembler,
-        std::vector<std::unique_ptr<ParameterBase>> const& parameters,
+        std::vector<std::unique_ptr<ParameterLib::ParameterBase>> const&
+            parameters,
         unsigned const integration_order,
         std::vector<std::vector<std::reference_wrapper<ProcessVariable>>>&&
             process_variables,
diff --git a/ProcessLib/PhaseField/PhaseFieldProcessData.h b/ProcessLib/PhaseField/PhaseFieldProcessData.h
index baa5859e59c3cfa654005e321bc3dbfeb019467e..89080d0e1bbb45a4552ada3749f41c8602c18736 100644
--- a/ProcessLib/PhaseField/PhaseFieldProcessData.h
+++ b/ProcessLib/PhaseField/PhaseFieldProcessData.h
@@ -38,12 +38,12 @@ struct PhaseFieldProcessData
                  std::unique_ptr<
                      MaterialLib::Solids::MechanicsBase<DisplacementDim>>>&&
             solid_materials_,
-        Parameter<double> const& residual_stiffness_,
-        Parameter<double> const& crack_resistance_,
-        Parameter<double> const& crack_length_scale_,
-        Parameter<double> const& kinetic_coefficient_,
-        Parameter<double> const& solid_density_,
-        Parameter<double>& history_field_,
+        ParameterLib::Parameter<double> const& residual_stiffness_,
+        ParameterLib::Parameter<double> const& crack_resistance_,
+        ParameterLib::Parameter<double> const& crack_length_scale_,
+        ParameterLib::Parameter<double> const& kinetic_coefficient_,
+        ParameterLib::Parameter<double> const& solid_density_,
+        ParameterLib::Parameter<double>& history_field_,
         Eigen::Matrix<double, DisplacementDim, 1> const& specific_body_force_,
         bool const propagating_crack_,
         bool const crack_pressure_)
@@ -77,12 +77,12 @@ struct PhaseFieldProcessData
     std::map<int, std::unique_ptr<
                       MaterialLib::Solids::MechanicsBase<DisplacementDim>>>
         solid_materials;
-    Parameter<double> const& residual_stiffness;
-    Parameter<double> const& crack_resistance;
-    Parameter<double> const& crack_length_scale;
-    Parameter<double> const& kinetic_coefficient;
-    Parameter<double> const& solid_density;
-    Parameter<double>& history_field;
+    ParameterLib::Parameter<double> const& residual_stiffness;
+    ParameterLib::Parameter<double> const& crack_resistance;
+    ParameterLib::Parameter<double> const& crack_length_scale;
+    ParameterLib::Parameter<double> const& kinetic_coefficient;
+    ParameterLib::Parameter<double> const& solid_density;
+    ParameterLib::Parameter<double>& history_field;
     Eigen::Matrix<double, DisplacementDim, 1> const specific_body_force;
     double dt = 0.0;
     double t = 0.0;
diff --git a/ProcessLib/Process.cpp b/ProcessLib/Process.cpp
index f741a461fd543b142c8cd87c0038087f79aff8dd..ba05df875ccd53ffe993ec59545e46e37d35ab27 100644
--- a/ProcessLib/Process.cpp
+++ b/ProcessLib/Process.cpp
@@ -13,6 +13,7 @@
 #include "NumLib/DOF/ComputeSparsityPattern.h"
 #include "NumLib/Extrapolation/LocalLinearLeastSquaresExtrapolator.h"
 #include "NumLib/ODESolver/ConvergenceCriterionPerComponent.h"
+#include "ParameterLib/Parameter.h"
 #include "ProcessLib/Output/GlobalVectorFromNamedFunction.h"
 
 #include "ProcessVariable.h"
@@ -23,7 +24,7 @@ namespace ProcessLib
 Process::Process(
     MeshLib::Mesh& mesh,
     std::unique_ptr<ProcessLib::AbstractJacobianAssembler>&& jacobian_assembler,
-    std::vector<std::unique_ptr<ParameterBase>> const& parameters,
+    std::vector<std::unique_ptr<ParameterLib::ParameterBase>> const& parameters,
     unsigned const integration_order,
     std::vector<std::vector<std::reference_wrapper<ProcessVariable>>>&&
         process_variables,
@@ -122,7 +123,7 @@ void Process::setInitialConditions(const int process_id, double const t,
          variable_id++)
     {
         MathLib::LinAlg::setLocalAccessibleVector(x);
-        SpatialPosition pos;
+        ParameterLib::SpatialPosition pos;
 
         auto const& pv = per_process_variables[variable_id];
         DBUG("Set the initial condition of variable %s of process %d.",
diff --git a/ProcessLib/Process.h b/ProcessLib/Process.h
index 25c70fd6e66867eae2b207ff3f16a7d729146f1d..fdcfdf0fd21bac060f5d23c058941352ece945f6 100644
--- a/ProcessLib/Process.h
+++ b/ProcessLib/Process.h
@@ -15,12 +15,12 @@
 #include "NumLib/ODESolver/NonlinearSolver.h"
 #include "NumLib/ODESolver/ODESystem.h"
 #include "NumLib/ODESolver/TimeDiscretization.h"
+#include "ParameterLib/Parameter.h"
 #include "ProcessLib/BoundaryCondition/BoundaryConditionCollection.h"
 #include "ProcessLib/Output/CachedSecondaryVariable.h"
 #include "ProcessLib/Output/ExtrapolatorData.h"
 #include "ProcessLib/Output/IntegrationPointWriter.h"
 #include "ProcessLib/Output/SecondaryVariable.h"
-#include "ProcessLib/Parameter/Parameter.h"
 #include "ProcessLib/SourceTerms/SourceTermCollection.h"
 
 #include "AbstractJacobianAssembler.h"
@@ -47,7 +47,8 @@ public:
 
     Process(MeshLib::Mesh& mesh,
             std::unique_ptr<AbstractJacobianAssembler>&& jacobian_assembler,
-            std::vector<std::unique_ptr<ParameterBase>> const& parameters,
+            std::vector<std::unique_ptr<ParameterLib::ParameterBase>> const&
+                parameters,
             unsigned const integration_order,
             std::vector<std::vector<std::reference_wrapper<ProcessVariable>>>&&
                 process_variables,
diff --git a/ProcessLib/ProcessVariable.cpp b/ProcessLib/ProcessVariable.cpp
index dac2b422919cbbdc1676e9c505c77f40b2d9ed95..bb1ad5aafe16db70d3407ff775bc7e16b10a9702 100644
--- a/ProcessLib/ProcessVariable.cpp
+++ b/ProcessLib/ProcessVariable.cpp
@@ -10,23 +10,20 @@
 #include "ProcessVariable.h"
 
 #include <algorithm>
-#include <utility>
-
 #include <logog/include/logog.hpp>
+#include <utility>
 
 #include "BaseLib/Algorithm.h"
 #include "BaseLib/TimeInterval.h"
-
 #include "MeshGeoToolsLib/ConstructMeshesFromGeometries.h"
 #include "MeshLib/Mesh.h"
 #include "MeshLib/Node.h"
-
+#include "ParameterLib/Utils.h"
 #include "ProcessLib/BoundaryCondition/BoundaryCondition.h"
 #include "ProcessLib/BoundaryCondition/CreateBoundaryCondition.h"
 #include "ProcessLib/BoundaryCondition/DirichletBoundaryConditionWithinTimeInterval.h"
 #include "ProcessLib/SourceTerms/CreateSourceTerm.h"
 #include "ProcessLib/SourceTerms/SourceTerm.h"
-#include "ProcessLib/Utils/ProcessUtils.h"
 
 namespace
 {
@@ -95,7 +92,7 @@ ProcessVariable::ProcessVariable(
     BaseLib::ConfigTree const& config,
     MeshLib::Mesh& mesh,
     std::vector<std::unique_ptr<MeshLib::Mesh>> const& meshes,
-    std::vector<std::unique_ptr<ParameterBase>> const& parameters)
+    std::vector<std::unique_ptr<ParameterLib::ParameterBase>> const& parameters)
     :  //! \ogs_file_param{prj__process_variables__process_variable__name}
       _name(config.getConfigParameter<std::string>("name")),
       _mesh(mesh),
@@ -104,7 +101,7 @@ ProcessVariable::ProcessVariable(
       //! \ogs_file_param{prj__process_variables__process_variable__order}
       _shapefunction_order(config.getConfigParameter<unsigned>("order")),
       _deactivated_subdomains(createDeactivatedSubdomains(config, mesh)),
-      _initial_condition(findParameter<double>(
+      _initial_condition(ParameterLib::findParameter<double>(
           //! \ogs_file_param{prj__process_variables__process_variable__initial_condition}
           config.getConfigParameter<std::string>("initial_condition"),
           parameters, _n_components))
@@ -204,7 +201,7 @@ ProcessVariable::createBoundaryConditions(
     const NumLib::LocalToGlobalIndexMap& dof_table,
     const int variable_id,
     unsigned const integration_order,
-    std::vector<std::unique_ptr<ParameterBase>> const& parameters,
+    std::vector<std::unique_ptr<ParameterLib::ParameterBase>> const& parameters,
     Process const& process)
 {
     std::vector<std::unique_ptr<BoundaryCondition>> bcs;
@@ -236,10 +233,10 @@ ProcessVariable::createBoundaryConditions(
 
 void ProcessVariable::createBoundaryConditionsForDeactivatedSubDomains(
     const NumLib::LocalToGlobalIndexMap& dof_table, const int variable_id,
-    std::vector<std::unique_ptr<ParameterBase>> const& parameters,
+    std::vector<std::unique_ptr<ParameterLib::ParameterBase>> const& parameters,
     std::vector<std::unique_ptr<BoundaryCondition>>& bcs)
 {
-    auto& parameter = findParameter<double>(
+    auto& parameter = ParameterLib::findParameter<double>(
         DeactivatedSubdomain::zero_parameter_name, parameters, 1);
 
     for (auto const& deactivated_subdomain : _deactivated_subdomains)
@@ -327,7 +324,7 @@ std::vector<std::unique_ptr<SourceTerm>> ProcessVariable::createSourceTerms(
     const NumLib::LocalToGlobalIndexMap& dof_table,
     const int variable_id,
     unsigned const integration_order,
-    std::vector<std::unique_ptr<ParameterBase>> const& parameters)
+    std::vector<std::unique_ptr<ParameterLib::ParameterBase>> const& parameters)
 {
     std::vector<std::unique_ptr<SourceTerm>> source_terms;
 
diff --git a/ProcessLib/ProcessVariable.h b/ProcessLib/ProcessVariable.h
index 55fb76147be6493628657cb4204bbcef3f5495b6..30b374aa60b0152d5c95e30ab4fcaa0c4787ec84 100644
--- a/ProcessLib/ProcessVariable.h
+++ b/ProcessLib/ProcessVariable.h
@@ -11,8 +11,8 @@
 
 #include "MathLib/LinAlg/GlobalMatrixVectorTypes.h"
 
+#include "ParameterLib/Parameter.h"
 #include "ProcessLib/BoundaryCondition/BoundaryConditionConfig.h"
-#include "ProcessLib/Parameter/Parameter.h"
 #include "ProcessLib/SourceTerms/SourceTermConfig.h"
 
 // DeactivatedSubdomain cannot be forwardly declared because that
@@ -48,7 +48,8 @@ public:
     ProcessVariable(
         BaseLib::ConfigTree const& config, MeshLib::Mesh& mesh,
         std::vector<std::unique_ptr<MeshLib::Mesh>> const& meshes,
-        std::vector<std::unique_ptr<ParameterBase>> const& parameters);
+        std::vector<std::unique_ptr<ParameterLib::ParameterBase>> const&
+            parameters);
 
     ProcessVariable(ProcessVariable&&);
 
@@ -75,15 +76,17 @@ public:
     std::vector<std::unique_ptr<BoundaryCondition>> createBoundaryConditions(
         const NumLib::LocalToGlobalIndexMap& dof_table, const int variable_id,
         unsigned const integration_order,
-        std::vector<std::unique_ptr<ParameterBase>> const& parameters,
+        std::vector<std::unique_ptr<ParameterLib::ParameterBase>> const&
+            parameters,
         Process const& process);
 
     std::vector<std::unique_ptr<SourceTerm>> createSourceTerms(
         const NumLib::LocalToGlobalIndexMap& dof_table, const int variable_id,
         unsigned const integration_order,
-        std::vector<std::unique_ptr<ParameterBase>> const& parameters);
+        std::vector<std::unique_ptr<ParameterLib::ParameterBase>> const&
+            parameters);
 
-    Parameter<double> const& getInitialCondition() const
+    ParameterLib::Parameter<double> const& getInitialCondition() const
     {
         return _initial_condition;
     }
@@ -117,10 +120,11 @@ private:
 
     void createBoundaryConditionsForDeactivatedSubDomains(
         const NumLib::LocalToGlobalIndexMap& dof_table, const int variable_id,
-        std::vector<std::unique_ptr<ParameterBase>> const& parameters,
+        std::vector<std::unique_ptr<ParameterLib::ParameterBase>> const&
+            parameters,
         std::vector<std::unique_ptr<BoundaryCondition>>& bcs);
 
-    Parameter<double> const& _initial_condition;
+    ParameterLib::Parameter<double> const& _initial_condition;
 
     std::vector<BoundaryConditionConfig> _bc_configs;
     std::vector<SourceTermConfig> _source_term_configs;
diff --git a/ProcessLib/RichardsComponentTransport/CMakeLists.txt b/ProcessLib/RichardsComponentTransport/CMakeLists.txt
index 1ea94214a510b4a1be06bad769b1ee74507807ea..1727d5762755dc26cde5b83cad7bca70bc88e626 100644
--- a/ProcessLib/RichardsComponentTransport/CMakeLists.txt
+++ b/ProcessLib/RichardsComponentTransport/CMakeLists.txt
@@ -4,6 +4,9 @@ add_library(RichardsComponentTransport ${SOURCES})
 if(BUILD_SHARED_LIBS)
     install(TARGETS RichardsComponentTransport LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR})
 endif()
-target_link_libraries(RichardsComponentTransport PUBLIC ProcessLib)
+target_link_libraries(RichardsComponentTransport
+    PUBLIC ProcessLib
+    PRIVATE ParameterLib
+)
 
 include(Tests.cmake)
diff --git a/ProcessLib/RichardsComponentTransport/CreatePorousMediaProperties.cpp b/ProcessLib/RichardsComponentTransport/CreatePorousMediaProperties.cpp
index 5e9a684bdf5e673d5638ec9b767cb0ce2f804757..36bfc26865a09cafcdc9ca3bed5e29e20cf1b785 100644
--- a/ProcessLib/RichardsComponentTransport/CreatePorousMediaProperties.cpp
+++ b/ProcessLib/RichardsComponentTransport/CreatePorousMediaProperties.cpp
@@ -26,7 +26,7 @@ namespace RichardsComponentTransport
 {
 PorousMediaProperties createPorousMediaProperties(
     MeshLib::Mesh& mesh, BaseLib::ConfigTree const& porous_medium_configs,
-    std::vector<std::unique_ptr<ProcessLib::ParameterBase>> const& parameters)
+    std::vector<std::unique_ptr<ParameterLib::ParameterBase>> const& parameters)
 {
     DBUG("Create PorousMediaProperties.");
 
diff --git a/ProcessLib/RichardsComponentTransport/CreatePorousMediaProperties.h b/ProcessLib/RichardsComponentTransport/CreatePorousMediaProperties.h
index 826baaca269d284231553fd9148afc575b7de474..194eca74506724ad82eff0e8a670ca0c3c3076ac 100644
--- a/ProcessLib/RichardsComponentTransport/CreatePorousMediaProperties.h
+++ b/ProcessLib/RichardsComponentTransport/CreatePorousMediaProperties.h
@@ -25,6 +25,7 @@ namespace RichardsComponentTransport
 {
 PorousMediaProperties createPorousMediaProperties(
     MeshLib::Mesh& mesh, BaseLib::ConfigTree const& porous_medium_configs,
-    std::vector<std::unique_ptr<ProcessLib::ParameterBase>> const& parameters);
+    std::vector<std::unique_ptr<ParameterLib::ParameterBase>> const&
+        parameters);
 }
 }
diff --git a/ProcessLib/RichardsComponentTransport/CreateRichardsComponentTransportProcess.cpp b/ProcessLib/RichardsComponentTransport/CreateRichardsComponentTransportProcess.cpp
index fa960ea873d194a26d3a5dab70aaf2e69a53b01a..4b41756284c00404fe8818dce927d60b018ee3bc 100644
--- a/ProcessLib/RichardsComponentTransport/CreateRichardsComponentTransportProcess.cpp
+++ b/ProcessLib/RichardsComponentTransport/CreateRichardsComponentTransportProcess.cpp
@@ -10,9 +10,9 @@
 #include "CreateRichardsComponentTransportProcess.h"
 
 #include "MaterialLib/Fluid/FluidProperties/CreateFluidProperties.h"
-
+#include "ParameterLib/ConstantParameter.h"
+#include "ParameterLib/Utils.h"
 #include "ProcessLib/Output/CreateSecondaryVariables.h"
-#include "ProcessLib/Parameter/ConstantParameter.h"
 #include "ProcessLib/Utils/ProcessUtils.h"
 
 #include "CreatePorousMediaProperties.h"
@@ -27,7 +27,7 @@ std::unique_ptr<Process> createRichardsComponentTransportProcess(
     MeshLib::Mesh& mesh,
     std::unique_ptr<ProcessLib::AbstractJacobianAssembler>&& jacobian_assembler,
     std::vector<ProcessVariable> const& variables,
-    std::vector<std::unique_ptr<ParameterBase>> const& parameters,
+    std::vector<std::unique_ptr<ParameterLib::ParameterBase>> const& parameters,
     unsigned const integration_order,
     BaseLib::ConfigTree const& config)
 {
@@ -84,7 +84,7 @@ std::unique_ptr<Process> createRichardsComponentTransportProcess(
         MaterialLib::Fluid::createFluidProperties(fluid_config);
 
     // Parameter for the density of the fluid.
-    auto& fluid_reference_density= findParameter<double>(
+    auto& fluid_reference_density = ParameterLib::findParameter<double>(
         config,
         //! \ogs_file_param_special{prj__processes__process__RichardsComponentTransport__fluid_reference_density}
         "fluid_reference_density", parameters, 1);
@@ -92,7 +92,8 @@ std::unique_ptr<Process> createRichardsComponentTransportProcess(
          fluid_reference_density.name.c_str());
 
     // Parameter for the longitudinal solute dispersivity.
-    auto const& molecular_diffusion_coefficient = findParameter<double>(
+    auto const& molecular_diffusion_coefficient = ParameterLib::findParameter<
+        double>(
         config,
         //! \ogs_file_param_special{prj__processes__process__RichardsComponentTransport__molecular_diffusion_coefficient}
         "molecular_diffusion_coefficient", parameters, 1);
@@ -100,7 +101,8 @@ std::unique_ptr<Process> createRichardsComponentTransportProcess(
          molecular_diffusion_coefficient.name.c_str());
 
     // Parameter for the longitudinal solute dispersivity.
-    auto const& solute_dispersivity_longitudinal = findParameter<double>(
+    auto const& solute_dispersivity_longitudinal = ParameterLib::findParameter<
+        double>(
         config,
         //! \ogs_file_param_special{prj__processes__process__RichardsComponentTransport__solute_dispersivity_longitudinal}
         "solute_dispersivity_longitudinal", parameters, 1);
@@ -108,7 +110,8 @@ std::unique_ptr<Process> createRichardsComponentTransportProcess(
          solute_dispersivity_longitudinal.name.c_str());
 
     // Parameter for the transverse solute dispersivity.
-    auto const& solute_dispersivity_transverse = findParameter<double>(
+    auto const& solute_dispersivity_transverse = ParameterLib::findParameter<
+        double>(
         config,
         //! \ogs_file_param_special{prj__processes__process__RichardsComponentTransport__solute_dispersivity_transverse}
         "solute_dispersivity_transverse", parameters, 1);
@@ -116,13 +119,13 @@ std::unique_ptr<Process> createRichardsComponentTransportProcess(
          solute_dispersivity_transverse.name.c_str());
 
     // Parameter for the retardation factor.
-    auto const& retardation_factor = findParameter<double>(
+    auto const& retardation_factor = ParameterLib::findParameter<double>(
         config,
         //! \ogs_file_param_special{prj__processes__process__RichardsComponentTransport__retardation_factor}
         "retardation_factor", parameters, 1);
 
     // Parameter for the decay rate.
-    auto const& decay_rate = findParameter<double>(
+    auto const& decay_rate = ParameterLib::findParameter<double>(
         config,
         //! \ogs_file_param_special{prj__processes__process__RichardsComponentTransport__decay_rate}
         "decay_rate", parameters, 1);
diff --git a/ProcessLib/RichardsComponentTransport/CreateRichardsComponentTransportProcess.h b/ProcessLib/RichardsComponentTransport/CreateRichardsComponentTransportProcess.h
index 2162355aa2c0f45c465c359e1b1c714513e1d8f2..6ab1ff83b093085c243345e30a0847ae73138b19 100644
--- a/ProcessLib/RichardsComponentTransport/CreateRichardsComponentTransportProcess.h
+++ b/ProcessLib/RichardsComponentTransport/CreateRichardsComponentTransportProcess.h
@@ -20,7 +20,7 @@ std::unique_ptr<Process> createRichardsComponentTransportProcess(
     MeshLib::Mesh& mesh,
     std::unique_ptr<ProcessLib::AbstractJacobianAssembler>&& jacobian_assembler,
     std::vector<ProcessVariable> const& variables,
-    std::vector<std::unique_ptr<ParameterBase>> const& parameters,
+    std::vector<std::unique_ptr<ParameterLib::ParameterBase>> const& parameters,
     unsigned const integration_order,
     BaseLib::ConfigTree const& config);
 
diff --git a/ProcessLib/RichardsComponentTransport/PorousMediaProperties.cpp b/ProcessLib/RichardsComponentTransport/PorousMediaProperties.cpp
index 042d0237a99f1719f8a4eced668048c6dcaea539..38863a8135c9bdecc3d60295d53e46f25fafe9e1 100644
--- a/ProcessLib/RichardsComponentTransport/PorousMediaProperties.cpp
+++ b/ProcessLib/RichardsComponentTransport/PorousMediaProperties.cpp
@@ -15,42 +15,43 @@ namespace ProcessLib
 {
 namespace RichardsComponentTransport
 {
-int PorousMediaProperties::getMaterialID(SpatialPosition const& pos) const
+int PorousMediaProperties::getMaterialID(
+    ParameterLib::SpatialPosition const& pos) const
 {
     int const element_id = pos.getElementID().get();
     return _material_ids[element_id];
 }
 
 MaterialLib::PorousMedium::Porosity const& PorousMediaProperties::getPorosity(
-    double /*t*/, SpatialPosition const& pos) const
+    double /*t*/, ParameterLib::SpatialPosition const& pos) const
 {
     return *_porosity_models[getMaterialID(pos)];
 }
 
 MaterialLib::PorousMedium::Permeability const&
 PorousMediaProperties::getIntrinsicPermeability(
-    double /*t*/, SpatialPosition const& pos) const
+    double /*t*/, ParameterLib::SpatialPosition const& pos) const
 {
     return *_intrinsic_permeability_models[getMaterialID(pos)];
 }
 
 MaterialLib::PorousMedium::Storage const&
-PorousMediaProperties::getSpecificStorage(double /*t*/,
-                                          SpatialPosition const& pos) const
+PorousMediaProperties::getSpecificStorage(
+    double /*t*/, ParameterLib::SpatialPosition const& pos) const
 {
     return *_specific_storage_models[getMaterialID(pos)];
 }
 
 MaterialLib::PorousMedium::CapillaryPressureSaturation const&
 PorousMediaProperties::getCapillaryPressureSaturationModel(
-    double /*t*/, SpatialPosition const& pos) const
+    double /*t*/, ParameterLib::SpatialPosition const& pos) const
 {
     return *_capillary_pressure_saturation_models[getMaterialID(pos)];
 }
 
 MaterialLib::PorousMedium::RelativePermeability const&
 PorousMediaProperties::getRelativePermeability(
-    double /*t*/, SpatialPosition const& pos) const
+    double /*t*/, ParameterLib::SpatialPosition const& pos) const
 {
     return *_relative_permeability_models[getMaterialID(pos)];
 }
diff --git a/ProcessLib/RichardsComponentTransport/PorousMediaProperties.h b/ProcessLib/RichardsComponentTransport/PorousMediaProperties.h
index 1abc5850bed921c26d1a58230af9752bc398c69b..d8009abf4f362e3568de2765c69ef9868829fe36 100644
--- a/ProcessLib/RichardsComponentTransport/PorousMediaProperties.h
+++ b/ProcessLib/RichardsComponentTransport/PorousMediaProperties.h
@@ -21,7 +21,10 @@
 #include "MaterialLib/PorousMedium/UnsaturatedProperty/CapillaryPressure/CapillaryPressureSaturation.h"
 #include "MaterialLib/PorousMedium/UnsaturatedProperty/RelativePermeability/RelativePermeability.h"
 
-#include "ProcessLib/Parameter/SpatialPosition.h"
+namespace ParameterLib
+{
+class SpatialPosition;
+}
 
 namespace ProcessLib
 {
@@ -71,23 +74,25 @@ public:
     }
 
     MaterialLib::PorousMedium::Porosity const& getPorosity(
-        double t, SpatialPosition const& pos) const;
+        double t, ParameterLib::SpatialPosition const& pos) const;
 
     MaterialLib::PorousMedium::Permeability const& getIntrinsicPermeability(
-        double t, SpatialPosition const& pos) const;
+        double t, ParameterLib::SpatialPosition const& pos) const;
 
     MaterialLib::PorousMedium::Storage const& getSpecificStorage(
-        double t, SpatialPosition const& pos) const;
+        double t, ParameterLib::SpatialPosition const& pos) const;
 
     MaterialLib::PorousMedium::CapillaryPressureSaturation const&
-    getCapillaryPressureSaturationModel(double t,
-                                        SpatialPosition const& pos) const;
+    getCapillaryPressureSaturationModel(
+        double t, ParameterLib::SpatialPosition const& pos) const;
 
     MaterialLib::PorousMedium::RelativePermeability const&
-    getRelativePermeability(double t, SpatialPosition const& pos) const;
+    getRelativePermeability(double t,
+                            ParameterLib::SpatialPosition const& pos) const;
 
 private:
-    int getMaterialID(SpatialPosition const& pos) const;
+    int getMaterialID(ParameterLib::SpatialPosition const& pos) const;
+
 private:
     std::vector<std::unique_ptr<MaterialLib::PorousMedium::Porosity>>
         _porosity_models;
diff --git a/ProcessLib/RichardsComponentTransport/RichardsComponentTransportFEM-impl.h b/ProcessLib/RichardsComponentTransport/RichardsComponentTransportFEM-impl.h
index b8f236f4734d161a4a829e19c7982dd3591b761b..b309069d3af3bbf61a6e82e993f8e971ac5460a6 100644
--- a/ProcessLib/RichardsComponentTransport/RichardsComponentTransportFEM-impl.h
+++ b/ProcessLib/RichardsComponentTransport/RichardsComponentTransportFEM-impl.h
@@ -77,7 +77,7 @@ void LocalAssemblerData<ShapeFunction, IntegrationMethod, GlobalDim>::assemble(
     unsigned const n_integration_points =
         _integration_method.getNumberOfPoints();
 
-    SpatialPosition pos;
+    ParameterLib::SpatialPosition pos;
     pos.setElementID(_element_id);
 
     auto p_nodal_values = Eigen::Map<const NodalVectorType>(
@@ -232,7 +232,7 @@ LocalAssemblerData<ShapeFunction, IntegrationMethod, GlobalDim>::
         Eigen::Matrix<double, GlobalDim, Eigen::Dynamic, Eigen::RowMajor>>(
         cache, GlobalDim, n_integration_points);
 
-    SpatialPosition pos;
+    ParameterLib::SpatialPosition pos;
     pos.setElementID(_element_id);
 
     MaterialLib::Fluid::FluidProperty::ArrayType vars;
@@ -308,7 +308,7 @@ LocalAssemblerData<ShapeFunction, IntegrationMethod, GlobalDim>::
                        NumLib::LocalToGlobalIndexMap const& dof_table,
                        std::vector<double>& cache) const
 {
-    SpatialPosition pos;
+    ParameterLib::SpatialPosition pos;
     pos.setElementID(_element_id);
 
     unsigned const n_integration_points =
diff --git a/ProcessLib/RichardsComponentTransport/RichardsComponentTransportFEM.h b/ProcessLib/RichardsComponentTransport/RichardsComponentTransportFEM.h
index b11ace3208f634272c186e023e4d48caadbb7140..da19a752aad88c4ec31cc655aa1fd15dbc5dea9d 100644
--- a/ProcessLib/RichardsComponentTransport/RichardsComponentTransportFEM.h
+++ b/ProcessLib/RichardsComponentTransport/RichardsComponentTransportFEM.h
@@ -12,7 +12,6 @@
 #include <Eigen/Dense>
 #include <vector>
 
-#include "RichardsComponentTransportProcessData.h"
 #include "MaterialLib/Fluid/FluidProperties/FluidProperties.h"
 #include "MathLib/LinAlg/Eigen/EigenMapTools.h"
 #include "NumLib/DOF/DOFTableUtil.h"
@@ -20,9 +19,10 @@
 #include "NumLib/Fem/FiniteElement/TemplateIsoparametric.h"
 #include "NumLib/Fem/ShapeMatrixPolicy.h"
 #include "NumLib/Function/Interpolation.h"
+#include "ParameterLib/Parameter.h"
 #include "ProcessLib/LocalAssemblerInterface.h"
-#include "ProcessLib/Parameter/Parameter.h"
 #include "ProcessLib/Utils/InitShapeMatrices.h"
+#include "RichardsComponentTransportProcessData.h"
 
 namespace ProcessLib
 {
diff --git a/ProcessLib/RichardsComponentTransport/RichardsComponentTransportProcess.cpp b/ProcessLib/RichardsComponentTransport/RichardsComponentTransportProcess.cpp
index 5cf44c93ca9ef6e71b2080ee3fff7074f20de9c2..db26bbd754e16332550fb0f19245c4216ffc6b16 100644
--- a/ProcessLib/RichardsComponentTransport/RichardsComponentTransportProcess.cpp
+++ b/ProcessLib/RichardsComponentTransport/RichardsComponentTransportProcess.cpp
@@ -20,7 +20,7 @@ namespace RichardsComponentTransport
 RichardsComponentTransportProcess::RichardsComponentTransportProcess(
     MeshLib::Mesh& mesh,
     std::unique_ptr<ProcessLib::AbstractJacobianAssembler>&& jacobian_assembler,
-    std::vector<std::unique_ptr<ParameterBase>> const& parameters,
+    std::vector<std::unique_ptr<ParameterLib::ParameterBase>> const& parameters,
     unsigned const integration_order,
     std::vector<std::vector<std::reference_wrapper<ProcessVariable>>>&&
         process_variables,
diff --git a/ProcessLib/RichardsComponentTransport/RichardsComponentTransportProcess.h b/ProcessLib/RichardsComponentTransport/RichardsComponentTransportProcess.h
index bbf33643e5f1f95dfee8d310d72239690ac72b40..dda41a7185bc3b5922e513ce02d2be308591bf83 100644
--- a/ProcessLib/RichardsComponentTransport/RichardsComponentTransportProcess.h
+++ b/ProcessLib/RichardsComponentTransport/RichardsComponentTransportProcess.h
@@ -105,7 +105,8 @@ public:
         MeshLib::Mesh& mesh,
         std::unique_ptr<ProcessLib::AbstractJacobianAssembler>&&
             jacobian_assembler,
-        std::vector<std::unique_ptr<ParameterBase>> const& parameters,
+        std::vector<std::unique_ptr<ParameterLib::ParameterBase>> const&
+            parameters,
         unsigned const integration_order,
         std::vector<std::vector<std::reference_wrapper<ProcessVariable>>>&&
             process_variables,
diff --git a/ProcessLib/RichardsComponentTransport/RichardsComponentTransportProcessData.h b/ProcessLib/RichardsComponentTransport/RichardsComponentTransportProcessData.h
index 40597710d44e8a19efec077ca0c4d05bc3468573..38b64b9fd83da3925879e2f5180c20f80cdda3d6 100644
--- a/ProcessLib/RichardsComponentTransport/RichardsComponentTransportProcessData.h
+++ b/ProcessLib/RichardsComponentTransport/RichardsComponentTransportProcessData.h
@@ -28,14 +28,15 @@ struct RichardsComponentTransportProcessData
 {
     RichardsComponentTransportProcessData(
         PorousMediaProperties&& porous_media_properties_,
-        ProcessLib::Parameter<double> const& fluid_reference_density_,
+        ParameterLib::Parameter<double> const& fluid_reference_density_,
         std::unique_ptr<MaterialLib::Fluid::FluidProperties>&&
             fluid_properties_,
-        ProcessLib::Parameter<double> const& molecular_diffusion_coefficient_,
-        ProcessLib::Parameter<double> const& solute_dispersivity_longitudinal_,
-        ProcessLib::Parameter<double> const& solute_dispersivity_transverse_,
-        ProcessLib::Parameter<double> const& retardation_factor_,
-        ProcessLib::Parameter<double> const& decay_rate_,
+        ParameterLib::Parameter<double> const& molecular_diffusion_coefficient_,
+        ParameterLib::Parameter<double> const&
+            solute_dispersivity_longitudinal_,
+        ParameterLib::Parameter<double> const& solute_dispersivity_transverse_,
+        ParameterLib::Parameter<double> const& retardation_factor_,
+        ParameterLib::Parameter<double> const& decay_rate_,
         Eigen::VectorXd const& specific_body_force_,
         bool const has_gravity_)
         : porous_media_properties(std::move(porous_media_properties_)),
@@ -79,13 +80,13 @@ struct RichardsComponentTransportProcessData
     void operator=(RichardsComponentTransportProcessData&&) = delete;
 
     PorousMediaProperties porous_media_properties;
-    Parameter<double> const& fluid_reference_density;
+    ParameterLib::Parameter<double> const& fluid_reference_density;
     std::unique_ptr<MaterialLib::Fluid::FluidProperties> fluid_properties;
-    Parameter<double> const& molecular_diffusion_coefficient;
-    Parameter<double> const& solute_dispersivity_longitudinal;
-    Parameter<double> const& solute_dispersivity_transverse;
-    Parameter<double> const& retardation_factor;
-    Parameter<double> const& decay_rate;
+    ParameterLib::Parameter<double> const& molecular_diffusion_coefficient;
+    ParameterLib::Parameter<double> const& solute_dispersivity_longitudinal;
+    ParameterLib::Parameter<double> const& solute_dispersivity_transverse;
+    ParameterLib::Parameter<double> const& retardation_factor;
+    ParameterLib::Parameter<double> const& decay_rate;
     Eigen::VectorXd const specific_body_force;
     bool const has_gravity;
 };
diff --git a/ProcessLib/RichardsFlow/CMakeLists.txt b/ProcessLib/RichardsFlow/CMakeLists.txt
index ce0770b754636661f24682070520a97fa363b77f..e0cf9f1684c62e3a2e3a86e017c0244fc998067c 100644
--- a/ProcessLib/RichardsFlow/CMakeLists.txt
+++ b/ProcessLib/RichardsFlow/CMakeLists.txt
@@ -4,6 +4,9 @@ add_library(RichardsFlow ${SOURCES})
 if(BUILD_SHARED_LIBS)
     install(TARGETS RichardsFlow LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR})
 endif()
-target_link_libraries(RichardsFlow PUBLIC ProcessLib)
+target_link_libraries(RichardsFlow
+    PUBLIC ProcessLib
+    PRIVATE ParameterLib
+)
 
 include(Tests.cmake)
diff --git a/ProcessLib/RichardsFlow/CreateRichardsFlowMaterialProperties.cpp b/ProcessLib/RichardsFlow/CreateRichardsFlowMaterialProperties.cpp
index 4bed8c3f514e99f41fc1330581a29ecfaf3d34fa..a711cb7ffb48b77ec2949b4c7aa8277182bd4c7c 100644
--- a/ProcessLib/RichardsFlow/CreateRichardsFlowMaterialProperties.cpp
+++ b/ProcessLib/RichardsFlow/CreateRichardsFlowMaterialProperties.cpp
@@ -11,8 +11,8 @@
 
 #include <logog/include/logog.hpp>
 
-#include "MaterialLib/Fluid/FluidProperty.h"
 #include "MaterialLib/Fluid/FluidProperties/CreateFluidProperties.h"
+#include "MaterialLib/Fluid/FluidProperty.h"
 #include "MaterialLib/PorousMedium/Porosity/Porosity.h"
 #include "MaterialLib/PorousMedium/Storage/Storage.h"
 #include "MaterialLib/PorousMedium/UnsaturatedProperty/CapillaryPressure/CapillaryPressureSaturation.h"
@@ -22,8 +22,8 @@
 #include "MathLib/InterpolationAlgorithms/PiecewiseLinearInterpolation.h"
 #include "MeshLib/Mesh.h"
 #include "MeshLib/PropertyVector.h"
-#include "ProcessLib/Parameter/Parameter.h"
-#include "ProcessLib/Parameter/SpatialPosition.h"
+#include "ParameterLib/Parameter.h"
+#include "ParameterLib/SpatialPosition.h"
 
 #include "RichardsFlowMaterialProperties.h"
 
@@ -35,7 +35,7 @@ std::unique_ptr<RichardsFlowMaterialProperties>
 createRichardsFlowMaterialProperties(
     BaseLib::ConfigTree const& config,
     MeshLib::PropertyVector<int> const* const material_ids,
-    std::vector<std::unique_ptr<ParameterBase>> const& parameters)
+    std::vector<std::unique_ptr<ParameterLib::ParameterBase>> const& parameters)
 {
     DBUG("Reading material properties of Richards flow process.");
 
diff --git a/ProcessLib/RichardsFlow/CreateRichardsFlowMaterialProperties.h b/ProcessLib/RichardsFlow/CreateRichardsFlowMaterialProperties.h
index 20731abc377cdc4d2150d1ca56c22d68a6e86e9f..a8ff30747f1de62d0b3c01497c72e76995a84c16 100644
--- a/ProcessLib/RichardsFlow/CreateRichardsFlowMaterialProperties.h
+++ b/ProcessLib/RichardsFlow/CreateRichardsFlowMaterialProperties.h
@@ -23,7 +23,8 @@ std::unique_ptr<RichardsFlowMaterialProperties>
 createRichardsFlowMaterialProperties(
     BaseLib::ConfigTree const& config,
     MeshLib::PropertyVector<int> const* material_ids,
-    std::vector<std::unique_ptr<ParameterBase>> const& parameters);
+    std::vector<std::unique_ptr<ParameterLib::ParameterBase>> const&
+        parameters);
 
 }  // end namespace
 }  // namespace ProcessLib
diff --git a/ProcessLib/RichardsFlow/CreateRichardsFlowProcess.cpp b/ProcessLib/RichardsFlow/CreateRichardsFlowProcess.cpp
index 24d1d4593a1205b6db57dca04a46b2ed88b6b4e6..cf78a715d565d48a98cdfcf6ac0829f6e731d514 100644
--- a/ProcessLib/RichardsFlow/CreateRichardsFlowProcess.cpp
+++ b/ProcessLib/RichardsFlow/CreateRichardsFlowProcess.cpp
@@ -9,8 +9,9 @@
 
 #include "CreateRichardsFlowProcess.h"
 
+#include "ParameterLib/ConstantParameter.h"
+#include "ParameterLib/Utils.h"
 #include "ProcessLib/Output/CreateSecondaryVariables.h"
-#include "ProcessLib/Parameter/ConstantParameter.h"
 #include "ProcessLib/Utils/ProcessUtils.h"
 
 #include "CreateRichardsFlowMaterialProperties.h"
@@ -25,7 +26,7 @@ std::unique_ptr<Process> createRichardsFlowProcess(
     MeshLib::Mesh& mesh,
     std::unique_ptr<ProcessLib::AbstractJacobianAssembler>&& jacobian_assembler,
     std::vector<ProcessVariable> const& variables,
-    std::vector<std::unique_ptr<ParameterBase>> const& parameters,
+    std::vector<std::unique_ptr<ParameterLib::ParameterBase>> const& parameters,
     unsigned const integration_order,
     BaseLib::ConfigTree const& config,
     std::map<std::string,
@@ -74,7 +75,7 @@ std::unique_ptr<Process> createRichardsFlowProcess(
     //! \ogs_file_param{prj__processes__process__RICHARDS_FLOW__mass_lumping}
     auto mass_lumping = config.getConfigParameter<bool>("mass_lumping");
 
-    auto& temperature = findParameter<double>(
+    auto& temperature = ParameterLib::findParameter<double>(
         config,
         //! \ogs_file_param_special{prj__processes__process__RICHARDS_FLOW__temperature}
         "temperature", parameters, 1);
diff --git a/ProcessLib/RichardsFlow/CreateRichardsFlowProcess.h b/ProcessLib/RichardsFlow/CreateRichardsFlowProcess.h
index 9291568990b6e185e2d0f905b6b03dc2b786187f..3e1c3d9024e06577c65a19957f17131da91b0fd9 100644
--- a/ProcessLib/RichardsFlow/CreateRichardsFlowProcess.h
+++ b/ProcessLib/RichardsFlow/CreateRichardsFlowProcess.h
@@ -20,7 +20,7 @@ std::unique_ptr<Process> createRichardsFlowProcess(
     MeshLib::Mesh& mesh,
     std::unique_ptr<ProcessLib::AbstractJacobianAssembler>&& jacobian_assembler,
     std::vector<ProcessVariable> const& variables,
-    std::vector<std::unique_ptr<ParameterBase>> const& parameters,
+    std::vector<std::unique_ptr<ParameterLib::ParameterBase>> const& parameters,
     unsigned const integration_order,
     BaseLib::ConfigTree const& config,
     std::map<std::string,
diff --git a/ProcessLib/RichardsFlow/RichardsFlowFEM.h b/ProcessLib/RichardsFlow/RichardsFlowFEM.h
index 47faea78cd1edfc48a3c78e605adcdb57b9832ae..c7f48b4c1dcce15737d4fc09370d3e8200ba6235 100644
--- a/ProcessLib/RichardsFlow/RichardsFlowFEM.h
+++ b/ProcessLib/RichardsFlow/RichardsFlowFEM.h
@@ -18,9 +18,9 @@
 #include "NumLib/Fem/FiniteElement/TemplateIsoparametric.h"
 #include "NumLib/Fem/ShapeMatrixPolicy.h"
 #include "NumLib/Function/Interpolation.h"
+#include "ParameterLib/Parameter.h"
 #include "ProcessLib/LocalAssemblerInterface.h"
 #include "ProcessLib/LocalAssemblerTraits.h"
-#include "ProcessLib/Parameter/Parameter.h"
 #include "ProcessLib/Utils/InitShapeMatrices.h"
 #include "RichardsFlowProcessData.h"
 
@@ -146,7 +146,7 @@ public:
 
         unsigned const n_integration_points =
             _integration_method.getNumberOfPoints();
-        SpatialPosition pos;
+        ParameterLib::SpatialPosition pos;
         pos.setElementID(_element.getID());
         const int material_id =
             _process_data.material->getMaterialID(_element.getID());
@@ -261,7 +261,7 @@ public:
             Eigen::Matrix<double, GlobalDim, Eigen::Dynamic, Eigen::RowMajor>>(
             cache, GlobalDim, num_intpts);
 
-        SpatialPosition pos;
+        ParameterLib::SpatialPosition pos;
         pos.setElementID(_element.getID());
         const int material_id =
             _process_data.material->getMaterialID(_element.getID());
diff --git a/ProcessLib/RichardsFlow/RichardsFlowMaterialProperties.cpp b/ProcessLib/RichardsFlow/RichardsFlowMaterialProperties.cpp
index 7d2a6f268eb5b3875807cba998a92343e6bbc867..62200a5ebac41865653538284cd165bbb78ebff1 100644
--- a/ProcessLib/RichardsFlow/RichardsFlowMaterialProperties.cpp
+++ b/ProcessLib/RichardsFlow/RichardsFlowMaterialProperties.cpp
@@ -21,8 +21,8 @@
 #include "MaterialLib/PorousMedium/UnsaturatedProperty/RelativePermeability/RelativePermeability.h"
 #include "MeshLib/Mesh.h"
 #include "MeshLib/PropertyVector.h"
-#include "ProcessLib/Parameter/Parameter.h"
-#include "ProcessLib/Parameter/SpatialPosition.h"
+#include "ParameterLib/Parameter.h"
+#include "ParameterLib/SpatialPosition.h"
 
 namespace ProcessLib
 {
@@ -87,7 +87,7 @@ double RichardsFlowMaterialProperties::getFluidViscosity(const double p,
 
 Eigen::MatrixXd const& RichardsFlowMaterialProperties::getPermeability(
     const int material_id, const double t,
-    const ProcessLib::SpatialPosition& pos, const int /*dim*/) const
+    const ParameterLib::SpatialPosition& pos, const int /*dim*/) const
 {
     return _intrinsic_permeability_models[material_id]->getValue(t, pos, 0.0,
                                                                  0.0);
@@ -95,7 +95,7 @@ Eigen::MatrixXd const& RichardsFlowMaterialProperties::getPermeability(
 
 double RichardsFlowMaterialProperties::getPorosity(
     const int material_id, const double t,
-    const ProcessLib::SpatialPosition& pos, const double /*p*/,
+    const ParameterLib::SpatialPosition& pos, const double /*p*/,
     const double T, const double porosity_variable) const
 {
     return _porosity_models[material_id]->getValue(t, pos, porosity_variable,
@@ -104,7 +104,7 @@ double RichardsFlowMaterialProperties::getPorosity(
 
 double RichardsFlowMaterialProperties::getStorage(
     const int material_id, const double /*t*/,
-    const ProcessLib::SpatialPosition& /*pos*/, const double /*p*/,
+    const ParameterLib::SpatialPosition& /*pos*/, const double /*p*/,
     const double /*T*/, const double storage_variable) const
 {
     // \todo getValue() can be extended for non
@@ -113,14 +113,14 @@ double RichardsFlowMaterialProperties::getStorage(
 }
 
 double RichardsFlowMaterialProperties::getRelativePermeability(
-    const double /*t*/, const ProcessLib::SpatialPosition& /*pos*/,
+    const double /*t*/, const ParameterLib::SpatialPosition& /*pos*/,
     const double /*p*/, const double /*T*/, const double saturation) const
 {
     return _relative_permeability_models[0]->getValue(saturation);
 }
 
 double RichardsFlowMaterialProperties::getRelativePermeabilityDerivative(
-    const double /*t*/, const ProcessLib::SpatialPosition& /*pos*/,
+    const double /*t*/, const ParameterLib::SpatialPosition& /*pos*/,
     const double /*p*/, const double /*T*/, const double saturation) const
 {
     return _relative_permeability_models[0]->getdValue(saturation);
@@ -128,7 +128,7 @@ double RichardsFlowMaterialProperties::getRelativePermeabilityDerivative(
 
 double RichardsFlowMaterialProperties::getSaturation(
     const int material_id, const double /*t*/,
-    const ProcessLib::SpatialPosition& /*pos*/, const double /*p*/,
+    const ParameterLib::SpatialPosition& /*pos*/, const double /*p*/,
     const double /*T*/, const double pc) const
 {
     return _capillary_pressure_models[material_id]->getSaturation(pc);
@@ -136,7 +136,7 @@ double RichardsFlowMaterialProperties::getSaturation(
 
 double RichardsFlowMaterialProperties::getSaturationDerivative(
     const int material_id, const double /*t*/,
-    const ProcessLib::SpatialPosition& /*pos*/, const double /*p*/,
+    const ParameterLib::SpatialPosition& /*pos*/, const double /*p*/,
     const double /*T*/, const double saturation) const
 {
     const double dpcdsw =
@@ -146,7 +146,7 @@ double RichardsFlowMaterialProperties::getSaturationDerivative(
 
 double RichardsFlowMaterialProperties::getSaturationDerivative2(
     const int material_id, const double /*t*/,
-    const ProcessLib::SpatialPosition& /*pos*/, const double /*p*/,
+    const ParameterLib::SpatialPosition& /*pos*/, const double /*p*/,
     const double /*T*/, const double saturation) const
 {
     const double dpcdsw =
diff --git a/ProcessLib/RichardsFlow/RichardsFlowMaterialProperties.h b/ProcessLib/RichardsFlow/RichardsFlowMaterialProperties.h
index c75561c3811a96a2e206b6a2f9b62469568201dc..7b7f8683921510ca2c2b08a33a58b939d543455e 100644
--- a/ProcessLib/RichardsFlow/RichardsFlowMaterialProperties.h
+++ b/ProcessLib/RichardsFlow/RichardsFlowMaterialProperties.h
@@ -69,36 +69,35 @@ public:
     Eigen::MatrixXd const& getPermeability(
         const int material_id,
         const double t,
-        const ProcessLib::SpatialPosition& pos,
+        const ParameterLib::SpatialPosition& pos,
         const int dim) const;
 
     double getPorosity(const int material_id, const double t,
-                       const ProcessLib::SpatialPosition& pos, const double p,
+                       const ParameterLib::SpatialPosition& pos, const double p,
                        const double T, const double porosity_variable) const;
 
-    double getStorage(
-        const int material_id, const double t,
-        const ProcessLib::SpatialPosition& pos, const double p,
-        const double T, const double storage_variable) const;
+    double getStorage(const int material_id, const double t,
+                      const ParameterLib::SpatialPosition& pos, const double p,
+                      const double T, const double storage_variable) const;
 
     double getRelativePermeability(const double t,
-                                   const ProcessLib::SpatialPosition& pos,
+                                   const ParameterLib::SpatialPosition& pos,
                                    const double p, const double T,
                                    const double saturation) const;
 
     double getRelativePermeabilityDerivative(
-        const double t, const ProcessLib::SpatialPosition& pos, const double p,
-        const double T, const double saturation) const;
+        const double t, const ParameterLib::SpatialPosition& pos,
+        const double p, const double T, const double saturation) const;
 
     double getSaturation(const int material_id, const double t,
-                         const ProcessLib::SpatialPosition& pos, const double p,
-                         const double T, const double pc) const;
+                         const ParameterLib::SpatialPosition& pos,
+                         const double p, const double T, const double pc) const;
     double getSaturationDerivative(const int material_id, const double t,
-                                   const ProcessLib::SpatialPosition& pos,
+                                   const ParameterLib::SpatialPosition& pos,
                                    const double p, const double T,
                                    const double saturation) const;
     double getSaturationDerivative2(const int material_id, const double t,
-                                    const ProcessLib::SpatialPosition& pos,
+                                    const ParameterLib::SpatialPosition& pos,
                                     const double p, const double T,
                                     const double saturation) const;
     double getFluidDensity(const double p, const double T) const;
diff --git a/ProcessLib/RichardsFlow/RichardsFlowProcess.cpp b/ProcessLib/RichardsFlow/RichardsFlowProcess.cpp
index baea254c30435336be5432d7a946a16a2f823e74..5700226b402a474a38757f2cdf3f5803f3f65bfb 100644
--- a/ProcessLib/RichardsFlow/RichardsFlowProcess.cpp
+++ b/ProcessLib/RichardsFlow/RichardsFlowProcess.cpp
@@ -20,7 +20,7 @@ namespace RichardsFlow
 RichardsFlowProcess::RichardsFlowProcess(
     MeshLib::Mesh& mesh,
     std::unique_ptr<ProcessLib::AbstractJacobianAssembler>&& jacobian_assembler,
-    std::vector<std::unique_ptr<ParameterBase>> const& parameters,
+    std::vector<std::unique_ptr<ParameterLib::ParameterBase>> const& parameters,
     unsigned const integration_order,
     std::vector<std::vector<std::reference_wrapper<ProcessVariable>>>&&
         process_variables,
diff --git a/ProcessLib/RichardsFlow/RichardsFlowProcess.h b/ProcessLib/RichardsFlow/RichardsFlowProcess.h
index 66399e6bd08359d5f44433322315ecb0ee49dc18..9569cc383345f2c02975e5d2a71e3fb111363446 100644
--- a/ProcessLib/RichardsFlow/RichardsFlowProcess.h
+++ b/ProcessLib/RichardsFlow/RichardsFlowProcess.h
@@ -26,7 +26,8 @@ public:
         MeshLib::Mesh& mesh,
         std::unique_ptr<ProcessLib::AbstractJacobianAssembler>&&
             jacobian_assembler,
-        std::vector<std::unique_ptr<ParameterBase>> const& parameters,
+        std::vector<std::unique_ptr<ParameterLib::ParameterBase>> const&
+            parameters,
         unsigned const integration_order,
         std::vector<std::vector<std::reference_wrapper<ProcessVariable>>>&&
             process_variables,
diff --git a/ProcessLib/RichardsFlow/RichardsFlowProcessData.h b/ProcessLib/RichardsFlow/RichardsFlowProcessData.h
index b9fe9b1e431c0b66c4c9650755256ef09f73dea7..5992ae4e172c0469452b07fbc7839aeeb3024679 100644
--- a/ProcessLib/RichardsFlow/RichardsFlowProcessData.h
+++ b/ProcessLib/RichardsFlow/RichardsFlowProcessData.h
@@ -24,7 +24,7 @@ struct RichardsFlowProcessData
         Eigen::VectorXd const specific_body_force_,
         bool const has_gravity_,
         bool const has_mass_lumping_,
-        Parameter<double> const& temperature_)
+        ParameterLib::Parameter<double> const& temperature_)
         : material(std::move(material_)),
           specific_body_force(specific_body_force_),
           has_gravity(has_gravity_),
@@ -55,7 +55,7 @@ struct RichardsFlowProcessData
     Eigen::VectorXd const specific_body_force;
     bool const has_gravity;
     bool const has_mass_lumping;
-    Parameter<double> const& temperature;
+    ParameterLib::Parameter<double> const& temperature;
 };
 
 }  // namespace RichardsFlow
diff --git a/ProcessLib/RichardsMechanics/CMakeLists.txt b/ProcessLib/RichardsMechanics/CMakeLists.txt
index 6886684b525c2b643810403c4e5acfffa9e027f3..8dc36b502aa066f28f82943259ae5c44a7a2cc2c 100644
--- a/ProcessLib/RichardsMechanics/CMakeLists.txt
+++ b/ProcessLib/RichardsMechanics/CMakeLists.txt
@@ -4,6 +4,9 @@ add_library(RichardsMechanics ${SOURCES})
 if(BUILD_SHARED_LIBS)
     install(TARGETS RichardsMechanics LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR})
 endif()
-target_link_libraries(RichardsMechanics PUBLIC ProcessLib RichardsFlow)
+target_link_libraries(RichardsMechanics
+    PUBLIC ProcessLib
+    PRIVATE RichardsFlow ParameterLib
+)
 
 include(Tests.cmake)
diff --git a/ProcessLib/RichardsMechanics/CreateRichardsMechanicsProcess.cpp b/ProcessLib/RichardsMechanics/CreateRichardsMechanicsProcess.cpp
index 44a939c5534a60e2ca3f3d7ff0a4e8be6174b451..c3fb92ccc15265142d71d5395a694469148010ee 100644
--- a/ProcessLib/RichardsMechanics/CreateRichardsMechanicsProcess.cpp
+++ b/ProcessLib/RichardsMechanics/CreateRichardsMechanicsProcess.cpp
@@ -13,6 +13,7 @@
 
 #include "MaterialLib/SolidModels/CreateConstitutiveRelation.h"
 #include "MaterialLib/SolidModels/MechanicsBase.h"
+#include "ParameterLib/Utils.h"
 #include "ProcessLib/Output/CreateSecondaryVariables.h"
 #include "ProcessLib/RichardsFlow/CreateRichardsFlowMaterialProperties.h"
 #include "ProcessLib/Utils/ProcessUtils.h"
@@ -29,7 +30,7 @@ std::unique_ptr<Process> createRichardsMechanicsProcess(
     MeshLib::Mesh& mesh,
     std::unique_ptr<ProcessLib::AbstractJacobianAssembler>&& jacobian_assembler,
     std::vector<ProcessVariable> const& variables,
-    std::vector<std::unique_ptr<ParameterBase>> const& parameters,
+    std::vector<std::unique_ptr<ParameterLib::ParameterBase>> const& parameters,
     unsigned const integration_order,
     BaseLib::ConfigTree const& config)
 {
@@ -106,7 +107,7 @@ std::unique_ptr<Process> createRichardsMechanicsProcess(
             parameters, config);
 
     // Fluid bulk modulus
-    auto& fluid_bulk_modulus = findParameter<double>(
+    auto& fluid_bulk_modulus = ParameterLib::findParameter<double>(
         config,
         //! \ogs_file_param_special{prj__processes__process__RICHARDS_MECHANICS__fluid_bulk_modulus}
         "fluid_bulk_modulus", parameters, 1);
@@ -114,7 +115,7 @@ std::unique_ptr<Process> createRichardsMechanicsProcess(
          fluid_bulk_modulus.name.c_str());
 
     // Biot coefficient
-    auto& biot_coefficient = findParameter<double>(
+    auto& biot_coefficient = ParameterLib::findParameter<double>(
         config,
         //! \ogs_file_param_special{prj__processes__process__RICHARDS_MECHANICS__biot_coefficient}
         "biot_coefficient", parameters, 1);
@@ -122,14 +123,14 @@ std::unique_ptr<Process> createRichardsMechanicsProcess(
          biot_coefficient.name.c_str());
 
     // Solid density
-    auto& solid_density = findParameter<double>(
+    auto& solid_density = ParameterLib::findParameter<double>(
         config,
         //! \ogs_file_param_special{prj__processes__process__RICHARDS_MECHANICS__solid_density}
         "solid_density", parameters, 1);
     DBUG("Use '%s' as solid density parameter.", solid_density.name.c_str());
 
     // Solid bulk modulus
-    auto& solid_bulk_modulus = findParameter<double>(
+    auto& solid_bulk_modulus = ParameterLib::findParameter<double>(
         config,
         //! \ogs_file_param_special{prj__processes__process__RICHARDS_MECHANICS__solid_bulk_modulus}
         "solid_bulk_modulus", parameters, 1);
@@ -155,7 +156,7 @@ std::unique_ptr<Process> createRichardsMechanicsProcess(
         std::copy_n(b.data(), b.size(), specific_body_force.data());
     }
 
-    auto& temperature = findParameter<double>(
+    auto& temperature = ParameterLib::findParameter<double>(
         config,
         //! \ogs_file_param_special{prj__processes__process__RICHARDS_MECHANICS__temperature}
         "temperature", parameters, 1);
@@ -214,7 +215,7 @@ template std::unique_ptr<Process> createRichardsMechanicsProcess<2>(
     MeshLib::Mesh& mesh,
     std::unique_ptr<ProcessLib::AbstractJacobianAssembler>&& jacobian_assembler,
     std::vector<ProcessVariable> const& variables,
-    std::vector<std::unique_ptr<ParameterBase>> const& parameters,
+    std::vector<std::unique_ptr<ParameterLib::ParameterBase>> const& parameters,
     unsigned const integration_order,
     BaseLib::ConfigTree const& config);
 
@@ -222,7 +223,7 @@ template std::unique_ptr<Process> createRichardsMechanicsProcess<3>(
     MeshLib::Mesh& mesh,
     std::unique_ptr<ProcessLib::AbstractJacobianAssembler>&& jacobian_assembler,
     std::vector<ProcessVariable> const& variables,
-    std::vector<std::unique_ptr<ParameterBase>> const& parameters,
+    std::vector<std::unique_ptr<ParameterLib::ParameterBase>> const& parameters,
     unsigned const integration_order,
     BaseLib::ConfigTree const& config);
 
diff --git a/ProcessLib/RichardsMechanics/CreateRichardsMechanicsProcess.h b/ProcessLib/RichardsMechanics/CreateRichardsMechanicsProcess.h
index 7497a0cdc67295c83438757467e8480b2c9500f6..769ebaeb79dd87ee389f280e86c5a18fdfaa8d78 100644
--- a/ProcessLib/RichardsMechanics/CreateRichardsMechanicsProcess.h
+++ b/ProcessLib/RichardsMechanics/CreateRichardsMechanicsProcess.h
@@ -25,10 +25,13 @@ namespace MathLib
 {
 class PiecewiseLinearInterpolation;
 }
+namespace ParameterLib
+{
+struct ParameterBase;
+}
 namespace ProcessLib
 {
 class AbstractJacobianAssembler;
-struct ParameterBase;
 class Process;
 class ProcessVariable;
 }  // namespace ProcessLib
@@ -42,7 +45,7 @@ std::unique_ptr<Process> createRichardsMechanicsProcess(
     MeshLib::Mesh& mesh,
     std::unique_ptr<ProcessLib::AbstractJacobianAssembler>&& jacobian_assembler,
     std::vector<ProcessVariable> const& variables,
-    std::vector<std::unique_ptr<ParameterBase>> const& parameters,
+    std::vector<std::unique_ptr<ParameterLib::ParameterBase>> const& parameters,
     unsigned const integration_order,
     BaseLib::ConfigTree const& config);
 
@@ -50,7 +53,7 @@ extern template std::unique_ptr<Process> createRichardsMechanicsProcess<2>(
     MeshLib::Mesh& mesh,
     std::unique_ptr<ProcessLib::AbstractJacobianAssembler>&& jacobian_assembler,
     std::vector<ProcessVariable> const& variables,
-    std::vector<std::unique_ptr<ParameterBase>> const& parameters,
+    std::vector<std::unique_ptr<ParameterLib::ParameterBase>> const& parameters,
     unsigned const integration_order,
     BaseLib::ConfigTree const& config);
 
@@ -58,7 +61,7 @@ extern template std::unique_ptr<Process> createRichardsMechanicsProcess<3>(
     MeshLib::Mesh& mesh,
     std::unique_ptr<ProcessLib::AbstractJacobianAssembler>&& jacobian_assembler,
     std::vector<ProcessVariable> const& variables,
-    std::vector<std::unique_ptr<ParameterBase>> const& parameters,
+    std::vector<std::unique_ptr<ParameterLib::ParameterBase>> const& parameters,
     unsigned const integration_order,
     BaseLib::ConfigTree const& config);
 }  // namespace RichardsMechanics
diff --git a/ProcessLib/RichardsMechanics/IntegrationPointData.h b/ProcessLib/RichardsMechanics/IntegrationPointData.h
index 207a6276c74c2beb75d6eb000cfd0500be3adde0..3f770a3ee703ec41dbd454fdad34d3804c032608 100644
--- a/ProcessLib/RichardsMechanics/IntegrationPointData.h
+++ b/ProcessLib/RichardsMechanics/IntegrationPointData.h
@@ -72,7 +72,7 @@ struct IntegrationPointData final
     template <typename DisplacementVectorType>
     typename BMatricesType::KelvinMatrixType updateConstitutiveRelation(
         double const t,
-        SpatialPosition const& x_position,
+        ParameterLib::SpatialPosition const& x_position,
         double const dt,
         DisplacementVectorType const& /*u*/,
         double const temperature)
diff --git a/ProcessLib/RichardsMechanics/RichardsMechanicsFEM-impl.h b/ProcessLib/RichardsMechanics/RichardsMechanicsFEM-impl.h
index 0e6b8b81285d7c1672b00faaf305fdac370a88d2..f64ec0152854ab908941d047af478fa5c711ea2e 100644
--- a/ProcessLib/RichardsMechanics/RichardsMechanicsFEM-impl.h
+++ b/ProcessLib/RichardsMechanics/RichardsMechanicsFEM-impl.h
@@ -26,7 +26,8 @@ namespace RichardsMechanics
 {
 template <int DisplacementDim>
 Eigen::Matrix<double, DisplacementDim, DisplacementDim> intrinsicPermeability(
-    double const t, SpatialPosition const& x_position, int const material_id,
+    double const t, ParameterLib::SpatialPosition const& x_position,
+    int const material_id,
     RichardsFlow::RichardsFlowMaterialProperties const& material)
 {
     const Eigen::MatrixXd& permeability =
@@ -160,7 +161,7 @@ void RichardsMechanicsLocalAssembler<
     auto const material_id =
         _process_data.flow_material->getMaterialID(_element.getID());
 
-    SpatialPosition x_position;
+    ParameterLib::SpatialPosition x_position;
     x_position.setElementID(_element.getID());
 
     unsigned const n_integration_points =
@@ -352,7 +353,7 @@ void RichardsMechanicsLocalAssembler<ShapeFunctionDisplacement,
     auto const material_id =
         _process_data.flow_material->getMaterialID(_element.getID());
 
-    SpatialPosition x_position;
+    ParameterLib::SpatialPosition x_position;
     x_position.setElementID(_element.getID());
 
     unsigned const n_integration_points =
@@ -663,7 +664,7 @@ std::vector<double> const& RichardsMechanicsLocalAssembler<
     unsigned const n_integration_points =
         _integration_method.getNumberOfPoints();
 
-    SpatialPosition x_position;
+    ParameterLib::SpatialPosition x_position;
     x_position.setElementID(_element.getID());
     for (unsigned ip = 0; ip < n_integration_points; ip++)
     {
@@ -799,7 +800,7 @@ void RichardsMechanicsLocalAssembler<ShapeFunctionDisplacement,
             displacement_size> const>(local_x.data() + displacement_offset,
                                       displacement_size);
     double const& dt = _process_data.dt;
-    SpatialPosition x_position;
+    ParameterLib::SpatialPosition x_position;
     x_position.setElementID(_element.getID());
 
     int const n_integration_points = _integration_method.getNumberOfPoints();
@@ -843,7 +844,7 @@ void RichardsMechanicsLocalAssembler<ShapeFunctionDisplacement,
     auto const material_id =
         _process_data.flow_material->getMaterialID(_element.getID());
 
-    SpatialPosition x_position;
+    ParameterLib::SpatialPosition x_position;
     x_position.setElementID(_element.getID());
 
     unsigned const n_integration_points =
diff --git a/ProcessLib/RichardsMechanics/RichardsMechanicsFEM.h b/ProcessLib/RichardsMechanics/RichardsMechanicsFEM.h
index 1632ab1a4831e243818819a2166d166054c87cd1..bafa45af12a31031cad53f2834244a94b7153852 100644
--- a/ProcessLib/RichardsMechanics/RichardsMechanicsFEM.h
+++ b/ProcessLib/RichardsMechanics/RichardsMechanicsFEM.h
@@ -17,10 +17,10 @@
 #include "MathLib/LinAlg/Eigen/EigenMapTools.h"
 #include "NumLib/DOF/DOFTableUtil.h"
 #include "NumLib/Fem/ShapeMatrixPolicy.h"
+#include "ParameterLib/Parameter.h"
 #include "ProcessLib/Deformation/BMatrixPolicy.h"
 #include "ProcessLib/Deformation/LinearBMatrix.h"
 #include "ProcessLib/LocalAssemblerTraits.h"
-#include "ProcessLib/Parameter/Parameter.h"
 #include "ProcessLib/Utils/InitShapeMatrices.h"
 
 #include "IntegrationPointData.h"
diff --git a/ProcessLib/RichardsMechanics/RichardsMechanicsProcess.cpp b/ProcessLib/RichardsMechanics/RichardsMechanicsProcess.cpp
index f79f587d284b0dc9d2006a369c77fb48c3733c79..e769eb695aaf2d9a83807dc653eb1983eae1ce4d 100644
--- a/ProcessLib/RichardsMechanics/RichardsMechanicsProcess.cpp
+++ b/ProcessLib/RichardsMechanics/RichardsMechanicsProcess.cpp
@@ -27,7 +27,7 @@ template <int DisplacementDim>
 RichardsMechanicsProcess<DisplacementDim>::RichardsMechanicsProcess(
     MeshLib::Mesh& mesh,
     std::unique_ptr<ProcessLib::AbstractJacobianAssembler>&& jacobian_assembler,
-    std::vector<std::unique_ptr<ParameterBase>> const& parameters,
+    std::vector<std::unique_ptr<ParameterLib::ParameterBase>> const& parameters,
     unsigned const integration_order,
     std::vector<std::vector<std::reference_wrapper<ProcessVariable>>>&&
         process_variables,
diff --git a/ProcessLib/RichardsMechanics/RichardsMechanicsProcess.h b/ProcessLib/RichardsMechanics/RichardsMechanicsProcess.h
index 5a6a95671089f3b17636ef3c4f231f3024b6cad3..42abbab1fdb8e36a60ba05259bf63f97caf67863 100644
--- a/ProcessLib/RichardsMechanics/RichardsMechanicsProcess.h
+++ b/ProcessLib/RichardsMechanics/RichardsMechanicsProcess.h
@@ -31,7 +31,8 @@ public:
         MeshLib::Mesh& mesh,
         std::unique_ptr<ProcessLib::AbstractJacobianAssembler>&&
             jacobian_assembler,
-        std::vector<std::unique_ptr<ParameterBase>> const& parameters,
+        std::vector<std::unique_ptr<ParameterLib::ParameterBase>> const&
+            parameters,
         unsigned const integration_order,
         std::vector<std::vector<std::reference_wrapper<ProcessVariable>>>&&
             process_variables,
diff --git a/ProcessLib/RichardsMechanics/RichardsMechanicsProcessData.h b/ProcessLib/RichardsMechanics/RichardsMechanicsProcessData.h
index 6b22b03b1de2a6dc1845f7407a3df33e7a148327..0ea1097941182905676b0d20e47af91675379b46 100644
--- a/ProcessLib/RichardsMechanics/RichardsMechanicsProcessData.h
+++ b/ProcessLib/RichardsMechanics/RichardsMechanicsProcessData.h
@@ -9,7 +9,7 @@
 
 #pragma once
 
-#include "ProcessLib/Parameter/Parameter.h"
+#include "ParameterLib/Parameter.h"
 
 #include <memory>
 #include <utility>
@@ -42,11 +42,11 @@ struct RichardsMechanicsProcessData
                  std::unique_ptr<
                      MaterialLib::Solids::MechanicsBase<DisplacementDim>>>&&
             solid_materials_,
-        Parameter<double> const& fluid_bulk_modulus_,
-        Parameter<double> const& biot_coefficient_,
-        Parameter<double> const& solid_density_,
-        Parameter<double> const& solid_bulk_modulus_,
-        Parameter<double> const& temperature_,
+        ParameterLib::Parameter<double> const& fluid_bulk_modulus_,
+        ParameterLib::Parameter<double> const& biot_coefficient_,
+        ParameterLib::Parameter<double> const& solid_density_,
+        ParameterLib::Parameter<double> const& solid_bulk_modulus_,
+        ParameterLib::Parameter<double> const& temperature_,
         Eigen::Matrix<double, DisplacementDim, 1>
             specific_body_force_)
         : material_ids(material_ids_),
@@ -81,17 +81,20 @@ struct RichardsMechanicsProcessData
         int,
         std::unique_ptr<MaterialLib::Solids::MechanicsBase<DisplacementDim>>>
         solid_materials;
-    /// Fluid's bulk modulus. A scalar quantity, Parameter<double>.
-    Parameter<double> const& fluid_bulk_modulus;
-    /// Biot coefficient. A scalar quantity, Parameter<double>.
-    Parameter<double> const& biot_coefficient;
-    /// Density of the solid. A scalar quantity, Parameter<double>.
-    Parameter<double> const& solid_density;
-    /// Solid's bulk modulus. A scalar quantity, Parameter<double>.
-    Parameter<double> const& solid_bulk_modulus;
+    /// Fluid's bulk modulus. A scalar quantity,
+    /// ParameterLib::Parameter<double>.
+    ParameterLib::Parameter<double> const& fluid_bulk_modulus;
+    /// Biot coefficient. A scalar quantity, ParameterLib::Parameter<double>.
+    ParameterLib::Parameter<double> const& biot_coefficient;
+    /// Density of the solid. A scalar quantity,
+    /// ParameterLib::Parameter<double>.
+    ParameterLib::Parameter<double> const& solid_density;
+    /// Solid's bulk modulus. A scalar quantity,
+    /// ParameterLib::Parameter<double>.
+    ParameterLib::Parameter<double> const& solid_bulk_modulus;
     /// Reference temperature for material properties. A scalar quantity,
-    /// Parameter<double>.
-    Parameter<double> const& temperature;
+    /// ParameterLib::Parameter<double>.
+    ParameterLib::Parameter<double> const& temperature;
     /// Specific body forces applied to solid and fluid.
     /// It is usually used to apply gravitational forces.
     /// A vector of displacement dimension's length.
diff --git a/ProcessLib/SmallDeformation/CMakeLists.txt b/ProcessLib/SmallDeformation/CMakeLists.txt
index a2fee7f8872cba77dc5c3db006a557e3efaaf2a9..462c3245b63dabed9df2945d1f457d61bb16a44f 100644
--- a/ProcessLib/SmallDeformation/CMakeLists.txt
+++ b/ProcessLib/SmallDeformation/CMakeLists.txt
@@ -4,6 +4,9 @@ add_library(SmallDeformation ${SOURCES})
 if(BUILD_SHARED_LIBS)
     install(TARGETS SmallDeformation LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR})
 endif()
-target_link_libraries(SmallDeformation PUBLIC ProcessLib)
+target_link_libraries(SmallDeformation
+    PUBLIC ProcessLib
+    PRIVATE ParameterLib
+)
 
 include(Tests.cmake)
diff --git a/ProcessLib/SmallDeformation/CreateSmallDeformationProcess.cpp b/ProcessLib/SmallDeformation/CreateSmallDeformationProcess.cpp
index 5835471f4b252157ab5e221d8fbd037207697bae..8c1364081366215cfa7ff6041e8691cb152467b4 100644
--- a/ProcessLib/SmallDeformation/CreateSmallDeformationProcess.cpp
+++ b/ProcessLib/SmallDeformation/CreateSmallDeformationProcess.cpp
@@ -12,6 +12,7 @@
 #include <cassert>
 
 #include "MaterialLib/SolidModels/CreateConstitutiveRelation.h"
+#include "ParameterLib/Utils.h"
 #include "ProcessLib/Output/CreateSecondaryVariables.h"
 #include "ProcessLib/Utils/ProcessUtils.h"
 
@@ -22,14 +23,12 @@ namespace ProcessLib
 {
 namespace SmallDeformation
 {
-
 template <int DisplacementDim>
-std::unique_ptr<Process>
-createSmallDeformationProcess(
+std::unique_ptr<Process> createSmallDeformationProcess(
     MeshLib::Mesh& mesh,
     std::unique_ptr<ProcessLib::AbstractJacobianAssembler>&& jacobian_assembler,
     std::vector<ProcessVariable> const& variables,
-    std::vector<std::unique_ptr<ParameterBase>> const& parameters,
+    std::vector<std::unique_ptr<ParameterLib::ParameterBase>> const& parameters,
     unsigned const integration_order,
     BaseLib::ConfigTree const& config)
 {
@@ -69,7 +68,7 @@ createSmallDeformationProcess(
             parameters, config);
 
     // Solid density
-    auto& solid_density = findParameter<double>(
+    auto& solid_density = ParameterLib::findParameter<double>(
         config,
         //! \ogs_file_param_special{prj__processes__process__SMALL_DEFORMATION__solid_density}
         "solid_density", parameters, 1);
@@ -122,7 +121,7 @@ template std::unique_ptr<Process> createSmallDeformationProcess<2>(
     MeshLib::Mesh& mesh,
     std::unique_ptr<ProcessLib::AbstractJacobianAssembler>&& jacobian_assembler,
     std::vector<ProcessVariable> const& variables,
-    std::vector<std::unique_ptr<ParameterBase>> const& parameters,
+    std::vector<std::unique_ptr<ParameterLib::ParameterBase>> const& parameters,
     unsigned const integration_order,
     BaseLib::ConfigTree const& config);
 
@@ -130,7 +129,7 @@ template std::unique_ptr<Process> createSmallDeformationProcess<3>(
     MeshLib::Mesh& mesh,
     std::unique_ptr<ProcessLib::AbstractJacobianAssembler>&& jacobian_assembler,
     std::vector<ProcessVariable> const& variables,
-    std::vector<std::unique_ptr<ParameterBase>> const& parameters,
+    std::vector<std::unique_ptr<ParameterLib::ParameterBase>> const& parameters,
     unsigned const integration_order,
     BaseLib::ConfigTree const& config);
 
diff --git a/ProcessLib/SmallDeformation/CreateSmallDeformationProcess.h b/ProcessLib/SmallDeformation/CreateSmallDeformationProcess.h
index 245d9b30a6c138a76069c3814b45d985861cedea..eb82b43381e02ee0a0b005bb01dd448f9ac3fc10 100644
--- a/ProcessLib/SmallDeformation/CreateSmallDeformationProcess.h
+++ b/ProcessLib/SmallDeformation/CreateSmallDeformationProcess.h
@@ -20,10 +20,13 @@ namespace MeshLib
 {
 class Mesh;
 }
+namespace ParameterLib
+{
+struct ParameterBase;
+}
 namespace ProcessLib
 {
 class AbstractJacobianAssembler;
-struct ParameterBase;
 class Process;
 class ProcessVariable;
 }
@@ -37,7 +40,7 @@ std::unique_ptr<Process> createSmallDeformationProcess(
     MeshLib::Mesh& mesh,
     std::unique_ptr<ProcessLib::AbstractJacobianAssembler>&& jacobian_assembler,
     std::vector<ProcessVariable> const& variables,
-    std::vector<std::unique_ptr<ParameterBase>> const& parameters,
+    std::vector<std::unique_ptr<ParameterLib::ParameterBase>> const& parameters,
     unsigned const integration_order,
     BaseLib::ConfigTree const& config);
 
@@ -45,7 +48,7 @@ extern template std::unique_ptr<Process> createSmallDeformationProcess<2>(
     MeshLib::Mesh& mesh,
     std::unique_ptr<ProcessLib::AbstractJacobianAssembler>&& jacobian_assembler,
     std::vector<ProcessVariable> const& variables,
-    std::vector<std::unique_ptr<ParameterBase>> const& parameters,
+    std::vector<std::unique_ptr<ParameterLib::ParameterBase>> const& parameters,
     unsigned const integration_order,
     BaseLib::ConfigTree const& config);
 
@@ -53,7 +56,7 @@ extern template std::unique_ptr<Process> createSmallDeformationProcess<3>(
     MeshLib::Mesh& mesh,
     std::unique_ptr<ProcessLib::AbstractJacobianAssembler>&& jacobian_assembler,
     std::vector<ProcessVariable> const& variables,
-    std::vector<std::unique_ptr<ParameterBase>> const& parameters,
+    std::vector<std::unique_ptr<ParameterLib::ParameterBase>> const& parameters,
     unsigned const integration_order,
     BaseLib::ConfigTree const& config);
 
diff --git a/ProcessLib/SmallDeformation/SmallDeformationFEM.h b/ProcessLib/SmallDeformation/SmallDeformationFEM.h
index 5a30e3f49767192d7143f7aedeeeca1aa18ece77..8754beff00fa1dbc70f19c8fa76ac6c06d01db45 100644
--- a/ProcessLib/SmallDeformation/SmallDeformationFEM.h
+++ b/ProcessLib/SmallDeformation/SmallDeformationFEM.h
@@ -18,12 +18,12 @@
 #include "NumLib/Extrapolation/ExtrapolatableElement.h"
 #include "NumLib/Fem/FiniteElement/TemplateIsoparametric.h"
 #include "NumLib/Fem/ShapeMatrixPolicy.h"
+#include "ParameterLib/Parameter.h"
 #include "ProcessLib/Deformation/BMatrixPolicy.h"
 #include "ProcessLib/Deformation/GMatrixPolicy.h"
 #include "ProcessLib/Deformation/LinearBMatrix.h"
 #include "ProcessLib/LocalAssemblerInterface.h"
 #include "ProcessLib/LocalAssemblerTraits.h"
-#include "ProcessLib/Parameter/Parameter.h"
 #include "ProcessLib/Utils/InitShapeMatrices.h"
 
 #include "LocalAssemblerInterface.h"
@@ -212,7 +212,7 @@ public:
         unsigned const n_integration_points =
             _integration_method.getNumberOfPoints();
 
-        SpatialPosition x_position;
+        ParameterLib::SpatialPosition x_position;
         x_position.setElementID(_element.getID());
 
         for (unsigned ip = 0; ip < n_integration_points; ip++)
@@ -294,7 +294,7 @@ public:
         unsigned const n_integration_points =
             _integration_method.getNumberOfPoints();
 
-        SpatialPosition x_position;
+        ParameterLib::SpatialPosition x_position;
         x_position.setElementID(_element.getID());
 
         for (unsigned ip = 0; ip < n_integration_points; ip++)
diff --git a/ProcessLib/SmallDeformation/SmallDeformationProcess.cpp b/ProcessLib/SmallDeformation/SmallDeformationProcess.cpp
index 3001d7aa91b2acac21b140113a77cd36bd943664..347496c52cfbb15281fc553e1f26225cd215a546 100644
--- a/ProcessLib/SmallDeformation/SmallDeformationProcess.cpp
+++ b/ProcessLib/SmallDeformation/SmallDeformationProcess.cpp
@@ -26,7 +26,7 @@ template <int DisplacementDim>
 SmallDeformationProcess<DisplacementDim>::SmallDeformationProcess(
     MeshLib::Mesh& mesh,
     std::unique_ptr<ProcessLib::AbstractJacobianAssembler>&& jacobian_assembler,
-    std::vector<std::unique_ptr<ParameterBase>> const& parameters,
+    std::vector<std::unique_ptr<ParameterLib::ParameterBase>> const& parameters,
     unsigned const integration_order,
     std::vector<std::vector<std::reference_wrapper<ProcessVariable>>>&&
         process_variables,
diff --git a/ProcessLib/SmallDeformation/SmallDeformationProcess.h b/ProcessLib/SmallDeformation/SmallDeformationProcess.h
index c699471b6e158a457f2e7ada590048f19fe44607..43b781fd77df2b74e464c68a571e7b609004448c 100644
--- a/ProcessLib/SmallDeformation/SmallDeformationProcess.h
+++ b/ProcessLib/SmallDeformation/SmallDeformationProcess.h
@@ -60,7 +60,8 @@ public:
         MeshLib::Mesh& mesh,
         std::unique_ptr<ProcessLib::AbstractJacobianAssembler>&&
             jacobian_assembler,
-        std::vector<std::unique_ptr<ParameterBase>> const& parameters,
+        std::vector<std::unique_ptr<ParameterLib::ParameterBase>> const&
+            parameters,
         unsigned const integration_order,
         std::vector<std::vector<std::reference_wrapper<ProcessVariable>>>&&
             process_variables,
diff --git a/ProcessLib/SmallDeformation/SmallDeformationProcessData.h b/ProcessLib/SmallDeformation/SmallDeformationProcessData.h
index ec5fc1064eb35c7101228cab1720835517eef5fa..8fd7f3260b4e79d4f5a2a6dab0983c1b4481e3c4 100644
--- a/ProcessLib/SmallDeformation/SmallDeformationProcessData.h
+++ b/ProcessLib/SmallDeformation/SmallDeformationProcessData.h
@@ -14,7 +14,7 @@
 
 #include <Eigen/Eigen>
 
-#include "ProcessLib/Parameter/Parameter.h"
+#include "ParameterLib/Parameter.h"
 
 namespace MaterialLib
 {
@@ -37,7 +37,7 @@ struct SmallDeformationProcessData
                  std::unique_ptr<
                      MaterialLib::Solids::MechanicsBase<DisplacementDim>>>&&
             solid_materials_,
-        Parameter<double> const& solid_density_,
+        ParameterLib::Parameter<double> const& solid_density_,
         Eigen::Matrix<double, DisplacementDim, 1>
             specific_body_force_,
         double const reference_temperature_)
@@ -66,8 +66,8 @@ struct SmallDeformationProcessData
         int,
         std::unique_ptr<MaterialLib::Solids::MechanicsBase<DisplacementDim>>>
         solid_materials;
-    /// Solid's density. A scalar quantity, Parameter<double>.
-    Parameter<double> const& solid_density;
+    /// Solid's density. A scalar quantity, ParameterLib::Parameter<double>.
+    ParameterLib::Parameter<double> const& solid_density;
     /// Specific body forces applied to the solid.
     /// It is usually used to apply gravitational forces.
     /// A vector of displacement dimension's length.
diff --git a/ProcessLib/SmallDeformationNonlocal/CMakeLists.txt b/ProcessLib/SmallDeformationNonlocal/CMakeLists.txt
index f99ef53c547de078cdd9a0d49275a1a88629a72c..dc507d89e8818c2866717b942960911717cbed81 100644
--- a/ProcessLib/SmallDeformationNonlocal/CMakeLists.txt
+++ b/ProcessLib/SmallDeformationNonlocal/CMakeLists.txt
@@ -1,6 +1,9 @@
 APPEND_SOURCE_FILES(SOURCES)
 
 add_library(SmallDeformationNonlocal ${SOURCES})
-target_link_libraries(SmallDeformationNonlocal PUBLIC ProcessLib)
+target_link_libraries(SmallDeformationNonlocal
+    PUBLIC ProcessLib
+    PRIVATE ParameterLib
+)
 
 include(Tests.cmake)
diff --git a/ProcessLib/SmallDeformationNonlocal/CreateSmallDeformationNonlocalProcess.cpp b/ProcessLib/SmallDeformationNonlocal/CreateSmallDeformationNonlocalProcess.cpp
index 9459c48d64d685d3e764a6920d4d3cbcf05abe92..f3c066b33b459c9b942bf8801b7bc99aaa92ba57 100644
--- a/ProcessLib/SmallDeformationNonlocal/CreateSmallDeformationNonlocalProcess.cpp
+++ b/ProcessLib/SmallDeformationNonlocal/CreateSmallDeformationNonlocalProcess.cpp
@@ -14,6 +14,7 @@
 #include <cassert>
 
 #include "MaterialLib/SolidModels/CreateConstitutiveRelation.h"
+#include "ParameterLib/Utils.h"
 #include "ProcessLib/Output/CreateSecondaryVariables.h"
 #include "ProcessLib/Utils/ProcessUtils.h"
 
@@ -29,7 +30,7 @@ std::unique_ptr<Process> createSmallDeformationNonlocalProcess(
     MeshLib::Mesh& mesh,
     std::unique_ptr<ProcessLib::AbstractJacobianAssembler>&& jacobian_assembler,
     std::vector<ProcessVariable> const& variables,
-    std::vector<std::unique_ptr<ParameterBase>> const& parameters,
+    std::vector<std::unique_ptr<ParameterLib::ParameterBase>> const& parameters,
     unsigned const integration_order,
     BaseLib::ConfigTree const& config)
 {
@@ -69,7 +70,7 @@ std::unique_ptr<Process> createSmallDeformationNonlocalProcess(
             parameters, config);
 
     // Solid density
-    auto& solid_density = findParameter<double>(
+    auto& solid_density = ParameterLib::findParameter<double>(
         config,
         //! \ogs_file_param_special{prj__processes__process__SMALL_DEFORMATION_NONLOCAL__solid_density}
         "solid_density", parameters, 1);
@@ -127,7 +128,7 @@ template std::unique_ptr<Process> createSmallDeformationNonlocalProcess<2>(
     MeshLib::Mesh& mesh,
     std::unique_ptr<ProcessLib::AbstractJacobianAssembler>&& jacobian_assembler,
     std::vector<ProcessVariable> const& variables,
-    std::vector<std::unique_ptr<ParameterBase>> const& parameters,
+    std::vector<std::unique_ptr<ParameterLib::ParameterBase>> const& parameters,
     unsigned const integration_order,
     BaseLib::ConfigTree const& config);
 
@@ -135,7 +136,7 @@ template std::unique_ptr<Process> createSmallDeformationNonlocalProcess<3>(
     MeshLib::Mesh& mesh,
     std::unique_ptr<ProcessLib::AbstractJacobianAssembler>&& jacobian_assembler,
     std::vector<ProcessVariable> const& variables,
-    std::vector<std::unique_ptr<ParameterBase>> const& parameters,
+    std::vector<std::unique_ptr<ParameterLib::ParameterBase>> const& parameters,
     unsigned const integration_order,
     BaseLib::ConfigTree const& config);
 
diff --git a/ProcessLib/SmallDeformationNonlocal/CreateSmallDeformationNonlocalProcess.h b/ProcessLib/SmallDeformationNonlocal/CreateSmallDeformationNonlocalProcess.h
index 9a5cf72580d42d7b065a25fdaf05ee51d4aee8a0..88fc497315e8b4af9384dcbce6038cd68119900c 100644
--- a/ProcessLib/SmallDeformationNonlocal/CreateSmallDeformationNonlocalProcess.h
+++ b/ProcessLib/SmallDeformationNonlocal/CreateSmallDeformationNonlocalProcess.h
@@ -22,10 +22,13 @@ namespace MeshLib
 {
 class Mesh;
 }
+namespace ParameterLib
+{
+struct ParameterBase;
+}
 namespace ProcessLib
 {
 class AbstractJacobianAssembler;
-struct ParameterBase;
 class Process;
 class ProcessVariable;
 }  // namespace ProcessLib
@@ -39,7 +42,7 @@ std::unique_ptr<Process> createSmallDeformationNonlocalProcess(
     MeshLib::Mesh& mesh,
     std::unique_ptr<ProcessLib::AbstractJacobianAssembler>&& jacobian_assembler,
     std::vector<ProcessVariable> const& variables,
-    std::vector<std::unique_ptr<ParameterBase>> const& parameters,
+    std::vector<std::unique_ptr<ParameterLib::ParameterBase>> const& parameters,
     unsigned const integration_order,
     BaseLib::ConfigTree const& config);
 
@@ -48,7 +51,7 @@ createSmallDeformationNonlocalProcess<2>(
     MeshLib::Mesh& mesh,
     std::unique_ptr<ProcessLib::AbstractJacobianAssembler>&& jacobian_assembler,
     std::vector<ProcessVariable> const& variables,
-    std::vector<std::unique_ptr<ParameterBase>> const& parameters,
+    std::vector<std::unique_ptr<ParameterLib::ParameterBase>> const& parameters,
     unsigned const integration_order,
     BaseLib::ConfigTree const& config);
 
@@ -57,7 +60,7 @@ createSmallDeformationNonlocalProcess<3>(
     MeshLib::Mesh& mesh,
     std::unique_ptr<ProcessLib::AbstractJacobianAssembler>&& jacobian_assembler,
     std::vector<ProcessVariable> const& variables,
-    std::vector<std::unique_ptr<ParameterBase>> const& parameters,
+    std::vector<std::unique_ptr<ParameterLib::ParameterBase>> const& parameters,
     unsigned const integration_order,
     BaseLib::ConfigTree const& config);
 
diff --git a/ProcessLib/SmallDeformationNonlocal/SmallDeformationNonlocalFEM.h b/ProcessLib/SmallDeformationNonlocal/SmallDeformationNonlocalFEM.h
index c668b0c78c054380beee283c94a94722b9a3c28f..792fcf80b0088301052b1b5a06b5761aa13d2b11 100644
--- a/ProcessLib/SmallDeformationNonlocal/SmallDeformationNonlocalFEM.h
+++ b/ProcessLib/SmallDeformationNonlocal/SmallDeformationNonlocalFEM.h
@@ -23,11 +23,11 @@
 #include "NumLib/Fem/FiniteElement/TemplateIsoparametric.h"
 #include "NumLib/Fem/ShapeMatrixPolicy.h"
 #include "NumLib/Function/Interpolation.h"
+#include "ParameterLib/Parameter.h"
 #include "ProcessLib/Deformation/BMatrixPolicy.h"
 #include "ProcessLib/Deformation/Divergence.h"
 #include "ProcessLib/Deformation/LinearBMatrix.h"
 #include "ProcessLib/LocalAssemblerTraits.h"
-#include "ProcessLib/Parameter/Parameter.h"
 #include "ProcessLib/Utils/InitShapeMatrices.h"
 
 #include "Damage.h"
@@ -322,7 +322,7 @@ public:
         auto const n_integration_points =
             _integration_method.getNumberOfPoints();
 
-        SpatialPosition x_position;
+        ParameterLib::SpatialPosition x_position;
         x_position.setElementID(_element.getID());
 
         for (unsigned ip = 0; ip < n_integration_points; ip++)
@@ -439,7 +439,7 @@ public:
         unsigned const n_integration_points =
             _integration_method.getNumberOfPoints();
 
-        SpatialPosition x_position;
+        ParameterLib::SpatialPosition x_position;
         x_position.setElementID(_element.getID());
 
         // Non-local integration.
diff --git a/ProcessLib/SmallDeformationNonlocal/SmallDeformationNonlocalProcess.cpp b/ProcessLib/SmallDeformationNonlocal/SmallDeformationNonlocalProcess.cpp
index b4de897c3c8b1d335e48a0bbde6f7de217e725a6..bb57a0f0812900c063a76e382cd84c86db2e3c72 100644
--- a/ProcessLib/SmallDeformationNonlocal/SmallDeformationNonlocalProcess.cpp
+++ b/ProcessLib/SmallDeformationNonlocal/SmallDeformationNonlocalProcess.cpp
@@ -27,7 +27,8 @@ SmallDeformationNonlocalProcess<DisplacementDim>::
         MeshLib::Mesh& mesh,
         std::unique_ptr<ProcessLib::AbstractJacobianAssembler>&&
             jacobian_assembler,
-        std::vector<std::unique_ptr<ParameterBase>> const& parameters,
+        std::vector<std::unique_ptr<ParameterLib::ParameterBase>> const&
+            parameters,
         unsigned const integration_order,
         std::vector<std::vector<std::reference_wrapper<ProcessVariable>>>&&
             process_variables,
diff --git a/ProcessLib/SmallDeformationNonlocal/SmallDeformationNonlocalProcess.h b/ProcessLib/SmallDeformationNonlocal/SmallDeformationNonlocalProcess.h
index b31f4027ef89dba3ae5de4ffda04ad3d93033b76..0aa405f9fa510343aa50127d07cbad88024478e8 100644
--- a/ProcessLib/SmallDeformationNonlocal/SmallDeformationNonlocalProcess.h
+++ b/ProcessLib/SmallDeformationNonlocal/SmallDeformationNonlocalProcess.h
@@ -33,7 +33,8 @@ public:
         MeshLib::Mesh& mesh,
         std::unique_ptr<ProcessLib::AbstractJacobianAssembler>&&
             jacobian_assembler,
-        std::vector<std::unique_ptr<ParameterBase>> const& parameters,
+        std::vector<std::unique_ptr<ParameterLib::ParameterBase>> const&
+            parameters,
         unsigned const integration_order,
         std::vector<std::vector<std::reference_wrapper<ProcessVariable>>>&&
             process_variables,
diff --git a/ProcessLib/SmallDeformationNonlocal/SmallDeformationNonlocalProcessData.h b/ProcessLib/SmallDeformationNonlocal/SmallDeformationNonlocalProcessData.h
index c81229b5e2e9ec808cc7edf6373817807100cc59..28a0967d661a79a7e5c5a39a00d86f5119791b95 100644
--- a/ProcessLib/SmallDeformationNonlocal/SmallDeformationNonlocalProcessData.h
+++ b/ProcessLib/SmallDeformationNonlocal/SmallDeformationNonlocalProcessData.h
@@ -37,7 +37,7 @@ struct SmallDeformationNonlocalProcessData
                  std::unique_ptr<
                      MaterialLib::Solids::MechanicsBase<DisplacementDim>>>&&
             solid_materials_,
-        Parameter<double> const& solid_density_,
+        ParameterLib::Parameter<double> const& solid_density_,
         Eigen::Matrix<double, DisplacementDim, 1>
             specific_body_force_,
         double const reference_temperature_,
@@ -70,8 +70,8 @@ struct SmallDeformationNonlocalProcessData
         int,
         std::unique_ptr<MaterialLib::Solids::MechanicsBase<DisplacementDim>>>
         solid_materials;
-    /// Solid's density. A scalar quantity, Parameter<double>.
-    Parameter<double> const& solid_density;
+    /// Solid's density. A scalar quantity, ParameterLib::Parameter<double>.
+    ParameterLib::Parameter<double> const& solid_density;
     /// Specific body forces applied to the solid.
     /// It is usually used to apply gravitational forces.
     /// A vector of displacement dimension's length.
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<
diff --git a/ProcessLib/SurfaceFlux/SurfaceFluxLocalAssembler.h b/ProcessLib/SurfaceFlux/SurfaceFluxLocalAssembler.h
index 93673d46feced68485043207fd4a1798b54fa3d9..e281e7be17999653ad1e798ec8aa8b273c78f754 100644
--- a/ProcessLib/SurfaceFlux/SurfaceFluxLocalAssembler.h
+++ b/ProcessLib/SurfaceFlux/SurfaceFluxLocalAssembler.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/TES/CMakeLists.txt b/ProcessLib/TES/CMakeLists.txt
index d1632b690167d971df4d44c2c2755564a2ab22cc..afa13b23b39d63a90bac893c646546a2ac800bc0 100644
--- a/ProcessLib/TES/CMakeLists.txt
+++ b/ProcessLib/TES/CMakeLists.txt
@@ -4,6 +4,9 @@ add_library(TES ${SOURCES})
 if(BUILD_SHARED_LIBS)
     install(TARGETS TES LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR})
 endif()
-target_link_libraries(TES PUBLIC ProcessLib)
+target_link_libraries(TES
+    PUBLIC ProcessLib
+    PRIVATE ParameterLib
+)
 
 include(Tests.cmake)
diff --git a/ProcessLib/TES/CreateTESProcess.cpp b/ProcessLib/TES/CreateTESProcess.cpp
index 5407dda751a325154125dbe2af72b38fbb66f488..18529dad88f62e287ce963fd0c7daa6d2f68d188 100644
--- a/ProcessLib/TES/CreateTESProcess.cpp
+++ b/ProcessLib/TES/CreateTESProcess.cpp
@@ -20,7 +20,7 @@ std::unique_ptr<Process> createTESProcess(
     MeshLib::Mesh& mesh,
     std::unique_ptr<ProcessLib::AbstractJacobianAssembler>&& jacobian_assembler,
     std::vector<ProcessVariable> const& variables,
-    std::vector<std::unique_ptr<ParameterBase>> const& parameters,
+    std::vector<std::unique_ptr<ParameterLib::ParameterBase>> const& parameters,
     unsigned const integration_order,
     BaseLib::ConfigTree const& config)
 {
diff --git a/ProcessLib/TES/CreateTESProcess.h b/ProcessLib/TES/CreateTESProcess.h
index 4af7d4c2f6e39aee4a019f3d73eae3cf4225fa68..19ab317d38b655a7c4f5d69254ac862e8cb7b70b 100644
--- a/ProcessLib/TES/CreateTESProcess.h
+++ b/ProcessLib/TES/CreateTESProcess.h
@@ -20,7 +20,8 @@ std::unique_ptr<Process> createTESProcess(
     MeshLib::Mesh& mesh,
     std::unique_ptr<ProcessLib::AbstractJacobianAssembler>&& jacobian_assembler,
     std::vector<ProcessVariable> const& variables,
-    std::vector<std::unique_ptr<ParameterBase>> const& /*parameters*/,
+    std::vector<
+        std::unique_ptr<ParameterLib::ParameterBase>> const& /*parameters*/,
     unsigned const integration_order,
     BaseLib::ConfigTree const& config);
 
diff --git a/ProcessLib/TES/TESProcess.cpp b/ProcessLib/TES/TESProcess.cpp
index 9fbc3bd3844a0cd07037d26cd339a5ba4e6a2ec3..fff9197d14f17a83a42792654adbd711b3cc52fb 100644
--- a/ProcessLib/TES/TESProcess.cpp
+++ b/ProcessLib/TES/TESProcess.cpp
@@ -19,7 +19,7 @@ namespace TES
 TESProcess::TESProcess(
     MeshLib::Mesh& mesh,
     std::unique_ptr<AbstractJacobianAssembler>&& jacobian_assembler,
-    std::vector<std::unique_ptr<ParameterBase>> const& parameters,
+    std::vector<std::unique_ptr<ParameterLib::ParameterBase>> const& parameters,
     unsigned const integration_order,
     std::vector<std::vector<std::reference_wrapper<ProcessVariable>>>&&
         process_variables,
diff --git a/ProcessLib/TES/TESProcess.h b/ProcessLib/TES/TESProcess.h
index ad8c316688eff2fa893c53c8fd0f89ccca6857f7..9779b6352728bcd28f497cd0ef727f45fa8bae54 100644
--- a/ProcessLib/TES/TESProcess.h
+++ b/ProcessLib/TES/TESProcess.h
@@ -30,15 +30,17 @@ namespace TES
 class TESProcess final : public Process
 {
 public:
-    TESProcess(MeshLib::Mesh& mesh,
-               std::unique_ptr<AbstractJacobianAssembler>&& jacobian_assembler,
-               std::vector<std::unique_ptr<ParameterBase>> const& parameters,
-               unsigned const integration_order,
-               std::vector<std::vector<std::reference_wrapper<ProcessVariable>>>&&
-                   process_variables,
-               SecondaryVariableCollection&& secondary_variables,
-               NumLib::NamedFunctionCaller&& named_function_caller,
-               BaseLib::ConfigTree const& config);
+    TESProcess(
+        MeshLib::Mesh& mesh,
+        std::unique_ptr<AbstractJacobianAssembler>&& jacobian_assembler,
+        std::vector<std::unique_ptr<ParameterLib::ParameterBase>> const&
+            parameters,
+        unsigned const integration_order,
+        std::vector<std::vector<std::reference_wrapper<ProcessVariable>>>&&
+            process_variables,
+        SecondaryVariableCollection&& secondary_variables,
+        NumLib::NamedFunctionCaller&& named_function_caller,
+        BaseLib::ConfigTree const& config);
 
     void preTimestepConcreteProcess(GlobalVector const& x, const double t,
                                     const double delta_t,
diff --git a/ProcessLib/ThermalTwoPhaseFlowWithPP/CMakeLists.txt b/ProcessLib/ThermalTwoPhaseFlowWithPP/CMakeLists.txt
index 3c5d458490fd6540cd08afc62c61d8c5c6350b30..9f2c0e4977828c78953999dc6eccdd1fb578a089 100644
--- a/ProcessLib/ThermalTwoPhaseFlowWithPP/CMakeLists.txt
+++ b/ProcessLib/ThermalTwoPhaseFlowWithPP/CMakeLists.txt
@@ -4,6 +4,9 @@ add_library(ThermalTwoPhaseFlowWithPP ${SOURCES})
 if(BUILD_SHARED_LIBS)
     install(TARGETS ThermalTwoPhaseFlowWithPP LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR})
 endif()
-target_link_libraries(ThermalTwoPhaseFlowWithPP PUBLIC ProcessLib)
+target_link_libraries(ThermalTwoPhaseFlowWithPP
+    PUBLIC ProcessLib
+    PRIVATE ParameterLib
+)
 
 include(Tests.cmake)
diff --git a/ProcessLib/ThermalTwoPhaseFlowWithPP/CreateThermalTwoPhaseFlowWithPPMaterialProperties.cpp b/ProcessLib/ThermalTwoPhaseFlowWithPP/CreateThermalTwoPhaseFlowWithPPMaterialProperties.cpp
index 66c73326055f8a120e6df222699c1bec5460d340..1de4f7206adc46f5459389145b39af84d947e4a5 100644
--- a/ProcessLib/ThermalTwoPhaseFlowWithPP/CreateThermalTwoPhaseFlowWithPPMaterialProperties.cpp
+++ b/ProcessLib/ThermalTwoPhaseFlowWithPP/CreateThermalTwoPhaseFlowWithPPMaterialProperties.cpp
@@ -25,8 +25,8 @@
 #include "MathLib/InterpolationAlgorithms/PiecewiseLinearInterpolation.h"
 #include "MeshLib/Mesh.h"
 #include "MeshLib/PropertyVector.h"
-#include "ProcessLib/Parameter/Parameter.h"
-#include "ProcessLib/Parameter/SpatialPosition.h"
+#include "ParameterLib/Parameter.h"
+#include "ParameterLib/SpatialPosition.h"
 
 #include "ThermalTwoPhaseFlowWithPPMaterialProperties.h"
 
@@ -38,7 +38,7 @@ std::unique_ptr<ThermalTwoPhaseFlowWithPPMaterialProperties>
 createThermalTwoPhaseFlowWithPPMaterialProperties(
     BaseLib::ConfigTree const& config,
     MeshLib::PropertyVector<int> const& material_ids,
-    std::vector<std::unique_ptr<ProcessLib::ParameterBase>> const& parameters)
+    std::vector<std::unique_ptr<ParameterLib::ParameterBase>> const& parameters)
 {
     DBUG(
         "Reading material properties of nonisothermal two-phase flow process.");
diff --git a/ProcessLib/ThermalTwoPhaseFlowWithPP/CreateThermalTwoPhaseFlowWithPPMaterialProperties.h b/ProcessLib/ThermalTwoPhaseFlowWithPP/CreateThermalTwoPhaseFlowWithPPMaterialProperties.h
index e51387b61b7168386ad42179157ad798b7784357..4748ea58c966bf90381fe187f96b8b66f9d9eb6d 100644
--- a/ProcessLib/ThermalTwoPhaseFlowWithPP/CreateThermalTwoPhaseFlowWithPPMaterialProperties.h
+++ b/ProcessLib/ThermalTwoPhaseFlowWithPP/CreateThermalTwoPhaseFlowWithPPMaterialProperties.h
@@ -31,7 +31,8 @@ std::unique_ptr<ThermalTwoPhaseFlowWithPPMaterialProperties>
 createThermalTwoPhaseFlowWithPPMaterialProperties(
     BaseLib::ConfigTree const& config,
     MeshLib::PropertyVector<int> const& material_ids,
-    std::vector<std::unique_ptr<ProcessLib::ParameterBase>> const& parameters);
+    std::vector<std::unique_ptr<ParameterLib::ParameterBase>> const&
+        parameters);
 
 }  // end namespace
 }  // namespace ProcessLib
diff --git a/ProcessLib/ThermalTwoPhaseFlowWithPP/CreateThermalTwoPhaseFlowWithPPProcess.cpp b/ProcessLib/ThermalTwoPhaseFlowWithPP/CreateThermalTwoPhaseFlowWithPPProcess.cpp
index cbe14e348f5adcc04733552aedacb75ff4590acf..2b16dd30f0b91badae698904e6cf38a1af798594 100644
--- a/ProcessLib/ThermalTwoPhaseFlowWithPP/CreateThermalTwoPhaseFlowWithPPProcess.cpp
+++ b/ProcessLib/ThermalTwoPhaseFlowWithPP/CreateThermalTwoPhaseFlowWithPPProcess.cpp
@@ -12,8 +12,9 @@
 
 #include "BaseLib/Functional.h"
 #include "MeshLib/MeshGenerators/MeshGenerator.h"
+#include "ParameterLib/ConstantParameter.h"
+#include "ParameterLib/Utils.h"
 #include "ProcessLib/Output/CreateSecondaryVariables.h"
-#include "ProcessLib/Parameter/ConstantParameter.h"
 #include "ProcessLib/ThermalTwoPhaseFlowWithPP/CreateThermalTwoPhaseFlowWithPPMaterialProperties.h"
 #include "ProcessLib/ThermalTwoPhaseFlowWithPP/ThermalTwoPhaseFlowWithPPMaterialProperties.h"
 #include "ProcessLib/Utils/ProcessUtils.h"
@@ -29,7 +30,7 @@ std::unique_ptr<Process> createThermalTwoPhaseFlowWithPPProcess(
     MeshLib::Mesh& mesh,
     std::unique_ptr<ProcessLib::AbstractJacobianAssembler>&& jacobian_assembler,
     std::vector<ProcessVariable> const& variables,
-    std::vector<std::unique_ptr<ParameterBase>> const& parameters,
+    std::vector<std::unique_ptr<ParameterLib::ParameterBase>> const& parameters,
     unsigned const integration_order,
     BaseLib::ConfigTree const& config,
     std::map<std::string,
@@ -77,25 +78,25 @@ std::unique_ptr<Process> createThermalTwoPhaseFlowWithPPProcess(
     //! \ogs_file_param{prj__processes__process__TWOPHASE_FLOW_THERMAL__mass_lumping}
     auto mass_lumping = config.getConfigParameter<bool>("mass_lumping");
     // diffusion coeff
-    auto& diff_coeff_b = findParameter<double>(
+    auto& diff_coeff_b = ParameterLib::findParameter<double>(
         config,
         //! \ogs_file_param_special{prj__processes__process__TWOPHASE_FLOW_THERMAL__diffusion_coeff_component_b}
         "diffusion_coeff_component_b", parameters, 1);
-    auto& diff_coeff_a = findParameter<double>(
+    auto& diff_coeff_a = ParameterLib::findParameter<double>(
         config,
         //! \ogs_file_param_special{prj__processes__process__TWOPHASE_FLOW_THERMAL__diffusion_coeff_component_a}
         "diffusion_coeff_component_a", parameters, 1);
 
     // Parameter for the density of the solid.
 
-    auto& density_solid = findParameter<double>(
+    auto& density_solid = ParameterLib::findParameter<double>(
         config,
         //! \ogs_file_param_special{prj__processes__process__TWOPHASE_FLOW_THERMAL__density_solid}
         "density_solid", parameters, 1);
     DBUG("Use '%s' as density_solid parameter.", density_solid.name.c_str());
 
     // Parameter for the latent heat of evaporation.
-    auto& latent_heat_evaporation = findParameter<double>(
+    auto& latent_heat_evaporation = ParameterLib::findParameter<double>(
         config,
         //! \ogs_file_param_special{prj__processes__process__TWOPHASE_FLOW_THERMAL__latent_heat_evaporation}
         "latent_heat_evaporation", parameters, 1);
diff --git a/ProcessLib/ThermalTwoPhaseFlowWithPP/CreateThermalTwoPhaseFlowWithPPProcess.h b/ProcessLib/ThermalTwoPhaseFlowWithPP/CreateThermalTwoPhaseFlowWithPPProcess.h
index bb93b33d64e2674760c4888b36f6bfc97281992c..450dcb2ffaa79066a34f8eb7eb0ba3fec6d4ff0b 100644
--- a/ProcessLib/ThermalTwoPhaseFlowWithPP/CreateThermalTwoPhaseFlowWithPPProcess.h
+++ b/ProcessLib/ThermalTwoPhaseFlowWithPP/CreateThermalTwoPhaseFlowWithPPProcess.h
@@ -21,7 +21,7 @@ std::unique_ptr<Process> createThermalTwoPhaseFlowWithPPProcess(
     MeshLib::Mesh& mesh,
     std::unique_ptr<ProcessLib::AbstractJacobianAssembler>&& jacobian_assembler,
     std::vector<ProcessVariable> const& variables,
-    std::vector<std::unique_ptr<ParameterBase>> const& parameters,
+    std::vector<std::unique_ptr<ParameterLib::ParameterBase>> const& parameters,
     unsigned const integration_order,
     BaseLib::ConfigTree const& config,
     std::map<std::string,
diff --git a/ProcessLib/ThermalTwoPhaseFlowWithPP/ThermalTwoPhaseFlowWithPPLocalAssembler-impl.h b/ProcessLib/ThermalTwoPhaseFlowWithPP/ThermalTwoPhaseFlowWithPPLocalAssembler-impl.h
index 97ae3dd571699e26a2f48df4c9c5581f06cc3c58..2b572794265eff9cfcfa008b7f8229d7cc6d9d90 100644
--- a/ProcessLib/ThermalTwoPhaseFlowWithPP/ThermalTwoPhaseFlowWithPPLocalAssembler-impl.h
+++ b/ProcessLib/ThermalTwoPhaseFlowWithPP/ThermalTwoPhaseFlowWithPPLocalAssembler-impl.h
@@ -135,7 +135,7 @@ void ThermalTwoPhaseFlowWithPPLocalAssembler<
     unsigned const n_integration_points =
         _integration_method.getNumberOfPoints();
 
-    SpatialPosition pos;
+    ParameterLib::SpatialPosition pos;
     pos.setElementID(_element.getID());
     auto const& two_phase_material_model =
         _process_data.material->getTwoPhaseMaterialModel();
diff --git a/ProcessLib/ThermalTwoPhaseFlowWithPP/ThermalTwoPhaseFlowWithPPLocalAssembler.h b/ProcessLib/ThermalTwoPhaseFlowWithPP/ThermalTwoPhaseFlowWithPPLocalAssembler.h
index e20b9b761bb482d7dfb70295c24b7a0eb44c036f..3445847c958683eb285644e5399c388a2affb1fe 100644
--- a/ProcessLib/ThermalTwoPhaseFlowWithPP/ThermalTwoPhaseFlowWithPPLocalAssembler.h
+++ b/ProcessLib/ThermalTwoPhaseFlowWithPP/ThermalTwoPhaseFlowWithPPLocalAssembler.h
@@ -16,9 +16,9 @@
 #include "NumLib/Extrapolation/ExtrapolatableElement.h"
 #include "NumLib/Fem/FiniteElement/TemplateIsoparametric.h"
 #include "NumLib/Fem/ShapeMatrixPolicy.h"
+#include "ParameterLib/Parameter.h"
 #include "ProcessLib/LocalAssemblerInterface.h"
 #include "ProcessLib/LocalAssemblerTraits.h"
-#include "ProcessLib/Parameter/Parameter.h"
 #include "ProcessLib/Utils/InitShapeMatrices.h"
 
 #include "ThermalTwoPhaseFlowWithPPProcessData.h"
diff --git a/ProcessLib/ThermalTwoPhaseFlowWithPP/ThermalTwoPhaseFlowWithPPMaterialProperties.cpp b/ProcessLib/ThermalTwoPhaseFlowWithPP/ThermalTwoPhaseFlowWithPPMaterialProperties.cpp
index aa8fa51f48af57afa72f4e746e35dfdc3a946856..3093042b322b83d2b403763bb1cc854fbffc23a9 100644
--- a/ProcessLib/ThermalTwoPhaseFlowWithPP/ThermalTwoPhaseFlowWithPPMaterialProperties.cpp
+++ b/ProcessLib/ThermalTwoPhaseFlowWithPP/ThermalTwoPhaseFlowWithPPMaterialProperties.cpp
@@ -23,8 +23,8 @@
 #include "MeshLib/Mesh.h"
 #include "MeshLib/PropertyVector.h"
 #include "NumLib/NewtonRaphson.h"
-#include "ProcessLib/Parameter/Parameter.h"
-#include "ProcessLib/Parameter/SpatialPosition.h"
+#include "ParameterLib/Parameter.h"
+#include "ParameterLib/SpatialPosition.h"
 
 namespace ProcessLib
 {
@@ -127,7 +127,7 @@ ThermalTwoPhaseFlowWithPPMaterialProperties::getThermalConductivityWetSolid(
 
 double
 ThermalTwoPhaseFlowWithPPMaterialProperties::calculateUnsatHeatConductivity(
-    double const /*t*/, ProcessLib::SpatialPosition const& /*x*/,
+    double const /*t*/, ParameterLib::SpatialPosition const& /*x*/,
     double const Sw, double const lambda_pm_dry,
     double const lambda_pm_wet) const
 {
diff --git a/ProcessLib/ThermalTwoPhaseFlowWithPP/ThermalTwoPhaseFlowWithPPMaterialProperties.h b/ProcessLib/ThermalTwoPhaseFlowWithPP/ThermalTwoPhaseFlowWithPPMaterialProperties.h
index 91469113e1af1aa809f7e016ad94a23979281314..d2d68b65aab6987cbfe50b89691c46b8e80c06e8 100644
--- a/ProcessLib/ThermalTwoPhaseFlowWithPP/ThermalTwoPhaseFlowWithPPMaterialProperties.h
+++ b/ProcessLib/ThermalTwoPhaseFlowWithPP/ThermalTwoPhaseFlowWithPPMaterialProperties.h
@@ -77,11 +77,12 @@ public:
     double getThermalConductivityDrySolid(const double p, const double T) const;
     double getThermalConductivityWetSolid(const double p, const double T) const;
     /// Calculates the unsaturated heat conductivity
-    double calculateUnsatHeatConductivity(double const t,
-                                          ProcessLib::SpatialPosition const& x,
-                                          double const Sw,
-                                          double const lambda_pm_dry,
-                                          double const lambda_pm_wet) const;
+    double calculateUnsatHeatConductivity(
+        double const t,
+        ParameterLib::SpatialPosition const& x,
+        double const Sw,
+        double const lambda_pm_dry,
+        double const lambda_pm_wet) const;
     /// water vapor saturation pressure
     double calculateSaturatedVaporPressure(const double T) const;
     /// partial water vapor pressure in nonwetting phase
diff --git a/ProcessLib/ThermalTwoPhaseFlowWithPP/ThermalTwoPhaseFlowWithPPProcess.cpp b/ProcessLib/ThermalTwoPhaseFlowWithPP/ThermalTwoPhaseFlowWithPPProcess.cpp
index a89fa3b1920fbeb933b22b2d532c0efd3c83d764..a448deb03052d86a35a808e849f6cc0f36cb121c 100644
--- a/ProcessLib/ThermalTwoPhaseFlowWithPP/ThermalTwoPhaseFlowWithPPProcess.cpp
+++ b/ProcessLib/ThermalTwoPhaseFlowWithPP/ThermalTwoPhaseFlowWithPPProcess.cpp
@@ -27,7 +27,7 @@ namespace ThermalTwoPhaseFlowWithPP
 ThermalTwoPhaseFlowWithPPProcess::ThermalTwoPhaseFlowWithPPProcess(
     MeshLib::Mesh& mesh,
     std::unique_ptr<AbstractJacobianAssembler>&& jacobian_assembler,
-    std::vector<std::unique_ptr<ParameterBase>> const& parameters,
+    std::vector<std::unique_ptr<ParameterLib::ParameterBase>> const& parameters,
     unsigned const integration_order,
     std::vector<std::vector<std::reference_wrapper<ProcessVariable>>>&&
         process_variables,
diff --git a/ProcessLib/ThermalTwoPhaseFlowWithPP/ThermalTwoPhaseFlowWithPPProcess.h b/ProcessLib/ThermalTwoPhaseFlowWithPP/ThermalTwoPhaseFlowWithPPProcess.h
index d4aeb57f12b801537adaf8a11826f5ce9e73c1f4..5cac5af027f2b9257648b9c5eabd9083d6f0c583 100644
--- a/ProcessLib/ThermalTwoPhaseFlowWithPP/ThermalTwoPhaseFlowWithPPProcess.h
+++ b/ProcessLib/ThermalTwoPhaseFlowWithPP/ThermalTwoPhaseFlowWithPPProcess.h
@@ -40,7 +40,8 @@ public:
     ThermalTwoPhaseFlowWithPPProcess(
         MeshLib::Mesh& mesh,
         std::unique_ptr<AbstractJacobianAssembler>&& jacobian_assembler,
-        std::vector<std::unique_ptr<ParameterBase>> const& parameters,
+        std::vector<std::unique_ptr<ParameterLib::ParameterBase>> const&
+            parameters,
         unsigned const integration_order,
         std::vector<std::vector<std::reference_wrapper<ProcessVariable>>>&&
             process_variables,
diff --git a/ProcessLib/ThermalTwoPhaseFlowWithPP/ThermalTwoPhaseFlowWithPPProcessData.h b/ProcessLib/ThermalTwoPhaseFlowWithPP/ThermalTwoPhaseFlowWithPPProcessData.h
index fce7cd756476be3273499ded034d7d210f8bf3d4..204d9e81762b44433d3e08d7e20a6626ffb94624 100644
--- a/ProcessLib/ThermalTwoPhaseFlowWithPP/ThermalTwoPhaseFlowWithPPProcessData.h
+++ b/ProcessLib/ThermalTwoPhaseFlowWithPP/ThermalTwoPhaseFlowWithPPProcessData.h
@@ -24,10 +24,10 @@ struct ThermalTwoPhaseFlowWithPPProcessData
         Eigen::VectorXd const specific_body_force_,
         bool const has_gravity_,
         bool const has_mass_lumping_,
-        Parameter<double> const& diffusion_coeff_component_b_,
-        Parameter<double> const& diffusion_coeff_component_a_,
-        Parameter<double> const& density_solid_,
-        Parameter<double> const& latent_heat_evaporation_,
+        ParameterLib::Parameter<double> const& diffusion_coeff_component_b_,
+        ParameterLib::Parameter<double> const& diffusion_coeff_component_a_,
+        ParameterLib::Parameter<double> const& density_solid_,
+        ParameterLib::Parameter<double> const& latent_heat_evaporation_,
         std::unique_ptr<ThermalTwoPhaseFlowWithPPMaterialProperties>&&
             material_)
         : specific_body_force(specific_body_force_),
@@ -68,10 +68,10 @@ struct ThermalTwoPhaseFlowWithPPProcessData
 
     bool const has_gravity;
     bool const has_mass_lumping;
-    Parameter<double> const& diffusion_coeff_component_b;
-    Parameter<double> const& diffusion_coeff_component_a;
-    Parameter<double> const& density_solid;
-    Parameter<double> const& latent_heat_evaporation;
+    ParameterLib::Parameter<double> const& diffusion_coeff_component_b;
+    ParameterLib::Parameter<double> const& diffusion_coeff_component_a;
+    ParameterLib::Parameter<double> const& density_solid;
+    ParameterLib::Parameter<double> const& latent_heat_evaporation;
     std::unique_ptr<ThermalTwoPhaseFlowWithPPMaterialProperties> material;
 };
 
diff --git a/ProcessLib/ThermoMechanicalPhaseField/CMakeLists.txt b/ProcessLib/ThermoMechanicalPhaseField/CMakeLists.txt
index d13bd372521a1cd80b1562b4ca2ef186a97cf59b..9151b31a37f2f8e90ed9f7272605f2e23a1081b6 100644
--- a/ProcessLib/ThermoMechanicalPhaseField/CMakeLists.txt
+++ b/ProcessLib/ThermoMechanicalPhaseField/CMakeLists.txt
@@ -4,6 +4,9 @@ add_library(ThermoMechanicalPhaseField ${SOURCES})
 if(BUILD_SHARED_LIBS)
     install(TARGETS ThermoMechanicalPhaseField LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR})
 endif()
-target_link_libraries(ThermoMechanicalPhaseField PUBLIC ProcessLib)
+target_link_libraries(ThermoMechanicalPhaseField
+    PUBLIC ProcessLib
+    PRIVATE ParameterLib
+)
 
 include(Tests.cmake)
diff --git a/ProcessLib/ThermoMechanicalPhaseField/CreateThermoMechanicalPhaseFieldProcess.cpp b/ProcessLib/ThermoMechanicalPhaseField/CreateThermoMechanicalPhaseFieldProcess.cpp
index b51104304ab685355a5145e5c695d309b58ec817..3b2f6e810fb22f6c64c7d021d5ec2fe793ff3039 100644
--- a/ProcessLib/ThermoMechanicalPhaseField/CreateThermoMechanicalPhaseFieldProcess.cpp
+++ b/ProcessLib/ThermoMechanicalPhaseField/CreateThermoMechanicalPhaseFieldProcess.cpp
@@ -13,6 +13,7 @@
 
 #include "MaterialLib/SolidModels/CreateConstitutiveRelation.h"
 #include "MaterialLib/SolidModels/MechanicsBase.h"
+#include "ParameterLib/Utils.h"
 #include "ProcessLib/Output/CreateSecondaryVariables.h"
 #include "ProcessLib/Utils/ProcessUtils.h"
 
@@ -28,7 +29,7 @@ std::unique_ptr<Process> createThermoMechanicalPhaseFieldProcess(
     MeshLib::Mesh& mesh,
     std::unique_ptr<ProcessLib::AbstractJacobianAssembler>&& jacobian_assembler,
     std::vector<ProcessVariable> const& variables,
-    std::vector<std::unique_ptr<ParameterBase>> const& parameters,
+    std::vector<std::unique_ptr<ParameterLib::ParameterBase>> const& parameters,
     unsigned const integration_order,
     BaseLib::ConfigTree const& config)
 {
@@ -122,42 +123,43 @@ std::unique_ptr<Process> createThermoMechanicalPhaseFieldProcess(
         config.getConfigSubtree("thermal_parameters");
 
     // Residual stiffness
-    auto& residual_stiffness = findParameter<double>(
+    auto& residual_stiffness = ParameterLib::findParameter<double>(
         phasefield_parameters_config,
         //! \ogs_file_param_special{prj__processes__process__THERMO_MECHANICAL_PHASE_FIELD__phasefield_parameters__residual_stiffness}
         "residual_stiffness", parameters, 1);
     DBUG("Use '%s' as residual stiffness.", residual_stiffness.name.c_str());
 
     // Crack resistance
-    auto& crack_resistance = findParameter<double>(
+    auto& crack_resistance = ParameterLib::findParameter<double>(
         phasefield_parameters_config,
         //! \ogs_file_param_special{prj__processes__process__THERMO_MECHANICAL_PHASE_FIELD__phasefield_parameters__crack_resistance}
         "crack_resistance", parameters, 1);
     DBUG("Use '%s' as crack resistance.", crack_resistance.name.c_str());
 
     // Crack length scale
-    auto& crack_length_scale = findParameter<double>(
+    auto& crack_length_scale = ParameterLib::findParameter<double>(
         phasefield_parameters_config,
         //! \ogs_file_param_special{prj__processes__process__THERMO_MECHANICAL_PHASE_FIELD__phasefield_parameters__crack_length_scale}
         "crack_length_scale", parameters, 1);
     DBUG("Use '%s' as crack length scale.", crack_length_scale.name.c_str());
 
     // Kinetic coefficient
-    auto& kinetic_coefficient = findParameter<double>(
+    auto& kinetic_coefficient = ParameterLib::findParameter<double>(
         phasefield_parameters_config,
         //! \ogs_file_param_special{prj__processes__process__THERMO_MECHANICAL_PHASE_FIELD__phasefield_parameters__kinetic_coefficient}
         "kinetic_coefficient", parameters, 1);
     DBUG("Use '%s' as kinetic coefficient.", kinetic_coefficient.name.c_str());
 
     // Solid density
-    auto& solid_density = findParameter<double>(
+    auto& solid_density = ParameterLib::findParameter<double>(
         config,
         //! \ogs_file_param_special{prj__processes__process__THERMO_MECHANICAL_PHASE_FIELD__reference_solid_density}
         "solid_density", parameters, 1);
     DBUG("Use '%s' as solid density parameter.", solid_density.name.c_str());
 
     // Linear thermal expansion coefficient
-    auto& linear_thermal_expansion_coefficient = findParameter<double>(
+    auto& linear_thermal_expansion_coefficient = ParameterLib::findParameter<
+        double>(
         thermal_parameters_config,
         //! \ogs_file_param_special{prj__processes__process__THERMO_MECHANICAL_PHASE_FIELD__thermal_parameters__linear_thermal_expansion_coefficient}
         "linear_thermal_expansion_coefficient", parameters, 1);
@@ -165,7 +167,7 @@ std::unique_ptr<Process> createThermoMechanicalPhaseFieldProcess(
          linear_thermal_expansion_coefficient.name.c_str());
 
     // Specific heat capacity
-    auto& specific_heat_capacity = findParameter<double>(
+    auto& specific_heat_capacity = ParameterLib::findParameter<double>(
         thermal_parameters_config,
         //! \ogs_file_param_special{prj__processes__process__THERMO_MECHANICAL_PHASE_FIELD__thermal_parameters__specific_heat_capacity}
         "specific_heat_capacity", parameters, 1);
@@ -173,14 +175,14 @@ std::unique_ptr<Process> createThermoMechanicalPhaseFieldProcess(
          specific_heat_capacity.name.c_str());
 
     // Thermal conductivity
-    auto& thermal_conductivity = findParameter<double>(
+    auto& thermal_conductivity = ParameterLib::findParameter<double>(
         thermal_parameters_config,
         //! \ogs_file_param_special{prj__processes__process__THERMO_MECHANICAL_PHASE_FIELD__thermal_parameters__thermal_conductivity}
         "thermal_conductivity", parameters, 1);
     DBUG("Use '%s' as thermal conductivity parameter.",
          thermal_conductivity.name.c_str());
     // Residual thermal conductivity
-    auto& residual_thermal_conductivity = findParameter<double>(
+    auto& residual_thermal_conductivity = ParameterLib::findParameter<double>(
         thermal_parameters_config,
         //! \ogs_file_param_special{prj__processes__process__THERMO_MECHANICAL_PHASE_FIELD__thermal_parameters__residual_thermal_conductivity}
         "residual_thermal_conductivity", parameters, 1);
@@ -245,7 +247,7 @@ template std::unique_ptr<Process> createThermoMechanicalPhaseFieldProcess<2>(
     MeshLib::Mesh& mesh,
     std::unique_ptr<ProcessLib::AbstractJacobianAssembler>&& jacobian_assembler,
     std::vector<ProcessVariable> const& variables,
-    std::vector<std::unique_ptr<ParameterBase>> const& parameters,
+    std::vector<std::unique_ptr<ParameterLib::ParameterBase>> const& parameters,
     unsigned const integration_order,
     BaseLib::ConfigTree const& config);
 
@@ -253,7 +255,7 @@ template std::unique_ptr<Process> createThermoMechanicalPhaseFieldProcess<3>(
     MeshLib::Mesh& mesh,
     std::unique_ptr<ProcessLib::AbstractJacobianAssembler>&& jacobian_assembler,
     std::vector<ProcessVariable> const& variables,
-    std::vector<std::unique_ptr<ParameterBase>> const& parameters,
+    std::vector<std::unique_ptr<ParameterLib::ParameterBase>> const& parameters,
     unsigned const integration_order,
     BaseLib::ConfigTree const& config);
 
diff --git a/ProcessLib/ThermoMechanicalPhaseField/CreateThermoMechanicalPhaseFieldProcess.h b/ProcessLib/ThermoMechanicalPhaseField/CreateThermoMechanicalPhaseFieldProcess.h
index de1135e1d8956eb23248feeb92ec9f3b8ba2e947..fc79bd9a5f2f6518d4d0d659d63574315ec062d7 100644
--- a/ProcessLib/ThermoMechanicalPhaseField/CreateThermoMechanicalPhaseFieldProcess.h
+++ b/ProcessLib/ThermoMechanicalPhaseField/CreateThermoMechanicalPhaseFieldProcess.h
@@ -20,10 +20,13 @@ namespace MeshLib
 {
 class Mesh;
 }
+namespace ParameterLib
+{
+struct ParameterBase;
+}
 namespace ProcessLib
 {
 class AbstractJacobianAssembler;
-struct ParameterBase;
 class Process;
 class ProcessVariable;
 }  // namespace ProcessLib
@@ -37,7 +40,7 @@ std::unique_ptr<Process> createThermoMechanicalPhaseFieldProcess(
     MeshLib::Mesh& mesh,
     std::unique_ptr<ProcessLib::AbstractJacobianAssembler>&& jacobian_assembler,
     std::vector<ProcessVariable> const& variables,
-    std::vector<std::unique_ptr<ParameterBase>> const& parameters,
+    std::vector<std::unique_ptr<ParameterLib::ParameterBase>> const& parameters,
     unsigned const integration_order,
     BaseLib::ConfigTree const& config);
 
@@ -46,7 +49,7 @@ createThermoMechanicalPhaseFieldProcess<2>(
     MeshLib::Mesh& mesh,
     std::unique_ptr<ProcessLib::AbstractJacobianAssembler>&& jacobian_assembler,
     std::vector<ProcessVariable> const& variables,
-    std::vector<std::unique_ptr<ParameterBase>> const& parameters,
+    std::vector<std::unique_ptr<ParameterLib::ParameterBase>> const& parameters,
     unsigned const integration_order,
     BaseLib::ConfigTree const& config);
 
@@ -55,7 +58,7 @@ createThermoMechanicalPhaseFieldProcess<3>(
     MeshLib::Mesh& mesh,
     std::unique_ptr<ProcessLib::AbstractJacobianAssembler>&& jacobian_assembler,
     std::vector<ProcessVariable> const& variables,
-    std::vector<std::unique_ptr<ParameterBase>> const& parameters,
+    std::vector<std::unique_ptr<ParameterLib::ParameterBase>> const& parameters,
     unsigned const integration_order,
     BaseLib::ConfigTree const& config);
 
diff --git a/ProcessLib/ThermoMechanicalPhaseField/ThermoMechanicalPhaseFieldFEM-impl.h b/ProcessLib/ThermoMechanicalPhaseField/ThermoMechanicalPhaseFieldFEM-impl.h
index a8d23a00acd37e1a1394c0e20bedcad1b038e946..e1551a278e81654fff43fb7cab344af68fe8840d 100644
--- a/ProcessLib/ThermoMechanicalPhaseField/ThermoMechanicalPhaseFieldFEM-impl.h
+++ b/ProcessLib/ThermoMechanicalPhaseField/ThermoMechanicalPhaseFieldFEM-impl.h
@@ -95,7 +95,7 @@ void ThermoMechanicalPhaseFieldLocalAssembler<ShapeFunction, IntegrationMethod,
 
     double const& dt = _process_data.dt;
 
-    SpatialPosition x_position;
+    ParameterLib::SpatialPosition x_position;
     x_position.setElementID(_element.getID());
 
     int const n_integration_points = _integration_method.getNumberOfPoints();
@@ -202,7 +202,7 @@ void ThermoMechanicalPhaseFieldLocalAssembler<ShapeFunction, IntegrationMethod,
 
     double const& dt = _process_data.dt;
 
-    SpatialPosition x_position;
+    ParameterLib::SpatialPosition x_position;
     x_position.setElementID(_element.getID());
 
     int const n_integration_points = _integration_method.getNumberOfPoints();
@@ -297,7 +297,7 @@ void ThermoMechanicalPhaseFieldLocalAssembler<ShapeFunction, IntegrationMethod,
         typename ShapeMatricesType::template VectorType<phasefield_size>>(
         local_b_data, phasefield_size);
 
-    SpatialPosition x_position;
+    ParameterLib::SpatialPosition x_position;
     x_position.setElementID(_element.getID());
 
     int const n_integration_points = _integration_method.getNumberOfPoints();
diff --git a/ProcessLib/ThermoMechanicalPhaseField/ThermoMechanicalPhaseFieldFEM.h b/ProcessLib/ThermoMechanicalPhaseField/ThermoMechanicalPhaseFieldFEM.h
index ba4b463f951b2ed516890064636e34932b14bb6c..7d6f68728dfceb250ee0f81d55160def8e8fdef3 100644
--- a/ProcessLib/ThermoMechanicalPhaseField/ThermoMechanicalPhaseFieldFEM.h
+++ b/ProcessLib/ThermoMechanicalPhaseField/ThermoMechanicalPhaseFieldFEM.h
@@ -18,9 +18,9 @@
 #include "MathLib/LinAlg/Eigen/EigenMapTools.h"
 #include "NumLib/Fem/FiniteElement/TemplateIsoparametric.h"
 #include "NumLib/Fem/ShapeMatrixPolicy.h"
+#include "ParameterLib/SpatialPosition.h"
 #include "ProcessLib/Deformation/BMatrixPolicy.h"
 #include "ProcessLib/Deformation/LinearBMatrix.h"
-#include "ProcessLib/Parameter/SpatialPosition.h"
 #include "ProcessLib/Utils/InitShapeMatrices.h"
 
 #include "LocalAssemblerInterface.h"
@@ -72,7 +72,7 @@ struct IntegrationPointData final
 
     template <typename DisplacementVectorType>
     void updateConstitutiveRelation(double const t,
-                                    SpatialPosition const& x,
+                                    ParameterLib::SpatialPosition const& x,
                                     double const /*dt*/,
                                     DisplacementVectorType const& /*u*/,
                                     double const alpha,
@@ -169,7 +169,7 @@ public:
                               IntegrationMethod, DisplacementDim>(
                 e, is_axially_symmetric, _integration_method);
 
-        SpatialPosition x_position;
+        ParameterLib::SpatialPosition x_position;
         x_position.setElementID(_element.getID());
 
         for (unsigned ip = 0; ip < n_integration_points; ip++)
diff --git a/ProcessLib/ThermoMechanicalPhaseField/ThermoMechanicalPhaseFieldProcess-impl.h b/ProcessLib/ThermoMechanicalPhaseField/ThermoMechanicalPhaseFieldProcess-impl.h
index eb37e7d58a9c9cd7c38ad8fd75013dc2ff152968..d8f13f88c7eaf8424b12c73a0c4a1d0230e117b0 100644
--- a/ProcessLib/ThermoMechanicalPhaseField/ThermoMechanicalPhaseFieldProcess-impl.h
+++ b/ProcessLib/ThermoMechanicalPhaseField/ThermoMechanicalPhaseFieldProcess-impl.h
@@ -29,7 +29,8 @@ ThermoMechanicalPhaseFieldProcess<DisplacementDim>::
         MeshLib::Mesh& mesh,
         std::unique_ptr<ProcessLib::AbstractJacobianAssembler>&&
             jacobian_assembler,
-        std::vector<std::unique_ptr<ParameterBase>> const& parameters,
+        std::vector<std::unique_ptr<ParameterLib::ParameterBase>> const&
+            parameters,
         unsigned const integration_order,
         std::vector<std::vector<std::reference_wrapper<ProcessVariable>>>&&
             process_variables,
diff --git a/ProcessLib/ThermoMechanicalPhaseField/ThermoMechanicalPhaseFieldProcess.h b/ProcessLib/ThermoMechanicalPhaseField/ThermoMechanicalPhaseFieldProcess.h
index 1da3a9d818676b086dd7e3c36bd5129ecfc5794f..85fbcc32cb036f60133ee6819cc9e65e58b32750 100644
--- a/ProcessLib/ThermoMechanicalPhaseField/ThermoMechanicalPhaseFieldProcess.h
+++ b/ProcessLib/ThermoMechanicalPhaseField/ThermoMechanicalPhaseFieldProcess.h
@@ -57,7 +57,8 @@ public:
         MeshLib::Mesh& mesh,
         std::unique_ptr<ProcessLib::AbstractJacobianAssembler>&&
             jacobian_assembler,
-        std::vector<std::unique_ptr<ParameterBase>> const& parameters,
+        std::vector<std::unique_ptr<ParameterLib::ParameterBase>> const&
+            parameters,
         unsigned const integration_order,
         std::vector<std::vector<std::reference_wrapper<ProcessVariable>>>&&
             process_variables,
diff --git a/ProcessLib/ThermoMechanicalPhaseField/ThermoMechanicalPhaseFieldProcessData.h b/ProcessLib/ThermoMechanicalPhaseField/ThermoMechanicalPhaseFieldProcessData.h
index 14aacd34faf89b39e0e7369dbe604026b6a9e17b..8e9ba034e7cd42ad2c39f6509722d4e1a39dc441 100644
--- a/ProcessLib/ThermoMechanicalPhaseField/ThermoMechanicalPhaseFieldProcessData.h
+++ b/ProcessLib/ThermoMechanicalPhaseField/ThermoMechanicalPhaseFieldProcessData.h
@@ -38,15 +38,16 @@ struct ThermoMechanicalPhaseFieldProcessData
                  std::unique_ptr<
                      MaterialLib::Solids::MechanicsBase<DisplacementDim>>>&&
             solid_materials_,
-        Parameter<double> const& residual_stiffness_,
-        Parameter<double> const& crack_resistance_,
-        Parameter<double> const& crack_length_scale_,
-        Parameter<double> const& kinetic_coefficient_,
-        Parameter<double> const& solid_density_,
-        Parameter<double> const& linear_thermal_expansion_coefficient_,
-        Parameter<double> const& specific_heat_capacity_,
-        Parameter<double> const& thermal_conductivity_,
-        Parameter<double> const& residual_thermal_conductivity_,
+        ParameterLib::Parameter<double> const& residual_stiffness_,
+        ParameterLib::Parameter<double> const& crack_resistance_,
+        ParameterLib::Parameter<double> const& crack_length_scale_,
+        ParameterLib::Parameter<double> const& kinetic_coefficient_,
+        ParameterLib::Parameter<double> const& solid_density_,
+        ParameterLib::Parameter<double> const&
+            linear_thermal_expansion_coefficient_,
+        ParameterLib::Parameter<double> const& specific_heat_capacity_,
+        ParameterLib::Parameter<double> const& thermal_conductivity_,
+        ParameterLib::Parameter<double> const& residual_thermal_conductivity_,
         double const reference_temperature_,
         Eigen::Matrix<double, DisplacementDim, 1> const& specific_body_force_)
         : material_ids(material_ids_),
@@ -84,15 +85,15 @@ struct ThermoMechanicalPhaseFieldProcessData
     std::map<int, std::unique_ptr<
                       MaterialLib::Solids::MechanicsBase<DisplacementDim>>>
         solid_materials;
-    Parameter<double> const& residual_stiffness;
-    Parameter<double> const& crack_resistance;
-    Parameter<double> const& crack_length_scale;
-    Parameter<double> const& kinetic_coefficient;
-    Parameter<double> const& solid_density;
-    Parameter<double> const& linear_thermal_expansion_coefficient;
-    Parameter<double> const& specific_heat_capacity;
-    Parameter<double> const& thermal_conductivity;
-    Parameter<double> const& residual_thermal_conductivity;
+    ParameterLib::Parameter<double> const& residual_stiffness;
+    ParameterLib::Parameter<double> const& crack_resistance;
+    ParameterLib::Parameter<double> const& crack_length_scale;
+    ParameterLib::Parameter<double> const& kinetic_coefficient;
+    ParameterLib::Parameter<double> const& solid_density;
+    ParameterLib::Parameter<double> const& linear_thermal_expansion_coefficient;
+    ParameterLib::Parameter<double> const& specific_heat_capacity;
+    ParameterLib::Parameter<double> const& thermal_conductivity;
+    ParameterLib::Parameter<double> const& residual_thermal_conductivity;
     double const reference_temperature;
     Eigen::Matrix<double, DisplacementDim, 1> const specific_body_force;
     double dt;
diff --git a/ProcessLib/ThermoMechanics/CMakeLists.txt b/ProcessLib/ThermoMechanics/CMakeLists.txt
index 7368f6f8d2e09f33211fdc24f195f567049c0e95..7b4955907f37fca219756b148c24d119b568052a 100644
--- a/ProcessLib/ThermoMechanics/CMakeLists.txt
+++ b/ProcessLib/ThermoMechanics/CMakeLists.txt
@@ -4,6 +4,9 @@ add_library(ThermoMechanics ${SOURCES})
 if(BUILD_SHARED_LIBS)
     install(TARGETS ThermoMechanics LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR})
 endif()
-target_link_libraries(ThermoMechanics PUBLIC ProcessLib)
+target_link_libraries(ThermoMechanics
+    PUBLIC ProcessLib
+    PRIVATE ParameterLib
+)
 
 include(Tests.cmake)
diff --git a/ProcessLib/ThermoMechanics/CreateThermoMechanicsProcess.cpp b/ProcessLib/ThermoMechanics/CreateThermoMechanicsProcess.cpp
index 6e62d363d128a3ee25f9315730167eab25a4d2bc..38d689bdd7a837158b674e4a0256f1c626c78367 100644
--- a/ProcessLib/ThermoMechanics/CreateThermoMechanicsProcess.cpp
+++ b/ProcessLib/ThermoMechanics/CreateThermoMechanicsProcess.cpp
@@ -11,8 +11,9 @@
 
 #include <cassert>
 
-#include "MaterialLib/SolidModels/MechanicsBase.h"
 #include "MaterialLib/SolidModels/CreateConstitutiveRelation.h"
+#include "MaterialLib/SolidModels/MechanicsBase.h"
+#include "ParameterLib/Utils.h"
 #include "ProcessLib/Output/CreateSecondaryVariables.h"
 #include "ProcessLib/Utils/ProcessUtils.h"
 
@@ -28,7 +29,7 @@ std::unique_ptr<Process> createThermoMechanicsProcess(
     MeshLib::Mesh& mesh,
     std::unique_ptr<ProcessLib::AbstractJacobianAssembler>&& jacobian_assembler,
     std::vector<ProcessVariable> const& variables,
-    std::vector<std::unique_ptr<ParameterBase>> const& parameters,
+    std::vector<std::unique_ptr<ParameterLib::ParameterBase>> const& parameters,
     unsigned const integration_order,
     BaseLib::ConfigTree const& config)
 {
@@ -107,7 +108,7 @@ std::unique_ptr<Process> createThermoMechanicsProcess(
             parameters, config);
 
     // Reference solid density
-    auto& reference_solid_density = findParameter<double>(
+    auto& reference_solid_density = ParameterLib::findParameter<double>(
         config,
         //! \ogs_file_param_special{prj__processes__process__THERMO_MECHANICS__reference_solid_density}
         "reference_solid_density", parameters, 1);
@@ -115,21 +116,22 @@ std::unique_ptr<Process> createThermoMechanicsProcess(
          reference_solid_density.name.c_str());
 
     // Linear thermal expansion coefficient
-    auto& linear_thermal_expansion_coefficient = findParameter<double>(
+    auto& linear_thermal_expansion_coefficient = ParameterLib::findParameter<
+        double>(
         config,
         //! \ogs_file_param_special{prj__processes__process__THERMO_MECHANICS__linear_thermal_expansion_coefficient}
         "linear_thermal_expansion_coefficient", parameters, 1);
     DBUG("Use '%s' as linear thermal expansion coefficient.",
          linear_thermal_expansion_coefficient.name.c_str());
     // Specific heat capacity
-    auto& specific_heat_capacity = findParameter<double>(
+    auto& specific_heat_capacity = ParameterLib::findParameter<double>(
         config,
         //! \ogs_file_param_special{prj__processes__process__THERMO_MECHANICS__specific_heat_capacity}
         "specific_heat_capacity", parameters, 1);
     DBUG("Use '%s' as specific heat capacity parameter.",
          specific_heat_capacity.name.c_str());
     // Thermal conductivity // TODO To be changed as tensor input.
-    auto& thermal_conductivity = findParameter<double>(
+    auto& thermal_conductivity = ParameterLib::findParameter<double>(
         config,
         //! \ogs_file_param_special{prj__processes__process__THERMO_MECHANICS__thermal_conductivity}
         "thermal_conductivity", parameters, 1);
@@ -180,7 +182,7 @@ template std::unique_ptr<Process> createThermoMechanicsProcess<2>(
     MeshLib::Mesh& mesh,
     std::unique_ptr<ProcessLib::AbstractJacobianAssembler>&& jacobian_assembler,
     std::vector<ProcessVariable> const& variables,
-    std::vector<std::unique_ptr<ParameterBase>> const& parameters,
+    std::vector<std::unique_ptr<ParameterLib::ParameterBase>> const& parameters,
     unsigned const integration_order,
     BaseLib::ConfigTree const& config);
 
@@ -188,7 +190,7 @@ template std::unique_ptr<Process> createThermoMechanicsProcess<3>(
     MeshLib::Mesh& mesh,
     std::unique_ptr<ProcessLib::AbstractJacobianAssembler>&& jacobian_assembler,
     std::vector<ProcessVariable> const& variables,
-    std::vector<std::unique_ptr<ParameterBase>> const& parameters,
+    std::vector<std::unique_ptr<ParameterLib::ParameterBase>> const& parameters,
     unsigned const integration_order,
     BaseLib::ConfigTree const& config);
 
diff --git a/ProcessLib/ThermoMechanics/CreateThermoMechanicsProcess.h b/ProcessLib/ThermoMechanics/CreateThermoMechanicsProcess.h
index bf12092369ed53f36293b8c798fb124e02ea910b..30d0c79d58a0e8b3734ba0785648bed277bb9bc6 100644
--- a/ProcessLib/ThermoMechanics/CreateThermoMechanicsProcess.h
+++ b/ProcessLib/ThermoMechanics/CreateThermoMechanicsProcess.h
@@ -20,10 +20,13 @@ namespace MeshLib
 {
 class Mesh;
 }
+namespace ParameterLib
+{
+struct ParameterBase;
+}
 namespace ProcessLib
 {
 class AbstractJacobianAssembler;
-struct ParameterBase;
 class Process;
 class ProcessVariable;
 }
@@ -37,7 +40,7 @@ std::unique_ptr<Process> createThermoMechanicsProcess(
     MeshLib::Mesh& mesh,
     std::unique_ptr<ProcessLib::AbstractJacobianAssembler>&& jacobian_assembler,
     std::vector<ProcessVariable> const& variables,
-    std::vector<std::unique_ptr<ParameterBase>> const& parameters,
+    std::vector<std::unique_ptr<ParameterLib::ParameterBase>> const& parameters,
     unsigned const integration_order,
     BaseLib::ConfigTree const& config);
 
@@ -45,7 +48,7 @@ extern template std::unique_ptr<Process> createThermoMechanicsProcess<2>(
     MeshLib::Mesh& mesh,
     std::unique_ptr<ProcessLib::AbstractJacobianAssembler>&& jacobian_assembler,
     std::vector<ProcessVariable> const& variables,
-    std::vector<std::unique_ptr<ParameterBase>> const& parameters,
+    std::vector<std::unique_ptr<ParameterLib::ParameterBase>> const& parameters,
     unsigned const integration_order,
     BaseLib::ConfigTree const& config);
 
@@ -53,7 +56,7 @@ extern template std::unique_ptr<Process> createThermoMechanicsProcess<3>(
     MeshLib::Mesh& mesh,
     std::unique_ptr<ProcessLib::AbstractJacobianAssembler>&& jacobian_assembler,
     std::vector<ProcessVariable> const& variables,
-    std::vector<std::unique_ptr<ParameterBase>> const& parameters,
+    std::vector<std::unique_ptr<ParameterLib::ParameterBase>> const& parameters,
     unsigned const integration_order,
     BaseLib::ConfigTree const& config);
 
diff --git a/ProcessLib/ThermoMechanics/ThermoMechanicsFEM.h b/ProcessLib/ThermoMechanics/ThermoMechanicsFEM.h
index 64f4d650cba336e909915f241214f1786bfa4275..36172c27fcfcf04cf1a479409ef8329d163ab79b 100644
--- a/ProcessLib/ThermoMechanics/ThermoMechanicsFEM.h
+++ b/ProcessLib/ThermoMechanics/ThermoMechanicsFEM.h
@@ -18,9 +18,9 @@
 #include "NumLib/Extrapolation/ExtrapolatableElement.h"
 #include "NumLib/Fem/FiniteElement/TemplateIsoparametric.h"
 #include "NumLib/Fem/ShapeMatrixPolicy.h"
+#include "ParameterLib/Parameter.h"
 #include "ProcessLib/Deformation/BMatrixPolicy.h"
 #include "ProcessLib/Deformation/LinearBMatrix.h"
-#include "ProcessLib/Parameter/Parameter.h"
 #include "ProcessLib/Utils/InitShapeMatrices.h"
 
 #include "LocalAssemblerInterface.h"
@@ -154,7 +154,7 @@ public:
             ip_data.eps_m.setZero(kelvin_vector_size);
             ip_data.eps_m_prev.setZero(kelvin_vector_size);
 
-            SpatialPosition x_position;
+            ParameterLib::SpatialPosition x_position;
             x_position.setElementID(_element.getID());
             ip_data.solid_density =
                 _process_data.reference_solid_density(0, x_position)[0];
@@ -254,7 +254,7 @@ public:
         unsigned const n_integration_points =
             _integration_method.getNumberOfPoints();
 
-        SpatialPosition x_position;
+        ParameterLib::SpatialPosition x_position;
         x_position.setElementID(_element.getID());
 
         for (unsigned ip = 0; ip < n_integration_points; ip++)
diff --git a/ProcessLib/ThermoMechanics/ThermoMechanicsProcess.cpp b/ProcessLib/ThermoMechanics/ThermoMechanicsProcess.cpp
index c819806691ca022883bd20a5c9140e839e4bb153..8221e64e1c7f8f65046bd04b22b9564e856e32b3 100644
--- a/ProcessLib/ThermoMechanics/ThermoMechanicsProcess.cpp
+++ b/ProcessLib/ThermoMechanics/ThermoMechanicsProcess.cpp
@@ -24,7 +24,7 @@ template <int DisplacementDim>
 ThermoMechanicsProcess<DisplacementDim>::ThermoMechanicsProcess(
     MeshLib::Mesh& mesh,
     std::unique_ptr<ProcessLib::AbstractJacobianAssembler>&& jacobian_assembler,
-    std::vector<std::unique_ptr<ParameterBase>> const& parameters,
+    std::vector<std::unique_ptr<ParameterLib::ParameterBase>> const& parameters,
     unsigned const integration_order,
     std::vector<std::vector<std::reference_wrapper<ProcessVariable>>>&&
         process_variables,
diff --git a/ProcessLib/ThermoMechanics/ThermoMechanicsProcess.h b/ProcessLib/ThermoMechanics/ThermoMechanicsProcess.h
index 869e7e7e41cc8ed2c880e481448d067bdded7d13..9477ff3d14766584ed07d1795543993a574167df 100644
--- a/ProcessLib/ThermoMechanics/ThermoMechanicsProcess.h
+++ b/ProcessLib/ThermoMechanics/ThermoMechanicsProcess.h
@@ -66,7 +66,8 @@ public:
         MeshLib::Mesh& mesh,
         std::unique_ptr<ProcessLib::AbstractJacobianAssembler>&&
             jacobian_assembler,
-        std::vector<std::unique_ptr<ParameterBase>> const& parameters,
+        std::vector<std::unique_ptr<ParameterLib::ParameterBase>> const&
+            parameters,
         unsigned const integration_order,
         std::vector<std::vector<std::reference_wrapper<ProcessVariable>>>&&
             process_variables,
diff --git a/ProcessLib/ThermoMechanics/ThermoMechanicsProcessData.h b/ProcessLib/ThermoMechanics/ThermoMechanicsProcessData.h
index b6b90df54c520451ce0c1f7b8223dd8373894e80..f1dd907c12bd1c07a2890db57beba37fe563ab46 100644
--- a/ProcessLib/ThermoMechanics/ThermoMechanicsProcessData.h
+++ b/ProcessLib/ThermoMechanics/ThermoMechanicsProcessData.h
@@ -14,7 +14,7 @@
 
 #include <Eigen/Eigen>
 
-#include "ProcessLib/Parameter/Parameter.h"
+#include "ParameterLib/Parameter.h"
 
 namespace MaterialLib
 {
@@ -37,10 +37,11 @@ struct ThermoMechanicsProcessData
                  std::unique_ptr<
                      MaterialLib::Solids::MechanicsBase<DisplacementDim>>>&&
             solid_materials_,
-        Parameter<double> const& reference_solid_density_,
-        Parameter<double> const& linear_thermal_expansion_coefficient_,
-        Parameter<double> const& specific_heat_capacity_,
-        Parameter<double> const& thermal_conductivity_,
+        ParameterLib::Parameter<double> const& reference_solid_density_,
+        ParameterLib::Parameter<double> const&
+            linear_thermal_expansion_coefficient_,
+        ParameterLib::Parameter<double> const& specific_heat_capacity_,
+        ParameterLib::Parameter<double> const& thermal_conductivity_,
         Eigen::Matrix<double, DisplacementDim, 1> const& specific_body_force_)
         : material_ids(material_ids_),
           solid_materials{std::move(solid_materials_)},
@@ -72,10 +73,10 @@ struct ThermoMechanicsProcessData
         std::unique_ptr<MaterialLib::Solids::MechanicsBase<DisplacementDim>>>
         solid_materials;
 
-    Parameter<double> const& reference_solid_density;
-    Parameter<double> const& linear_thermal_expansion_coefficient;
-    Parameter<double> const& specific_heat_capacity;
-    Parameter<double> const&
+    ParameterLib::Parameter<double> const& reference_solid_density;
+    ParameterLib::Parameter<double> const& linear_thermal_expansion_coefficient;
+    ParameterLib::Parameter<double> const& specific_heat_capacity;
+    ParameterLib::Parameter<double> const&
         thermal_conductivity;  // TODO To be changed as a matrix type variable.
     Eigen::Matrix<double, DisplacementDim, 1> const specific_body_force;
     double dt = 0;
diff --git a/ProcessLib/TwoPhaseFlowWithPP/CMakeLists.txt b/ProcessLib/TwoPhaseFlowWithPP/CMakeLists.txt
index 5b194400ac17e0cda531ce73db8b424c77ee175e..8196b7acf38ea1d9dedaa5b6f25276dab5504b47 100644
--- a/ProcessLib/TwoPhaseFlowWithPP/CMakeLists.txt
+++ b/ProcessLib/TwoPhaseFlowWithPP/CMakeLists.txt
@@ -4,6 +4,9 @@ add_library(TwoPhaseFlowWithPP ${SOURCES})
 if(BUILD_SHARED_LIBS)
     install(TARGETS TwoPhaseFlowWithPP LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR})
 endif()
-target_link_libraries(TwoPhaseFlowWithPP PUBLIC ProcessLib)
+target_link_libraries(TwoPhaseFlowWithPP
+    PUBLIC ProcessLib
+    PRIVATE ParameterLib
+)
 
 include(Tests.cmake)
diff --git a/ProcessLib/TwoPhaseFlowWithPP/CreateTwoPhaseFlowWithPPMaterialProperties.cpp b/ProcessLib/TwoPhaseFlowWithPP/CreateTwoPhaseFlowWithPPMaterialProperties.cpp
index 990d7e062a97ed84634857f89e0dbe90ca7d8c78..51338f5c88ec99faf1ea857ca1880d3af9a058ea 100644
--- a/ProcessLib/TwoPhaseFlowWithPP/CreateTwoPhaseFlowWithPPMaterialProperties.cpp
+++ b/ProcessLib/TwoPhaseFlowWithPP/CreateTwoPhaseFlowWithPPMaterialProperties.cpp
@@ -20,8 +20,8 @@
 #include "MathLib/InterpolationAlgorithms/PiecewiseLinearInterpolation.h"
 #include "MeshLib/Mesh.h"
 #include "MeshLib/PropertyVector.h"
-#include "ProcessLib/Parameter/Parameter.h"
-#include "ProcessLib/Parameter/SpatialPosition.h"
+#include "ParameterLib/Parameter.h"
+#include "ParameterLib/SpatialPosition.h"
 #include "TwoPhaseFlowWithPPMaterialProperties.h"
 
 namespace ProcessLib
@@ -32,7 +32,7 @@ std::unique_ptr<TwoPhaseFlowWithPPMaterialProperties>
 createTwoPhaseFlowWithPPMaterialProperties(
     BaseLib::ConfigTree const& config,
     MeshLib::PropertyVector<int> const* const material_ids,
-    std::vector<std::unique_ptr<ParameterBase>> const& parameters)
+    std::vector<std::unique_ptr<ParameterLib::ParameterBase>> const& parameters)
 {
     DBUG("Reading material properties of two-phase flow process.");
 
diff --git a/ProcessLib/TwoPhaseFlowWithPP/CreateTwoPhaseFlowWithPPMaterialProperties.h b/ProcessLib/TwoPhaseFlowWithPP/CreateTwoPhaseFlowWithPPMaterialProperties.h
index 4c76a9c9f18acd7402f48ba690d00af76413eacb..8ec223ff34d49c6764ecb494caae2238f5c70fb2 100644
--- a/ProcessLib/TwoPhaseFlowWithPP/CreateTwoPhaseFlowWithPPMaterialProperties.h
+++ b/ProcessLib/TwoPhaseFlowWithPP/CreateTwoPhaseFlowWithPPMaterialProperties.h
@@ -24,7 +24,8 @@ std::unique_ptr<TwoPhaseFlowWithPPMaterialProperties>
 createTwoPhaseFlowWithPPMaterialProperties(
     BaseLib::ConfigTree const& config,
     MeshLib::PropertyVector<int> const* const material_ids,
-    std::vector<std::unique_ptr<ParameterBase>> const& parameters);
+    std::vector<std::unique_ptr<ParameterLib::ParameterBase>> const&
+        parameters);
 
 }  // end namespace
 }  // namespace ProcessLib
diff --git a/ProcessLib/TwoPhaseFlowWithPP/CreateTwoPhaseFlowWithPPProcess.cpp b/ProcessLib/TwoPhaseFlowWithPP/CreateTwoPhaseFlowWithPPProcess.cpp
index d4395852be655d130733f5029c58d801f962c000..5b9d540019f168c9059e5e91b548dd26801fa24c 100644
--- a/ProcessLib/TwoPhaseFlowWithPP/CreateTwoPhaseFlowWithPPProcess.cpp
+++ b/ProcessLib/TwoPhaseFlowWithPP/CreateTwoPhaseFlowWithPPProcess.cpp
@@ -10,8 +10,9 @@
 #include <cassert>
 
 #include "MeshLib/MeshGenerators/MeshGenerator.h"
+#include "ParameterLib/ConstantParameter.h"
+#include "ParameterLib/Utils.h"
 #include "ProcessLib/Output/CreateSecondaryVariables.h"
-#include "ProcessLib/Parameter/ConstantParameter.h"
 #include "ProcessLib/Utils/ProcessUtils.h"
 
 #include "CreateTwoPhaseFlowWithPPMaterialProperties.h"
@@ -26,7 +27,7 @@ std::unique_ptr<Process> createTwoPhaseFlowWithPPProcess(
     MeshLib::Mesh& mesh,
     std::unique_ptr<ProcessLib::AbstractJacobianAssembler>&& jacobian_assembler,
     std::vector<ProcessVariable> const& variables,
-    std::vector<std::unique_ptr<ParameterBase>> const& parameters,
+    std::vector<std::unique_ptr<ParameterLib::ParameterBase>> const& parameters,
     unsigned const integration_order,
     BaseLib::ConfigTree const& config,
     std::map<std::string,
@@ -72,7 +73,7 @@ std::unique_ptr<Process> createTwoPhaseFlowWithPPProcess(
     //! \ogs_file_param{prj__processes__process__TWOPHASE_FLOW_PP__mass_lumping}
     auto const mass_lumping = config.getConfigParameter<bool>("mass_lumping");
 
-    auto& temperature = findParameter<double>(
+    auto& temperature = ParameterLib::findParameter<double>(
         config,
         //! \ogs_file_param_special{prj__processes__process__TWOPHASE_FLOW_PP__temperature}
         "temperature", parameters, 1);
diff --git a/ProcessLib/TwoPhaseFlowWithPP/CreateTwoPhaseFlowWithPPProcess.h b/ProcessLib/TwoPhaseFlowWithPP/CreateTwoPhaseFlowWithPPProcess.h
index b54f71fc9fe4883f93dfe97a83fa640f6baa4398..f73dd488d1d89bafbe43e619c9df1c02854d1c3d 100644
--- a/ProcessLib/TwoPhaseFlowWithPP/CreateTwoPhaseFlowWithPPProcess.h
+++ b/ProcessLib/TwoPhaseFlowWithPP/CreateTwoPhaseFlowWithPPProcess.h
@@ -20,7 +20,7 @@ std::unique_ptr<Process> createTwoPhaseFlowWithPPProcess(
     MeshLib::Mesh& mesh,
     std::unique_ptr<ProcessLib::AbstractJacobianAssembler>&& jacobian_assembler,
     std::vector<ProcessVariable> const& variables,
-    std::vector<std::unique_ptr<ParameterBase>> const& parameters,
+    std::vector<std::unique_ptr<ParameterLib::ParameterBase>> const& parameters,
     unsigned const integration_order,
     BaseLib::ConfigTree const& config,
     std::map<std::string,
diff --git a/ProcessLib/TwoPhaseFlowWithPP/TwoPhaseFlowWithPPLocalAssembler-impl.h b/ProcessLib/TwoPhaseFlowWithPP/TwoPhaseFlowWithPPLocalAssembler-impl.h
index 0b417f257f7e16eeda01547fe8c4432e37e6d0e1..c1f720dd8773b3790e1b6be57dd3e595dba14fb4 100644
--- a/ProcessLib/TwoPhaseFlowWithPP/TwoPhaseFlowWithPPLocalAssembler-impl.h
+++ b/ProcessLib/TwoPhaseFlowWithPP/TwoPhaseFlowWithPPLocalAssembler-impl.h
@@ -91,7 +91,7 @@ void TwoPhaseFlowWithPPLocalAssembler<
     unsigned const n_integration_points =
         _integration_method.getNumberOfPoints();
 
-    SpatialPosition pos;
+    ParameterLib::SpatialPosition pos;
     pos.setElementID(_element.getID());
     const int material_id =
         _process_data.material->getMaterialID(pos.getElementID().get());
diff --git a/ProcessLib/TwoPhaseFlowWithPP/TwoPhaseFlowWithPPLocalAssembler.h b/ProcessLib/TwoPhaseFlowWithPP/TwoPhaseFlowWithPPLocalAssembler.h
index 1a8803d8c2ec742ab6e28ead214b5e233ea9036d..f53a3aa7978734de42607446740917ac0ff90f1e 100644
--- a/ProcessLib/TwoPhaseFlowWithPP/TwoPhaseFlowWithPPLocalAssembler.h
+++ b/ProcessLib/TwoPhaseFlowWithPP/TwoPhaseFlowWithPPLocalAssembler.h
@@ -15,9 +15,9 @@
 #include "NumLib/Extrapolation/ExtrapolatableElement.h"
 #include "NumLib/Fem/FiniteElement/TemplateIsoparametric.h"
 #include "NumLib/Fem/ShapeMatrixPolicy.h"
+#include "ParameterLib/Parameter.h"
 #include "ProcessLib/LocalAssemblerInterface.h"
 #include "ProcessLib/LocalAssemblerTraits.h"
-#include "ProcessLib/Parameter/Parameter.h"
 #include "ProcessLib/Utils/InitShapeMatrices.h"
 
 #include "TwoPhaseFlowWithPPMaterialProperties.h"
diff --git a/ProcessLib/TwoPhaseFlowWithPP/TwoPhaseFlowWithPPMaterialProperties.cpp b/ProcessLib/TwoPhaseFlowWithPP/TwoPhaseFlowWithPPMaterialProperties.cpp
index d3bbc9dae0eed9a6de57b75edf62ee8bb8ae035a..eb5047f9c34a060e52748b047f2175f7f5db07e3 100644
--- a/ProcessLib/TwoPhaseFlowWithPP/TwoPhaseFlowWithPPMaterialProperties.cpp
+++ b/ProcessLib/TwoPhaseFlowWithPP/TwoPhaseFlowWithPPMaterialProperties.cpp
@@ -20,8 +20,8 @@
 #include "MathLib/InterpolationAlgorithms/PiecewiseLinearInterpolation.h"
 #include "MeshLib/Mesh.h"
 #include "MeshLib/PropertyVector.h"
-#include "ProcessLib/Parameter/Parameter.h"
-#include "ProcessLib/Parameter/SpatialPosition.h"
+#include "ParameterLib/Parameter.h"
+#include "ParameterLib/SpatialPosition.h"
 namespace ProcessLib
 {
 namespace TwoPhaseFlowWithPP
@@ -122,7 +122,7 @@ double TwoPhaseFlowWithPPMaterialProperties::getGasViscosity(
 
 Eigen::MatrixXd const& TwoPhaseFlowWithPPMaterialProperties::getPermeability(
     const int material_id, const double t,
-    const ProcessLib::SpatialPosition& pos, const int /*dim*/) const
+    const ParameterLib::SpatialPosition& pos, const int /*dim*/) const
 {
     return _intrinsic_permeability_models[material_id]->getValue(t, pos, 0.0,
                                                                  0.0);
@@ -130,21 +130,21 @@ Eigen::MatrixXd const& TwoPhaseFlowWithPPMaterialProperties::getPermeability(
 
 double TwoPhaseFlowWithPPMaterialProperties::getPorosity(
     const int material_id, const double t,
-    const ProcessLib::SpatialPosition& pos, const double /*p*/,
+    const ParameterLib::SpatialPosition& pos, const double /*p*/,
     const double T, const double porosity_variable) const
 {
     return _porosity_models[material_id]->getValue(t, pos, porosity_variable, T);
 }
 
 double TwoPhaseFlowWithPPMaterialProperties::getNonwetRelativePermeability(
-    const double /*t*/, const ProcessLib::SpatialPosition& /*pos*/,
+    const double /*t*/, const ParameterLib::SpatialPosition& /*pos*/,
     const double /*p*/, const double /*T*/, const double saturation) const
 {
     return _relative_permeability_models[0]->getValue(saturation);
 }
 
 double TwoPhaseFlowWithPPMaterialProperties::getWetRelativePermeability(
-    const double /*t*/, const ProcessLib::SpatialPosition& /*pos*/,
+    const double /*t*/, const ParameterLib::SpatialPosition& /*pos*/,
     const double /*p*/, const double /*T*/, const double saturation) const
 {
     return _relative_permeability_models[1]->getValue(saturation);
@@ -152,14 +152,14 @@ double TwoPhaseFlowWithPPMaterialProperties::getWetRelativePermeability(
 
 double TwoPhaseFlowWithPPMaterialProperties::getSaturation(
     const int material_id, const double /*t*/,
-    const ProcessLib::SpatialPosition& /*pos*/, const double /*p*/,
+    const ParameterLib::SpatialPosition& /*pos*/, const double /*p*/,
     const double /*T*/, const double pc) const
 {
     return _capillary_pressure_models[material_id]->getSaturation(pc);
 }
 double TwoPhaseFlowWithPPMaterialProperties::getSaturationDerivative(
     const int material_id, const double /*t*/,
-    const ProcessLib::SpatialPosition& /*pos*/, const double /*p*/,
+    const ParameterLib::SpatialPosition& /*pos*/, const double /*p*/,
     const double /*T*/, const double saturation) const
 {
     const double dpcdsw =
diff --git a/ProcessLib/TwoPhaseFlowWithPP/TwoPhaseFlowWithPPMaterialProperties.h b/ProcessLib/TwoPhaseFlowWithPP/TwoPhaseFlowWithPPMaterialProperties.h
index cbb231317b045df0165d5a398d1cb50b0d1f1122..21611b96e874b8aed804b0db71db16bd063f4c1d 100644
--- a/ProcessLib/TwoPhaseFlowWithPP/TwoPhaseFlowWithPPMaterialProperties.h
+++ b/ProcessLib/TwoPhaseFlowWithPP/TwoPhaseFlowWithPPMaterialProperties.h
@@ -73,26 +73,25 @@ public:
     Eigen::MatrixXd const& getPermeability(
         const int material_id,
         const double t,
-        const ProcessLib::SpatialPosition& pos,
+        const ParameterLib::SpatialPosition& pos,
         const int dim) const;
 
     double getPorosity(const int material_id, const double t,
-                       const ProcessLib::SpatialPosition& pos, const double p,
+                       const ParameterLib::SpatialPosition& pos, const double p,
                        const double T, const double porosity_variable) const;
 
-    double getNonwetRelativePermeability(const double t,
-                                         const ProcessLib::SpatialPosition& pos,
-                                         const double p, const double T,
-                                         const double saturation) const;
+    double getNonwetRelativePermeability(
+        const double t, const ParameterLib::SpatialPosition& pos,
+        const double p, const double T, const double saturation) const;
     double getWetRelativePermeability(const double t,
-                                      const ProcessLib::SpatialPosition& pos,
+                                      const ParameterLib::SpatialPosition& pos,
                                       const double p, const double T,
                                       const double saturation) const;
     double getSaturation(const int material_id, const double t,
-                         const ProcessLib::SpatialPosition& pos, const double p,
-                         const double T, const double pc) const;
+                         const ParameterLib::SpatialPosition& pos,
+                         const double p, const double T, const double pc) const;
     double getSaturationDerivative(const int material_id, const double t,
-                                   const ProcessLib::SpatialPosition& pos,
+                                   const ParameterLib::SpatialPosition& pos,
                                    const double p, const double T,
                                    const double saturation) const;
     double getLiquidDensity(const double p, const double T) const;
diff --git a/ProcessLib/TwoPhaseFlowWithPP/TwoPhaseFlowWithPPProcess.cpp b/ProcessLib/TwoPhaseFlowWithPP/TwoPhaseFlowWithPPProcess.cpp
index fef16fc7939c0001ebeff98811108e285804cd1a..4c5152c1de04de15e2af5b40e105e7a687e80554 100644
--- a/ProcessLib/TwoPhaseFlowWithPP/TwoPhaseFlowWithPPProcess.cpp
+++ b/ProcessLib/TwoPhaseFlowWithPP/TwoPhaseFlowWithPPProcess.cpp
@@ -26,7 +26,7 @@ namespace TwoPhaseFlowWithPP
 TwoPhaseFlowWithPPProcess::TwoPhaseFlowWithPPProcess(
     MeshLib::Mesh& mesh,
     std::unique_ptr<AbstractJacobianAssembler>&& jacobian_assembler,
-    std::vector<std::unique_ptr<ParameterBase>> const& parameters,
+    std::vector<std::unique_ptr<ParameterLib::ParameterBase>> const& parameters,
     unsigned const integration_order,
     std::vector<std::vector<std::reference_wrapper<ProcessVariable>>>&&
         process_variables,
diff --git a/ProcessLib/TwoPhaseFlowWithPP/TwoPhaseFlowWithPPProcess.h b/ProcessLib/TwoPhaseFlowWithPP/TwoPhaseFlowWithPPProcess.h
index aa02ffce5b126ed2cbad2d4b2c8cf91af1f24b9a..849abea0464bef275f5b51563c50b83ad7bfdd40 100644
--- a/ProcessLib/TwoPhaseFlowWithPP/TwoPhaseFlowWithPPProcess.h
+++ b/ProcessLib/TwoPhaseFlowWithPP/TwoPhaseFlowWithPPProcess.h
@@ -38,7 +38,8 @@ public:
     TwoPhaseFlowWithPPProcess(
         MeshLib::Mesh& mesh,
         std::unique_ptr<AbstractJacobianAssembler>&& jacobian_assembler,
-        std::vector<std::unique_ptr<ParameterBase>> const& parameters,
+        std::vector<std::unique_ptr<ParameterLib::ParameterBase>> const&
+            parameters,
         unsigned const integration_order,
         std::vector<std::vector<std::reference_wrapper<ProcessVariable>>>&&
             process_variables,
diff --git a/ProcessLib/TwoPhaseFlowWithPP/TwoPhaseFlowWithPPProcessData.h b/ProcessLib/TwoPhaseFlowWithPP/TwoPhaseFlowWithPPProcessData.h
index 4e903e9893c410b38275cfadf0c4c0ad12b30f91..3ef4873fba73f177708d8a7831613ff247f67d00 100644
--- a/ProcessLib/TwoPhaseFlowWithPP/TwoPhaseFlowWithPPProcessData.h
+++ b/ProcessLib/TwoPhaseFlowWithPP/TwoPhaseFlowWithPPProcessData.h
@@ -23,7 +23,7 @@ struct TwoPhaseFlowWithPPProcessData
         Eigen::VectorXd const specific_body_force_,
         bool const has_gravity_,
         bool const has_mass_lumping_,
-        Parameter<double> const& temperature_,
+        ParameterLib::Parameter<double> const& temperature_,
         std::unique_ptr<TwoPhaseFlowWithPPMaterialProperties>&& material_)
         : specific_body_force(specific_body_force_),
           has_gravity(has_gravity_),
@@ -62,7 +62,7 @@ struct TwoPhaseFlowWithPPProcessData
 
     //! Enables lumping of the mass matrix.
     bool const has_mass_lumping;
-    Parameter<double> const& temperature;
+    ParameterLib::Parameter<double> const& temperature;
     std::unique_ptr<TwoPhaseFlowWithPPMaterialProperties> material;
 };
 
diff --git a/ProcessLib/TwoPhaseFlowWithPrho/CMakeLists.txt b/ProcessLib/TwoPhaseFlowWithPrho/CMakeLists.txt
index 0574fb24517a72c4a6f5883d311bd99062d08d62..ed415c5f7ddbaa20e1d0d60137db6ec0621570ea 100644
--- a/ProcessLib/TwoPhaseFlowWithPrho/CMakeLists.txt
+++ b/ProcessLib/TwoPhaseFlowWithPrho/CMakeLists.txt
@@ -4,6 +4,9 @@ add_library(TwoPhaseFlowWithPrho ${SOURCES})
 if(BUILD_SHARED_LIBS)
     install(TARGETS TwoPhaseFlowWithPrho LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR})
 endif()
-target_link_libraries(TwoPhaseFlowWithPrho PUBLIC ProcessLib)
+target_link_libraries(TwoPhaseFlowWithPrho
+    PUBLIC ProcessLib
+    PRIVATE ParameterLib
+)
 
 include(Tests.cmake)
diff --git a/ProcessLib/TwoPhaseFlowWithPrho/CreateTwoPhaseFlowPrhoMaterialProperties.cpp b/ProcessLib/TwoPhaseFlowWithPrho/CreateTwoPhaseFlowPrhoMaterialProperties.cpp
index 92169a8af86ea2f70268514bd0555ebb8e38824b..6938db01c89e092461e076ffbd8a66dec287ddf6 100644
--- a/ProcessLib/TwoPhaseFlowWithPrho/CreateTwoPhaseFlowPrhoMaterialProperties.cpp
+++ b/ProcessLib/TwoPhaseFlowWithPrho/CreateTwoPhaseFlowPrhoMaterialProperties.cpp
@@ -20,8 +20,8 @@
 #include "MathLib/InterpolationAlgorithms/PiecewiseLinearInterpolation.h"
 #include "MeshLib/Mesh.h"
 #include "MeshLib/PropertyVector.h"
-#include "ProcessLib/Parameter/Parameter.h"
-#include "ProcessLib/Parameter/SpatialPosition.h"
+#include "ParameterLib/Parameter.h"
+#include "ParameterLib/SpatialPosition.h"
 #include "TwoPhaseFlowWithPrhoMaterialProperties.h"
 
 namespace ProcessLib
@@ -31,8 +31,9 @@ namespace TwoPhaseFlowWithPrho
 std::unique_ptr<TwoPhaseFlowWithPrhoMaterialProperties>
 createTwoPhaseFlowPrhoMaterialProperties(
     BaseLib::ConfigTree const& config,
-    boost::optional<MeshLib::PropertyVector<int> const&> material_ids,
-    std::vector<std::unique_ptr<ParameterBase>> const& parameters)
+    boost::optional<MeshLib::PropertyVector<int> const&>
+        material_ids,
+    std::vector<std::unique_ptr<ParameterLib::ParameterBase>> const& parameters)
 {
     DBUG("Reading material properties of two-phase flow process.");
 
diff --git a/ProcessLib/TwoPhaseFlowWithPrho/CreateTwoPhaseFlowPrhoMaterialProperties.h b/ProcessLib/TwoPhaseFlowWithPrho/CreateTwoPhaseFlowPrhoMaterialProperties.h
index e1091706484cd4cfa447b16001489a4e5584a55a..976276ae2b5deccbf4a5b7dd71e37ad50ab724c7 100644
--- a/ProcessLib/TwoPhaseFlowWithPrho/CreateTwoPhaseFlowPrhoMaterialProperties.h
+++ b/ProcessLib/TwoPhaseFlowWithPrho/CreateTwoPhaseFlowPrhoMaterialProperties.h
@@ -23,8 +23,10 @@ namespace TwoPhaseFlowWithPrho
 std::unique_ptr<TwoPhaseFlowWithPrhoMaterialProperties>
 createTwoPhaseFlowPrhoMaterialProperties(
     BaseLib::ConfigTree const& config,
-    boost::optional<MeshLib::PropertyVector<int> const&> material_ids,
-    std::vector<std::unique_ptr<ParameterBase>> const& parameters);
+    boost::optional<MeshLib::PropertyVector<int> const&>
+        material_ids,
+    std::vector<std::unique_ptr<ParameterLib::ParameterBase>> const&
+        parameters);
 
 }  // end namespace
 }  // namespace ProcessLib
diff --git a/ProcessLib/TwoPhaseFlowWithPrho/CreateTwoPhaseFlowWithPrhoProcess.cpp b/ProcessLib/TwoPhaseFlowWithPrho/CreateTwoPhaseFlowWithPrhoProcess.cpp
index d99cafe6698c46ab238a036b111e1b8cb6217b71..c738f92a20ebe5508a32957d0136c1d958b22d2b 100644
--- a/ProcessLib/TwoPhaseFlowWithPrho/CreateTwoPhaseFlowWithPrhoProcess.cpp
+++ b/ProcessLib/TwoPhaseFlowWithPrho/CreateTwoPhaseFlowWithPrhoProcess.cpp
@@ -10,8 +10,9 @@
 #include <cassert>
 #include "BaseLib/Functional.h"
 #include "MeshLib/MeshGenerators/MeshGenerator.h"
+#include "ParameterLib/ConstantParameter.h"
+#include "ParameterLib/Utils.h"
 #include "ProcessLib/Output/CreateSecondaryVariables.h"
-#include "ProcessLib/Parameter/ConstantParameter.h"
 #include "ProcessLib/TwoPhaseFlowWithPrho/CreateTwoPhaseFlowPrhoMaterialProperties.h"
 #include "ProcessLib/TwoPhaseFlowWithPrho/TwoPhaseFlowWithPrhoMaterialProperties.h"
 #include "ProcessLib/Utils/ProcessUtils.h"
@@ -26,7 +27,7 @@ std::unique_ptr<Process> createTwoPhaseFlowWithPrhoProcess(
     MeshLib::Mesh& mesh,
     std::unique_ptr<ProcessLib::AbstractJacobianAssembler>&& jacobian_assembler,
     std::vector<ProcessVariable> const& variables,
-    std::vector<std::unique_ptr<ParameterBase>> const& parameters,
+    std::vector<std::unique_ptr<ParameterLib::ParameterBase>> const& parameters,
     unsigned const integration_order,
     BaseLib::ConfigTree const& config,
     std::map<std::string,
@@ -72,15 +73,15 @@ std::unique_ptr<Process> createTwoPhaseFlowWithPrhoProcess(
     //! \ogs_file_param{prj__processes__process__TWOPHASE_FLOW_PRHO__mass_lumping}
     auto const mass_lumping = config.getConfigParameter<bool>("mass_lumping");
     // diffusion coeff
-    auto& diff_coeff_b = findParameter<double>(
+    auto& diff_coeff_b = ParameterLib::findParameter<double>(
         config,
         //! \ogs_file_param_special{prj__processes__process__TWOPHASE_FLOW_PRHO__diffusion_coeff_component_b}
         "diffusion_coeff_component_b", parameters, 1);
-    auto& diff_coeff_a = findParameter<double>(
+    auto& diff_coeff_a = ParameterLib::findParameter<double>(
         config,
         //! \ogs_file_param_special{prj__processes__process__TWOPHASE_FLOW_PRHO__diffusion_coeff_component_a}
         "diffusion_coeff_component_a", parameters, 1);
-    auto& temperature = findParameter<double>(
+    auto& temperature = ParameterLib::findParameter<double>(
         config,
         //! \ogs_file_param_special{prj__processes__process__TWOPHASE_FLOW_PRHO__temperature}
         "temperature", parameters, 1);
diff --git a/ProcessLib/TwoPhaseFlowWithPrho/CreateTwoPhaseFlowWithPrhoProcess.h b/ProcessLib/TwoPhaseFlowWithPrho/CreateTwoPhaseFlowWithPrhoProcess.h
index a3bae4de32f535342f402ab1372013c0de2dca13..38b796e9920db87d193c4fc4ce00a8b508e79084 100644
--- a/ProcessLib/TwoPhaseFlowWithPrho/CreateTwoPhaseFlowWithPrhoProcess.h
+++ b/ProcessLib/TwoPhaseFlowWithPrho/CreateTwoPhaseFlowWithPrhoProcess.h
@@ -20,7 +20,7 @@ std::unique_ptr<Process> createTwoPhaseFlowWithPrhoProcess(
     MeshLib::Mesh& mesh,
     std::unique_ptr<ProcessLib::AbstractJacobianAssembler>&& jacobian_assembler,
     std::vector<ProcessVariable> const& variables,
-    std::vector<std::unique_ptr<ParameterBase>> const& parameters,
+    std::vector<std::unique_ptr<ParameterLib::ParameterBase>> const& parameters,
     unsigned const integration_order,
     BaseLib::ConfigTree const& config,
     std::map<std::string,
diff --git a/ProcessLib/TwoPhaseFlowWithPrho/TwoPhaseFlowWithPrhoLocalAssembler-impl.h b/ProcessLib/TwoPhaseFlowWithPrho/TwoPhaseFlowWithPrhoLocalAssembler-impl.h
index 126cda9130bc17bed5647f43d208f1b36d7d34a5..68c28da86ac8673596b2f83b25b82786af1a4369 100644
--- a/ProcessLib/TwoPhaseFlowWithPrho/TwoPhaseFlowWithPrhoLocalAssembler-impl.h
+++ b/ProcessLib/TwoPhaseFlowWithPrho/TwoPhaseFlowWithPrhoLocalAssembler-impl.h
@@ -76,7 +76,7 @@ void TwoPhaseFlowWithPrhoLocalAssembler<
     unsigned const n_integration_points =
         _integration_method.getNumberOfPoints();
 
-    SpatialPosition pos;
+    ParameterLib::SpatialPosition pos;
     pos.setElementID(_element.getID());
     const int material_id =
         _process_data._material->getMaterialID(pos.getElementID().get());
diff --git a/ProcessLib/TwoPhaseFlowWithPrho/TwoPhaseFlowWithPrhoLocalAssembler.h b/ProcessLib/TwoPhaseFlowWithPrho/TwoPhaseFlowWithPrhoLocalAssembler.h
index bcadbaa67ea439c52e126528335e29d3b639dca2..a31f6134952d24ecb94ef89d3ed4adbf917c3085 100644
--- a/ProcessLib/TwoPhaseFlowWithPrho/TwoPhaseFlowWithPrhoLocalAssembler.h
+++ b/ProcessLib/TwoPhaseFlowWithPrho/TwoPhaseFlowWithPrhoLocalAssembler.h
@@ -15,9 +15,9 @@
 #include "NumLib/Extrapolation/ExtrapolatableElement.h"
 #include "NumLib/Fem/FiniteElement/TemplateIsoparametric.h"
 #include "NumLib/Fem/ShapeMatrixPolicy.h"
+#include "ParameterLib/Parameter.h"
 #include "ProcessLib/LocalAssemblerInterface.h"
 #include "ProcessLib/LocalAssemblerTraits.h"
-#include "ProcessLib/Parameter/Parameter.h"
 #include "ProcessLib/Utils/InitShapeMatrices.h"
 
 #include "TwoPhaseFlowWithPrhoProcessData.h"
diff --git a/ProcessLib/TwoPhaseFlowWithPrho/TwoPhaseFlowWithPrhoMaterialProperties.cpp b/ProcessLib/TwoPhaseFlowWithPrho/TwoPhaseFlowWithPrhoMaterialProperties.cpp
index 42d4c975b41a78bc8be0888c22ac0d1b73752576..c361307d6407dd9a1216bddf2ebcf51037b78652 100644
--- a/ProcessLib/TwoPhaseFlowWithPrho/TwoPhaseFlowWithPrhoMaterialProperties.cpp
+++ b/ProcessLib/TwoPhaseFlowWithPrho/TwoPhaseFlowWithPrhoMaterialProperties.cpp
@@ -21,8 +21,8 @@
 #include "MeshLib/Mesh.h"
 #include "MeshLib/PropertyVector.h"
 #include "NumLib/NewtonRaphson.h"
-#include "ProcessLib/Parameter/Parameter.h"
-#include "ProcessLib/Parameter/SpatialPosition.h"
+#include "ParameterLib/Parameter.h"
+#include "ParameterLib/SpatialPosition.h"
 
 using MaterialLib::PhysicalConstant::MolarMass::H2;
 using MaterialLib::PhysicalConstant::IdealGasConstant;
@@ -127,7 +127,7 @@ double TwoPhaseFlowWithPrhoMaterialProperties::getGasViscosity(
 
 Eigen::MatrixXd const& TwoPhaseFlowWithPrhoMaterialProperties::getPermeability(
     const int material_id, const double t,
-    const ProcessLib::SpatialPosition& pos, const int /*dim*/) const
+    const ParameterLib::SpatialPosition& pos, const int /*dim*/) const
 {
     return _intrinsic_permeability_models[material_id]->getValue(t, pos, 0.0,
                                                                  0.0);
@@ -135,7 +135,7 @@ Eigen::MatrixXd const& TwoPhaseFlowWithPrhoMaterialProperties::getPermeability(
 
 double TwoPhaseFlowWithPrhoMaterialProperties::getPorosity(
     const int material_id, const double t,
-    const ProcessLib::SpatialPosition& pos, const double /*p*/,
+    const ParameterLib::SpatialPosition& pos, const double /*p*/,
     const double T, const double porosity_variable) const
 {
     return _porosity_models[material_id]->getValue(t, pos, porosity_variable,
@@ -143,14 +143,14 @@ double TwoPhaseFlowWithPrhoMaterialProperties::getPorosity(
 }
 
 double TwoPhaseFlowWithPrhoMaterialProperties::getNonwetRelativePermeability(
-    const double /*t*/, const ProcessLib::SpatialPosition& /*pos*/,
+    const double /*t*/, const ParameterLib::SpatialPosition& /*pos*/,
     const double /*p*/, const double /*T*/, const double saturation) const
 {
     return _relative_permeability_models[0]->getValue(saturation);
 }
 
 double TwoPhaseFlowWithPrhoMaterialProperties::getWetRelativePermeability(
-    const double /*t*/, const ProcessLib::SpatialPosition& /*pos*/,
+    const double /*t*/, const ParameterLib::SpatialPosition& /*pos*/,
     const double /*p*/, const double /*T*/, const double saturation) const
 {
     return _relative_permeability_models[1]->getValue(saturation);
@@ -158,7 +158,7 @@ double TwoPhaseFlowWithPrhoMaterialProperties::getWetRelativePermeability(
 
 double TwoPhaseFlowWithPrhoMaterialProperties::getCapillaryPressure(
     const int material_id, const double /*t*/,
-    const ProcessLib::SpatialPosition& /*pos*/, const double /*p*/,
+    const ParameterLib::SpatialPosition& /*pos*/, const double /*p*/,
     const double /*T*/, const double saturation) const
 {
     return _capillary_pressure_models[material_id]->getCapillaryPressure(
@@ -167,7 +167,7 @@ double TwoPhaseFlowWithPrhoMaterialProperties::getCapillaryPressure(
 
 double TwoPhaseFlowWithPrhoMaterialProperties::getCapillaryPressureDerivative(
     const int material_id, const double /*t*/,
-    const ProcessLib::SpatialPosition& /*pos*/, const double /*p*/,
+    const ParameterLib::SpatialPosition& /*pos*/, const double /*p*/,
     const double /*T*/, const double saturation) const
 {
     return _capillary_pressure_models[material_id]->getdPcdS(saturation);
@@ -175,7 +175,7 @@ double TwoPhaseFlowWithPrhoMaterialProperties::getCapillaryPressureDerivative(
 
 bool TwoPhaseFlowWithPrhoMaterialProperties::computeConstitutiveRelation(
     double const t,
-    ProcessLib::SpatialPosition const& x,
+    ParameterLib::SpatialPosition const& x,
     int const material_id,
     double const pg,
     double const X,
@@ -251,7 +251,7 @@ void TwoPhaseFlowWithPrhoMaterialProperties::calculateResidual(
 
 void TwoPhaseFlowWithPrhoMaterialProperties::calculateJacobian(
     const int material_id, double const /*t*/,
-    ProcessLib::SpatialPosition const& /*x*/, double const pl,
+    ParameterLib::SpatialPosition const& /*x*/, double const pl,
     double const /*X*/, double const T, JacobianMatrix& Jac, double Sw,
     double rho_h2_wet)
 {
diff --git a/ProcessLib/TwoPhaseFlowWithPrho/TwoPhaseFlowWithPrhoMaterialProperties.h b/ProcessLib/TwoPhaseFlowWithPrho/TwoPhaseFlowWithPrhoMaterialProperties.h
index 855bf123db4061d2c3526ca395eb0a86094f1658..0fd323e75e99a5dab37fa9587820786d6a94ed42 100644
--- a/ProcessLib/TwoPhaseFlowWithPrho/TwoPhaseFlowWithPrhoMaterialProperties.h
+++ b/ProcessLib/TwoPhaseFlowWithPrho/TwoPhaseFlowWithPrhoMaterialProperties.h
@@ -66,29 +66,28 @@ public:
     Eigen::MatrixXd const& getPermeability(
         const int material_id,
         const double t,
-        const ProcessLib::SpatialPosition& pos,
+        const ParameterLib::SpatialPosition& pos,
         const int dim) const;
 
     double getPorosity(const int material_id, const double t,
-                       const ProcessLib::SpatialPosition& pos, const double p,
+                       const ParameterLib::SpatialPosition& pos, const double p,
                        const double T, const double porosity_variable) const;
 
-    double getNonwetRelativePermeability(const double t,
-                                         const ProcessLib::SpatialPosition& pos,
-                                         const double p, const double T,
-                                         const double saturation) const;
+    double getNonwetRelativePermeability(
+        const double t, const ParameterLib::SpatialPosition& pos,
+        const double p, const double T, const double saturation) const;
     double getWetRelativePermeability(const double t,
-                                      const ProcessLib::SpatialPosition& pos,
+                                      const ParameterLib::SpatialPosition& pos,
                                       const double p, const double T,
                                       const double saturation) const;
     double getCapillaryPressure(const int material_id, const double t,
-                                const ProcessLib::SpatialPosition& pos,
+                                const ParameterLib::SpatialPosition& pos,
                                 const double p, const double T,
                                 const double saturation) const;
     double getCapillaryPressureDerivative(
         const int material_id, const double t,
-        const ProcessLib::SpatialPosition& pos, const double p, const double T,
-        const double saturation) const;
+        const ParameterLib::SpatialPosition& pos, const double p,
+        const double T, const double saturation) const;
     double getLiquidDensity(const double p, const double T) const;
     double getGasDensity(const double p, const double T) const;
     double getGasViscosity(const double p, const double T) const;
@@ -96,7 +95,7 @@ public:
     double getDerivGasDensity(double const p, double const T) const;
     bool computeConstitutiveRelation(
         double const t,
-        ProcessLib::SpatialPosition const& x_position,
+        ParameterLib::SpatialPosition const& x_position,
         const int material_id,
         double const pg,
         double const X,
@@ -151,7 +150,7 @@ private:
     * Calculates the Jacobian.
     */
     void calculateJacobian(const int material_id, double const t,
-                           ProcessLib::SpatialPosition const& x,
+                           ParameterLib::SpatialPosition const& x,
                            double const pl, double const X, double const T,
                            JacobianMatrix& Jac, double Sw, double X_m);
     /** Complementary condition 1
diff --git a/ProcessLib/TwoPhaseFlowWithPrho/TwoPhaseFlowWithPrhoProcess.cpp b/ProcessLib/TwoPhaseFlowWithPrho/TwoPhaseFlowWithPrhoProcess.cpp
index c7edce1501694411527954fc6b5353978d50eb48..ad4e4c122bc4e3cf5f26253187ee648780d56346 100644
--- a/ProcessLib/TwoPhaseFlowWithPrho/TwoPhaseFlowWithPrhoProcess.cpp
+++ b/ProcessLib/TwoPhaseFlowWithPrho/TwoPhaseFlowWithPrhoProcess.cpp
@@ -26,7 +26,7 @@ namespace TwoPhaseFlowWithPrho
 TwoPhaseFlowWithPrhoProcess::TwoPhaseFlowWithPrhoProcess(
     MeshLib::Mesh& mesh,
     std::unique_ptr<AbstractJacobianAssembler>&& jacobian_assembler,
-    std::vector<std::unique_ptr<ParameterBase>> const& parameters,
+    std::vector<std::unique_ptr<ParameterLib::ParameterBase>> const& parameters,
     unsigned const integration_order,
     std::vector<std::vector<std::reference_wrapper<ProcessVariable>>>&&
         process_variables,
diff --git a/ProcessLib/TwoPhaseFlowWithPrho/TwoPhaseFlowWithPrhoProcess.h b/ProcessLib/TwoPhaseFlowWithPrho/TwoPhaseFlowWithPrhoProcess.h
index a21372a31a1f85e692c2cf381fe7e8f3ee563470..9e622a4389bb4d20c902e54370097639c573420d 100644
--- a/ProcessLib/TwoPhaseFlowWithPrho/TwoPhaseFlowWithPrhoProcess.h
+++ b/ProcessLib/TwoPhaseFlowWithPrho/TwoPhaseFlowWithPrhoProcess.h
@@ -36,7 +36,8 @@ public:
     TwoPhaseFlowWithPrhoProcess(
         MeshLib::Mesh& mesh,
         std::unique_ptr<AbstractJacobianAssembler>&& jacobian_assembler,
-        std::vector<std::unique_ptr<ParameterBase>> const& parameters,
+        std::vector<std::unique_ptr<ParameterLib::ParameterBase>> const&
+            parameters,
         unsigned const integration_order,
         std::vector<std::vector<std::reference_wrapper<ProcessVariable>>>&&
             process_variables,
diff --git a/ProcessLib/TwoPhaseFlowWithPrho/TwoPhaseFlowWithPrhoProcessData.h b/ProcessLib/TwoPhaseFlowWithPrho/TwoPhaseFlowWithPrhoProcessData.h
index 5e3c5bf312c4d78c63a66d65a35d19838d62f926..4d9e366a1a79e33a271a569e224669e28157e3b1 100644
--- a/ProcessLib/TwoPhaseFlowWithPrho/TwoPhaseFlowWithPrhoProcessData.h
+++ b/ProcessLib/TwoPhaseFlowWithPrho/TwoPhaseFlowWithPrhoProcessData.h
@@ -24,9 +24,9 @@ struct TwoPhaseFlowWithPrhoProcessData
         Eigen::VectorXd const specific_body_force_,
         bool const has_gravity_,
         bool const has_mass_lumping_,
-        Parameter<double> const& diffusion_coeff_component_b_,
-        Parameter<double> const& diffusion_coeff_component_a_,
-        Parameter<double> const& temperature_,
+        ParameterLib::Parameter<double> const& diffusion_coeff_component_b_,
+        ParameterLib::Parameter<double> const& diffusion_coeff_component_a_,
+        ParameterLib::Parameter<double> const& temperature_,
         std::unique_ptr<TwoPhaseFlowWithPrhoMaterialProperties>&& material_)
         : _specific_body_force(specific_body_force_),
           _has_gravity(has_gravity_),
@@ -63,9 +63,9 @@ struct TwoPhaseFlowWithPrhoProcessData
 
     bool const _has_gravity;
     bool const _has_mass_lumping;
-    Parameter<double> const& _diffusion_coeff_component_b;
-    Parameter<double> const& _diffusion_coeff_component_a;
-    Parameter<double> const& _temperature;
+    ParameterLib::Parameter<double> const& _diffusion_coeff_component_b;
+    ParameterLib::Parameter<double> const& _diffusion_coeff_component_a;
+    ParameterLib::Parameter<double> const& _temperature;
     std::unique_ptr<TwoPhaseFlowWithPrhoMaterialProperties> _material;
 };
 
diff --git a/ProcessLib/Utils/ProcessUtils.cpp b/ProcessLib/Utils/ProcessUtils.cpp
index 67e35f1d64343ffbfd6fcbfa77f5a52edc2da7d8..8faaae6b87af161b51fc938a31b8ba21ccfce158 100644
--- a/ProcessLib/Utils/ProcessUtils.cpp
+++ b/ProcessLib/Utils/ProcessUtils.cpp
@@ -8,7 +8,8 @@
  */
 
 #include "ProcessUtils.h"
-#include <iterator>
+
+#include "BaseLib/ConfigTree.h"
 #include "ProcessLib/ProcessVariable.h"
 
 namespace
diff --git a/ProcessLib/Utils/ProcessUtils.h b/ProcessLib/Utils/ProcessUtils.h
index db0c80256476acbc5eb5636c204f667c9b214672..d98b43aa7ef4d8bdad6539fda221335354f36cc8 100644
--- a/ProcessLib/Utils/ProcessUtils.h
+++ b/ProcessLib/Utils/ProcessUtils.h
@@ -9,15 +9,20 @@
 
 #pragma once
 
+#include <string>
 #include <vector>
-#include "BaseLib/ConfigTree.h"
-#include "BaseLib/Error.h"
-#include "ProcessLib/Parameter/Parameter.h"
 
+namespace BaseLib
+{
+class ConfigTree;
+}
 namespace ProcessLib
 {
 class ProcessVariable;
+}
 
+namespace ProcessLib
+{
 /// Find process variables in \c variables whose names match the settings under
 /// the given \c tag_names in the \c process_config.
 ///
@@ -47,81 +52,4 @@ std::vector<std::reference_wrapper<ProcessVariable>> findProcessVariables(
     BaseLib::ConfigTree const& pv_config,
     std::string const& tag);
 
-/// Find a parameter of specific type for a given name.
-///
-/// \tparam ParameterDataType the data type of the parameter
-/// \param parameter_name name of the requested parameter
-/// \param parameters list of parameters in which it will be searched
-/// \param num_components the number of components of the parameters or zero if
-/// any number is acceptable
-///
-/// \see The documentation of the other findParameter() function.
-template <typename ParameterDataType>
-Parameter<ParameterDataType>& findParameter(
-    std::string const& parameter_name,
-    std::vector<std::unique_ptr<ParameterBase>> const& parameters,
-    int const num_components)
-{
-    // Find corresponding parameter by name.
-    auto const parameter_it = std::find_if(
-        parameters.cbegin(), parameters.cend(),
-        [&parameter_name](std::unique_ptr<ParameterBase> const& p) {
-            return p->name == parameter_name;
-        });
-
-    if (parameter_it == parameters.end()) {
-        OGS_FATAL(
-            "Could not find parameter `%s' in the provided parameters list.",
-            parameter_name.c_str());
-    }
-
-    DBUG("Found parameter `%s'.", (*parameter_it)->name.c_str());
-
-    // Check the type correctness of the found parameter.
-    auto* const parameter =
-        dynamic_cast<Parameter<ParameterDataType>*>(parameter_it->get());
-    if (!parameter) {
-        OGS_FATAL("The read parameter `%s' is of incompatible type.",
-                  parameter_name.c_str());
-    }
-
-    if (num_components != 0 &&
-        parameter->getNumberOfComponents() != num_components)
-    {
-        OGS_FATAL(
-            "The read parameter `%s' has the wrong number of components (%lu "
-            "instead of %u).",
-            parameter_name.c_str(), parameter->getNumberOfComponents(),
-            num_components);
-    }
-
-    return *parameter;
-}
-
-/// Find a parameter of specific type for a name given in the process
-/// configuration under the tag.
-/// The parameter must have the specified number of components.
-/// In the process config a parameter is referenced by a name. For example it
-/// will be looking for a parameter named "K" in the list of parameters
-/// when the tag is "hydraulic_conductivity":
-/// \code
-///     <process>
-///         ...
-///         <hydraulic_conductivity>K</hydraulic_conductivity>
-///     </process>
-/// \endcode
-/// and return a reference to that parameter. Additionally it checks for the
-/// type of the found parameter.
-template <typename ParameterDataType>
-Parameter<ParameterDataType>& findParameter(
-    BaseLib::ConfigTree const& process_config, std::string const& tag,
-    std::vector<std::unique_ptr<ParameterBase>> const& parameters,
-    int const num_components)
-{
-    // Find parameter name in process config.
-    //! \ogs_file_special
-    auto const name = process_config.getConfigParameter<std::string>(tag);
-
-    return findParameter<ParameterDataType>(name, parameters, num_components);
-}
 }  // namespace ProcessLib
diff --git a/Tests/CMakeLists.txt b/Tests/CMakeLists.txt
index 41f20990209c270754d06fd9774193af48aba5c8..5809f6e4c276f7ae1bc56cdc3518635f7c98dab6 100644
--- a/Tests/CMakeLists.txt
+++ b/Tests/CMakeLists.txt
@@ -16,6 +16,7 @@ APPEND_SOURCE_FILES(TEST_SOURCES MathLib)
 APPEND_SOURCE_FILES(TEST_SOURCES MeshLib)
 APPEND_SOURCE_FILES(TEST_SOURCES MeshGeoToolsLib)
 APPEND_SOURCE_FILES(TEST_SOURCES NumLib)
+APPEND_SOURCE_FILES(TEST_SOURCES ParameterLib)
 APPEND_SOURCE_FILES(TEST_SOURCES ProcessLib)
 
 if(Qt5XmlPatterns_FOUND)
@@ -44,6 +45,7 @@ target_link_libraries(testrunner
     MaterialLib
     MeshLib
     NumLib
+    ParameterLib
     ProcessLib
     Threads::Threads
     ${VTK_LIBRARIES}
diff --git a/Tests/MaterialLib/TestFractureModels.cpp b/Tests/MaterialLib/TestFractureModels.cpp
index 4c8c815642cc1384d0dd6ec2616d23b9451fd280..a33206d8f1d8c91781d75fb036f93b9255a70603 100644
--- a/Tests/MaterialLib/TestFractureModels.cpp
+++ b/Tests/MaterialLib/TestFractureModels.cpp
@@ -17,7 +17,7 @@
 #include "MaterialLib/FractureModels/LinearElasticIsotropic.h"
 #include "MaterialLib/FractureModels/MohrCoulomb.h"
 
-#include "ProcessLib/Parameter/ConstantParameter.h"
+#include "ParameterLib/ConstantParameter.h"
 
 using namespace MaterialLib::Fracture;
 
@@ -26,8 +26,8 @@ static const double eps_C = 1e10*1e-5;
 
 TEST(MaterialLib_Fracture, LinearElasticIsotropic)
 {
-    ProcessLib::ConstantParameter<double> const kn("", 1e11);
-    ProcessLib::ConstantParameter<double> const ks("", 1e9);
+    ParameterLib::ConstantParameter<double> const kn("", 1e11);
+    ParameterLib::ConstantParameter<double> const ks("", 1e9);
     LinearElasticIsotropic<2>::MaterialProperties const mp{kn, ks};
 
     double const aperture0 = 1e-5;
@@ -47,7 +47,7 @@ TEST(MaterialLib_Fracture, LinearElasticIsotropic)
     Eigen::Vector2d sigma;
     Eigen::Matrix2d C;
 
-    ProcessLib::SpatialPosition x;
+    ParameterLib::SpatialPosition x;
     fractureModel.computeConstitutiveRelation(0, x, aperture0, sigma0, w_prev,
                                               w, sigma_prev, sigma, C, *state);
 
@@ -73,11 +73,11 @@ TEST(MaterialLib_Fracture, LinearElasticIsotropic)
 
 TEST(MaterialLib_Fracture, MohrCoulomb2D_elastic)
 {
-    ProcessLib::ConstantParameter<double> const kn("", 1e11);
-    ProcessLib::ConstantParameter<double> const ks("", 1e9);
-    ProcessLib::ConstantParameter<double> const phi("", 15);
-    ProcessLib::ConstantParameter<double> const psi("", 5);
-    ProcessLib::ConstantParameter<double> const c("", 3e16);
+    ParameterLib::ConstantParameter<double> const kn("", 1e11);
+    ParameterLib::ConstantParameter<double> const ks("", 1e9);
+    ParameterLib::ConstantParameter<double> const phi("", 15);
+    ParameterLib::ConstantParameter<double> const psi("", 5);
+    ParameterLib::ConstantParameter<double> const c("", 3e16);
     MohrCoulomb<2>::MaterialProperties const mp{kn, ks, phi, psi, c};
 
     double const aperture0 = 1;
@@ -96,7 +96,7 @@ TEST(MaterialLib_Fracture, MohrCoulomb2D_elastic)
     Eigen::Vector2d sigma;
     Eigen::Matrix2d C;
 
-    ProcessLib::SpatialPosition x;
+    ParameterLib::SpatialPosition x;
     fractureModel.computeConstitutiveRelation(0, x, aperture0, sigma0, w_prev,
                                               w, sigma_prev, sigma, C, *state);
 
@@ -121,11 +121,11 @@ TEST(MaterialLib_Fracture, MohrCoulomb2D_elastic)
 
 TEST(MaterialLib_Fracture, MohrCoulomb2D_negative_t)
 {
-    ProcessLib::ConstantParameter<double> const kn("", 50e9);
-    ProcessLib::ConstantParameter<double> const ks("", 20e9);
-    ProcessLib::ConstantParameter<double> const phi("", 15);
-    ProcessLib::ConstantParameter<double> const psi("", 5);
-    ProcessLib::ConstantParameter<double> const c("", 3e6);
+    ParameterLib::ConstantParameter<double> const kn("", 50e9);
+    ParameterLib::ConstantParameter<double> const ks("", 20e9);
+    ParameterLib::ConstantParameter<double> const phi("", 15);
+    ParameterLib::ConstantParameter<double> const psi("", 5);
+    ParameterLib::ConstantParameter<double> const c("", 3e6);
     MohrCoulomb<2>::MaterialProperties const mp{kn, ks, phi, psi, c};
 
     double const aperture0 = 1e-5;
@@ -144,7 +144,7 @@ TEST(MaterialLib_Fracture, MohrCoulomb2D_negative_t)
     Eigen::Vector2d sigma;
     Eigen::Matrix2d C;
 
-    ProcessLib::SpatialPosition x;
+    ParameterLib::SpatialPosition x;
     fractureModel.computeConstitutiveRelation(0, x, aperture0, sigma0, w_prev,
                                               w, sigma_prev, sigma, C, *state);
 
@@ -160,11 +160,11 @@ TEST(MaterialLib_Fracture, MohrCoulomb2D_negative_t)
 
 TEST(MaterialLib_Fracture, MohrCoulomb2D_positive_t)
 {
-    ProcessLib::ConstantParameter<double> const kn("", 50e9);
-    ProcessLib::ConstantParameter<double> const ks("", 20e9);
-    ProcessLib::ConstantParameter<double> const phi("", 15);
-    ProcessLib::ConstantParameter<double> const psi("", 5);
-    ProcessLib::ConstantParameter<double> const c("", 3e6);
+    ParameterLib::ConstantParameter<double> const kn("", 50e9);
+    ParameterLib::ConstantParameter<double> const ks("", 20e9);
+    ParameterLib::ConstantParameter<double> const phi("", 15);
+    ParameterLib::ConstantParameter<double> const psi("", 5);
+    ParameterLib::ConstantParameter<double> const c("", 3e6);
     MohrCoulomb<2>::MaterialProperties const mp{kn, ks, phi, psi, c};
 
     double const aperture0 = 1e-5;
@@ -183,7 +183,7 @@ TEST(MaterialLib_Fracture, MohrCoulomb2D_positive_t)
     Eigen::Vector2d sigma;
     Eigen::Matrix2d C;
 
-    ProcessLib::SpatialPosition x;
+    ParameterLib::SpatialPosition x;
     fractureModel.computeConstitutiveRelation(0, x, aperture0, sigma0, w_prev,
                                               w, sigma_prev, sigma, C, *state);
 
@@ -198,11 +198,11 @@ TEST(MaterialLib_Fracture, MohrCoulomb2D_positive_t)
 
 TEST(MaterialLib_Fracture, MohrCoulomb3D_negative_t1)
 {
-    ProcessLib::ConstantParameter<double> const kn("", 50e9);
-    ProcessLib::ConstantParameter<double> const ks("", 20e9);
-    ProcessLib::ConstantParameter<double> const phi("", 15);
-    ProcessLib::ConstantParameter<double> const psi("", 5);
-    ProcessLib::ConstantParameter<double> const c("", 3e6);
+    ParameterLib::ConstantParameter<double> const kn("", 50e9);
+    ParameterLib::ConstantParameter<double> const ks("", 20e9);
+    ParameterLib::ConstantParameter<double> const phi("", 15);
+    ParameterLib::ConstantParameter<double> const psi("", 5);
+    ParameterLib::ConstantParameter<double> const c("", 3e6);
     MohrCoulomb<3>::MaterialProperties const mp{kn, ks, phi, psi, c};
 
     double const aperture0 = 1e-5;
@@ -221,7 +221,7 @@ TEST(MaterialLib_Fracture, MohrCoulomb3D_negative_t1)
     Eigen::Vector3d sigma;
     Eigen::Matrix3d C;
 
-    ProcessLib::SpatialPosition x;
+    ParameterLib::SpatialPosition x;
     fractureModel.computeConstitutiveRelation(0, x, aperture0, sigma0, w_prev,
                                               w, sigma_prev, sigma, C, *state);
 
@@ -242,11 +242,11 @@ TEST(MaterialLib_Fracture, MohrCoulomb3D_negative_t1)
 
 TEST(MaterialLib_Fracture, MohrCoulomb3D_positive_t1)
 {
-    ProcessLib::ConstantParameter<double> const kn("", 50e9);
-    ProcessLib::ConstantParameter<double> const ks("", 20e9);
-    ProcessLib::ConstantParameter<double> const phi("", 15);
-    ProcessLib::ConstantParameter<double> const psi("", 5);
-    ProcessLib::ConstantParameter<double> const c("", 3e6);
+    ParameterLib::ConstantParameter<double> const kn("", 50e9);
+    ParameterLib::ConstantParameter<double> const ks("", 20e9);
+    ParameterLib::ConstantParameter<double> const phi("", 15);
+    ParameterLib::ConstantParameter<double> const psi("", 5);
+    ParameterLib::ConstantParameter<double> const c("", 3e6);
     MohrCoulomb<3>::MaterialProperties const mp{kn, ks, phi, psi, c};
 
     double const aperture0 = 1e-5;
@@ -265,7 +265,7 @@ TEST(MaterialLib_Fracture, MohrCoulomb3D_positive_t1)
     Eigen::Vector3d sigma;
     Eigen::Matrix3d C;
 
-    ProcessLib::SpatialPosition x;
+    ParameterLib::SpatialPosition x;
     fractureModel.computeConstitutiveRelation(0, x, aperture0, sigma0, w_prev,
                                               w, sigma_prev, sigma, C, *state);
 
@@ -287,11 +287,11 @@ TEST(MaterialLib_Fracture, MohrCoulomb3D_positive_t1)
 
 TEST(MaterialLib_Fracture, MohrCoulomb3D_positive_t2)
 {
-    ProcessLib::ConstantParameter<double> const kn("", 50e9);
-    ProcessLib::ConstantParameter<double> const ks("", 20e9);
-    ProcessLib::ConstantParameter<double> const phi("", 15);
-    ProcessLib::ConstantParameter<double> const psi("", 5);
-    ProcessLib::ConstantParameter<double> const c("", 3e6);
+    ParameterLib::ConstantParameter<double> const kn("", 50e9);
+    ParameterLib::ConstantParameter<double> const ks("", 20e9);
+    ParameterLib::ConstantParameter<double> const phi("", 15);
+    ParameterLib::ConstantParameter<double> const psi("", 5);
+    ParameterLib::ConstantParameter<double> const c("", 3e6);
     MohrCoulomb<3>::MaterialProperties const mp{kn, ks, phi, psi, c};
 
     double const aperture0 = 1e-5;
@@ -310,7 +310,7 @@ TEST(MaterialLib_Fracture, MohrCoulomb3D_positive_t2)
     Eigen::Vector3d sigma;
     Eigen::Matrix3d C;
 
-    ProcessLib::SpatialPosition x;
+    ParameterLib::SpatialPosition x;
     fractureModel.computeConstitutiveRelation(0, x, aperture0, sigma0, w_prev,
                                               w, sigma_prev, sigma, C, *state);
 
@@ -332,11 +332,11 @@ TEST(MaterialLib_Fracture, MohrCoulomb3D_positive_t2)
 
 TEST(MaterialLib_Fracture, MohrCoulomb3D_negative_t1t2)
 {
-    ProcessLib::ConstantParameter<double> const kn("", 50e9);
-    ProcessLib::ConstantParameter<double> const ks("", 20e9);
-    ProcessLib::ConstantParameter<double> const phi("", 15);
-    ProcessLib::ConstantParameter<double> const psi("", 5);
-    ProcessLib::ConstantParameter<double> const c("", 3e6);
+    ParameterLib::ConstantParameter<double> const kn("", 50e9);
+    ParameterLib::ConstantParameter<double> const ks("", 20e9);
+    ParameterLib::ConstantParameter<double> const phi("", 15);
+    ParameterLib::ConstantParameter<double> const psi("", 5);
+    ParameterLib::ConstantParameter<double> const c("", 3e6);
     MohrCoulomb<3>::MaterialProperties const mp{kn, ks, phi, psi, c};
 
     double const aperture0 = 1e-5;
@@ -356,7 +356,7 @@ TEST(MaterialLib_Fracture, MohrCoulomb3D_negative_t1t2)
     Eigen::Vector3d sigma;
     Eigen::Matrix3d C;
 
-    ProcessLib::SpatialPosition x;
+    ParameterLib::SpatialPosition x;
     fractureModel.computeConstitutiveRelation(0, x, aperture0, sigma0, w_prev,
                                               w, sigma_prev, sigma, C, *state);
 
@@ -378,11 +378,11 @@ TEST(MaterialLib_Fracture, MohrCoulomb3D_negative_t1t2)
 
 TEST(MaterialLib_Fracture, MohrCoulomb3D_negative_t1_positive_t2)
 {
-    ProcessLib::ConstantParameter<double> const kn("", 50e9);
-    ProcessLib::ConstantParameter<double> const ks("", 20e9);
-    ProcessLib::ConstantParameter<double> const phi("", 15);
-    ProcessLib::ConstantParameter<double> const psi("", 5);
-    ProcessLib::ConstantParameter<double> const c("", 3e6);
+    ParameterLib::ConstantParameter<double> const kn("", 50e9);
+    ParameterLib::ConstantParameter<double> const ks("", 20e9);
+    ParameterLib::ConstantParameter<double> const phi("", 15);
+    ParameterLib::ConstantParameter<double> const psi("", 5);
+    ParameterLib::ConstantParameter<double> const c("", 3e6);
     MohrCoulomb<3>::MaterialProperties const mp{kn, ks, phi, psi, c};
 
     double const aperture0 = 1e-5;
@@ -402,7 +402,7 @@ TEST(MaterialLib_Fracture, MohrCoulomb3D_negative_t1_positive_t2)
     Eigen::Vector3d sigma;
     Eigen::Matrix3d C;
 
-    ProcessLib::SpatialPosition x;
+    ParameterLib::SpatialPosition x;
     fractureModel.computeConstitutiveRelation(0, x, aperture0, sigma0, w_prev,
                                               w, sigma_prev, sigma, C, *state);
 
diff --git a/Tests/ProcessLib/TestParameter.cpp b/Tests/ParameterLib/Parameter.cpp
similarity index 90%
rename from Tests/ProcessLib/TestParameter.cpp
rename to Tests/ParameterLib/Parameter.cpp
index 05cd6e05659d13858f2fce221148adfdc9a08ddc..d9492fcc63f9ae438ed7a5e3df9378f3ab79f86a 100644
--- a/Tests/ProcessLib/TestParameter.cpp
+++ b/Tests/ParameterLib/Parameter.cpp
@@ -23,10 +23,10 @@
 #include "MeshLib/Node.h"
 #include "MeshLib/PropertyVector.h"
 
-#include "ProcessLib/Parameter/GroupBasedParameter.h"
-#include "ProcessLib/Parameter/CurveScaledParameter.h"
+#include "ParameterLib/CurveScaledParameter.h"
+#include "ParameterLib/GroupBasedParameter.h"
 
-using namespace ProcessLib;
+using namespace ParameterLib;
 
 std::unique_ptr<Parameter<double>> constructParameterFromString(
     std::string const& xml,
@@ -43,7 +43,7 @@ std::unique_ptr<Parameter<double>> constructParameterFromString(
         static_cast<Parameter<double>*>(parameter_base.release()));
 }
 
-struct ProcessLibParameter : public ::testing::Test
+struct ParameterLibParameter : public ::testing::Test
 {
     void SetUp() override
     {
@@ -53,7 +53,7 @@ struct ProcessLibParameter : public ::testing::Test
     std::vector<std::unique_ptr<MeshLib::Mesh>> meshes;
 };
 
-TEST_F(ProcessLibParameter, GroupBasedParameterElement)
+TEST_F(ParameterLibParameter, GroupBasedParameterElement)
 {
     std::vector<int> mat_ids({0, 1, 2, 3});
     MeshLib::addPropertyToMesh(*meshes[0], "MaterialIDs",
@@ -69,7 +69,7 @@ TEST_F(ProcessLibParameter, GroupBasedParameterElement)
         meshes);
 
     double t = 0;
-    ProcessLib::SpatialPosition x;
+    ParameterLib::SpatialPosition x;
     x.setElementID(0);
     ASSERT_EQ(0.0, (*parameter)(t, x)[0]);
     x.setElementID(1);
@@ -78,10 +78,9 @@ TEST_F(ProcessLibParameter, GroupBasedParameterElement)
     ASSERT_ANY_THROW((*parameter)(t, x));
     x.setElementID(3);
     ASSERT_EQ(300.0, (*parameter)(t, x)[0]);
-
 }
 
-TEST_F(ProcessLibParameter, GroupBasedParameterNode)
+TEST_F(ParameterLibParameter, GroupBasedParameterNode)
 {
     std::vector<int> group_ids({0, 1, 2, 3, 4});
     MeshLib::addPropertyToMesh(*meshes[0], "PointGroupIDs",
@@ -97,7 +96,7 @@ TEST_F(ProcessLibParameter, GroupBasedParameterNode)
         meshes);
 
     double t = 0;
-    ProcessLib::SpatialPosition x;
+    ParameterLib::SpatialPosition x;
     x.setNodeID(0);
     ASSERT_EQ(0.0, (*parameter)(t, x)[0]);
     x.setNodeID(1);
@@ -150,7 +149,7 @@ bool testNodalValuesOfElement(
 }
 
 // For all elements all nodes have a constant value.
-TEST_F(ProcessLibParameter, GetNodalValuesOnElement_constant)
+TEST_F(ParameterLibParameter, GetNodalValuesOnElement_constant)
 {
     auto const parameter = constructParameterFromString(
         "<name>parameter</name>"
@@ -160,7 +159,7 @@ TEST_F(ProcessLibParameter, GetNodalValuesOnElement_constant)
 
     double const t = 0;
     auto expected_value = [](MeshLib::Element* const /*e*/,
-                              std::size_t const /*local_node_id*/) {
+                             std::size_t const /*local_node_id*/) {
         return 42.23;
     };
 
@@ -168,7 +167,7 @@ TEST_F(ProcessLibParameter, GetNodalValuesOnElement_constant)
                                          expected_value, *parameter, t));
 }
 
-TEST_F(ProcessLibParameter, GetNodalValuesOnElement_node)
+TEST_F(ParameterLibParameter, GetNodalValuesOnElement_node)
 {
     std::vector<double> node_ids({0, 1, 2, 3, 4});
     MeshLib::addPropertyToMesh(*meshes[0], "NodeIDs",
@@ -184,7 +183,7 @@ TEST_F(ProcessLibParameter, GetNodalValuesOnElement_node)
 
     // For all elements all nodes have the value of the node id.
     auto expected_value = [](MeshLib::Element* const e,
-                              std::size_t const local_node_id) {
+                             std::size_t const local_node_id) {
         return static_cast<double>(e->getNode(local_node_id)->getID());
     };
 
@@ -192,7 +191,7 @@ TEST_F(ProcessLibParameter, GetNodalValuesOnElement_node)
                                          expected_value, *parameter, t));
 }
 
-TEST_F(ProcessLibParameter, GetNodalValuesOnElement_element)
+TEST_F(ParameterLibParameter, GetNodalValuesOnElement_element)
 {
     std::vector<double> element_ids({0, 1, 2, 3});
     MeshLib::addPropertyToMesh(*meshes[0], "ElementIDs",
@@ -216,7 +215,7 @@ TEST_F(ProcessLibParameter, GetNodalValuesOnElement_element)
                                          expected_value, *parameter, t));
 }
 
-TEST_F(ProcessLibParameter, GetNodalValuesOnElement_curveScaledNode)
+TEST_F(ParameterLibParameter, GetNodalValuesOnElement_curveScaledNode)
 {
     std::vector<double> node_ids({0, 1, 2, 3, 4});
     MeshLib::addPropertyToMesh(*meshes[0], "NodeIDs",
@@ -249,7 +248,7 @@ TEST_F(ProcessLibParameter, GetNodalValuesOnElement_curveScaledNode)
 
     // For all elements all nodes have the value of the node id times the time.
     auto expected_value = [&t](MeshLib::Element* const e,
-                              std::size_t const local_node_id) {
+                               std::size_t const local_node_id) {
         return static_cast<double>(e->getNode(local_node_id)->getID()) * t;
     };