diff --git a/MaterialLib/PorousMedium/CreatePorousMediaProperties.cpp b/MaterialLib/PorousMedium/CreatePorousMediaProperties.cpp
index 29186c17eb953c2c1e430a1e69e88e7c5af870e0..d1743048401d83fffa44cb7fec3da4d2f17d4b6a 100644
--- a/MaterialLib/PorousMedium/CreatePorousMediaProperties.cpp
+++ b/MaterialLib/PorousMedium/CreatePorousMediaProperties.cpp
@@ -52,7 +52,8 @@ PorousMediaProperties createPorousMediaProperties(
             //! \ogs_file_param{material__porous_medium__porous_medium__porosity}
             porous_medium_config.getConfigSubtree("porosity");
         porosity_models.emplace_back(
-            MaterialLib::PorousMedium::createPorosityModel(porosity_config));
+            MaterialLib::PorousMedium::createPorosityModel(porosity_config,
+                                                           parameters));
 
         // Configuration for the intrinsic permeability (only one scalar per
         // element, i.e., the isotropic case is handled at the moment)
diff --git a/MaterialLib/PorousMedium/Porosity/ConstantPorosity.h b/MaterialLib/PorousMedium/Porosity/ConstantPorosity.h
deleted file mode 100644
index 404050a0fe5d18ae8dbac5dd571bd6fec2e60e7b..0000000000000000000000000000000000000000
--- a/MaterialLib/PorousMedium/Porosity/ConstantPorosity.h
+++ /dev/null
@@ -1,43 +0,0 @@
-/**
- * \copyright
- * Copyright (c) 2012-2017, OpenGeoSys Community (http://www.opengeosys.org)
- *            Distributed under a Modified BSD License.
- *              See accompanying file LICENSE.txt or
- *              http://www.opengeosys.org/project/license
- *
- * \file   ConstantPorosity.h
- *
- * Created on August 16, 2016, 1:03 PM
- */
-
-#pragma once
-
-#include "Porosity.h"
-
-namespace MaterialLib
-{
-namespace PorousMedium
-{
-class ConstantPorosity final : public Porosity
-{
-public:
-    explicit ConstantPorosity(const double value) : _value(value) {}
-
-    /**
-     *  Get property value.
-     *  @param variable    A variable with any double type value.
-     *  @param temperature Temperature with any double type value.
-     */
-    double getValue(const double variable, const double temperature) const override
-    {
-        (void)variable;
-        (void)temperature;
-        return _value;
-    }
-
-private:
-    const double _value;
-};
-
-}  // end of namespace
-}  // end of namespace
diff --git a/MaterialLib/PorousMedium/Porosity/Porosity.h b/MaterialLib/PorousMedium/Porosity/Porosity.h
index f5908591c2b512d6b2d1c3f4cd495dbe84cf486b..5cee091f196be00af0c828456b84199c2f3e4ab6 100644
--- a/MaterialLib/PorousMedium/Porosity/Porosity.h
+++ b/MaterialLib/PorousMedium/Porosity/Porosity.h
@@ -14,6 +14,8 @@
 
 #include <string>
 
+#include "ProcessLib/Parameter/Parameter.h"
+
 namespace MaterialLib
 {
 namespace PorousMedium
@@ -21,16 +23,32 @@ namespace PorousMedium
 class Porosity
 {
 public:
+    explicit Porosity(
+        ProcessLib::Parameter<double> const& parameter)
+        : _parameter(parameter)
+    {
+    }
     virtual ~Porosity() = default;
 
     /**
      *  Get property value.
-     *  @param variable    A variable that can be saturation, or an invariant
-     *                     of stress or strain.
-     *  @param temperature Temperature.
+     *  @param t point in time
+     *  @param pos spatial position
+     *  @param variable    A variable with any double type value.
+     *  @param temperature Temperature with any double type value.
      */
-    virtual double getValue(const double variable,
-                            const double temperature) const = 0;
+    virtual double getValue(const double t,
+                            ProcessLib::SpatialPosition const& pos,
+                            const double variable,
+                            const double temperature) const
+    {
+        (void)variable;
+        (void)temperature;
+        return _parameter(t, pos)[0];
+    }
+
+private:
+    ProcessLib::Parameter<double> const& _parameter;
 };
 
 }  // end of namespace
diff --git a/MaterialLib/PorousMedium/Porosity/createPorosityModel.cpp b/MaterialLib/PorousMedium/Porosity/createPorosityModel.cpp
index 887b3bac1aa5507010835dc3c5b7c6ea24999097..6a64ce14b7d38207f1123fa17212ed81e34b354e 100644
--- a/MaterialLib/PorousMedium/Porosity/createPorosityModel.cpp
+++ b/MaterialLib/PorousMedium/Porosity/createPorosityModel.cpp
@@ -15,25 +15,33 @@
 #include "BaseLib/Error.h"
 #include "BaseLib/ConfigTree.h"
 
+#include "ProcessLib/Utils/ProcessUtils.h"
+
 #include "Porosity.h"
