diff --git a/Applications/ApplicationsLib/ProjectData.cpp b/Applications/ApplicationsLib/ProjectData.cpp
index de1917a035adebcb96819811c3c5769b99ef94b5..d5349c55aca85d1b4dd98b3c1d8d030d4f1ed6e0 100644
--- a/Applications/ApplicationsLib/ProjectData.cpp
+++ b/Applications/ApplicationsLib/ProjectData.cpp
@@ -780,7 +780,7 @@ void ProjectData::parseProcesses(BaseLib::ConfigTree const& processes_config,
                             name, *_mesh_vec[0], std::move(jacobian_assembler),
                             _process_variables, _parameters,
                             _local_coordinate_system, integration_order,
-                            process_config);
+                            process_config, _media);
                     break;
                 case 3:
                     process = ProcessLib::ThermoHydroMechanics::
@@ -788,7 +788,7 @@ void ProjectData::parseProcesses(BaseLib::ConfigTree const& processes_config,
                             name, *_mesh_vec[0], std::move(jacobian_assembler),
                             _process_variables, _parameters,
                             _local_coordinate_system, integration_order,
-                            process_config);
+                            process_config, _media);
                     break;
                 default:
                     OGS_FATAL(
diff --git a/ProcessLib/ThermoHydroMechanics/CreateThermoHydroMechanicsProcess.cpp b/ProcessLib/ThermoHydroMechanics/CreateThermoHydroMechanicsProcess.cpp
index 443f72b20c600a1308a33d293cc89730366a97ac..d29c4946f528a1f2cda791447fc8f5688d266f4b 100644
--- a/ProcessLib/ThermoHydroMechanics/CreateThermoHydroMechanicsProcess.cpp
+++ b/ProcessLib/ThermoHydroMechanics/CreateThermoHydroMechanicsProcess.cpp
@@ -12,6 +12,9 @@
 
 #include <cassert>
 
+#include "MaterialLib/MPL/CreateMaterialSpatialDistributionMap.h"
+#include "MaterialLib/MPL/MaterialSpatialDistributionMap.h"
+
 #include "MaterialLib/SolidModels/CreateConstitutiveRelation.h"
 #include "MaterialLib/SolidModels/MechanicsBase.h"
 #include "ParameterLib/Utils.h"
@@ -27,15 +30,14 @@ namespace ThermoHydroMechanics
 {
 template <int DisplacementDim>
 std::unique_ptr<Process> createThermoHydroMechanicsProcess(
-    std::string name,
-    MeshLib::Mesh& mesh,
+    std::string name, MeshLib::Mesh& mesh,
     std::unique_ptr<ProcessLib::AbstractJacobianAssembler>&& jacobian_assembler,
     std::vector<ProcessVariable> const& variables,
     std::vector<std::unique_ptr<ParameterLib::ParameterBase>> const& parameters,
     boost::optional<ParameterLib::CoordinateSystem> const&
         local_coordinate_system,
-    unsigned const integration_order,
-    BaseLib::ConfigTree const& config)
+    unsigned const integration_order, BaseLib::ConfigTree const& config,
+    std::map<int, std::unique_ptr<MaterialPropertyLib::Medium>> const& media)
 {
     //! \ogs_file_param{prj__processes__process__type}
     config.checkConfigParameter("type", "THERMO_HYDRO_MECHANICS");
@@ -262,8 +264,12 @@ std::unique_ptr<Process> createThermoHydroMechanicsProcess(
         std::copy_n(b.data(), b.size(), specific_body_force.data());
     }
 
+    auto media_map =
+        MaterialPropertyLib::createMaterialSpatialDistributionMap(media, mesh);
+
     ThermoHydroMechanicsProcessData<DisplacementDim> process_data{
         materialIDs(mesh),
+        std::move(media_map),
         std::move(solid_constitutive_relations),
         intrinsic_permeability,
         specific_storage,
@@ -305,7 +311,8 @@ template std::unique_ptr<Process> createThermoHydroMechanicsProcess<2>(
     boost::optional<ParameterLib::CoordinateSystem> const&
         local_coordinate_system,
     unsigned const integration_order,
-    BaseLib::ConfigTree const& config);
+    BaseLib::ConfigTree const& config,
+    std::map<int, std::unique_ptr<MaterialPropertyLib::Medium>> const& media);
 
 template std::unique_ptr<Process> createThermoHydroMechanicsProcess<3>(
     std::string name,
@@ -316,7 +323,7 @@ template std::unique_ptr<Process> createThermoHydroMechanicsProcess<3>(
     boost::optional<ParameterLib::CoordinateSystem> const&
         local_coordinate_system,
     unsigned const integration_order,
-    BaseLib::ConfigTree const& config);
-
+    BaseLib::ConfigTree const& config,
+    std::map<int, std::unique_ptr<MaterialPropertyLib::Medium>> const& media);
 }  // namespace ThermoHydroMechanics
 }  // namespace ProcessLib
