diff --git a/Applications/ApplicationsLib/ProjectData.cpp b/Applications/ApplicationsLib/ProjectData.cpp
index 5a549a34bca9ae4f8835711d9861ed7ea8f128b6..79a40b8ccbcdccfe1711cf77e2d4e23528338d80 100644
--- a/Applications/ApplicationsLib/ProjectData.cpp
+++ b/Applications/ApplicationsLib/ProjectData.cpp
@@ -810,7 +810,7 @@ void ProjectData::parseProcesses(
                 createRichardsComponentTransportProcess(
                     name, *_mesh_vec[0], std::move(jacobian_assembler),
                     _process_variables, _parameters, integration_order,
-                    process_config);
+                    process_config, _media);
         }
         else
 #endif
diff --git a/Documentation/ProjectFile/prj/processes/process/RichardsComponentTransport/porous_medium/porous_medium/t_permeability.md b/Documentation/ProjectFile/prj/processes/process/RichardsComponentTransport/porous_medium/porous_medium/t_permeability.md
deleted file mode 100644
index 075c8a48fde6b9a1d7682d9cc08e6bcaa9feeb93..0000000000000000000000000000000000000000
--- a/Documentation/ProjectFile/prj/processes/process/RichardsComponentTransport/porous_medium/porous_medium/t_permeability.md
+++ /dev/null
@@ -1 +0,0 @@
-A tag for the relative permeability model of a porous medium.
\ No newline at end of file
diff --git a/Documentation/ProjectFile/prj/processes/process/RichardsComponentTransport/porous_medium/porous_medium/t_porosity.md b/Documentation/ProjectFile/prj/processes/process/RichardsComponentTransport/porous_medium/porous_medium/t_porosity.md
deleted file mode 100644
index d90fcba994c498eb7f7c82b6052cf4619ef7735b..0000000000000000000000000000000000000000
--- a/Documentation/ProjectFile/prj/processes/process/RichardsComponentTransport/porous_medium/porous_medium/t_porosity.md
+++ /dev/null
@@ -1 +0,0 @@
-A tag for the porosity model of a porous medium.
\ No newline at end of file
diff --git a/Documentation/ProjectFile/prj/processes/process/RichardsComponentTransport/porous_medium/porous_medium/t_relative_permeability.md b/Documentation/ProjectFile/prj/processes/process/RichardsComponentTransport/porous_medium/porous_medium/t_relative_permeability.md
deleted file mode 100644
index fd2a51343fb9e4a7a8ce38bdc88c31f400c1b7e7..0000000000000000000000000000000000000000
--- a/Documentation/ProjectFile/prj/processes/process/RichardsComponentTransport/porous_medium/porous_medium/t_relative_permeability.md
+++ /dev/null
@@ -1 +0,0 @@
-A tag for the relative permeability model.
diff --git a/Documentation/ProjectFile/prj/processes/process/RichardsComponentTransport/porous_medium/porous_medium/t_storage.md b/Documentation/ProjectFile/prj/processes/process/RichardsComponentTransport/porous_medium/porous_medium/t_storage.md
deleted file mode 100644
index 756a75cbc74b625cca84e3b6b15dcc29b36026b5..0000000000000000000000000000000000000000
--- a/Documentation/ProjectFile/prj/processes/process/RichardsComponentTransport/porous_medium/porous_medium/t_storage.md
+++ /dev/null
@@ -1 +0,0 @@
-A tag for the storage model of a porous medium.
\ No newline at end of file
diff --git a/Documentation/ProjectFile/prj/processes/process/RichardsComponentTransport/t_decay_rate.md b/Documentation/ProjectFile/prj/processes/process/RichardsComponentTransport/t_decay_rate.md
deleted file mode 100644
index 66473d364e13a2cbd454db05f258f25be4197899..0000000000000000000000000000000000000000
--- a/Documentation/ProjectFile/prj/processes/process/RichardsComponentTransport/t_decay_rate.md
+++ /dev/null
@@ -1 +0,0 @@
-The decay rate \f$\vartheta\f$ used in the transport process.
diff --git a/Documentation/ProjectFile/prj/processes/process/RichardsComponentTransport/t_fluid.md b/Documentation/ProjectFile/prj/processes/process/RichardsComponentTransport/t_fluid.md
deleted file mode 100644
index 00aef4b95e01a85c9fb21ee4e2f36860cefd7dc1..0000000000000000000000000000000000000000
--- a/Documentation/ProjectFile/prj/processes/process/RichardsComponentTransport/t_fluid.md
+++ /dev/null
@@ -1 +0,0 @@
-Defines fluid properties.
diff --git a/Documentation/ProjectFile/prj/processes/process/RichardsComponentTransport/t_fluid_reference_density.md b/Documentation/ProjectFile/prj/processes/process/RichardsComponentTransport/t_fluid_reference_density.md
deleted file mode 100644
index 7a9d865b220af527c3d672b644f8875d8b924c75..0000000000000000000000000000000000000000
--- a/Documentation/ProjectFile/prj/processes/process/RichardsComponentTransport/t_fluid_reference_density.md
+++ /dev/null
@@ -1 +0,0 @@
-Parameter for the specification of the reference density of the fluid.
diff --git a/Documentation/ProjectFile/prj/processes/process/RichardsComponentTransport/t_molecular_diffusion_coefficient.md b/Documentation/ProjectFile/prj/processes/process/RichardsComponentTransport/t_molecular_diffusion_coefficient.md
deleted file mode 100644
index ba1c95fe91099233c51072710d9817f7dfeac8e8..0000000000000000000000000000000000000000
--- a/Documentation/ProjectFile/prj/processes/process/RichardsComponentTransport/t_molecular_diffusion_coefficient.md
+++ /dev/null
@@ -1,2 +0,0 @@
-Molecular diffusion coefficient \f$D_d\f$ used to compute the hydrodynamic
-dispersion tensor.
diff --git a/Documentation/ProjectFile/prj/processes/process/RichardsComponentTransport/t_retardation_factor.md b/Documentation/ProjectFile/prj/processes/process/RichardsComponentTransport/t_retardation_factor.md
deleted file mode 100644
index 418ad86524af0595f76fcaa2a209f440e5227b33..0000000000000000000000000000000000000000
--- a/Documentation/ProjectFile/prj/processes/process/RichardsComponentTransport/t_retardation_factor.md
+++ /dev/null
@@ -1 +0,0 @@
-Parameter for the specification of the retardation factor.
diff --git a/Documentation/ProjectFile/prj/processes/process/RichardsComponentTransport/t_solute_dispersivity_longitudinal.md b/Documentation/ProjectFile/prj/processes/process/RichardsComponentTransport/t_solute_dispersivity_longitudinal.md
deleted file mode 100644
index 31b59b61b5f888522149c2bb4c47b192d41b84df..0000000000000000000000000000000000000000
--- a/Documentation/ProjectFile/prj/processes/process/RichardsComponentTransport/t_solute_dispersivity_longitudinal.md
+++ /dev/null
@@ -1,2 +0,0 @@
-The longitudinal dispersivity of chemical species \f$\beta_L\f$ used to compute
-the hydrodynamic dispersion tensor.
diff --git a/Documentation/ProjectFile/prj/processes/process/RichardsComponentTransport/t_solute_dispersivity_transverse.md b/Documentation/ProjectFile/prj/processes/process/RichardsComponentTransport/t_solute_dispersivity_transverse.md
deleted file mode 100644
index e4b2f6360e7d9053f5ce04455d4cc6ce022aab81..0000000000000000000000000000000000000000
--- a/Documentation/ProjectFile/prj/processes/process/RichardsComponentTransport/t_solute_dispersivity_transverse.md
+++ /dev/null
@@ -1,2 +0,0 @@
-The transverse dispersivity of chemical species \f$\beta_T\f$ used to compute
-the hydrodynamic dispersion tensor.
diff --git a/ProcessLib/RichardsComponentTransport/CreatePorousMediaProperties.cpp b/ProcessLib/RichardsComponentTransport/CreatePorousMediaProperties.cpp
index b5baad1c71ced0a21bf95fec2a2889854ee35455..4a8b0155acf3c6c0338e40ce5099338c870bdece 100644
--- a/ProcessLib/RichardsComponentTransport/CreatePorousMediaProperties.cpp
+++ b/ProcessLib/RichardsComponentTransport/CreatePorousMediaProperties.cpp
@@ -11,11 +11,7 @@
 #include "CreatePorousMediaProperties.h"
 
 #include "BaseLib/Algorithm.h"