-#include "ConstantPorosity.h"
 
 namespace MaterialLib
 {
 namespace PorousMedium
 {
-std::unique_ptr<Porosity> createPorosityModel(BaseLib::ConfigTree const& config)
+std::unique_ptr<Porosity> createPorosityModel(BaseLib::ConfigTree const& config,
+    std::vector<std::unique_ptr<ProcessLib::ParameterBase>> const& parameters)
 {
     //! \ogs_file_param{material__porous_medium__porosity__type}
     auto const type = config.getConfigParameter<std::string>("type");
 
     if (type == "Constant")
-        return std::make_unique<ConstantPorosity>(
-            //! \ogs_file_param{material__porous_medium__porosity__Constant__value}
-            config.getConfigParameter<double>("value"));
+    {
+        auto const& constant_porosity = ProcessLib::findParameter<double>(
+            config,
+            //! \ogs_file_param_special{material__porous_medium__porosity__porosity_parameter}
+            "porosity_parameter", parameters, 1);
+
+        return std::make_unique<Porosity>(constant_porosity);
+    }
 
     OGS_FATAL("The porosity type %s is unavailable.\n",
-              "The available type is \n\tConstant.", type.data());
+              "The available type is Constant.",
+              type.data());
 }
 
 }  // end namespace
diff --git a/MaterialLib/PorousMedium/Porosity/createPorosityModel.h b/MaterialLib/PorousMedium/Porosity/createPorosityModel.h
index 8aad3e08036150cc363af11e91a02435a16a7c45..ff0700b64d23fe799aa3b6acb845ce68463cf310 100644
--- a/MaterialLib/PorousMedium/Porosity/createPorosityModel.h
+++ b/MaterialLib/PorousMedium/Porosity/createPorosityModel.h
@@ -13,6 +13,7 @@
 #pragma once
 
 #include <memory>
+#include "ProcessLib/Parameter/Parameter.h"
 
 namespace BaseLib
 {
@@ -26,10 +27,13 @@ namespace PorousMedium
 class Porosity;
 
 /** Create a porosity model
- *  @param config  ConfigTree object has a tag of `<porosity>`
+ *  @param config  ConfigTree object has a tag of `<porosity>` that describes
+ *  the porosity relationsship and contains the name of the parameter
+ *  @param parameters a vector containing the available parameters
  */
 std::unique_ptr<Porosity> createPorosityModel(
-    BaseLib::ConfigTree const& config);
+    BaseLib::ConfigTree const& config,
+    std::vector<std::unique_ptr<ProcessLib::ParameterBase>> const& parameters);
 
 }  // end namespace
 }  // end namespace
diff --git a/MaterialLib/TwoPhaseModels/CreateTwoPhaseFlowMaterialProperties.cpp b/MaterialLib/TwoPhaseModels/CreateTwoPhaseFlowMaterialProperties.cpp
index 03cc750ca533810f69bee42171bfa78584b7414c..1e9530be7ce13508d97a703e3f2a4ad77518b6f9 100644
--- a/MaterialLib/TwoPhaseModels/CreateTwoPhaseFlowMaterialProperties.cpp
+++ b/MaterialLib/TwoPhaseModels/CreateTwoPhaseFlowMaterialProperties.cpp
@@ -33,7 +33,8 @@ std::tuple<std::unique_ptr<TwoPhaseFlowWithPPMaterialProperties>,
            BaseLib::ConfigTree>
 createTwoPhaseFlowMaterialProperties(
     BaseLib::ConfigTree const& config,
-    MeshLib::PropertyVector<int> const& material_ids)
+    MeshLib::PropertyVector<int> const& material_ids,
+    std::vector<std::unique_ptr<ProcessLib::ParameterBase>> const& parameters)
 {
     DBUG("Reading material properties of two-phase flow process.");
 
@@ -87,7 +88,8 @@ createTwoPhaseFlowMaterialProperties(
 
         //! \ogs_file_param{material__twophase_flow__material_property__porous_medium__porous_medium__porosity}
         auto const& porosity_conf = conf.getConfigSubtree("porosity");
-        auto n = MaterialLib::PorousMedium::createPorosityModel(porosity_conf);
+        auto n = MaterialLib::PorousMedium::createPorosityModel(porosity_conf,
+                                                                parameters);
         porosity_models.emplace_back(std::move(n));
 
         //! \ogs_file_param{material__twophase_flow__material_property__porous_medium__porous_medium__storage}
diff --git a/MaterialLib/TwoPhaseModels/CreateTwoPhaseFlowMaterialProperties.h b/MaterialLib/TwoPhaseModels/CreateTwoPhaseFlowMaterialProperties.h
index 7ef73b85722fd5370d8cb1174fbc7f53b53c2e8c..f20105e29243e13dae9c22f685b85289038285fa 100644
--- a/MaterialLib/TwoPhaseModels/CreateTwoPhaseFlowMaterialProperties.h
+++ b/MaterialLib/TwoPhaseModels/CreateTwoPhaseFlowMaterialProperties.h
@@ -31,7 +31,8 @@ std::tuple<std::unique_ptr<TwoPhaseFlowWithPPMaterialProperties>,
            BaseLib::ConfigTree>
 createTwoPhaseFlowMaterialProperties(
     BaseLib::ConfigTree const& config,
-    MeshLib::PropertyVector<int> const& material_ids);
+    MeshLib::PropertyVector<int> const& material_ids,
+    std::vector<std::unique_ptr<ProcessLib::ParameterBase>> const& parameters);
 
 }  // end namespace
 }  // end namespace