diff --git a/ProcessLib/ThermoHydroMechanics/CreateThermoHydroMechanicsProcess.h b/ProcessLib/ThermoHydroMechanics/CreateThermoHydroMechanicsProcess.h
index 99641a62eb6d2aad89d9575a9174e16fc3c49f6a..cf2468cf6ed5ba304650a7af018286edfc244403 100644
--- a/ProcessLib/ThermoHydroMechanics/CreateThermoHydroMechanicsProcess.h
+++ b/ProcessLib/ThermoHydroMechanics/CreateThermoHydroMechanicsProcess.h
@@ -11,6 +11,7 @@
 #pragma once
 
 #include <boost/optional.hpp>
+#include <map>
 #include <memory>
 #include <vector>
 
@@ -18,10 +19,17 @@ namespace BaseLib
 {
 class ConfigTree;
 }
+
+namespace MaterialPropertyLib
+{
+class Medium;
+}
+
 namespace MeshLib
 {
 class Mesh;
 }
+
 namespace ParameterLib
 {
 struct CoordinateSystem;
@@ -48,18 +56,18 @@ std::unique_ptr<Process> createThermoHydroMechanicsProcess(
     boost::optional<ParameterLib::CoordinateSystem> const&
         local_coordinate_system,
     unsigned const integration_order,
-    BaseLib::ConfigTree const& config);
+    BaseLib::ConfigTree const& config,
+    std::map<int, std::unique_ptr<MaterialPropertyLib::Medium>> const& media);
 
 extern template std::unique_ptr<Process> createThermoHydroMechanicsProcess<2>(
-    std::string name,
-    MeshLib::Mesh& mesh,
+    std::string name, MeshLib::Mesh& mesh,
     std::unique_ptr<ProcessLib::AbstractJacobianAssembler>&& jacobian_assembler,
     std::vector<ProcessVariable> const& variables,
     std::vector<std::unique_ptr<ParameterLib::ParameterBase>> const& parameters,
     boost::optional<ParameterLib::CoordinateSystem> const&
         local_coordinate_system,
-    unsigned const integration_order,
-    BaseLib::ConfigTree const& config);
+    unsigned const integration_order, BaseLib::ConfigTree const& config,
+    std::map<int, std::unique_ptr<MaterialPropertyLib::Medium>> const& media);
 
 extern template std::unique_ptr<Process> createThermoHydroMechanicsProcess<3>(
     std::string name,
@@ -70,6 +78,7 @@ extern template std::unique_ptr<Process> createThermoHydroMechanicsProcess<3>(
     boost::optional<ParameterLib::CoordinateSystem> const&
         local_coordinate_system,
     unsigned const integration_order,
-    BaseLib::ConfigTree const& config);
+    BaseLib::ConfigTree const& config,
+    std::map<int, std::unique_ptr<MaterialPropertyLib::Medium>> const& media);
 }  // namespace ThermoHydroMechanics
 }  // namespace ProcessLib
diff --git a/ProcessLib/ThermoHydroMechanics/ThermoHydroMechanicsProcessData.h b/ProcessLib/ThermoHydroMechanics/ThermoHydroMechanicsProcessData.h
index a9bbc59e9df7d6430d1f657b0b63da5e70fe0b76..1112297ef80c257e355db1cdc1fe31a9709df865 100644
--- a/ProcessLib/ThermoHydroMechanics/ThermoHydroMechanicsProcessData.h
+++ b/ProcessLib/ThermoHydroMechanics/ThermoHydroMechanicsProcessData.h
@@ -17,6 +17,8 @@
 
 #include <Eigen/Dense>
 
+#include "MaterialLib/MPL/MaterialSpatialDistributionMap.h"
+
 namespace MaterialLib
 {
 namespace Solids
@@ -34,6 +36,9 @@ struct ThermoHydroMechanicsProcessData
 {
     MeshLib::PropertyVector<int> const* const material_ids = nullptr;
 
+    std::unique_ptr<MaterialPropertyLib::MaterialSpatialDistributionMap>
+        media_map = nullptr;
+
     /// The constitutive relation for the mechanical part.
     /// \note Linear elasticity is the only supported one in the moment.
     std::map<