-#include "MaterialLib/PorousMedium/Permeability/createPermeabilityModel.h"
-#include "MaterialLib/PorousMedium/Porosity/createPorosityModel.h"
-#include "MaterialLib/PorousMedium/Storage/createStorageModel.h"
 #include "MaterialLib/PorousMedium/UnsaturatedProperty/CapillaryPressure/CreateCapillaryPressureModel.h"
-#include "MaterialLib/PorousMedium/UnsaturatedProperty/RelativePermeability/CreateRelativePermeabilityModel.h"
 #include "MeshLib/Mesh.h"
 
 namespace ProcessLib
@@ -23,23 +19,13 @@ namespace ProcessLib
 namespace RichardsComponentTransport
 {
 PorousMediaProperties createPorousMediaProperties(
-    MeshLib::Mesh& mesh, BaseLib::ConfigTree const& porous_medium_configs,
-    std::vector<std::unique_ptr<ParameterLib::ParameterBase>> const& parameters)
+    MeshLib::Mesh& mesh, BaseLib::ConfigTree const& porous_medium_configs)
 {
     DBUG("Create PorousMediaProperties.");
 
-    std::vector<std::unique_ptr<MaterialLib::PorousMedium::Permeability>>
-        intrinsic_permeability_models;
-    std::vector<std::unique_ptr<MaterialLib::PorousMedium::Porosity>>
-        porosity_models;
-    std::vector<std::unique_ptr<MaterialLib::PorousMedium::Storage>>
-        storage_models;
     std::vector<
         std::unique_ptr<MaterialLib::PorousMedium::CapillaryPressureSaturation>>
         capillary_pressure_models;
-    std::vector<
-        std::unique_ptr<MaterialLib::PorousMedium::RelativePermeability>>
-        relative_permeability_models;
 
     std::vector<int> mat_ids;
     for (
@@ -51,28 +37,6 @@ PorousMediaProperties createPorousMediaProperties(
         auto const id = porous_medium_config.getConfigAttribute<int>("id");
         mat_ids.push_back(id);
 
-        auto const& porosity_config =
-            //! \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,
-                                                           parameters));
-
-        // Configuration for the intrinsic permeability
-        auto const& permeability_config =
-            //! \ogs_file_param{prj__processes__process__RichardsComponentTransport__porous_medium__porous_medium__permeability}
-            porous_medium_config.getConfigSubtree("permeability");
-        intrinsic_permeability_models.emplace_back(
-            MaterialLib::PorousMedium::createPermeabilityModel(
-                permeability_config, parameters));
-
-        // Configuration for the specific storage.
-        auto const& storage_config =
-            //! \ogs_file_param{prj__processes__process__RichardsComponentTransport__porous_medium__porous_medium__storage}
-            porous_medium_config.getConfigSubtree("storage");
-        storage_models.emplace_back(
-            MaterialLib::PorousMedium::createStorageModel(storage_config));
-
         auto const& capillary_pressure_config =
             //! \ogs_file_param{prj__processes__process__RichardsComponentTransport__porous_medium__porous_medium__capillary_pressure}
             porous_medium_config.getConfigSubtree("capillary_pressure");
@@ -80,19 +44,8 @@ PorousMediaProperties createPorousMediaProperties(
             MaterialLib::PorousMedium::createCapillaryPressureModel(
                 capillary_pressure_config);
         capillary_pressure_models.emplace_back(std::move(capillary_pressure));
-
-        auto const& krel_config =
-            //! \ogs_file_param{prj__processes__process__RichardsComponentTransport__porous_medium__porous_medium__relative_permeability}
-            porous_medium_config.getConfigSubtree("relative_permeability");
-        auto krel = MaterialLib::PorousMedium::createRelativePermeabilityModel(
-            krel_config);
-        relative_permeability_models.emplace_back(std::move(krel));
     }
 
-    BaseLib::reorderVector(intrinsic_permeability_models, mat_ids);
-    BaseLib::reorderVector(porosity_models, mat_ids);
-    BaseLib::reorderVector(storage_models, mat_ids);
-
     std::vector<int> material_ids(mesh.getNumberOfElements());
     if (mesh.getProperties().existsPropertyVector<int>("MaterialIDs"))
     {
@@ -103,11 +56,7 @@ PorousMediaProperties createPorousMediaProperties(
                   material_ids.begin());
     }
 
-    return PorousMediaProperties{std::move(porosity_models),
-                                 std::move(intrinsic_permeability_models),
-                                 std::move(storage_models),
-                                 std::move(capillary_pressure_models),
-                                 std::move(relative_permeability_models),
+    return PorousMediaProperties{std::move(capillary_pressure_models),
                                  std::move(material_ids)};
 }
 
diff --git a/ProcessLib/RichardsComponentTransport/CreatePorousMediaProperties.h b/ProcessLib/RichardsComponentTransport/CreatePorousMediaProperties.h
index 9c101d82cae53838c68b74b07d074ea7976851d3..f56fd14a0d70ca3d7b640752d8433351ff973a71 100644
--- a/ProcessLib/RichardsComponentTransport/CreatePorousMediaProperties.h
+++ b/ProcessLib/RichardsComponentTransport/CreatePorousMediaProperties.h
@@ -23,8 +23,6 @@ namespace ProcessLib
 namespace RichardsComponentTransport
 {
 PorousMediaProperties createPorousMediaProperties(
-    MeshLib::Mesh& mesh, BaseLib::ConfigTree const& porous_medium_configs,
-    std::vector<std::unique_ptr<ParameterLib::ParameterBase>> const&
-        parameters);
+    MeshLib::Mesh& mesh, BaseLib::ConfigTree const& porous_medium_configs);
 }
 }
diff --git a/ProcessLib/RichardsComponentTransport/CreateRichardsComponentTransportProcess.cpp b/ProcessLib/RichardsComponentTransport/CreateRichardsComponentTransportProcess.cpp
index b0decfb7f26e23209dfb8633f0d30762fd07d969..1175e3a80bc729a1559c2f93db332bd7c7c0527c 100644
--- a/ProcessLib/RichardsComponentTransport/CreateRichardsComponentTransportProcess.cpp
+++ b/ProcessLib/RichardsComponentTransport/CreateRichardsComponentTransportProcess.cpp
@@ -9,9 +9,10 @@
  */
 
 #include "CreateRichardsComponentTransportProcess.h"
-
 #include "CreatePorousMediaProperties.h"
-#include "MaterialLib/Fluid/FluidProperties/CreateFluidProperties.h"
+
+#include "MaterialLib/MPL/CreateMaterialSpatialDistributionMap.h"
+#include "MaterialLib/MPL/MaterialSpatialDistributionMap.h"
 #include "ParameterLib/ConstantParameter.h"
 #include "ParameterLib/Utils.h"
 #include "ProcessLib/Output/CreateSecondaryVariables.h"