diff --git a/MaterialLib/TwoPhaseModels/TwoPhaseFlowWithPPMaterialProperties.cpp b/MaterialLib/TwoPhaseModels/TwoPhaseFlowWithPPMaterialProperties.cpp
index 16487e0c6b4f3e44c457db0f2a96785f285c2c73..aea1ec6a53006fd632eea6b4d04d3cdc027e5ffc 100644
--- a/MaterialLib/TwoPhaseModels/TwoPhaseFlowWithPPMaterialProperties.cpp
+++ b/MaterialLib/TwoPhaseModels/TwoPhaseFlowWithPPMaterialProperties.cpp
@@ -126,11 +126,12 @@ Eigen::MatrixXd const& TwoPhaseFlowWithPPMaterialProperties::getPermeability(
 }
 
 double TwoPhaseFlowWithPPMaterialProperties::getPorosity(
-    const int material_id, const double /*t*/,
-    const ProcessLib::SpatialPosition& /*pos*/, const double /*p*/,
+    const int material_id, const double t,
+    const ProcessLib::SpatialPosition& pos, const double /*p*/,
     const double T, const double porosity_variable) const
 {
-    return _porosity_models[material_id]->getValue(porosity_variable, T);
+    return _porosity_models[material_id]->getValue(t, pos, porosity_variable,
+                                                   T);
 }
 
 double TwoPhaseFlowWithPPMaterialProperties::getSaturation(
diff --git a/ProcessLib/ComponentTransport/ComponentTransportFEM.h b/ProcessLib/ComponentTransport/ComponentTransportFEM.h
index 0ef541b0c6d5a2e8bb9ba9c0e33e33a6555ab63b..65ed5b0a8aadcc57b705287953ace5ad0926b613 100644
--- a/ProcessLib/ComponentTransport/ComponentTransportFEM.h
+++ b/ProcessLib/ComponentTransport/ComponentTransportFEM.h
@@ -181,7 +181,7 @@ public:
             // porosity model
             auto const porosity =
                 _process_data.porous_media_properties.getPorosity(t, pos)
-                    .getValue(0.0, C_int_pt);
+                    .getValue(t, pos, 0.0, C_int_pt);
 
             auto const retardation_factor =
                 _process_data.retardation_factor(t, pos)[0];
diff --git a/ProcessLib/HT/HTFEM.h b/ProcessLib/HT/HTFEM.h
index a237c8d51a025283d5ec63789de44132c0a1e035..0bf467662fd0e6b40ab6da8647b0ae89a2121b21 100644
--- a/ProcessLib/HT/HTFEM.h
+++ b/ProcessLib/HT/HTFEM.h
@@ -195,7 +195,7 @@ public:
             // porosity model
             auto const porosity =
                 _process_data.porous_media_properties.getPorosity(t, pos)
-                    .getValue(0.0, T_int_pt);
+                    .getValue(t, pos, 0.0, T_int_pt);
 
             double const thermal_conductivity =
                 thermal_conductivity_solid * (1 - porosity) +
diff --git a/ProcessLib/HeatConduction/HeatConductionFEM-impl.h b/ProcessLib/HeatConduction/HeatConductionFEM-impl.h
index f3bafbc7c1ccb7ad84e7747635e55f01fe733515..8c95e5647dfc24e54f7dedfd79acea13e4a5eed4 100644
--- a/ProcessLib/HeatConduction/HeatConductionFEM-impl.h
+++ b/ProcessLib/HeatConduction/HeatConductionFEM-impl.h
@@ -74,7 +74,7 @@ void LocalAssemblerData<ShapeFunction, IntegrationMethod, GlobalDim>::
 
         // Porosity of porous media.
         double const n = liquid_flow_properties.getPorosity(
-            material_id, porosity_variable, T);
+            material_id, t, pos, porosity_variable, T);
 
         // Effective specific heat capacity.
         double const effective_cp = (1.0 - n) * cp_s * rho_s + n * cp_f * rho_f;
diff --git a/ProcessLib/LiquidFlow/CreateLiquidFlowMaterialProperties.cpp b/ProcessLib/LiquidFlow/CreateLiquidFlowMaterialProperties.cpp
index 8fb0f1397bc76eab02b28cf3b92e38d910a0d942..c55cba5e82f988da009f50ac1afd8d51bf7590d5 100644
--- a/ProcessLib/LiquidFlow/CreateLiquidFlowMaterialProperties.cpp
+++ b/ProcessLib/LiquidFlow/CreateLiquidFlowMaterialProperties.cpp
@@ -80,8 +80,8 @@ createLiquidFlowMaterialProperties(
         auto const& porosity_config =
             //! \ogs_file_param{prj__processes__process__LIQUID_FLOW__material_property__porous_medium__porous_medium__porosity}
             porous_medium_config.getConfigSubtree("porosity");
-        auto n =
-            MaterialLib::PorousMedium::createPorosityModel(porosity_config);
+        auto n = MaterialLib::PorousMedium::createPorosityModel(porosity_config,
+                                                                parameters);
         porosity_models.emplace_back(std::move(n));
 
         auto const& storage_config =
diff --git a/ProcessLib/LiquidFlow/LiquidFlowLocalAssembler-impl.h b/ProcessLib/LiquidFlow/LiquidFlowLocalAssembler-impl.h
index a683ad2528b6869ee4c8e94644eb07743df67291..dc5f33e87a23d9e1dd559d999822bc0c0e6db5a6 100644
--- a/ProcessLib/LiquidFlow/LiquidFlowLocalAssembler-impl.h
+++ b/ProcessLib/LiquidFlow/LiquidFlowLocalAssembler-impl.h
@@ -231,8 +231,8 @@ void LiquidFlowLocalAssembler<ShapeFunction, IntegrationMethod, GlobalDim>::
         auto const solid_thermal_expansion =
             _material_properties.getSolidThermalExpansion(t, pos);
         auto const biot_constant = _material_properties.getBiotConstant(t, pos);
-        auto const porosity =
-            _material_properties.getPorosity(material_id, porosity_variable, T);
+        auto const porosity = _material_properties.getPorosity(
+            material_id, t, pos, porosity_variable, T);
         const double eff_thermal_expansion =
             3.0 * (biot_constant - porosity) * solid_thermal_expansion -
             porosity * _material_properties.getdLiquidDensity_dT(p, T) / rho;
diff --git a/ProcessLib/LiquidFlow/LiquidFlowMaterialProperties.cpp b/ProcessLib/LiquidFlow/LiquidFlowMaterialProperties.cpp
index be8dabcb684f031ae37efb534c4f1badef7297ed..e8f54f5dc47fe1f4de600382d8276a3dcc2179f4 100644
--- a/ProcessLib/LiquidFlow/LiquidFlowMaterialProperties.cpp
+++ b/ProcessLib/LiquidFlow/LiquidFlowMaterialProperties.cpp
@@ -96,7 +96,7 @@ double LiquidFlowMaterialProperties::getThermalConductivity(
 }
 
 double LiquidFlowMaterialProperties::getMassCoefficient(
-    const int material_id, const double /*t*/, const SpatialPosition& /*pos*/,
+    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
 {
@@ -111,7 +111,7 @@ double LiquidFlowMaterialProperties::getMassCoefficient(
     assert(rho > 0.);
 
     const double porosity =
-        _porosity_models[material_id]->getValue(porosity_variable, T);
+        _porosity_models[material_id]->getValue(t, pos, porosity_variable, T);
     const double storage =
         _storage_models[material_id]->getValue(storage_variable);
     return porosity * drho_dp / rho + storage;
diff --git a/ProcessLib/LiquidFlow/LiquidFlowMaterialProperties.h b/ProcessLib/LiquidFlow/LiquidFlowMaterialProperties.h
index 0230ec5b632b5cec2ecc12a25fa39847953aa88c..59f2d71871713e9136c6f2c5099d935362e0ec3d 100644
--- a/ProcessLib/LiquidFlow/LiquidFlowMaterialProperties.h
+++ b/ProcessLib/LiquidFlow/LiquidFlowMaterialProperties.h
@@ -121,10 +121,12 @@ public:
 
     double getThermalConductivity(const double p, const double T) const;
 
-    double getPorosity(const int material_id, const double porosity_variable,
-                       const double T) const
+    double getPorosity(const int material_id, const double t,
+                       const SpatialPosition& pos,
+                       const double porosity_variable, const double T) const
     {
-        return _porosity_models[material_id]->getValue(porosity_variable, T);
+        return _porosity_models[material_id]->getValue(t, pos,
+                                                       porosity_variable, T);
     }
 
     double getSolidThermalExpansion(const double t,
diff --git a/ProcessLib/RichardsComponentTransport/CreatePorousMediaProperties.cpp b/ProcessLib/RichardsComponentTransport/CreatePorousMediaProperties.cpp
index 25be75902cf072db887ae044df11b4aef9d6f92a..032e078c64363303273c13830642e544a4056e85 100644
--- a/ProcessLib/RichardsComponentTransport/CreatePorousMediaProperties.cpp
+++ b/ProcessLib/RichardsComponentTransport/CreatePorousMediaProperties.cpp
@@ -56,7 +56,8 @@ PorousMediaProperties createPorousMediaProperties(
             //! \ogs_file_param{prj__processes__process__RichardsComponentTransport__porous_medium__porous_medium__porosity}
             porous_medium_config.getConfigSubtree("porosity");
         porosity_models.emplace_back(
-            MaterialLib::PorousMedium::createPorosityModel(porosity_config));
+            MaterialLib::PorousMedium::createPorosityModel(porosity_config,
+                                                           parameters));
 
         // Configuration for the intrinsic permeability
         auto const& permeability_config =
diff --git a/ProcessLib/RichardsComponentTransport/RichardsComponentTransportFEM-impl.h b/ProcessLib/RichardsComponentTransport/RichardsComponentTransportFEM-impl.h
index 88c6c3f7bfe0256f4f70b4b06ed11e95e0026f06..fc42d20c110e6b673a68af06886771241c390c27 100644
--- a/ProcessLib/RichardsComponentTransport/RichardsComponentTransportFEM-impl.h
+++ b/ProcessLib/RichardsComponentTransport/RichardsComponentTransportFEM-impl.h
@@ -134,7 +134,7 @@ void LocalAssemblerData<ShapeFunction, IntegrationMethod, GlobalDim>::assemble(
         // porosity model
         auto const porosity =
             _process_data.porous_media_properties.getPorosity(t, pos).getValue(
-                0.0, C_int_pt);
+                t, pos, 0.0, C_int_pt);
 
         auto const retardation_factor =
             _process_data.retardation_factor(t, pos)[0];
diff --git a/ProcessLib/RichardsFlow/CreateRichardsFlowMaterialProperties.cpp b/ProcessLib/RichardsFlow/CreateRichardsFlowMaterialProperties.cpp
index da3485782c507565f231676c2075874dc2770ab8..291851eef743f74b8536cff159fe39c1378c90b2 100644
--- a/ProcessLib/RichardsFlow/CreateRichardsFlowMaterialProperties.cpp
+++ b/ProcessLib/RichardsFlow/CreateRichardsFlowMaterialProperties.cpp
@@ -36,7 +36,8 @@ std::unique_ptr<RichardsFlowMaterialProperties>
 createRichardsFlowMaterialProperties(
     BaseLib::ConfigTree const& config,
     boost::optional<MeshLib::PropertyVector<int> const&>
-        material_ids)
+        material_ids,
+    std::vector<std::unique_ptr<ParameterBase>> const& parameters)
 {
     DBUG("Reading material properties of Richards flow process.");
 
@@ -77,7 +78,8 @@ createRichardsFlowMaterialProperties(
 
         //! \ogs_file_param{prj__processes__process__RICHARDS_FLOW__material_property__porous_medium__porous_medium__porosity}
         auto const& porosity_conf = conf.getConfigSubtree("porosity");
-        auto n = MaterialLib::PorousMedium::createPorosityModel(porosity_conf);
+        auto n = MaterialLib::PorousMedium::createPorosityModel(porosity_conf,
+                                                                parameters);
         porosity_models.emplace_back(std::move(n));
 
         //! \ogs_file_param{prj__processes__process__RICHARDS_FLOW__material_property__porous_medium__porous_medium__storage}
diff --git a/ProcessLib/RichardsFlow/CreateRichardsFlowMaterialProperties.h b/ProcessLib/RichardsFlow/CreateRichardsFlowMaterialProperties.h
index f069f286f291ef3991ff6ce24f78bffffdcfec16..e71981aa06bf0e1ce8d455c09e9ce0a522fc163f 100644
--- a/ProcessLib/RichardsFlow/CreateRichardsFlowMaterialProperties.h
+++ b/ProcessLib/RichardsFlow/CreateRichardsFlowMaterialProperties.h
@@ -23,7 +23,8 @@ std::unique_ptr<RichardsFlowMaterialProperties>
 createRichardsFlowMaterialProperties(
     BaseLib::ConfigTree const& config,
     boost::optional<MeshLib::PropertyVector<int> const&>
-        material_ids);
+        material_ids,
+    std::vector<std::unique_ptr<ParameterBase>> const& parameters);
 
 }  // end namespace
 }  // end namespace
diff --git a/ProcessLib/RichardsFlow/CreateRichardsFlowProcess.cpp b/ProcessLib/RichardsFlow/CreateRichardsFlowProcess.cpp
index bdcde323b286a701d5cb58b6b8bea000dddebe38..ab7b1e4dbaeab0f872b0ef728ee49b67a800a7f7 100644
--- a/ProcessLib/RichardsFlow/CreateRichardsFlowProcess.cpp
+++ b/ProcessLib/RichardsFlow/CreateRichardsFlowProcess.cpp
@@ -89,7 +89,8 @@ std::unique_ptr<Process> createRichardsFlowProcess(
         INFO("The Richards flow is in homogeneous porous media.");
     }
     std::unique_ptr<RichardsFlowMaterialProperties> material =
-        createRichardsFlowMaterialProperties(mat_config, material_ids);
+        createRichardsFlowMaterialProperties(mat_config, material_ids,
+                                             parameters);
     RichardsFlowProcessData process_data{std::move(material),
                                          specific_body_force, has_gravity,
                                          mass_lumping, temperature};
diff --git a/ProcessLib/RichardsFlow/RichardsFlowMaterialProperties.cpp b/ProcessLib/RichardsFlow/RichardsFlowMaterialProperties.cpp
index 3c5f64280b7077a777ff0e79ce5d5f4f8fb7d809..e9c8b6e613e22e69a75258fa397b78d38f50d5c4 100644
--- a/ProcessLib/RichardsFlow/RichardsFlowMaterialProperties.cpp
+++ b/ProcessLib/RichardsFlow/RichardsFlowMaterialProperties.cpp
@@ -92,11 +92,12 @@ Eigen::MatrixXd const& RichardsFlowMaterialProperties::getPermeability(
 }
 
 double RichardsFlowMaterialProperties::getPorosity(
-    const int material_id, const double /*t*/,
-    const ProcessLib::SpatialPosition& /*pos*/, const double /*p*/,
+    const int material_id, const double t,
+    const ProcessLib::SpatialPosition& pos, const double /*p*/,
     const double T, const double porosity_variable) const
 {
-    return _porosity_models[material_id]->getValue(porosity_variable, T);
+    return _porosity_models[material_id]->getValue(t, pos, porosity_variable,
+                                                   T);
 }
 
 double RichardsFlowMaterialProperties::getStorage(
diff --git a/ProcessLib/ThermalTwoPhaseFlowWithPP/CreateThermalTwoPhaseFlowWithPPMaterialProperties.cpp b/ProcessLib/ThermalTwoPhaseFlowWithPP/CreateThermalTwoPhaseFlowWithPPMaterialProperties.cpp
index aed184925974c88a4304bbd429b9ddaf78f57a14..34e15ad44fd85e91a1256b8467dd3bc9581500d2 100644
--- a/ProcessLib/ThermalTwoPhaseFlowWithPP/CreateThermalTwoPhaseFlowWithPPMaterialProperties.cpp
+++ b/ProcessLib/ThermalTwoPhaseFlowWithPP/CreateThermalTwoPhaseFlowWithPPMaterialProperties.cpp
@@ -38,13 +38,14 @@ namespace ThermalTwoPhaseFlowWithPP
 std::unique_ptr<ThermalTwoPhaseFlowWithPPMaterialProperties>
 createThermalTwoPhaseFlowWithPPMaterialProperties(
     BaseLib::ConfigTree const& config,
-    MeshLib::PropertyVector<int> const& material_ids)
+    MeshLib::PropertyVector<int> const& material_ids,
+    std::vector<std::unique_ptr<ProcessLib::ParameterBase>> const& parameters)
 {
     DBUG(
         "Reading material properties of nonisothermal two-phase flow process.");
     auto two_phase_model_tuple =
         MaterialLib::TwoPhaseFlowWithPP::createTwoPhaseFlowMaterialProperties(
-            config, material_ids);
+            config, material_ids, parameters);
     auto two_phase_material_model =
         std::move(std::get<0>(two_phase_model_tuple));
     auto const& fluid_config = std::get<1>(two_phase_model_tuple);
diff --git a/ProcessLib/ThermalTwoPhaseFlowWithPP/CreateThermalTwoPhaseFlowWithPPMaterialProperties.h b/ProcessLib/ThermalTwoPhaseFlowWithPP/CreateThermalTwoPhaseFlowWithPPMaterialProperties.h
index 70b22ed38a85101f0460f5b697cc28fa1cb642df..8b9680ba4191994aab53966136c216447008dd68 100644
--- a/ProcessLib/ThermalTwoPhaseFlowWithPP/CreateThermalTwoPhaseFlowWithPPMaterialProperties.h
+++ b/ProcessLib/ThermalTwoPhaseFlowWithPP/CreateThermalTwoPhaseFlowWithPPMaterialProperties.h
@@ -30,7 +30,8 @@ namespace ThermalTwoPhaseFlowWithPP
 std::unique_ptr<ThermalTwoPhaseFlowWithPPMaterialProperties>
 createThermalTwoPhaseFlowWithPPMaterialProperties(
     BaseLib::ConfigTree const& config,
-    MeshLib::PropertyVector<int> const& material_ids);
+    MeshLib::PropertyVector<int> const& material_ids,
+    std::vector<std::unique_ptr<ProcessLib::ParameterBase>> const& parameters);
 
 }  // end namespace
 }  // end namespace