@@ -23,6 +24,61 @@ namespace ProcessLib
 {
 namespace RichardsComponentTransport
 {
+namespace
+{
+void checkMPLProperties(
+    MeshLib::Mesh const& mesh,
+    MaterialPropertyLib::MaterialSpatialDistributionMap const& media_map)
+{
+    std::array const required_properties_medium = {
+        MaterialPropertyLib::PropertyType::porosity,
+        MaterialPropertyLib::PropertyType::transversal_dispersivity,
+        MaterialPropertyLib::PropertyType::longitudinal_dispersivity,
+        MaterialPropertyLib::PropertyType::permeability,
+        MaterialPropertyLib::PropertyType::saturation,
+        MaterialPropertyLib::PropertyType::storage,
+        MaterialPropertyLib::PropertyType::relative_permeability};
+
+    std::array const required_properties_liquid_phase = {
+        MaterialPropertyLib::PropertyType::density,
+        MaterialPropertyLib::PropertyType::viscosity};
+
+    std::array const required_properties_components = {
+        MaterialPropertyLib::PropertyType::retardation_factor,
+        MaterialPropertyLib::PropertyType::decay_rate,
+        MaterialPropertyLib::PropertyType::pore_diffusion};
+
+    for (auto const& element : mesh.getElements())
+    {
+        auto const element_id = element->getID();
+
+        auto const& medium = *media_map.getMedium(element_id);
+        checkRequiredProperties(medium, required_properties_medium);
+
+        // check if liquid phase definition and the corresponding properties
+        // exist
+        auto const& liquid_phase = medium.phase("AqueousLiquid");
+        checkRequiredProperties(liquid_phase, required_properties_liquid_phase);
+
+        // check if components and the corresponding properties exist
+        auto const number_of_components = liquid_phase.numberOfComponents();
+        for (std::size_t component_id = 0; component_id < number_of_components;
+             ++component_id)
+        {
+            if (!liquid_phase.hasComponent(component_id))
+            {
+                OGS_FATAL(
+                    "The component {:d} in the AqueousLiquid phase isn't "
+                    "specified.",
+                    component_id);
+            }
+            auto const& component = liquid_phase.component(component_id);
+            checkRequiredProperties(component, required_properties_components);
+        }
+    }
+}
+}  // namespace
+
 std::unique_ptr<Process> createRichardsComponentTransportProcess(
     std::string name,
     MeshLib::Mesh& mesh,
@@ -30,7 +86,8 @@ std::unique_ptr<Process> createRichardsComponentTransportProcess(
     std::vector<ProcessVariable> const& variables,
     std::vector<std::unique_ptr<ParameterLib::ParameterBase>> const& parameters,
     unsigned const integration_order,
-    BaseLib::ConfigTree const& config)
+    BaseLib::ConfigTree const& config,
+    std::map<int, std::shared_ptr<MaterialPropertyLib::Medium>> const& media)
 {
     //! \ogs_file_param{prj__processes__process__type}
     config.checkConfigParameter("type", "RichardsComponentTransport");
@@ -58,10 +115,18 @@ std::unique_ptr<Process> createRichardsComponentTransportProcess(
              "concentration",
              //! \ogs_file_param_special{prj__processes__process__RichardsComponentTransport__process_variables__pressure}
              "pressure"});
+        if (per_process_variables.size() > 2)
+        {
+            OGS_FATAL(
+                "By now RichardsComponentTransport process only supports "
+                "single component transport simulation.");
+        }
         process_variables.push_back(std::move(per_process_variables));
     }
     else  // staggered scheme.
     {
+        OGS_FATAL("The staggered coupling scheme is not implemented.");
+
         using namespace std::string_literals;
         for (auto const& variable_name : {"concentration"s, "pressure"s})
         {
@@ -75,60 +140,7 @@ std::unique_ptr<Process> createRichardsComponentTransportProcess(
         //! \ogs_file_param{prj__processes__process__RichardsComponentTransport__porous_medium}
         config.getConfigSubtree("porous_medium");
     PorousMediaProperties porous_media_properties{
-        createPorousMediaProperties(mesh, porous_medium_configs, parameters)};
-
-    //! \ogs_file_param{prj__processes__process__RichardsComponentTransport__fluid}
-    auto const& fluid_config = config.getConfigSubtree("fluid");
-
-    auto fluid_properties =
-        MaterialLib::Fluid::createFluidProperties(fluid_config);
-
-    // Parameter for the density of the fluid.
-    auto const& fluid_reference_density = ParameterLib::findParameter<double>(
-        config,
-        //! \ogs_file_param_special{prj__processes__process__RichardsComponentTransport__fluid_reference_density}
-        "fluid_reference_density", parameters, 1, &mesh);
-    DBUG("Use '{:s}' as fluid_reference_density parameter.",
-         fluid_reference_density.name);
-
-    // Parameter for the longitudinal solute dispersivity.
-    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, &mesh);
-    DBUG("Use '{:s}' as molecular diffusion coefficient parameter.",
-         molecular_diffusion_coefficient.name);
-
-    // Parameter for the longitudinal solute dispersivity.
-    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, &mesh);
-    DBUG("Use '{:s}' as longitudinal solute dispersivity parameter.",
-         solute_dispersivity_longitudinal.name);
-
-    // Parameter for the transverse solute dispersivity.
-    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, &mesh);
-    DBUG("Use '{:s}' as transverse solute dispersivity parameter.",
-         solute_dispersivity_transverse.name);
-
-    // Parameter for the retardation factor.
-    auto const& retardation_factor = ParameterLib::findParameter<double>(
-        config,
-        //! \ogs_file_param_special{prj__processes__process__RichardsComponentTransport__retardation_factor}
-        "retardation_factor", parameters, 1, &mesh);
-
-    // Parameter for the decay rate.
-    auto const& decay_rate = ParameterLib::findParameter<double>(
-        config,
-        //! \ogs_file_param_special{prj__processes__process__RichardsComponentTransport__decay_rate}
-        "decay_rate", parameters, 1, &mesh);
+        createPorousMediaProperties(mesh, porous_medium_configs)};
 
     // Specific body force parameter.
     Eigen::VectorXd specific_body_force;
@@ -150,15 +162,17 @@ std::unique_ptr<Process> createRichardsComponentTransportProcess(
         std::copy_n(b.data(), b.size(), specific_body_force.data());
     }
 
+    auto media_map =
+        MaterialPropertyLib::createMaterialSpatialDistributionMap(media, mesh);
+
+    DBUG(
+        "Check the media properties of RichardsComponentTransport process ...");
+    checkMPLProperties(mesh, *media_map);
+    DBUG("Media properties verified.");
+
     RichardsComponentTransportProcessData process_data{
+        std::move(media_map),
         std::move(porous_media_properties),
-        fluid_reference_density,
-        std::move(fluid_properties),
-        molecular_diffusion_coefficient,
-        solute_dispersivity_longitudinal,
-        solute_dispersivity_transverse,
-        retardation_factor,
-        decay_rate,
         specific_body_force,
         has_gravity};
 
diff --git a/ProcessLib/RichardsComponentTransport/CreateRichardsComponentTransportProcess.h b/ProcessLib/RichardsComponentTransport/CreateRichardsComponentTransportProcess.h
index 0f236ed986a016c66350f85fcf075b4e3f73d15a..5b633de3036bba75f503dc182c84f607d5687332 100644
--- a/ProcessLib/RichardsComponentTransport/CreateRichardsComponentTransportProcess.h
+++ b/ProcessLib/RichardsComponentTransport/CreateRichardsComponentTransportProcess.h
@@ -11,8 +11,14 @@
 #pragma once
 
 #include <memory>
+
 #include "ProcessLib/Process.h"
 
+namespace MaterialPropertyLib
+{
+class Medium;
+}
+
 namespace ProcessLib
 {
 namespace RichardsComponentTransport
@@ -24,7 +30,8 @@ std::unique_ptr<Process> createRichardsComponentTransportProcess(
     std::vector<ProcessVariable> const& variables,
     std::vector<std::unique_ptr<ParameterLib::ParameterBase>> const& parameters,
     unsigned const integration_order,
-    BaseLib::ConfigTree const& config);
+    BaseLib::ConfigTree const& config,
+    std::map<int, std::shared_ptr<MaterialPropertyLib::Medium>> const& media);
 
 }  // namespace RichardsComponentTransport
 }  // namespace ProcessLib
diff --git a/ProcessLib/RichardsComponentTransport/PorousMediaProperties.cpp b/ProcessLib/RichardsComponentTransport/PorousMediaProperties.cpp
index c8f8f0cfafeb859a352a98f732c552e9bfc9371e..bc9d029a7ad54f2ba8717361da811832e4955830 100644
--- a/ProcessLib/RichardsComponentTransport/PorousMediaProperties.cpp
+++ b/ProcessLib/RichardsComponentTransport/PorousMediaProperties.cpp
@@ -10,6 +10,8 @@
 
 #include "PorousMediaProperties.h"
 
+#include "ParameterLib/SpatialPosition.h"
+
 namespace ProcessLib
 {
 namespace RichardsComponentTransport
@@ -21,38 +23,11 @@ int PorousMediaProperties::getMaterialID(
     return _material_ids[element_id];
 }
 
-MaterialLib::PorousMedium::Porosity const& PorousMediaProperties::getPorosity(
-    double /*t*/, ParameterLib::SpatialPosition const& pos) const
-{
-    return *_porosity_models[getMaterialID(pos)];
-}
-
-MaterialLib::PorousMedium::Permeability const&
-PorousMediaProperties::getIntrinsicPermeability(
-    double /*t*/, ParameterLib::SpatialPosition const& pos) const
-{
-    return *_intrinsic_permeability_models[getMaterialID(pos)];
-}
-
-MaterialLib::PorousMedium::Storage const&
-PorousMediaProperties::getSpecificStorage(
-    double /*t*/, ParameterLib::SpatialPosition const& pos) const
-{
-    return *_specific_storage_models[getMaterialID(pos)];
-}
-
 MaterialLib::PorousMedium::CapillaryPressureSaturation const&
 PorousMediaProperties::getCapillaryPressureSaturationModel(
     double /*t*/, ParameterLib::SpatialPosition const& pos) const
 {
     return *_capillary_pressure_saturation_models[getMaterialID(pos)];
 }
-
-MaterialLib::PorousMedium::RelativePermeability const&
-PorousMediaProperties::getRelativePermeability(
-    double /*t*/, ParameterLib::SpatialPosition const& pos) const
-{
-    return *_relative_permeability_models[getMaterialID(pos)];
-}
 }  // namespace RichardsComponentTransport
 }  // namespace ProcessLib