diff --git a/ProcessLib/ThermalTwoPhaseFlowWithPP/CreateThermalTwoPhaseFlowWithPPProcess.cpp b/ProcessLib/ThermalTwoPhaseFlowWithPP/CreateThermalTwoPhaseFlowWithPPProcess.cpp
index 12e3471ac896714910eae9e2dfc47d7da13073d0..e8dd8ca61c0f783175347118e97f0cd1f1f2e12e 100644
--- a/ProcessLib/ThermalTwoPhaseFlowWithPP/CreateThermalTwoPhaseFlowWithPPProcess.cpp
+++ b/ProcessLib/ThermalTwoPhaseFlowWithPP/CreateThermalTwoPhaseFlowWithPPProcess.cpp
@@ -108,8 +108,8 @@ std::unique_ptr<Process> createThermalTwoPhaseFlowWithPPProcess(
         INFO("The twophase flow is in heterogeneous porous media.");
         auto const& mat_ids =
             mesh.getProperties().getPropertyVector<int>("MaterialIDs");
-        material = createThermalTwoPhaseFlowWithPPMaterialProperties(mat_config,
-                                                                     *mat_ids);
+        material = createThermalTwoPhaseFlowWithPPMaterialProperties(
+            mat_config, *mat_ids, parameters);
     }
     else
     {
@@ -119,7 +119,7 @@ std::unique_ptr<Process> createThermalTwoPhaseFlowWithPPProcess(
             dummy_property.createNewPropertyVector<int>(
                 "MaterialIDs", MeshLib::MeshItemType::Cell, 1);
         material = createThermalTwoPhaseFlowWithPPMaterialProperties(
-            mat_config, *dummy_property_vector);
+            mat_config, *dummy_property_vector, parameters);
     }
 
     ThermalTwoPhaseFlowWithPPProcessData process_data{specific_body_force,
diff --git a/ProcessLib/TwoPhaseFlowWithPP/CreateTwoPhaseFlowWithPPMaterialProperties.cpp b/ProcessLib/TwoPhaseFlowWithPP/CreateTwoPhaseFlowWithPPMaterialProperties.cpp
index 5332806a6b5eebe0a689e659922e789de70b24a0..1dbd72700e24eeefa988f6221fb91c838594d705 100644
--- a/ProcessLib/TwoPhaseFlowWithPP/CreateTwoPhaseFlowWithPPMaterialProperties.cpp
+++ b/ProcessLib/TwoPhaseFlowWithPP/CreateTwoPhaseFlowWithPPMaterialProperties.cpp
@@ -32,7 +32,8 @@ std::unique_ptr<TwoPhaseFlowWithPPMaterialProperties>
 createTwoPhaseFlowWithPPMaterialProperties(
     BaseLib::ConfigTree const& config,
     boost::optional<MeshLib::PropertyVector<int> const&>
-        material_ids)
+        material_ids,
+    std::vector<std::unique_ptr<ParameterBase>> const& parameters)
 {
     DBUG("Reading material properties of two-phase flow process.");
 
@@ -86,7 +87,8 @@ createTwoPhaseFlowWithPPMaterialProperties(
 
         //! \ogs_file_param{prj__processes__process__TWOPHASE_FLOW_PP__material_property__porous_medium__porous_medium__porosity}
         auto const& porosity_conf = conf.getConfigSubtree("porosity");
-        auto n = MaterialLib::PorousMedium::createPorosityModel(porosity_conf);
+        auto n = MaterialLib::PorousMedium::createPorosityModel(porosity_conf,
+                                                                parameters);
         porosity_models.emplace_back(std::move(n));
 
         //! \ogs_file_param{prj__processes__process__TWOPHASE_FLOW_PP__material_property__porous_medium__porous_medium__storage}
diff --git a/ProcessLib/TwoPhaseFlowWithPP/CreateTwoPhaseFlowWithPPMaterialProperties.h b/ProcessLib/TwoPhaseFlowWithPP/CreateTwoPhaseFlowWithPPMaterialProperties.h
index a00d066f3821d76ed6be1b24b27bb04c612a01e3..f4ad3c875dece2dfd3e2c28d765b8d8bec084f05 100644
--- a/ProcessLib/TwoPhaseFlowWithPP/CreateTwoPhaseFlowWithPPMaterialProperties.h
+++ b/ProcessLib/TwoPhaseFlowWithPP/CreateTwoPhaseFlowWithPPMaterialProperties.h
@@ -24,7 +24,8 @@ std::unique_ptr<TwoPhaseFlowWithPPMaterialProperties>
 createTwoPhaseFlowWithPPMaterialProperties(
     BaseLib::ConfigTree const& config,
     boost::optional<MeshLib::PropertyVector<int> const&>
-        material_ids);
+        material_ids,
+    std::vector<std::unique_ptr<ParameterBase>> const& parameters);
 
 }  // end namespace
 }  // end namespace