diff --git a/ProcessLib/RichardsComponentTransport/PorousMediaProperties.h b/ProcessLib/RichardsComponentTransport/PorousMediaProperties.h
index ac0a87a503f43c9710c596be774c8dc3f8dcd8d8..32cac790d0a631e8e7b0b6f86673ccab7908fa7a 100644
--- a/ProcessLib/RichardsComponentTransport/PorousMediaProperties.h
+++ b/ProcessLib/RichardsComponentTransport/PorousMediaProperties.h
@@ -12,13 +12,8 @@
 
 #include <memory>
 #include <vector>
-#include <Eigen/Dense>
 
-#include "MaterialLib/PorousMedium/Permeability/Permeability.h"
-#include "MaterialLib/PorousMedium/Porosity/Porosity.h"
-#include "MaterialLib/PorousMedium/Storage/Storage.h"
 #include "MaterialLib/PorousMedium/UnsaturatedProperty/CapillaryPressure/CapillaryPressureSaturation.h"
-#include "MaterialLib/PorousMedium/UnsaturatedProperty/RelativePermeability/RelativePermeability.h"
 
 namespace ParameterLib
 {
@@ -34,77 +29,34 @@ class PorousMediaProperties
 {
 public:
     PorousMediaProperties(
-        std::vector<std::unique_ptr<MaterialLib::PorousMedium::Porosity>>&&
-            porosity_models,
-        std::vector<std::unique_ptr<MaterialLib::PorousMedium::Permeability>>&&
-            intrinsic_permeability_models,
-        std::vector<std::unique_ptr<MaterialLib::PorousMedium::Storage>>&&
-            specific_storage_models,
         std::vector<std::unique_ptr<
             MaterialLib::PorousMedium::CapillaryPressureSaturation>>&&
             capillary_pressure_saturation_models,
-        std::vector<
-            std::unique_ptr<MaterialLib::PorousMedium::RelativePermeability>>&&
-            relative_permeability_models,
         std::vector<int>&& material_ids)
-        : _porosity_models(std::move(porosity_models)),
-          _intrinsic_permeability_models(
-              std::move(intrinsic_permeability_models)),
-          _specific_storage_models(std::move(specific_storage_models)),
-          _capillary_pressure_saturation_models(
+        : _capillary_pressure_saturation_models(
               std::move(capillary_pressure_saturation_models)),
-          _relative_permeability_models(
-              std::move(relative_permeability_models)),
           _material_ids(std::move(material_ids))
     {
     }
 
     PorousMediaProperties(PorousMediaProperties&& other)
-        : _porosity_models(std::move(other._porosity_models)),
-          _intrinsic_permeability_models(
-              std::move(other._intrinsic_permeability_models)),
-          _specific_storage_models(std::move(other._specific_storage_models)),
-          _capillary_pressure_saturation_models(
+        : _capillary_pressure_saturation_models(
               std::move(other._capillary_pressure_saturation_models)),
-          _relative_permeability_models(
-              std::move(other._relative_permeability_models)),
           _material_ids(other._material_ids)
     {
     }
 
-    MaterialLib::PorousMedium::Porosity const& getPorosity(
-        double t, ParameterLib::SpatialPosition const& pos) const;
-
-    MaterialLib::PorousMedium::Permeability const& getIntrinsicPermeability(
-        double t, ParameterLib::SpatialPosition const& pos) const;
-
-    MaterialLib::PorousMedium::Storage const& getSpecificStorage(
-        double t, ParameterLib::SpatialPosition const& pos) const;
-
     MaterialLib::PorousMedium::CapillaryPressureSaturation const&
     getCapillaryPressureSaturationModel(
         double t, ParameterLib::SpatialPosition const& pos) const;
 
-    MaterialLib::PorousMedium::RelativePermeability const&
-    getRelativePermeability(double t,
-                            ParameterLib::SpatialPosition const& pos) const;
-
 private:
     int getMaterialID(ParameterLib::SpatialPosition const& pos) const;
 
 private:
-    std::vector<std::unique_ptr<MaterialLib::PorousMedium::Porosity>>
-        _porosity_models;
-    std::vector<std::unique_ptr<MaterialLib::PorousMedium::Permeability>>
-        _intrinsic_permeability_models;
-    std::vector<std::unique_ptr<MaterialLib::PorousMedium::Storage>>
-        _specific_storage_models;
     std::vector<
         std::unique_ptr<MaterialLib::PorousMedium::CapillaryPressureSaturation>>
         _capillary_pressure_saturation_models;
-    std::vector<
-        std::unique_ptr<MaterialLib::PorousMedium::RelativePermeability>>
-        _relative_permeability_models;
     std::vector<int> _material_ids;
 };
 
diff --git a/ProcessLib/RichardsComponentTransport/RichardsComponentTransportFEM-impl.h b/ProcessLib/RichardsComponentTransport/RichardsComponentTransportFEM-impl.h
index a970aa99c957301003dd4b1e2b77025604ed50be..2e135774a68ac1df6ffdb57edd8fb59e40c82d07 100644
--- a/ProcessLib/RichardsComponentTransport/RichardsComponentTransportFEM-impl.h
+++ b/ProcessLib/RichardsComponentTransport/RichardsComponentTransportFEM-impl.h
@@ -10,6 +10,11 @@
 
 #include "RichardsComponentTransportFEM.h"
 
+#include "MaterialLib/MPL/MaterialSpatialDistributionMap.h"
+#include "MaterialLib/MPL/Medium.h"
+#include "MaterialLib/MPL/Property.h"
+#include "MaterialLib/MPL/Utils/FormEigenTensor.h"
+
 namespace ProcessLib
 {
 namespace RichardsComponentTransport
@@ -22,10 +27,12 @@ LocalAssemblerData<ShapeFunction, IntegrationMethod, GlobalDim>::
         std::size_t const local_matrix_size,
         bool is_axially_symmetric,
         unsigned const integration_order,
-        RichardsComponentTransportProcessData const& process_data)
+        RichardsComponentTransportProcessData const& process_data,
+        ProcessVariable const& transport_process_variable)
     : _element_id(element.getID()),
       _process_data(process_data),
-      _integration_method(integration_order)
+      _integration_method(integration_order),
+      _transport_process_variable(transport_process_variable)
 {
     // This assertion is valid only if all nodal d.o.f. use the same shape
     // matrices.
@@ -56,7 +63,7 @@ LocalAssemblerData<ShapeFunction, IntegrationMethod, GlobalDim>::
 template <typename ShapeFunction, typename IntegrationMethod,
           unsigned GlobalDim>
 void LocalAssemblerData<ShapeFunction, IntegrationMethod, GlobalDim>::assemble(
-    double const t, double const /*dt*/, std::vector<double> const& local_x,
+    double const t, double const dt, std::vector<double> const& local_x,
     std::vector<double> const& /*local_xdot*/,
     std::vector<double>& local_M_data, std::vector<double>& local_K_data,
     std::vector<double>& local_b_data)
@@ -84,11 +91,17 @@ void LocalAssemblerData<ShapeFunction, IntegrationMethod, GlobalDim>::assemble(
 
     auto const& b = _process_data.specific_body_force;
 
-    MaterialLib::Fluid::FluidProperty::ArrayType vars;
+    MaterialPropertyLib::VariableArray vars;
 
     GlobalDimMatrixType const& I(
         GlobalDimMatrixType::Identity(GlobalDim, GlobalDim));
 
+    // Get material properties
+    auto const& medium = *_process_data.media_map->getMedium(_element_id);
+    auto const& phase = medium.phase("AqueousLiquid");
+    auto const& component =
+        phase.component(_transport_process_variable.getName());
+
     auto KCC = local_K.template block<concentration_size, concentration_size>(
         concentration_index, concentration_index);
     auto MCC = local_M.template block<concentration_size, concentration_size>(
@@ -103,12 +116,6 @@ void LocalAssemblerData<ShapeFunction, IntegrationMethod, GlobalDim>::assemble(
     {
         pos.setIntegrationPoint(ip);
 
-        // \todo the argument to getValue() has to be changed for non
-        // constant storage model
-        auto const specific_storage =
-            _process_data.porous_media_properties.getSpecificStorage(t, pos)
-                .getValue(0.0);
-
         auto const& ip_data = _ip_data[ip];
         auto const& N = ip_data.N;
         auto const& dNdx = ip_data.dNdx;
@@ -119,50 +126,65 @@ void LocalAssemblerData<ShapeFunction, IntegrationMethod, GlobalDim>::assemble(
         // Order matters: First C, then p!
         NumLib::shapeFunctionInterpolate(local_x, N, C_int_pt, p_int_pt);
 
-        double const pc_int_pt = -p_int_pt;
-        double const Sw = _process_data.porous_media_properties
-                              .getCapillaryPressureSaturationModel(t, pos)
-                              .getSaturation(pc_int_pt);
+        vars[static_cast<int>(
+            MaterialPropertyLib::Variable::capillary_pressure)] = -p_int_pt;
+        auto const Sw = medium[MaterialPropertyLib::PropertyType::saturation]
+                            .template value<double>(vars, pos, t, dt);
 
         double const dSw_dpc =
             1. / _process_data.porous_media_properties
                      .getCapillaryPressureSaturationModel(t, pos)
                      .getdPcdS(Sw);
 
+        vars[static_cast<int>(MaterialPropertyLib::Variable::concentration)] =
+            C_int_pt;
+        vars[static_cast<int>(MaterialPropertyLib::Variable::phase_pressure)] =
+            p_int_pt;
+
+        // \todo the argument to getValue() has to be changed for non
+        // constant storage model
+        auto const specific_storage =
+            medium[MaterialPropertyLib::PropertyType::storage]
+                .template value<double>(vars, pos, t, dt);
         // \todo the first argument has to be changed for non constant
         // porosity model
         auto const porosity =
-            _process_data.porous_media_properties.getPorosity(t, pos).getValue(
-                t, pos, 0.0, C_int_pt);
+            medium[MaterialPropertyLib::PropertyType::porosity]
+                .template value<double>(vars, pos, t, dt);
 
         auto const retardation_factor =
-            _process_data.retardation_factor(t, pos)[0];
+            component[MaterialPropertyLib::PropertyType::retardation_factor]
+                .template value<double>(vars, pos, t, dt);
 
         auto const solute_dispersivity_transverse =
-            _process_data.solute_dispersivity_transverse(t, pos)[0];
+            medium[MaterialPropertyLib::PropertyType::transversal_dispersivity]
+                .template value<double>(vars, pos, t, dt);
         auto const solute_dispersivity_longitudinal =
-            _process_data.solute_dispersivity_longitudinal(t, pos)[0];
+            medium[MaterialPropertyLib::PropertyType::longitudinal_dispersivity]
+                .template value<double>(vars, pos, t, dt);
 
         // Use the fluid density model to compute the density
-        vars[static_cast<int>(MaterialLib::Fluid::PropertyVariableType::C)] =
-            C_int_pt;
-        vars[static_cast<int>(MaterialLib::Fluid::PropertyVariableType::p)] =
-            p_int_pt;
-        auto const density = _process_data.fluid_properties->getValue(
-            MaterialLib::Fluid::FluidPropertyType::Density, vars);
-        auto const decay_rate = _process_data.decay_rate(t, pos)[0];
-        auto const molecular_diffusion_coefficient =
-            _process_data.molecular_diffusion_coefficient(t, pos)[0];
-
-        auto const& K = _process_data.porous_media_properties
-                            .getIntrinsicPermeability(t, pos)
-                            .getValue(t, pos, 0.0, 0.0);
-        auto const k_rel = _process_data.porous_media_properties
-                                .getRelativePermeability(t, pos)
-                                .getValue(Sw);
+        auto const density = phase[MaterialPropertyLib::PropertyType::density]
+                                 .template value<double>(vars, pos, t, dt);
+        auto const decay_rate =
+            component[MaterialPropertyLib::PropertyType::decay_rate]
+                .template value<double>(vars, pos, t, dt);
+        auto const pore_diffusion_coefficient =
+            MaterialPropertyLib::formEigenTensor<GlobalDim>(
+                component[MaterialPropertyLib::PropertyType::pore_diffusion]
+                    .value(vars, pos, t, dt));
+
+        auto const K = MaterialPropertyLib::formEigenTensor<GlobalDim>(
+            medium[MaterialPropertyLib::PropertyType::permeability].value(
+                vars, pos, t, dt));
+        vars[static_cast<int>(
+            MaterialPropertyLib::Variable::liquid_saturation)] = Sw;
+        auto const k_rel =
+            medium[MaterialPropertyLib::PropertyType::relative_permeability]
+                .template value<double>(vars, pos, t, dt);
         // Use the viscosity model to compute the viscosity
-        auto const mu = _process_data.fluid_properties->getValue(
-            MaterialLib::Fluid::FluidPropertyType::Viscosity, vars);
+        auto const mu = phase[MaterialPropertyLib::PropertyType::viscosity]
+                            .template value<double>(vars, pos, t, dt);
         auto const K_times_k_rel_over_mu = K * (k_rel / mu);
 
         GlobalDimVectorType const velocity =
@@ -176,16 +198,14 @@ void LocalAssemblerData<ShapeFunction, IntegrationMethod, GlobalDim>::assemble(
         GlobalDimMatrixType const hydrodynamic_dispersion =
             velocity_magnitude != 0.0
                 ? GlobalDimMatrixType(
-                      (porosity * molecular_diffusion_coefficient +
-                       solute_dispersivity_transverse * velocity_magnitude) *
-                          I +
+                      porosity * pore_diffusion_coefficient +
+                      solute_dispersivity_transverse * velocity_magnitude * I +
                       (solute_dispersivity_longitudinal -
                        solute_dispersivity_transverse) /
                           velocity_magnitude * velocity * velocity.transpose())
-                : GlobalDimMatrixType(
-                      (porosity * molecular_diffusion_coefficient +
-                       solute_dispersivity_transverse * velocity_magnitude) *
-                      I);
+                : GlobalDimMatrixType(porosity * pore_diffusion_coefficient +
+                                      solute_dispersivity_transverse *
+                                          velocity_magnitude * I);
 
         // matrix assembly
         KCC.noalias() +=
@@ -237,7 +257,11 @@ LocalAssemblerData<ShapeFunction, IntegrationMethod, GlobalDim>::
     ParameterLib::SpatialPosition pos;
     pos.setElementID(_element_id);
 
-    MaterialLib::Fluid::FluidProperty::ArrayType vars;
+    MaterialPropertyLib::VariableArray vars;
+
+    // Get material properties
+    auto const& medium = *_process_data.media_map->getMedium(_element_id);
+    auto const& phase = medium.phase("AqueousLiquid");
 
     auto const p_nodal_values = Eigen::Map<const NodalVectorType>(
         &local_x[ShapeFunction::NPOINTS], ShapeFunction::NPOINTS);
@@ -250,36 +274,38 @@ LocalAssemblerData<ShapeFunction, IntegrationMethod, GlobalDim>::
 
         pos.setIntegrationPoint(ip);
 
-        auto const& K = _process_data.porous_media_properties
-                            .getIntrinsicPermeability(t, pos)
-                            .getValue(t, pos, 0.0, 0.0);
-        auto const mu = _process_data.fluid_properties->getValue(
-            MaterialLib::Fluid::FluidPropertyType::Viscosity, vars);
+        auto const dt = std::numeric_limits<double>::quiet_NaN();
+        auto const K = MaterialPropertyLib::formEigenTensor<GlobalDim>(
+            medium[MaterialPropertyLib::PropertyType::permeability].value(
+                vars, pos, t, dt));
+        auto const mu = phase[MaterialPropertyLib::PropertyType::viscosity]
+                            .template value<double>(vars, pos, t, dt);
 
         double C_int_pt = 0.0;
         double p_int_pt = 0.0;
         NumLib::shapeFunctionInterpolate(local_x, N, C_int_pt, p_int_pt);
 
         // saturation
-        double const pc_int_pt = -p_int_pt;
-        double const Sw = _process_data.porous_media_properties
-                              .getCapillaryPressureSaturationModel(t, pos)
-                              .getSaturation(pc_int_pt);
+        vars[static_cast<int>(
+            MaterialPropertyLib::Variable::capillary_pressure)] = -p_int_pt;
+        auto const Sw = medium[MaterialPropertyLib::PropertyType::saturation]
+                            .template value<double>(vars, pos, t, dt);
 
-        auto const k_rel = _process_data.porous_media_properties
-                                .getRelativePermeability(t, pos)
-                                .getValue(Sw);
+        vars[static_cast<int>(
+            MaterialPropertyLib::Variable::liquid_saturation)] = Sw;
+        auto const k_rel =
+            medium[MaterialPropertyLib::PropertyType::relative_permeability]
+                .template value<double>(vars, pos, t, dt);
 
         cache_mat.col(ip).noalias() = -dNdx * p_nodal_values;
         if (_process_data.has_gravity)
         {
             vars[static_cast<int>(
-                MaterialLib::Fluid::PropertyVariableType::C)] = C_int_pt;
+                MaterialPropertyLib::Variable::concentration)] = C_int_pt;
             vars[static_cast<int>(
-                MaterialLib::Fluid::PropertyVariableType::p)] = p_int_pt;
-
-            auto const rho_w = _process_data.fluid_properties->getValue(
-                MaterialLib::Fluid::FluidPropertyType::Density, vars);
+                MaterialPropertyLib::Variable::phase_pressure)] = p_int_pt;
+            auto const rho_w = phase[MaterialPropertyLib::PropertyType::density]
+                                   .template value<double>(vars, pos, t, dt);
             auto const b = _process_data.specific_body_force;
             // here it is assumed that the vector b is directed 'downwards'
             cache_mat.col(ip).noalias() += rho_w * b;
@@ -314,6 +340,10 @@ LocalAssemblerData<ShapeFunction, IntegrationMethod, GlobalDim>::
     ParameterLib::SpatialPosition pos;
     pos.setElementID(_element_id);
 
+    MaterialPropertyLib::VariableArray vars;
+
+    auto const& medium = *_process_data.media_map->getMedium(_element_id);
+
     unsigned const n_integration_points =
         _integration_method.getNumberOfPoints();
 
@@ -337,10 +367,11 @@ LocalAssemblerData<ShapeFunction, IntegrationMethod, GlobalDim>::
         NumLib::shapeFunctionInterpolate(local_x, N, C_int_pt, p_int_pt);
 
         // saturation
-        double const pc_int_pt = -p_int_pt;
-        double const Sw = _process_data.porous_media_properties
-                              .getCapillaryPressureSaturationModel(t, pos)
-                              .getSaturation(pc_int_pt);
+        vars[static_cast<int>(
+            MaterialPropertyLib::Variable::capillary_pressure)] = -p_int_pt;
+        auto const dt = std::numeric_limits<double>::quiet_NaN();
+        auto const Sw = medium[MaterialPropertyLib::PropertyType::saturation]
+                            .template value<double>(vars, pos, t, dt);
         cache_vec[ip] = Sw;
     }
 
diff --git a/ProcessLib/RichardsComponentTransport/RichardsComponentTransportFEM.h b/ProcessLib/RichardsComponentTransport/RichardsComponentTransportFEM.h
index 7eb886954f9f7ce6aa089950dcedee0fa2527875..490eaf139e83ece2f869dd57aad5739c455e74fa 100644
--- a/ProcessLib/RichardsComponentTransport/RichardsComponentTransportFEM.h
+++ b/ProcessLib/RichardsComponentTransport/RichardsComponentTransportFEM.h
@@ -24,6 +24,7 @@
 #include "ParameterLib/Parameter.h"
 #include "ProcessLib/LocalAssemblerInterface.h"
 #include "RichardsComponentTransportProcessData.h"
+#include "ProcessLib/ProcessVariable.h"
 
 namespace ProcessLib
 {
@@ -102,7 +103,8 @@ public:
         std::size_t const local_matrix_size,
         bool is_axially_symmetric,
         unsigned const integration_order,
-        RichardsComponentTransportProcessData const& process_data);
+        RichardsComponentTransportProcessData const& process_data,
+        ProcessVariable const& transport_process_variable);
 
     void assemble(double const t, double const dt,
                   std::vector<double> const& local_x,
@@ -131,6 +133,8 @@ private:
     RichardsComponentTransportProcessData const& _process_data;
 
     IntegrationMethod const _integration_method;
+    ProcessVariable const& _transport_process_variable;
+
     std::vector<
         IntegrationPointData<NodalRowVectorType, GlobalDimNodalMatrixType,
                              NodalMatrixType>,
diff --git a/ProcessLib/RichardsComponentTransport/RichardsComponentTransportProcess.cpp b/ProcessLib/RichardsComponentTransport/RichardsComponentTransportProcess.cpp
index eed7ba8752911c2cda200d8a1907877c0268ad45..ecbb8ac3ac194309077fdd5d4d742588286d641c 100644
--- a/ProcessLib/RichardsComponentTransport/RichardsComponentTransportProcess.cpp
+++ b/ProcessLib/RichardsComponentTransport/RichardsComponentTransportProcess.cpp
@@ -44,10 +44,11 @@ void RichardsComponentTransportProcess::initializeConcreteProcess(
     const int monolithic_process_id = 0;
     ProcessLib::ProcessVariable const& pv =
         getProcessVariables(monolithic_process_id)[0];
+
     ProcessLib::createLocalAssemblers<LocalAssemblerData>(
         mesh.getDimension(), mesh.getElements(), dof_table,
         pv.getShapeFunctionOrder(), _local_assemblers,
-        mesh.isAxiallySymmetric(), integration_order, _process_data);
+        mesh.isAxiallySymmetric(), integration_order, _process_data, pv);
 
     _secondary_variables.addSecondaryVariable(
         "darcy_velocity",
diff --git a/ProcessLib/RichardsComponentTransport/RichardsComponentTransportProcessData.h b/ProcessLib/RichardsComponentTransport/RichardsComponentTransportProcessData.h
index 92e233d1ce89c984d3e8cb24b6d12c1f0e5f529b..450cd3aa5e889cdc089f9444c65030eed3e65f3c 100644
--- a/ProcessLib/RichardsComponentTransport/RichardsComponentTransportProcessData.h
+++ b/ProcessLib/RichardsComponentTransport/RichardsComponentTransportProcessData.h
@@ -12,12 +12,13 @@
 
 #include <memory>
 
-#include "MaterialLib/Fluid/FluidProperties/FluidProperties.h"
-#include "MaterialLib/PorousMedium/Porosity/Porosity.h"
-#include "MaterialLib/PorousMedium/Storage/Storage.h"
-
 #include "PorousMediaProperties.h"
 
+namespace MaterialPropertyLib
+{
+class MaterialSpatialDistributionMap;
+}
+
 namespace ProcessLib
 {
 template <typename ReturnType>
@@ -27,14 +28,9 @@ namespace RichardsComponentTransport
 {
 struct RichardsComponentTransportProcessData
 {
+    std::unique_ptr<MaterialPropertyLib::MaterialSpatialDistributionMap>
+        media_map;
     PorousMediaProperties porous_media_properties;
-    ParameterLib::Parameter<double> const& fluid_reference_density;
-    std::unique_ptr<MaterialLib::Fluid::FluidProperties> fluid_properties;
-    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/Tests/Data/Parabolic/RichardsComponentTransport/Padilla/Padilla_NaCl1/Padilla_NaCl1.prj b/Tests/Data/Parabolic/RichardsComponentTransport/Padilla/Padilla_NaCl1/Padilla_NaCl1.prj
index 1f0bd189dc6c97abb2aeed6a24e6aa7b1bbc6acf..667b9621af079488be5adbc19de8c54f06810cd2 100644
--- a/Tests/Data/Parabolic/RichardsComponentTransport/Padilla/Padilla_NaCl1/Padilla_NaCl1.prj
+++ b/Tests/Data/Parabolic/RichardsComponentTransport/Padilla/Padilla_NaCl1/Padilla_NaCl1.prj
@@ -12,30 +12,8 @@
                 <concentration>concentration</concentration>
                 <pressure>pressure</pressure>
             </process_variables>
-            <fluid>
-                <density>
-                    <type>Constant</type>
-                    <value>1000</value>
-                </density>
-                <viscosity>
-                    <type>Constant</type>
-                    <value>1.0e-3</value>
-                </viscosity>
-            </fluid>
             <porous_medium>
                 <porous_medium id="0">
-                    <permeability>
-                        <permeability_tensor_entries>kappa1</permeability_tensor_entries>
-                        <type>Constant</type>
-                    </permeability>
-                    <porosity>
-                        <type>Constant</type>
-                        <porosity_parameter>constant_porosity_parameter</porosity_parameter>
-                    </porosity>
-                    <storage>
-                        <type>Constant</type>
-                        <value>0</value>
-                    </storage>
                     <capillary_pressure>
                         <type>vanGenuchten</type>
                         <m>0.789029535864979</m>
@@ -44,21 +22,8 @@
                         <smax>1</smax>
                         <sr>0.1689</sr>
                     </capillary_pressure>
-                    <relative_permeability>
-                        <type>WettingPhaseVanGenuchten</type>
-                        <krel_min>1e-12</krel_min>
-                        <m>0.789029535864979</m>
-                        <smax>1</smax>
-                        <sr>0.1689</sr>
-                    </relative_permeability>
                 </porous_medium>
             </porous_medium>
-            <decay_rate>decay_rate</decay_rate>
-            <fluid_reference_density>rho_fluid</fluid_reference_density>
-            <retardation_factor>retardation_factor</retardation_factor>
-            <solute_dispersivity_longitudinal>alpha_l</solute_dispersivity_longitudinal>
-            <solute_dispersivity_transverse>alpha_l</solute_dispersivity_transverse>
-            <molecular_diffusion_coefficient>Dm</molecular_diffusion_coefficient>
             <specific_body_force>-9.81</specific_body_force>
             <secondary_variables>
                 <secondary_variable internal_name="saturation" output_name="saturation"/>
@@ -66,6 +31,101 @@
             </secondary_variables>
         </process>
     </processes>
+    <media>
+        <medium id="0">
+            <phases>
+                <phase>
+                    <type>AqueousLiquid</type>
+                    <components>
+                        <component>
+                            <name>concentration</name>
+                            <properties>
+                                <property>
+                                    <name>pore_diffusion</name>
+                                    <type>Parameter</type>
+                                    <parameter_name>Dm</parameter_name>
+                                </property>
+                                <property>
+                                    <name>retardation_factor</name>
+                                    <type>Parameter</type>
+                                    <parameter_name>retardation_factor</parameter_name>
+                                </property>
+                                <property>
+                                    <name>decay_rate</name>
+                                    <type>Parameter</type>
+                                    <parameter_name>decay_rate</parameter_name>
+                                </property>
+                            </properties>
+                        </component>
+                    </components>
+                    <properties>
+                        <property>
+                            <name>density</name>
+                            <type>Constant</type>
+                            <value>1e3</value>
+                        </property>
+                        <property>
+                            <name>viscosity</name>
+                            <type>Constant</type>
+                            <value>1e-3</value>
+                        </property>
+                    </properties>
+                </phase>
+            </phases>
+            <properties>
+                <property>
+                    <name>permeability</name>
+                    <type>Parameter</type>
+                    <parameter_name>kappa1</parameter_name>
+                </property>
+                <property>
+                    <name>porosity</name>
+                    <type>Parameter</type>
+                    <parameter_name>constant_porosity_parameter</parameter_name>
+                </property>
+                <property>
+                    <name>storage</name>
+                    <type>Constant</type>
+                    <value>0</value>
+                </property>
+                <property>
+                    <name>capillary_pressure</name>
+                    <type>CapillaryPressureVanGenuchten</type>
+                    <residual_liquid_saturation>0.1689</residual_liquid_saturation>
+                    <residual_gas_saturation>0</residual_gas_saturation>
+                    <exponent>0.789029535864979</exponent>
+                    <p_b>3633.33</p_b>
+                    <maximum_capillary_pressure>36333.30</maximum_capillary_pressure>
+                </property>
+                <property>
+                    <name>relative_permeability</name>
+                    <type>RelativePermeabilityVanGenuchten</type>
+                    <residual_liquid_saturation>0.1689</residual_liquid_saturation>
+                    <residual_gas_saturation>0</residual_gas_saturation>
+                    <minimum_relative_permeability_liquid>1e-12</minimum_relative_permeability_liquid>
+                    <exponent>0.789029535864979</exponent>
+                </property>
+                <property>
+                    <name>saturation</name>
+                    <type>SaturationVanGenuchten</type>
+                    <residual_liquid_saturation>0.1689</residual_liquid_saturation>
+                    <residual_gas_saturation>0</residual_gas_saturation>
+                    <exponent>0.789029535864979</exponent>
+                    <p_b>3633.33</p_b>
+                </property>
+                <property>
+                    <name>longitudinal_dispersivity</name>
+                    <type>Parameter</type>
+                    <parameter_name>alpha_l</parameter_name>
+                </property>
+                <property>
+                    <name>transversal_dispersivity</name>
+                    <type>Parameter</type>
+                    <parameter_name>alpha_l</parameter_name>
+                </property>
+            </properties>
+        </medium>
+    </media>
     <time_loop>
         <processes>
             <process ref="HusC">
@@ -265,7 +325,7 @@
         <vtkdiff>
             <regex>Padilla_NaCl1_ts_.*.vtu</regex>
             <field>concentration</field>
-            <absolute_tolerance>1e-12</absolute_tolerance>
+            <absolute_tolerance>2e-12</absolute_tolerance>
             <relative_tolerance>0</relative_tolerance>
         </vtkdiff>
         <vtkdiff>
diff --git a/Tests/Data/Parabolic/RichardsComponentTransport/Padilla/Padilla_NaCl1/Padilla_NaCl1_quadratic.prj b/Tests/Data/Parabolic/RichardsComponentTransport/Padilla/Padilla_NaCl1/Padilla_NaCl1_quadratic.prj
index b899df8123589dd2cd40b721640b3a72ed3489cc..e7316030fb2cccc59801fd9da6dd87a38108aab2 100644
--- a/Tests/Data/Parabolic/RichardsComponentTransport/Padilla/Padilla_NaCl1/Padilla_NaCl1_quadratic.prj
+++ b/Tests/Data/Parabolic/RichardsComponentTransport/Padilla/Padilla_NaCl1/Padilla_NaCl1_quadratic.prj
@@ -12,30 +12,8 @@
                 <concentration>concentration</concentration>
                 <pressure>pressure</pressure>
             </process_variables>
-            <fluid>
-                <density>
-                    <type>Constant</type>
-                    <value>1000</value>
-                </density>
-                <viscosity>
-                    <type>Constant</type>
-                    <value>1.0e-3</value>
-                </viscosity>
-            </fluid>
             <porous_medium>
                 <porous_medium id="0">
-                    <permeability>
-                        <permeability_tensor_entries>kappa1</permeability_tensor_entries>
-                        <type>Constant</type>
-                    </permeability>
-                    <porosity>
-                        <type>Constant</type>
-                        <porosity_parameter>constant_porosity_parameter</porosity_parameter>
-                    </porosity>
-                    <storage>
-                        <type>Constant</type>
-                        <value>0</value>
-                    </storage>
                     <capillary_pressure>
                         <type>vanGenuchten</type>
                         <m>0.789029535864979</m>
@@ -44,21 +22,8 @@
                         <smax>1</smax>
                         <sr>0.1689</sr>
                     </capillary_pressure>
-                    <relative_permeability>
-                        <type>WettingPhaseVanGenuchten</type>
-                        <krel_min>1e-12</krel_min>
-                        <m>0.789029535864979</m>
-                        <smax>1</smax>
-                        <sr>0.1689</sr>
-                    </relative_permeability>
                 </porous_medium>
             </porous_medium>
-            <decay_rate>decay_rate</decay_rate>
-            <fluid_reference_density>rho_fluid</fluid_reference_density>
-            <retardation_factor>retardation_factor</retardation_factor>
-            <solute_dispersivity_longitudinal>alpha_l</solute_dispersivity_longitudinal>
-            <solute_dispersivity_transverse>alpha_l</solute_dispersivity_transverse>
-            <molecular_diffusion_coefficient>Dm</molecular_diffusion_coefficient>
             <specific_body_force>-9.81</specific_body_force>
             <secondary_variables>
                 <secondary_variable internal_name="saturation" output_name="saturation"/>
@@ -66,6 +31,101 @@
             </secondary_variables>
         </process>
     </processes>
+    <media>
+        <medium id="0">
+            <phases>
+                <phase>
+                    <type>AqueousLiquid</type>
+                    <components>
+                        <component>
+                            <name>concentration</name>
+                            <properties>
+                                <property>
+                                    <name>pore_diffusion</name>
+                                    <type>Parameter</type>
+                                    <parameter_name>Dm</parameter_name>
+                                </property>
+                                <property>
+                                    <name>retardation_factor</name>
+                                    <type>Parameter</type>
+                                    <parameter_name>retardation_factor</parameter_name>
+                                </property>
+                                <property>
+                                    <name>decay_rate</name>
+                                    <type>Parameter</type>
+                                    <parameter_name>decay_rate</parameter_name>
+                                </property>
+                            </properties>
+                        </component>
+                    </components>
+                    <properties>
+                        <property>
+                            <name>density</name>
+                            <type>Constant</type>
+                            <value>1e3</value>
+                        </property>
+                        <property>
+                            <name>viscosity</name>
+                            <type>Constant</type>
+                            <value>1e-3</value>
+                        </property>
+                    </properties>
+                </phase>
+            </phases>
+            <properties>
+                <property>
+                    <name>permeability</name>
+                    <type>Parameter</type>
+                    <parameter_name>kappa1</parameter_name>
+                </property>
+                <property>
+                    <name>porosity</name>
+                    <type>Parameter</type>
+                    <parameter_name>constant_porosity_parameter</parameter_name>
+                </property>
+                <property>
+                    <name>storage</name>
+                    <type>Constant</type>
+                    <value>0</value>
+                </property>
+                <property>
+                    <name>capillary_pressure</name>
+                    <type>CapillaryPressureVanGenuchten</type>
+                    <residual_liquid_saturation>0.1689</residual_liquid_saturation>
+                    <residual_gas_saturation>0</residual_gas_saturation>
+                    <exponent>0.789029535864979</exponent>
+                    <p_b>3633.33</p_b>
+                    <maximum_capillary_pressure>36333.30</maximum_capillary_pressure>
+                </property>
+                <property>
+                    <name>relative_permeability</name>
+                    <type>RelativePermeabilityVanGenuchten</type>
+                    <residual_liquid_saturation>0.1689</residual_liquid_saturation>
+                    <residual_gas_saturation>0</residual_gas_saturation>
+                    <minimum_relative_permeability_liquid>1e-12</minimum_relative_permeability_liquid>
+                    <exponent>0.789029535864979</exponent>
+                </property>
+                <property>
+                    <name>saturation</name>
+                    <type>SaturationVanGenuchten</type>
+                    <residual_liquid_saturation>0.1689</residual_liquid_saturation>
+                    <residual_gas_saturation>0</residual_gas_saturation>
+                    <exponent>0.789029535864979</exponent>
+                    <p_b>3633.33</p_b>
+                </property>
+                <property>
+                    <name>longitudinal_dispersivity</name>
+                    <type>Parameter</type>
+                    <parameter_name>alpha_l</parameter_name>
+                </property>
+                <property>
+                    <name>transversal_dispersivity</name>
+                    <type>Parameter</type>
+                    <parameter_name>alpha_l</parameter_name>
+                </property>
+            </properties>
+        </medium>
+    </media>
     <time_loop>
         <processes>
             <process ref="HusC">
diff --git a/Tests/Data/Parabolic/RichardsComponentTransport/Padilla/Padilla_NaCl6/Padilla_NaCl6.prj b/Tests/Data/Parabolic/RichardsComponentTransport/Padilla/Padilla_NaCl6/Padilla_NaCl6.prj
index 65f27ab59fc7f2e5b6a93d4d45acc7d08d188658..8c03a8cdbc394ce1c5e2529b94a6ee920e2c46df 100644
--- a/Tests/Data/Parabolic/RichardsComponentTransport/Padilla/Padilla_NaCl6/Padilla_NaCl6.prj
+++ b/Tests/Data/Parabolic/RichardsComponentTransport/Padilla/Padilla_NaCl6/Padilla_NaCl6.prj
@@ -12,30 +12,8 @@
                 <concentration>concentration</concentration>
                 <pressure>pressure</pressure>
             </process_variables>
-            <fluid>
-                <density>
-                    <type>Constant</type>
-                    <value>1000</value>
-                </density>
-                <viscosity>
-                    <type>Constant</type>
-                    <value>1.0e-3</value>
-                </viscosity>
-            </fluid>
             <porous_medium>
                 <porous_medium id="0">
-                    <permeability>
-                        <permeability_tensor_entries>kappa1</permeability_tensor_entries>
-                        <type>Constant</type>
-                    </permeability>
-                    <porosity>
-                        <type>Constant</type>
-                        <porosity_parameter>constant_porosity_parameter</porosity_parameter>
-                    </porosity>
-                    <storage>
-                        <type>Constant</type>
-                        <value>0</value>
-                    </storage>
                     <capillary_pressure>
                         <type>vanGenuchten</type>
                         <m>0.789029535864979</m>
@@ -44,21 +22,8 @@
                         <smax>1</smax>
                         <sr>0.1689</sr>
                     </capillary_pressure>
-                    <relative_permeability>
-                        <type>WettingPhaseVanGenuchten</type>
-                        <krel_min>1e-12</krel_min>
-                        <m>0.789029535864979</m>
-                        <smax>1</smax>
-                        <sr>0.1689</sr>
-                    </relative_permeability>
                 </porous_medium>
             </porous_medium>
-            <decay_rate>decay_rate</decay_rate>
-            <fluid_reference_density>rho_fluid</fluid_reference_density>
-            <retardation_factor>retardation_factor</retardation_factor>
-            <solute_dispersivity_longitudinal>alpha_l</solute_dispersivity_longitudinal>
-            <solute_dispersivity_transverse>alpha_l</solute_dispersivity_transverse>
-            <molecular_diffusion_coefficient>Dm</molecular_diffusion_coefficient>
             <specific_body_force>-9.81</specific_body_force>
             <secondary_variables>
                 <secondary_variable internal_name="saturation" output_name="saturation"/>
@@ -66,6 +31,101 @@
             </secondary_variables>
         </process>
     </processes>
+    <media>
+        <medium id="0">
+            <phases>
+                <phase>
+                    <type>AqueousLiquid</type>
+                    <components>
+                        <component>
+                            <name>concentration</name>
+                            <properties>
+                                <property>
+                                    <name>pore_diffusion</name>
+                                    <type>Parameter</type>
+                                    <parameter_name>Dm</parameter_name>
+                                </property>
+                                <property>
+                                    <name>retardation_factor</name>
+                                    <type>Parameter</type>
+                                    <parameter_name>retardation_factor</parameter_name>
+                                </property>
+                                <property>
+                                    <name>decay_rate</name>
+                                    <type>Parameter</type>
+                                    <parameter_name>decay_rate</parameter_name>
+                                </property>
+                            </properties>
+                        </component>
+                    </components>
+                    <properties>
+                        <property>
+                            <name>density</name>
+                            <type>Constant</type>
+                            <value>1e3</value>
+                        </property>
+                        <property>
+                            <name>viscosity</name>
+                            <type>Constant</type>
+                            <value>1e-3</value>
+                        </property>
+                    </properties>
+                </phase>
+            </phases>
+            <properties>
+                <property>
+                    <name>permeability</name>
+                    <type>Parameter</type>
+                    <parameter_name>kappa1</parameter_name>
+                </property>
+                <property>
+                    <name>porosity</name>
+                    <type>Parameter</type>
+                    <parameter_name>constant_porosity_parameter</parameter_name>
+                </property>
+                <property>
+                    <name>storage</name>
+                    <type>Constant</type>
+                    <value>0</value>
+                </property>
+                <property>
+                    <name>capillary_pressure</name>
+                    <type>CapillaryPressureVanGenuchten</type>
+                    <residual_liquid_saturation>0.1689</residual_liquid_saturation>
+                    <residual_gas_saturation>0</residual_gas_saturation>
+                    <exponent>0.789029535864979</exponent>
+                    <p_b>3633.33</p_b>
+                    <maximum_capillary_pressure>36333.30</maximum_capillary_pressure>
+                </property>
+                <property>
+                    <name>relative_permeability</name>
+                    <type>RelativePermeabilityVanGenuchten</type>
+                    <residual_liquid_saturation>0.1689</residual_liquid_saturation>
+                    <residual_gas_saturation>0</residual_gas_saturation>
+                    <minimum_relative_permeability_liquid>1e-12</minimum_relative_permeability_liquid>
+                    <exponent>0.789029535864979</exponent>
+                </property>
+                <property>
+                    <name>saturation</name>
+                    <type>SaturationVanGenuchten</type>
+                    <residual_liquid_saturation>0.1689</residual_liquid_saturation>
+                    <residual_gas_saturation>0</residual_gas_saturation>
+                    <exponent>0.789029535864979</exponent>
+                    <p_b>3633.33</p_b>
+                </property>
+                <property>
+                    <name>longitudinal_dispersivity</name>
+                    <type>Parameter</type>
+                    <parameter_name>alpha_l</parameter_name>
+                </property>
+                <property>
+                    <name>transversal_dispersivity</name>
+                    <type>Parameter</type>
+                    <parameter_name>alpha_l</parameter_name>
+                </property>
+            </properties>
+        </medium>
+    </media>
     <time_loop>
         <processes>
             <process ref="HusC">