diff --git a/ProcessLib/TwoPhaseFlowWithPP/CreateTwoPhaseFlowWithPPProcess.cpp b/ProcessLib/TwoPhaseFlowWithPP/CreateTwoPhaseFlowWithPPProcess.cpp
index 71be4b9be07ba06602bfc1e7277321b0d456f3de..bf626795982f2cef21f626aad16d6853fb9d58bd 100644
--- a/ProcessLib/TwoPhaseFlowWithPP/CreateTwoPhaseFlowWithPPProcess.cpp
+++ b/ProcessLib/TwoPhaseFlowWithPP/CreateTwoPhaseFlowWithPPProcess.cpp
@@ -86,8 +86,9 @@ std::unique_ptr<Process> createTwoPhaseFlowWithPPProcess(
     {
         INFO("The twophase flow is in homogeneous porous media.");
     }
-    std::unique_ptr<TwoPhaseFlowWithPPMaterialProperties>
-    material = createTwoPhaseFlowWithPPMaterialProperties(mat_config, material_ids);
+    std::unique_ptr<TwoPhaseFlowWithPPMaterialProperties> material =
+        createTwoPhaseFlowWithPPMaterialProperties(mat_config, material_ids,
+                                                   parameters);
 
     TwoPhaseFlowWithPPProcessData process_data{
         specific_body_force, has_gravity, mass_lumping, temperature, std::move(material)};
diff --git a/ProcessLib/TwoPhaseFlowWithPP/TwoPhaseFlowWithPPMaterialProperties.cpp b/ProcessLib/TwoPhaseFlowWithPP/TwoPhaseFlowWithPPMaterialProperties.cpp
index 369eec2abc51f0987acacd492b435a1d5c34c7b0..457d78de5204086004ae9707f9f5c7bb3269ad2f 100644
--- a/ProcessLib/TwoPhaseFlowWithPP/TwoPhaseFlowWithPPMaterialProperties.cpp
+++ b/ProcessLib/TwoPhaseFlowWithPP/TwoPhaseFlowWithPPMaterialProperties.cpp
@@ -129,11 +129,11 @@ Eigen::MatrixXd const& TwoPhaseFlowWithPPMaterialProperties::getPermeability(
 }
 
 double TwoPhaseFlowWithPPMaterialProperties::getPorosity(
-    const int material_id, const double /*t*/,
-    const ProcessLib::SpatialPosition& /*pos*/, const double /*p*/,
+    const int material_id, const double t,
+    const ProcessLib::SpatialPosition& pos, const double /*p*/,
     const double T, const double porosity_variable) const
 {
-    return _porosity_models[material_id]->getValue(porosity_variable, T);
+    return _porosity_models[material_id]->getValue(t, pos, porosity_variable, T);
 }
 
 double TwoPhaseFlowWithPPMaterialProperties::getNonwetRelativePermeability(
diff --git a/ProcessLib/TwoPhaseFlowWithPrho/CreateTwoPhaseFlowPrhoMaterialProperties.cpp b/ProcessLib/TwoPhaseFlowWithPrho/CreateTwoPhaseFlowPrhoMaterialProperties.cpp
index db054cb6b85ea8b27f667502be5dc0e632e4e0e4..c28e8116b701f0339e4d73c0fd40e8fbecfb9928 100644
--- a/ProcessLib/TwoPhaseFlowWithPrho/CreateTwoPhaseFlowPrhoMaterialProperties.cpp
+++ b/ProcessLib/TwoPhaseFlowWithPrho/CreateTwoPhaseFlowPrhoMaterialProperties.cpp
@@ -31,7 +31,8 @@ namespace TwoPhaseFlowWithPrho
 std::unique_ptr<TwoPhaseFlowWithPrhoMaterialProperties>
 createTwoPhaseFlowPrhoMaterialProperties(
     BaseLib::ConfigTree const& config,
-    boost::optional<MeshLib::PropertyVector<int> const&> material_ids)
+    boost::optional<MeshLib::PropertyVector<int> const&> material_ids,
+    std::vector<std::unique_ptr<ParameterBase>> const& parameters)
 {
     DBUG("Reading material properties of two-phase flow process.");
 
@@ -86,7 +87,8 @@ createTwoPhaseFlowPrhoMaterialProperties(
 
         //! \ogs_file_param{prj__processes__process__TWOPHASE_FLOW_PRHO__material_property__porous_medium__porous_medium__porosity}
         auto const& porosity_conf = conf.getConfigSubtree("porosity");
-        auto n = MaterialLib::PorousMedium::createPorosityModel(porosity_conf);
+        auto n = MaterialLib::PorousMedium::createPorosityModel(porosity_conf,
+                                                                parameters);
         _porosity_models.emplace_back(std::move(n));
 
         //! \ogs_file_param{prj__processes__process__TWOPHASE_FLOW_PRHO__material_property__porous_medium__porous_medium__storage}
diff --git a/ProcessLib/TwoPhaseFlowWithPrho/CreateTwoPhaseFlowPrhoMaterialProperties.h b/ProcessLib/TwoPhaseFlowWithPrho/CreateTwoPhaseFlowPrhoMaterialProperties.h
index 738a99ce5a40cb9f2fde8db82428d4299c24903f..7f759abf083e9bb4bd1b0ef3c728bb60a02d8a18 100644
--- a/ProcessLib/TwoPhaseFlowWithPrho/CreateTwoPhaseFlowPrhoMaterialProperties.h
+++ b/ProcessLib/TwoPhaseFlowWithPrho/CreateTwoPhaseFlowPrhoMaterialProperties.h
@@ -23,7 +23,8 @@ namespace TwoPhaseFlowWithPrho
 std::unique_ptr<TwoPhaseFlowWithPrhoMaterialProperties>
 createTwoPhaseFlowPrhoMaterialProperties(
     BaseLib::ConfigTree const& config,
-    boost::optional<MeshLib::PropertyVector<int> const&> material_ids);
+    boost::optional<MeshLib::PropertyVector<int> const&> material_ids,
+    std::vector<std::unique_ptr<ParameterBase>> const& parameters);
 
 }  // end namespace
 }  // end namespace
diff --git a/ProcessLib/TwoPhaseFlowWithPrho/CreateTwoPhaseFlowWithPrhoProcess.cpp b/ProcessLib/TwoPhaseFlowWithPrho/CreateTwoPhaseFlowWithPrhoProcess.cpp
index 3c3bb6a3016b655ce33412c92fd1aed5e066a84c..5beb4b9496475d631ebd0ace6b91d2beefab7d4b 100644
--- a/ProcessLib/TwoPhaseFlowWithPrho/CreateTwoPhaseFlowWithPrhoProcess.cpp
+++ b/ProcessLib/TwoPhaseFlowWithPrho/CreateTwoPhaseFlowWithPrhoProcess.cpp
@@ -97,7 +97,8 @@ std::unique_ptr<Process> createTwoPhaseFlowWithPrhoProcess(
     }
 
     std::unique_ptr<TwoPhaseFlowWithPrhoMaterialProperties> material =
-        createTwoPhaseFlowPrhoMaterialProperties(mat_config, material_ids);
+        createTwoPhaseFlowPrhoMaterialProperties(mat_config, material_ids,
+                                                 parameters);
 
     TwoPhaseFlowWithPrhoProcessData process_data{
         specific_body_force, has_gravity, mass_lumping,       diff_coeff_b,
diff --git a/ProcessLib/TwoPhaseFlowWithPrho/TwoPhaseFlowWithPrhoMaterialProperties.cpp b/ProcessLib/TwoPhaseFlowWithPrho/TwoPhaseFlowWithPrhoMaterialProperties.cpp
index 687acf6062d0e6b7ea9f204554bbdf2308b20f67..2f635f90521d01b82974e24ac0c45e8680817a63 100644
--- a/ProcessLib/TwoPhaseFlowWithPrho/TwoPhaseFlowWithPrhoMaterialProperties.cpp
+++ b/ProcessLib/TwoPhaseFlowWithPrho/TwoPhaseFlowWithPrhoMaterialProperties.cpp
@@ -134,11 +134,12 @@ Eigen::MatrixXd const& TwoPhaseFlowWithPrhoMaterialProperties::getPermeability(
 }
 
 double TwoPhaseFlowWithPrhoMaterialProperties::getPorosity(
-    const int material_id, const double /*t*/,
-    const ProcessLib::SpatialPosition& /*pos*/, const double /*p*/,
+    const int material_id, const double t,
+    const ProcessLib::SpatialPosition& pos, const double /*p*/,
     const double T, const double porosity_variable) const
 {
-    return _porosity_models[material_id]->getValue(porosity_variable, T);
+    return _porosity_models[material_id]->getValue(t, pos, porosity_variable,
+                                                   T);
 }
 
 double TwoPhaseFlowWithPrhoMaterialProperties::getNonwetRelativePermeability(