diff --git a/MaterialLib/MPL/CreateMaterialSpatialDistributionMap.cpp b/MaterialLib/MPL/CreateMaterialSpatialDistributionMap.cpp
index e5b1651bfa1860ab2f4e976a8714e8684911db70..afa6cd7f8b0c05e4ce4cbbfb9ca8d4edcdae73e0 100644
--- a/MaterialLib/MPL/CreateMaterialSpatialDistributionMap.cpp
+++ b/MaterialLib/MPL/CreateMaterialSpatialDistributionMap.cpp
@@ -15,8 +15,7 @@
 
 namespace MaterialPropertyLib
 {
-std::unique_ptr<MaterialSpatialDistributionMap>
-createMaterialSpatialDistributionMap(
+MaterialSpatialDistributionMap createMaterialSpatialDistributionMap(
     std::map<int, std::shared_ptr<Medium>> const& media,
     MeshLib::Mesh const& mesh)
 {
@@ -45,7 +44,6 @@ createMaterialSpatialDistributionMap(
             "in the mesh.",
             media.size(), max_material_id - 1);
     }
-    return std::make_unique<MaterialSpatialDistributionMap>(media,
-                                                            material_ids);
+    return {media, material_ids};
 }
 }  // namespace MaterialPropertyLib
diff --git a/MaterialLib/MPL/CreateMaterialSpatialDistributionMap.h b/MaterialLib/MPL/CreateMaterialSpatialDistributionMap.h
index 05ed6b64b64c0d9cada0d59237393d3e5a1daa47..9f946d4b2a41d9af2b4045be2cb596afd70efdaa 100644
--- a/MaterialLib/MPL/CreateMaterialSpatialDistributionMap.h
+++ b/MaterialLib/MPL/CreateMaterialSpatialDistributionMap.h
@@ -24,8 +24,7 @@ class MaterialSpatialDistributionMap;
 
 class Medium;
 
-std::unique_ptr<MaterialSpatialDistributionMap>
-createMaterialSpatialDistributionMap(
+MaterialSpatialDistributionMap createMaterialSpatialDistributionMap(
     std::map<int, std::shared_ptr<Medium>> const& media,
     MeshLib::Mesh const& mesh);
 }  // namespace MaterialPropertyLib
diff --git a/ProcessLib/ComponentTransport/ComponentTransportFEM.h b/ProcessLib/ComponentTransport/ComponentTransportFEM.h
index ce87c55479b67c8868a12b721c8416632c6e0a23..6bfb29afcbcd14b7c600ffb973a10b29b25c7c6a 100644
--- a/ProcessLib/ComponentTransport/ComponentTransportFEM.h
+++ b/ProcessLib/ComponentTransport/ComponentTransportFEM.h
@@ -268,7 +268,7 @@ public:
                                       GlobalDim>(element, is_axially_symmetric,
                                                  _integration_method);
         auto const& medium =
-            *_process_data.media_map->getMedium(_element.getID());
+            *_process_data.media_map.getMedium(_element.getID());
         for (unsigned ip = 0; ip < n_integration_points; ip++)
         {
             _ip_data.emplace_back(
@@ -314,7 +314,7 @@ public:
         assert(_process_data.chemical_solver_interface);
 
         auto const& medium =
-            *_process_data.media_map->getMedium(_element.getID());
+            *_process_data.media_map.getMedium(_element.getID());
 
         ParameterLib::SpatialPosition pos;
         pos.setElementID(_element.getID());
@@ -355,7 +355,7 @@ public:
         assert(_process_data.chemical_solver_interface);
 
         auto const& medium =
-            _process_data.media_map->getMedium(_element.getID());
+            _process_data.media_map.getMedium(_element.getID());
 
         MaterialPropertyLib::VariableArray vars;
         MaterialPropertyLib::VariableArray vars_prev;
@@ -417,7 +417,7 @@ public:
             return;
         }
 
-        auto const& medium = *_process_data.media_map->getMedium(ele_id);
+        auto const& medium = *_process_data.media_map.getMedium(ele_id);
 
         ParameterLib::SpatialPosition pos;
         pos.setElementID(ele_id);
@@ -566,7 +566,7 @@ public:
 
         // Get material properties
         auto const& medium =
-            *_process_data.media_map->getMedium(_element.getID());
+            *_process_data.media_map.getMedium(_element.getID());
         // Select the only valid for component transport liquid phase.
         auto const& phase = medium.phase("AqueousLiquid");
 
@@ -738,7 +738,7 @@ public:
         MaterialPropertyLib::VariableArray vars;
 
         auto const& medium =
-            *_process_data.media_map->getMedium(_element.getID());
+            *_process_data.media_map.getMedium(_element.getID());
         auto const& phase = medium.phase("AqueousLiquid");
         auto const& component = phase.component(
             _transport_process_variables[component_id].get().getName());
@@ -822,7 +822,7 @@ public:
                 .projected_specific_body_force_vectors[_element.getID()];
 
         auto const& medium =
-            *_process_data.media_map->getMedium(_element.getID());
+            *_process_data.media_map.getMedium(_element.getID());
         auto const& phase = medium.phase("AqueousLiquid");
 
         MaterialPropertyLib::VariableArray vars;
@@ -961,7 +961,7 @@ public:
         MaterialPropertyLib::VariableArray vars_prev;
 
         auto const& medium =
-            *_process_data.media_map->getMedium(_element.getID());
+            *_process_data.media_map.getMedium(_element.getID());
         auto const& phase = medium.phase("AqueousLiquid");
         // Hydraulic process id is 0 and thus transport process id starts
         // from 1.
@@ -1161,7 +1161,7 @@ public:
                 .projected_specific_body_force_vectors[_element.getID()];
 
         auto const& medium =
-            *_process_data.media_map->getMedium(_element.getID());
+            *_process_data.media_map.getMedium(_element.getID());
         auto const& phase = medium.phase("AqueousLiquid");
 
         MaterialPropertyLib::VariableArray vars;
@@ -1283,7 +1283,7 @@ public:
         MaterialPropertyLib::VariableArray vars_prev;
 
         auto const& medium =
-            *_process_data.media_map->getMedium(_element.getID());
+            *_process_data.media_map.getMedium(_element.getID());
         auto const& phase = medium.phase("AqueousLiquid");
         auto const& component = phase.component(
             _transport_process_variables[component_id].get().getName());
@@ -1409,7 +1409,7 @@ public:
         MaterialPropertyLib::VariableArray vars_prev;
 
         auto const& medium =
-            *_process_data.media_map->getMedium(_element.getID());
+            *_process_data.media_map.getMedium(_element.getID());
         auto const component_id = transport_process_id - 1;
         for (unsigned ip(0); ip < n_integration_points; ++ip)
         {
@@ -1525,7 +1525,7 @@ public:
         MaterialPropertyLib::VariableArray vars;
 
         auto const& medium =
-            *_process_data.media_map->getMedium(_element.getID());
+            *_process_data.media_map.getMedium(_element.getID());
         auto const& phase = medium.phase("AqueousLiquid");
 
         for (unsigned ip = 0; ip < n_integration_points; ++ip)
@@ -1607,7 +1607,7 @@ public:
         MaterialPropertyLib::VariableArray vars;
 
         auto const& medium =
-            *_process_data.media_map->getMedium(_element.getID());
+            *_process_data.media_map.getMedium(_element.getID());
         auto const& phase = medium.phase("AqueousLiquid");
 
         // local_x contains the local concentration and pressure values
@@ -1676,7 +1676,7 @@ public:
 
         if (_process_data.chemically_induced_porosity_change)
         {
-            auto const& medium = *_process_data.media_map->getMedium(ele_id);
+            auto const& medium = *_process_data.media_map.getMedium(ele_id);
 
             for (auto& ip_data : _ip_data)
             {
@@ -1748,7 +1748,7 @@ public:
         MaterialPropertyLib::VariableArray vars;
 
         auto const& medium =
-            *_process_data.media_map->getMedium(_element.getID());
+            *_process_data.media_map.getMedium(_element.getID());
         auto const& phase = medium.phase("AqueousLiquid");
 
         int const component_id = 0;
diff --git a/ProcessLib/ComponentTransport/ComponentTransportProcessData.h b/ProcessLib/ComponentTransport/ComponentTransportProcessData.h
index 173dbe584e7f1fff233c3c32104f9dbd5ff5d88d..7dadd0c9640a6069dc32ddec9fbcb964f3b4be3e 100644
--- a/ProcessLib/ComponentTransport/ComponentTransportProcessData.h
+++ b/ProcessLib/ComponentTransport/ComponentTransportProcessData.h
@@ -15,7 +15,7 @@
 
 #include "ChemistryLib/ChemicalSolverInterface.h"
 #include "LookupTable.h"
-#include "MaterialLib/MPL/CreateMaterialSpatialDistributionMap.h"
+#include "MaterialLib/MPL/MaterialSpatialDistributionMap.h"
 #include "MathLib/LinAlg/Eigen/EigenMapTools.h"
 #include "NumLib/NumericalStability/NumericalStabilization.h"
 #include "ParameterLib/ConstantParameter.h"
@@ -38,8 +38,7 @@ namespace ComponentTransport
 {
 struct ComponentTransportProcessData
 {
-    std::unique_ptr<MaterialPropertyLib::MaterialSpatialDistributionMap>
-        media_map;
+    MaterialPropertyLib::MaterialSpatialDistributionMap media_map;
     bool const has_gravity;
     bool const non_advective_form;
     /// This optional tag provides a simple means of considering the temperature
diff --git a/ProcessLib/ComponentTransport/CreateComponentTransportProcess.cpp b/ProcessLib/ComponentTransport/CreateComponentTransportProcess.cpp
index c203dab505108c0bc901c86f22b0c5864c099636..b0069d927c097a9c3460ff46b6d467003fb2056d 100644
--- a/ProcessLib/ComponentTransport/CreateComponentTransportProcess.cpp
+++ b/ProcessLib/ComponentTransport/CreateComponentTransportProcess.cpp
@@ -235,7 +235,7 @@ std::unique_ptr<Process> createComponentTransportProcess(
         process_variables);
 
     DBUG("Check the media properties of ComponentTransport process ...");
-    checkMPLProperties(mesh, *media_map);
+    checkMPLProperties(mesh, media_map);
     DBUG("Media properties verified.");
 
     auto stabilizer = NumLib::createNumericalStabilization(mesh, config);
diff --git a/ProcessLib/HT/CreateHTProcess.cpp b/ProcessLib/HT/CreateHTProcess.cpp
index b5f0862f80f5c18747c112123bd58bd25f4efa58..59daec2658f077c51a9d70253aee0f518e0b754b 100644
--- a/ProcessLib/HT/CreateHTProcess.cpp
+++ b/ProcessLib/HT/CreateHTProcess.cpp
@@ -181,7 +181,7 @@ std::unique_ptr<Process> createHTProcess(
         MaterialPropertyLib::createMaterialSpatialDistributionMap(media, mesh);
 
     DBUG("Check the media properties of HT process ...");
-    checkMPLProperties(mesh, *media_map);
+    checkMPLProperties(mesh, media_map);
     DBUG("Media properties verified.");
 
     auto stabilizer = NumLib::createNumericalStabilization(mesh, config);
diff --git a/ProcessLib/HT/HTFEM.h b/ProcessLib/HT/HTFEM.h
index a34db67b82babf95dbb0209b17075999aa1a7e1b..36fb68354c4a21d8cbaffb29f55a7e742b7a6872 100644
--- a/ProcessLib/HT/HTFEM.h
+++ b/ProcessLib/HT/HTFEM.h
@@ -125,7 +125,7 @@ public:
         vars.phase_pressure = p_int_pt;
 
         auto const& medium =
-            *_process_data.media_map->getMedium(_element.getID());
+            *_process_data.media_map.getMedium(_element.getID());
         auto const& liquid_phase = medium.phase("AqueousLiquid");
 
         // TODO (naumov) Temporary value not used by current material models.
@@ -181,7 +181,7 @@ protected:
         double const dt)
     {
         auto const& medium =
-            *_process_data.media_map->getMedium(this->_element.getID());
+            *_process_data.media_map.getMedium(this->_element.getID());
         auto const& solid_phase = medium.phase("Solid");
 
         auto const specific_heat_capacity_solid =
@@ -206,7 +206,7 @@ protected:
         double const dt)
     {
         auto const& medium =
-            *_process_data.media_map->getMedium(_element.getID());
+            *_process_data.media_map.getMedium(_element.getID());
 
         auto thermal_conductivity =
             MaterialPropertyLib::formEigenTensor<GlobalDim>(
@@ -267,7 +267,7 @@ protected:
             &local_p[0], ShapeFunction::NPOINTS);
 
         auto const& medium =
-            *_process_data.media_map->getMedium(_element.getID());
+            *_process_data.media_map.getMedium(_element.getID());
         auto const& liquid_phase = medium.phase("AqueousLiquid");
 
         for (unsigned ip = 0; ip < n_integration_points; ++ip)
diff --git a/ProcessLib/HT/HTProcessData.h b/ProcessLib/HT/HTProcessData.h
index c76d32b7d126ba987dbc406c81f3dc0a469d4a60..cfa3662ec2d16ffb6a90d39b12518404eae2e983 100644
--- a/ProcessLib/HT/HTProcessData.h
+++ b/ProcessLib/HT/HTProcessData.h
@@ -11,7 +11,6 @@
 #pragma once
 
 #include <Eigen/Core>
-#include <memory>
 #include <utility>
 
 #include "MaterialLib/MPL/MaterialSpatialDistributionMap.h"
@@ -25,8 +24,7 @@ namespace HT
 {
 struct HTProcessData final
 {
-    std::unique_ptr<MaterialPropertyLib::MaterialSpatialDistributionMap>
-        media_map;
+    MaterialPropertyLib::MaterialSpatialDistributionMap media_map;
     bool const has_fluid_thermal_expansion;
     ParameterLib::Parameter<double> const& solid_thermal_expansion;
     ParameterLib::Parameter<double> const& biot_constant;
diff --git a/ProcessLib/HT/MonolithicHTFEM.h b/ProcessLib/HT/MonolithicHTFEM.h
index 40e6cb9e473e8e507f8e847cb31f85f7d9682b6d..42e632bd120a72a8b45ecb7867ac0ea0f201f6f3 100644
--- a/ProcessLib/HT/MonolithicHTFEM.h
+++ b/ProcessLib/HT/MonolithicHTFEM.h
@@ -104,7 +104,7 @@ public:
             &local_x[pressure_index], pressure_size);
 
         auto const& medium =
-            *process_data.media_map->getMedium(this->_element.getID());
+            *process_data.media_map.getMedium(this->_element.getID());
         auto const& liquid_phase = medium.phase("AqueousLiquid");
         auto const& solid_phase = medium.phase("Solid");
 
diff --git a/ProcessLib/HT/StaggeredHTFEM-impl.h b/ProcessLib/HT/StaggeredHTFEM-impl.h
index 053e96b8359b6f48848beebd9add002118594a68..f123ad7411f32063efb9eb7e46464c987a16db8c 100644
--- a/ProcessLib/HT/StaggeredHTFEM-impl.h
+++ b/ProcessLib/HT/StaggeredHTFEM-impl.h
@@ -66,7 +66,7 @@ void StaggeredHTFEM<ShapeFunction, GlobalDim>::assembleHydraulicEquation(
 
     auto const& process_data = this->_process_data;
     auto const& medium =
-        *this->_process_data.media_map->getMedium(this->_element.getID());
+        *this->_process_data.media_map.getMedium(this->_element.getID());
     auto const& liquid_phase = medium.phase("AqueousLiquid");
     auto const& solid_phase = medium.phase("Solid");
 
@@ -192,7 +192,7 @@ void StaggeredHTFEM<ShapeFunction, GlobalDim>::assembleHeatTransportEquation(
 
     auto const& process_data = this->_process_data;
     auto const& medium =
-        *process_data.media_map->getMedium(this->_element.getID());
+        *process_data.media_map.getMedium(this->_element.getID());
     auto const& liquid_phase = medium.phase("AqueousLiquid");
 
     auto const& b =
diff --git a/ProcessLib/HeatConduction/CreateHeatConductionProcess.cpp b/ProcessLib/HeatConduction/CreateHeatConductionProcess.cpp
index d14037c3a52e663f986ba5b47dc5abdcdd99235f..03853c0a2e01989534f7ae782d6bbc29c3d5b561 100644
--- a/ProcessLib/HeatConduction/CreateHeatConductionProcess.cpp
+++ b/ProcessLib/HeatConduction/CreateHeatConductionProcess.cpp
@@ -71,7 +71,7 @@ std::unique_ptr<Process> createHeatConductionProcess(
         MaterialPropertyLib::createMaterialSpatialDistributionMap(media, mesh);
 
     DBUG("Check the media properties of heat conduction process ...");
-    checkMPLProperties(mesh, *media_map);
+    checkMPLProperties(mesh, media_map);
     DBUG("Media properties verified.");
 
     /// \section parametersheatconduction Process Parameters
diff --git a/ProcessLib/HeatConduction/HeatConductionFEM.h b/ProcessLib/HeatConduction/HeatConductionFEM.h
index 74cb85a0fce80308210aeaa1dcf56431c4c73e86..f364a3f5edcd3d49b51313ea6018726f29b041a0 100644
--- a/ProcessLib/HeatConduction/HeatConductionFEM.h
+++ b/ProcessLib/HeatConduction/HeatConductionFEM.h
@@ -102,7 +102,7 @@ public:
             _integration_method.getNumberOfPoints();
 
         auto const& medium =
-            *_process_data.media_map->getMedium(_element.getID());
+            *_process_data.media_map.getMedium(_element.getID());
         MaterialPropertyLib::VariableArray vars;
 
         for (unsigned ip = 0; ip < n_integration_points; ip++)
@@ -185,7 +185,7 @@ public:
         pos.setElementID(_element.getID());
 
         auto const& medium =
-            *_process_data.media_map->getMedium(_element.getID());
+            *_process_data.media_map.getMedium(_element.getID());
         MaterialPropertyLib::VariableArray vars;
 
         for (unsigned ip = 0; ip < n_integration_points; ip++)
@@ -260,7 +260,7 @@ public:
         pos.setElementID(_element.getID());
 
         auto const& medium =
-            *_process_data.media_map->getMedium(_element.getID());
+            *_process_data.media_map.getMedium(_element.getID());
         MaterialPropertyLib::VariableArray vars;
 
         double const dt = std::numeric_limits<double>::quiet_NaN();
diff --git a/ProcessLib/HeatConduction/HeatConductionProcessData.h b/ProcessLib/HeatConduction/HeatConductionProcessData.h
index 714ddf6c349a658a1d5d1c3158fd83daf8ff48a4..d14418b3f66d4a312d63cee72f639d4385d6318a 100644
--- a/ProcessLib/HeatConduction/HeatConductionProcessData.h
+++ b/ProcessLib/HeatConduction/HeatConductionProcessData.h
@@ -10,15 +10,13 @@
 
 #pragma once
 
-#include <memory>
 #include "MaterialLib/MPL/MaterialSpatialDistributionMap.h"
 
 namespace ProcessLib::HeatConduction
 {
 struct HeatConductionProcessData
 {
-    std::unique_ptr<MaterialPropertyLib::MaterialSpatialDistributionMap>
-        media_map;
+    MaterialPropertyLib::MaterialSpatialDistributionMap media_map;
 
     /// If set mass lumping will be applied to the equation.
     bool const mass_lumping;
diff --git a/ProcessLib/HeatTransportBHE/HeatTransportBHEProcessData.h b/ProcessLib/HeatTransportBHE/HeatTransportBHEProcessData.h
index d8af776ae2ea97ba17420f77117d0602c096e402..1490d565760ec9a58eebdf8ec4b0f6d3735ea4b2 100644
--- a/ProcessLib/HeatTransportBHE/HeatTransportBHEProcessData.h
+++ b/ProcessLib/HeatTransportBHE/HeatTransportBHEProcessData.h
@@ -26,22 +26,20 @@ namespace ProcessLib::HeatTransportBHE
 struct HeatTransportBHEProcessData final
 {
     HeatTransportBHEProcessData(
-        std::unique_ptr<MaterialPropertyLib::MaterialSpatialDistributionMap>&&
-            media_map_,
+        MaterialPropertyLib::MaterialSpatialDistributionMap media_map_,
         std::vector<BHE::BHETypes>&& vec_BHEs_,
         BHEInflowPythonBoundaryConditionPythonSideInterface* py_bc_object_ =
             nullptr,
         const bool use_tespy = false,
         const bool use_server_communication = false)
-        : media_map(std::move(media_map_)),
+        : media_map(media_map_),
           _vec_BHE_property(std::move(vec_BHEs_)),
           py_bc_object(py_bc_object_),
           _use_tespy(use_tespy),
           _use_server_communication(use_server_communication)
     {
     }
-    std::unique_ptr<MaterialPropertyLib::MaterialSpatialDistributionMap>
-        media_map;
+    MaterialPropertyLib::MaterialSpatialDistributionMap media_map;
 
     std::vector<BHE::BHETypes> _vec_BHE_property;
 
diff --git a/ProcessLib/HeatTransportBHE/LocalAssemblers/HeatTransportBHELocalAssemblerSoil-impl.h b/ProcessLib/HeatTransportBHE/LocalAssemblers/HeatTransportBHELocalAssemblerSoil-impl.h
index ab7aa2aaa59b5f87d49ed793ae65c02a6caa3718..9e2d23f7e294daf4dc3247d65cb76d9a92313cc2 100644
--- a/ProcessLib/HeatTransportBHE/LocalAssemblers/HeatTransportBHELocalAssemblerSoil-impl.h
+++ b/ProcessLib/HeatTransportBHE/LocalAssemblers/HeatTransportBHELocalAssemblerSoil-impl.h
@@ -85,7 +85,7 @@ void HeatTransportBHELocalAssemblerSoil<ShapeFunction>::assemble(
     ParameterLib::SpatialPosition pos;
     pos.setElementID(_element_id);
 
-    auto const& medium = *_process_data.media_map->getMedium(_element_id);
+    auto const& medium = *_process_data.media_map.getMedium(_element_id);
     auto const& solid_phase = medium.phase("Solid");
     auto const& liquid_phase = medium.phase("AqueousLiquid");
 
diff --git a/ProcessLib/HydroMechanics/CreateHydroMechanicsProcess.cpp b/ProcessLib/HydroMechanics/CreateHydroMechanicsProcess.cpp
index 35dc9873386ec4764520693e8907529fb14d6108..a2fba3a9c577e8ea42198016d9151c585d019620 100644
--- a/ProcessLib/HydroMechanics/CreateHydroMechanicsProcess.cpp
+++ b/ProcessLib/HydroMechanics/CreateHydroMechanicsProcess.cpp
@@ -216,8 +216,8 @@ std::unique_ptr<Process> createHydroMechanicsProcess(
 
     for (auto const& element_id : mesh.getElements() | MeshLib::views::ids)
     {
-        media_map->checkElementHasMedium(element_id);
-        auto const& medium = *media_map->getMedium(element_id);
+        media_map.checkElementHasMedium(element_id);
+        auto const& medium = *media_map.getMedium(element_id);
         checkRequiredProperties(medium, requiredMediumProperties);
         checkRequiredProperties(fluidPhase(medium), requiredFluidProperties);
         checkRequiredProperties(medium.phase("Solid"), requiredSolidProperties);
diff --git a/ProcessLib/HydroMechanics/HydroMechanicsFEM-impl.h b/ProcessLib/HydroMechanics/HydroMechanicsFEM-impl.h
index 1fd0979fc1141c18986bf35fa924984e0d640322..ddde9d3d8abea83ebe4def8af86061d0e114a17d 100644
--- a/ProcessLib/HydroMechanics/HydroMechanicsFEM-impl.h
+++ b/ProcessLib/HydroMechanics/HydroMechanicsFEM-impl.h
@@ -182,7 +182,7 @@ void HydroMechanicsLocalAssembler<ShapeFunctionDisplacement,
         _integration_method.getNumberOfPoints();
 
     auto const& b = _process_data.specific_body_force;
-    auto const& medium = _process_data.media_map->getMedium(_element.getID());
+    auto const& medium = _process_data.media_map.getMedium(_element.getID());
     auto const& solid = medium->phase("Solid");
     auto const& fluid = fluidPhase(*medium);
     MPL::VariableArray vars;
@@ -408,7 +408,7 @@ std::vector<double> const& HydroMechanicsLocalAssembler<
     ParameterLib::SpatialPosition x_position;
     x_position.setElementID(_element.getID());
 
-    auto const& medium = _process_data.media_map->getMedium(_element.getID());
+    auto const& medium = _process_data.media_map.getMedium(_element.getID());
     auto const& fluid = fluidPhase(*medium);
     MPL::VariableArray vars;
 
@@ -530,7 +530,7 @@ void HydroMechanicsLocalAssembler<ShapeFunctionDisplacement,
     ParameterLib::SpatialPosition x_position;
     x_position.setElementID(_element.getID());
 
-    auto const& medium = _process_data.media_map->getMedium(_element.getID());
+    auto const& medium = _process_data.media_map.getMedium(_element.getID());
     auto const& fluid = fluidPhase(*medium);
     MPL::VariableArray vars;
 
@@ -691,7 +691,7 @@ void HydroMechanicsLocalAssembler<ShapeFunctionDisplacement,
     ParameterLib::SpatialPosition x_position;
     x_position.setElementID(_element.getID());
 
-    auto const& medium = _process_data.media_map->getMedium(_element.getID());
+    auto const& medium = _process_data.media_map.getMedium(_element.getID());
     auto const& solid = medium->phase("Solid");
     auto const& fluid = fluidPhase(*medium);
     MPL::VariableArray vars;
@@ -908,7 +908,7 @@ void HydroMechanicsLocalAssembler<ShapeFunctionDisplacement,
         x_position.setElementID(_element.getID());
 
         auto const& medium =
-            _process_data.media_map->getMedium(_element.getID());
+            _process_data.media_map.getMedium(_element.getID());
 
         auto const T_ref =
             medium->property(MPL::PropertyType::reference_temperature)
@@ -986,7 +986,7 @@ void HydroMechanicsLocalAssembler<
                     _element.getID());
 
             auto const& medium =
-                _process_data.media_map->getMedium(_element.getID());
+                _process_data.media_map.getMedium(_element.getID());
             MPL::VariableArray vars;
 
             auto const T_ref =
@@ -1156,7 +1156,7 @@ void HydroMechanicsLocalAssembler<ShapeFunctionDisplacement,
     unsigned const n_integration_points =
         _integration_method.getNumberOfPoints();
 
-    auto const& medium = _process_data.media_map->getMedium(elem_id);
+    auto const& medium = _process_data.media_map.getMedium(elem_id);
     MPL::VariableArray vars;
 
     SymmetricTensor k_sum = SymmetricTensor::Zero(KelvinVectorSize);
diff --git a/ProcessLib/HydroMechanics/HydroMechanicsProcessData.h b/ProcessLib/HydroMechanics/HydroMechanicsProcessData.h
index 25a334af0c883eea8d596319a57d506498649c6f..6875355da40472e6310a54412b884ea2fcc0f19b 100644
--- a/ProcessLib/HydroMechanics/HydroMechanicsProcessData.h
+++ b/ProcessLib/HydroMechanics/HydroMechanicsProcessData.h
@@ -61,8 +61,7 @@ struct HydroMechanicsProcessData
 {
     MeshLib::PropertyVector<int> const* const material_ids = nullptr;
 
-    std::unique_ptr<MaterialPropertyLib::MaterialSpatialDistributionMap>
-        media_map = nullptr;
+    MaterialPropertyLib::MaterialSpatialDistributionMap media_map;
 
     /// The constitutive relation for the mechanical part.
     std::map<int, std::unique_ptr<
diff --git a/ProcessLib/LiquidFlow/CreateLiquidFlowProcess.cpp b/ProcessLib/LiquidFlow/CreateLiquidFlowProcess.cpp
index 3e6cd606ee719fd72ec81e31895539df37110a6c..7a2cd406b25b6a77771d44c34797be5a326ea4ea 100644
--- a/ProcessLib/LiquidFlow/CreateLiquidFlowProcess.cpp
+++ b/ProcessLib/LiquidFlow/CreateLiquidFlowProcess.cpp
@@ -129,7 +129,7 @@ std::unique_ptr<Process> createLiquidFlowProcess(
     }
 
     DBUG("Check the media properties of LiquidFlow process ...");
-    checkMPLProperties(mesh, *media_map);
+    checkMPLProperties(mesh, media_map);
     DBUG("Media properties verified.");
 
     auto const* aperture_size_parameter = &ParameterLib::findParameter<double>(
diff --git a/ProcessLib/LiquidFlow/LiquidFlowData.h b/ProcessLib/LiquidFlow/LiquidFlowData.h
index bf8a1bd327893875c4bcdf17f1f62ac1b8d2f4a9..b97982db23e4ebae1e26a50a6b7bb34ddc09c6eb 100644
--- a/ProcessLib/LiquidFlow/LiquidFlowData.h
+++ b/ProcessLib/LiquidFlow/LiquidFlowData.h
@@ -11,23 +11,17 @@
 #pragma once
 
 #include <Eigen/Core>
-#include <memory>
 
+#include "MaterialLib/MPL/MaterialSpatialDistributionMap.h"
 #include "ParameterLib/Parameter.h"
 
-namespace MaterialPropertyLib
-{
-class MaterialSpatialDistributionMap;
-}
-
 namespace ProcessLib
 {
 namespace LiquidFlow
 {
 struct LiquidFlowData final
 {
-    std::unique_ptr<MaterialPropertyLib::MaterialSpatialDistributionMap>
-        media_map;
+    MaterialPropertyLib::MaterialSpatialDistributionMap media_map;
 
     /// A vector of the rotation matrices for all elements.
     std::vector<Eigen::MatrixXd> const element_rotation_matrices;
diff --git a/ProcessLib/LiquidFlow/LiquidFlowLocalAssembler-impl.h b/ProcessLib/LiquidFlow/LiquidFlowLocalAssembler-impl.h
index 3f74cb05240747707ec977bd9a1f497c4f6c2976..5f3bffe46f4b9cc90253f430ba3015c699878179 100644
--- a/ProcessLib/LiquidFlow/LiquidFlowLocalAssembler-impl.h
+++ b/ProcessLib/LiquidFlow/LiquidFlowLocalAssembler-impl.h
@@ -32,7 +32,7 @@ void LiquidFlowLocalAssembler<ShapeFunction, GlobalDim>::assemble(
     ParameterLib::SpatialPosition pos;
     pos.setElementID(_element.getID());
 
-    auto const& medium = *_process_data.media_map->getMedium(_element.getID());
+    auto const& medium = *_process_data.media_map.getMedium(_element.getID());
     MaterialPropertyLib::VariableArray vars;
     vars.temperature =
         medium[MaterialPropertyLib::PropertyType::reference_temperature]
@@ -80,7 +80,7 @@ Eigen::Vector3d LiquidFlowLocalAssembler<ShapeFunction, GlobalDim>::getFlux(
     ParameterLib::SpatialPosition pos;
     pos.setElementID(_element.getID());
 
-    auto const& medium = *_process_data.media_map->getMedium(_element.getID());
+    auto const& medium = *_process_data.media_map.getMedium(_element.getID());
     auto const& liquid_phase = medium.phase("AqueousLiquid");
 
     MaterialPropertyLib::VariableArray vars;
@@ -130,7 +130,7 @@ void LiquidFlowLocalAssembler<ShapeFunction, GlobalDim>::
     ParameterLib::SpatialPosition pos;
     pos.setElementID(_element.getID());
 
-    auto const& medium = *_process_data.media_map->getMedium(_element.getID());
+    auto const& medium = *_process_data.media_map.getMedium(_element.getID());
     auto const& liquid_phase = medium.phase("AqueousLiquid");
 
     MaterialPropertyLib::VariableArray vars;
@@ -235,7 +235,7 @@ LiquidFlowLocalAssembler<ShapeFunction, GlobalDim>::getIntPtDarcyVelocity(
     ParameterLib::SpatialPosition pos;
     pos.setElementID(_element.getID());
 
-    auto const& medium = *_process_data.media_map->getMedium(_element.getID());
+    auto const& medium = *_process_data.media_map.getMedium(_element.getID());
     MaterialPropertyLib::VariableArray vars;
     vars.temperature =
         medium[MaterialPropertyLib::PropertyType::reference_temperature]
@@ -279,7 +279,7 @@ void LiquidFlowLocalAssembler<ShapeFunction, GlobalDim>::
     unsigned const n_integration_points =
         _integration_method.getNumberOfPoints();
 
-    auto const& medium = *_process_data.media_map->getMedium(_element.getID());
+    auto const& medium = *_process_data.media_map.getMedium(_element.getID());
     auto const& liquid_phase = medium.phase("AqueousLiquid");
 
     MaterialPropertyLib::VariableArray vars;
diff --git a/ProcessLib/RichardsComponentTransport/CreateRichardsComponentTransportProcess.cpp b/ProcessLib/RichardsComponentTransport/CreateRichardsComponentTransportProcess.cpp
index 4af0e66b0a941fb8b63619e78d1b573bf5ab4f9e..aa3b3f844ab57d5c807cd677e836f1728eb1d7a0 100644
--- a/ProcessLib/RichardsComponentTransport/CreateRichardsComponentTransportProcess.cpp
+++ b/ProcessLib/RichardsComponentTransport/CreateRichardsComponentTransportProcess.cpp
@@ -152,7 +152,7 @@ std::unique_ptr<Process> createRichardsComponentTransportProcess(
 
     DBUG(
         "Check the media properties of RichardsComponentTransport process ...");
-    checkMPLProperties(mesh, *media_map);
+    checkMPLProperties(mesh, media_map);
     DBUG("Media properties verified.");
 
     RichardsComponentTransportProcessData process_data{
diff --git a/ProcessLib/RichardsComponentTransport/RichardsComponentTransportFEM-impl.h b/ProcessLib/RichardsComponentTransport/RichardsComponentTransportFEM-impl.h
index 5ce660c1f865b773dbeece2a7209312a95491d32..84c7c86843b667143a60245b762cd973e487470b 100644
--- a/ProcessLib/RichardsComponentTransport/RichardsComponentTransportFEM-impl.h
+++ b/ProcessLib/RichardsComponentTransport/RichardsComponentTransportFEM-impl.h
@@ -94,7 +94,7 @@ void LocalAssemblerData<ShapeFunction, GlobalDim>::assemble(
         GlobalDimMatrixType::Identity(GlobalDim, GlobalDim));
 
     // Get material properties
-    auto const& medium = *_process_data.media_map->getMedium(_element_id);
+    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());
@@ -254,7 +254,7 @@ LocalAssemblerData<ShapeFunction, GlobalDim>::getIntPtDarcyVelocity(
     MaterialPropertyLib::VariableArray vars;
 
     // Get material properties
-    auto const& medium = *_process_data.media_map->getMedium(_element_id);
+    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>(
@@ -329,7 +329,7 @@ LocalAssemblerData<ShapeFunction, GlobalDim>::getIntPtSaturation(
 
     MaterialPropertyLib::VariableArray vars;
 
-    auto const& medium = *_process_data.media_map->getMedium(_element_id);
+    auto const& medium = *_process_data.media_map.getMedium(_element_id);
 
     unsigned const n_integration_points =
         _integration_method.getNumberOfPoints();
diff --git a/ProcessLib/RichardsComponentTransport/RichardsComponentTransportProcessData.h b/ProcessLib/RichardsComponentTransport/RichardsComponentTransportProcessData.h
index 85448a28922c50b2e770d614a11d406942bd2fc9..420798de9d6c4f175d79fc2afd941c43d12213d3 100644
--- a/ProcessLib/RichardsComponentTransport/RichardsComponentTransportProcessData.h
+++ b/ProcessLib/RichardsComponentTransport/RichardsComponentTransportProcessData.h
@@ -11,12 +11,8 @@
 #pragma once
 
 #include <Eigen/Core>
-#include <memory>
 
-namespace MaterialPropertyLib
-{
-class MaterialSpatialDistributionMap;
-}
+#include "MaterialLib/MPL/MaterialSpatialDistributionMap.h"
 
 namespace ProcessLib
 {
@@ -24,8 +20,7 @@ namespace RichardsComponentTransport
 {
 struct RichardsComponentTransportProcessData
 {
-    std::unique_ptr<MaterialPropertyLib::MaterialSpatialDistributionMap>
-        media_map;
+    MaterialPropertyLib::MaterialSpatialDistributionMap media_map;
     Eigen::VectorXd const specific_body_force;
     bool const has_gravity;
 };
diff --git a/ProcessLib/RichardsFlow/CreateRichardsFlowProcess.cpp b/ProcessLib/RichardsFlow/CreateRichardsFlowProcess.cpp
index 7b977846acd2cdce20e25d74ebc9b512ad92ccae..9a8b7d070583e62998ceb49a75a865f9a8f4f328 100644
--- a/ProcessLib/RichardsFlow/CreateRichardsFlowProcess.cpp
+++ b/ProcessLib/RichardsFlow/CreateRichardsFlowProcess.cpp
@@ -106,7 +106,7 @@ std::unique_ptr<Process> createRichardsFlowProcess(
         MaterialPropertyLib::createMaterialSpatialDistributionMap(media, mesh);
 
     DBUG("Check the media properties of RichardsFlow process ...");
-    checkMPLProperties(mesh, *media_map);
+    checkMPLProperties(mesh, media_map);
     DBUG("Media properties verified.");
 
     RichardsFlowProcessData process_data{
diff --git a/ProcessLib/RichardsFlow/RichardsFlowFEM.h b/ProcessLib/RichardsFlow/RichardsFlowFEM.h
index 846d6f9c3ea50f1c196e47d99bbd8ea7a7452557..270863bcef7f6fa4bc47ab308297f3a2a5018e6d 100644
--- a/ProcessLib/RichardsFlow/RichardsFlowFEM.h
+++ b/ProcessLib/RichardsFlow/RichardsFlowFEM.h
@@ -158,7 +158,7 @@ public:
         pos.setElementID(_element.getID());
 
         auto const& medium =
-            *_process_data.media_map->getMedium(_element.getID());
+            *_process_data.media_map.getMedium(_element.getID());
         auto const& liquid_phase = medium.phase("AqueousLiquid");
         MaterialPropertyLib::VariableArray vars;
         vars.temperature =
@@ -290,7 +290,7 @@ public:
         pos.setElementID(_element.getID());
 
         auto const& medium =
-            *_process_data.media_map->getMedium(_element.getID());
+            *_process_data.media_map.getMedium(_element.getID());
         auto const& liquid_phase = medium.phase("AqueousLiquid");
 
         MaterialPropertyLib::VariableArray vars;
diff --git a/ProcessLib/RichardsFlow/RichardsFlowProcessData.h b/ProcessLib/RichardsFlow/RichardsFlowProcessData.h
index 95d2fb5aab2091976cc7114f798584eaca3dd33b..6075b7a50fe8160a05a1706d965450aba24561a4 100644
--- a/ProcessLib/RichardsFlow/RichardsFlowProcessData.h
+++ b/ProcessLib/RichardsFlow/RichardsFlowProcessData.h
@@ -10,12 +10,9 @@
 
 #pragma once
 
-#include <memory>
+#include <Eigen/Core>
 
-namespace MaterialPropertyLib
-{
-class MaterialSpatialDistributionMap;
-}
+#include "MaterialLib/MPL/MaterialSpatialDistributionMap.h"
 
 namespace ProcessLib
 {
@@ -23,8 +20,7 @@ namespace RichardsFlow
 {
 struct RichardsFlowProcessData
 {
-    std::unique_ptr<MaterialPropertyLib::MaterialSpatialDistributionMap>
-        media_map;
+    MaterialPropertyLib::MaterialSpatialDistributionMap media_map;
     Eigen::VectorXd const specific_body_force;
     bool const has_gravity;
     bool const has_mass_lumping;
diff --git a/ProcessLib/RichardsMechanics/RichardsMechanicsFEM-impl.h b/ProcessLib/RichardsMechanics/RichardsMechanicsFEM-impl.h
index c6f55bb5bfa8e4e5f7dd07d144d32da8a97fe724..73ffda62eb70a2aef19d976cf9f7e6d6014549dc 100644
--- a/ProcessLib/RichardsMechanics/RichardsMechanicsFEM-impl.h
+++ b/ProcessLib/RichardsMechanics/RichardsMechanicsFEM-impl.h
@@ -149,7 +149,7 @@ RichardsMechanicsLocalAssembler<ShapeFunctionDisplacement,
             _process_data.solid_materials, _process_data.material_ids,
             e.getID());
 
-    auto const& medium = _process_data.media_map->getMedium(_element.getID());
+    auto const& medium = _process_data.media_map.getMedium(_element.getID());
 
     ParameterLib::SpatialPosition x_position;
     x_position.setElementID(_element.getID());
@@ -293,7 +293,7 @@ void RichardsMechanicsLocalAssembler<ShapeFunctionDisplacement,
                                   pressure_size);
 
     constexpr double dt = std::numeric_limits<double>::quiet_NaN();
-    auto const& medium = _process_data.media_map->getMedium(_element.getID());
+    auto const& medium = _process_data.media_map.getMedium(_element.getID());
     MPL::VariableArray variables;
 
     ParameterLib::SpatialPosition x_position;
@@ -406,7 +406,7 @@ void RichardsMechanicsLocalAssembler<
         MathLib::KelvinVector::kelvin_vector_dimensions(
             DisplacementDim)>::identity2;
 
-    auto const& medium = _process_data.media_map->getMedium(_element.getID());
+    auto const& medium = _process_data.media_map.getMedium(_element.getID());
     auto const& liquid_phase = medium->phase("AqueousLiquid");
     auto const& solid_phase = medium->phase("Solid");
     MPL::VariableArray variables;
@@ -760,7 +760,7 @@ void RichardsMechanicsLocalAssembler<ShapeFunctionDisplacement,
             pressure_size, displacement_size>::Zero(pressure_size,
                                                     displacement_size);
 
-    auto const& medium = _process_data.media_map->getMedium(_element.getID());
+    auto const& medium = _process_data.media_map.getMedium(_element.getID());
     auto const& liquid_phase = medium->phase("AqueousLiquid");
     auto const& solid_phase = medium->phase("Solid");
     MPL::VariableArray variables;
@@ -1530,7 +1530,7 @@ void RichardsMechanicsLocalAssembler<ShapeFunctionDisplacement,
         MathLib::KelvinVector::kelvin_vector_dimensions(
             DisplacementDim)>::identity2;
 
-    auto const& medium = _process_data.media_map->getMedium(_element.getID());
+    auto const& medium = _process_data.media_map.getMedium(_element.getID());
     auto const& liquid_phase = medium->phase("AqueousLiquid");
     auto const& solid_phase = medium->phase("Solid");
     MPL::VariableArray variables;
diff --git a/ProcessLib/RichardsMechanics/RichardsMechanicsProcessData.h b/ProcessLib/RichardsMechanics/RichardsMechanicsProcessData.h
index bf7c803f2692ea83ff94fbc13ebcc073c86ddb33..91def3102e4f20987f13d4d1a039d148585a910f 100644
--- a/ProcessLib/RichardsMechanics/RichardsMechanicsProcessData.h
+++ b/ProcessLib/RichardsMechanics/RichardsMechanicsProcessData.h
@@ -35,8 +35,7 @@ struct RichardsMechanicsProcessData
 {
     MeshLib::PropertyVector<int> const* const material_ids = nullptr;
 
-    std::unique_ptr<MaterialPropertyLib::MaterialSpatialDistributionMap>
-        media_map = nullptr;
+    MaterialPropertyLib::MaterialSpatialDistributionMap media_map;
 
     /// The constitutive relation for the mechanical part.
     std::map<int, std::unique_ptr<
diff --git a/ProcessLib/SmallDeformation/SmallDeformationFEM.h b/ProcessLib/SmallDeformation/SmallDeformationFEM.h
index 759173f8400a2c4cba384f5abff1037ed9fbadfd..d69d1ac738d70dd1ff18abe5ed08935912ae5029 100644
--- a/ProcessLib/SmallDeformation/SmallDeformationFEM.h
+++ b/ProcessLib/SmallDeformation/SmallDeformationFEM.h
@@ -274,7 +274,7 @@ public:
             ip_data) const
     {
         auto const& solid_phase =
-            this->_process_data.media_map->getMedium(this->_element.getID())
+            this->_process_data.media_map.getMedium(this->_element.getID())
                 ->phase("Solid");
 
         MPL::VariableArray variables_prev;
diff --git a/ProcessLib/SmallDeformation/SmallDeformationProcessData.h b/ProcessLib/SmallDeformation/SmallDeformationProcessData.h
index 806df330aaa728f9b314a694d4387edd564ba7d5..fce0cdc1bd4e09f7bf431794c77ea3bd5c68eb9f 100644
--- a/ProcessLib/SmallDeformation/SmallDeformationProcessData.h
+++ b/ProcessLib/SmallDeformation/SmallDeformationProcessData.h
@@ -34,8 +34,7 @@ struct SmallDeformationProcessData
 {
     MeshLib::PropertyVector<int> const* const material_ids = nullptr;
 
-    std::unique_ptr<MaterialPropertyLib::MaterialSpatialDistributionMap>
-        media_map = nullptr;
+    MaterialPropertyLib::MaterialSpatialDistributionMap media_map;
 
     std::map<
         int,
diff --git a/ProcessLib/SteadyStateDiffusion/CreateSteadyStateDiffusion.cpp b/ProcessLib/SteadyStateDiffusion/CreateSteadyStateDiffusion.cpp
index 51a1facba0b7a1646e835791fa5a8880e920f869..dcd84ce209d7115978bd447edb2893fafcff2483 100644
--- a/ProcessLib/SteadyStateDiffusion/CreateSteadyStateDiffusion.cpp
+++ b/ProcessLib/SteadyStateDiffusion/CreateSteadyStateDiffusion.cpp
@@ -72,7 +72,7 @@ std::unique_ptr<Process> createSteadyStateDiffusion(
         MaterialPropertyLib::createMaterialSpatialDistributionMap(media, mesh);
 
     DBUG("Check the media properties of steady state diffusion process ...");
-    checkMPLProperties(mesh, *media_map);
+    checkMPLProperties(mesh, media_map);
     DBUG("Media properties verified.");
 
     SteadyStateDiffusionData process_data{std::move(media_map)};
diff --git a/ProcessLib/SteadyStateDiffusion/SteadyStateDiffusionData.h b/ProcessLib/SteadyStateDiffusion/SteadyStateDiffusionData.h
index a7b2f2e55c8fa0c1fc9664ed1eda012b0249af35..74cc2fc1c622264765bffdd88219acd9419cdc89 100644
--- a/ProcessLib/SteadyStateDiffusion/SteadyStateDiffusionData.h
+++ b/ProcessLib/SteadyStateDiffusion/SteadyStateDiffusionData.h
@@ -23,8 +23,7 @@ namespace SteadyStateDiffusion
 {
 struct SteadyStateDiffusionData final
 {
-    std::unique_ptr<MaterialPropertyLib::MaterialSpatialDistributionMap>
-        media_map;
+    MaterialPropertyLib::MaterialSpatialDistributionMap media_map;
 };
 
 } // namespace SteadyStateDiffusion
diff --git a/ProcessLib/SteadyStateDiffusion/SteadyStateDiffusionFEM.h b/ProcessLib/SteadyStateDiffusion/SteadyStateDiffusionFEM.h
index e48ebc875c8322db98a12e16d65e26f20af58b05..7de0fc8991dafecacf22875aa47bcbd093325ef5 100644
--- a/ProcessLib/SteadyStateDiffusion/SteadyStateDiffusionFEM.h
+++ b/ProcessLib/SteadyStateDiffusion/SteadyStateDiffusionFEM.h
@@ -100,7 +100,7 @@ public:
         pos.setElementID(_element.getID());
 
         auto const& medium =
-            *_process_data.media_map->getMedium(_element.getID());
+            *_process_data.media_map.getMedium(_element.getID());
         MaterialPropertyLib::VariableArray vars;
         vars.temperature =
             medium
@@ -149,7 +149,7 @@ public:
         ParameterLib::SpatialPosition pos;
         pos.setElementID(_element.getID());
         auto const& medium =
-            *_process_data.media_map->getMedium(_element.getID());
+            *_process_data.media_map.getMedium(_element.getID());
 
         MaterialPropertyLib::VariableArray vars;
         vars.temperature =
@@ -213,7 +213,7 @@ public:
         pos.setElementID(_element.getID());
 
         auto const& medium =
-            *_process_data.media_map->getMedium(_element.getID());
+            *_process_data.media_map.getMedium(_element.getID());
 
         MaterialPropertyLib::VariableArray vars;
         vars.temperature =
diff --git a/ProcessLib/StokesFlow/CreateStokesFlowProcess.cpp b/ProcessLib/StokesFlow/CreateStokesFlowProcess.cpp
index 90264123151898959c5c609fdebb3a180e54cf3e..3c0d7f4eb79f493252696fa2827be934c2e794eb 100644
--- a/ProcessLib/StokesFlow/CreateStokesFlowProcess.cpp
+++ b/ProcessLib/StokesFlow/CreateStokesFlowProcess.cpp
@@ -147,7 +147,7 @@ std::unique_ptr<Process> createStokesFlowProcess(
         MaterialPropertyLib::createMaterialSpatialDistributionMap(media, mesh);
 
     DBUG("Check the media properties of StokesFlow process ...");
-    checkMPLProperties(mesh, *media_map, use_stokes_brinkman_form);
+    checkMPLProperties(mesh, media_map, use_stokes_brinkman_form);
     DBUG("Media properties verified.");
 
     StokesFlowProcessData process_data{std::move(media_map),
diff --git a/ProcessLib/StokesFlow/StokesFlowFEM.h b/ProcessLib/StokesFlow/StokesFlowFEM.h
index 1d02dfbf934e2f533c293c88cf02ce2450797177..22100998ab10cf3ec0ca5e3cba89dc9dd2e36610 100644
--- a/ProcessLib/StokesFlow/StokesFlowFEM.h
+++ b/ProcessLib/StokesFlow/StokesFlowFEM.h
@@ -166,7 +166,7 @@ public:
 
         // Get material properties
         auto const& medium =
-            *_process_data.media_map->getMedium(_element.getID());
+            *_process_data.media_map.getMedium(_element.getID());
         auto const& phase = medium.phase("AqueousLiquid");
 
         for (unsigned ip(0); ip < n_integration_points; ++ip)
diff --git a/ProcessLib/StokesFlow/StokesFlowProcessData.h b/ProcessLib/StokesFlow/StokesFlowProcessData.h
index 2e3f392bfaf23ca5ad1e1c661eb1c81fd9daffe3..83aa52c49a736bbdb63b3e0b2301568eda88ace2 100644
--- a/ProcessLib/StokesFlow/StokesFlowProcessData.h
+++ b/ProcessLib/StokesFlow/StokesFlowProcessData.h
@@ -11,23 +11,16 @@
 #pragma once
 
 #include <Eigen/Core>
-#include <memory>
 
 #include "MeshLib/PropertyVector.h"
 
-namespace MaterialPropertyLib
-{
-class MaterialSpatialDistributionMap;
-}
-
 namespace ProcessLib
 {
 namespace StokesFlow
 {
 struct StokesFlowProcessData
 {
-    std::unique_ptr<MaterialPropertyLib::MaterialSpatialDistributionMap>
-        media_map;
+    MaterialPropertyLib::MaterialSpatialDistributionMap media_map;
     /// an external force that applies in the bulk of the fluid, like gravity.
     Eigen::VectorXd const specific_body_force;
 
diff --git a/ProcessLib/TH2M/TH2MFEM-impl.h b/ProcessLib/TH2M/TH2MFEM-impl.h
index 03b9175f78794b845c9a530ecd2129c0da9d2e30..930b4a23b6ff04553d75eb90af3c9993658bbd5a 100644
--- a/ProcessLib/TH2M/TH2MFEM-impl.h
+++ b/ProcessLib/TH2M/TH2MFEM-impl.h
@@ -113,7 +113,7 @@ std::vector<ConstitutiveVariables<DisplacementDim>> TH2MLocalAssembler<
     auto const displacement =
         local_x.template segment<displacement_size>(displacement_index);
 
-    auto const& medium = *_process_data.media_map->getMedium(_element.getID());
+    auto const& medium = *_process_data.media_map.getMedium(_element.getID());
     auto const& gas_phase = medium.phase("Gas");
     auto const& liquid_phase = medium.phase("AqueousLiquid");
     auto const& solid_phase = medium.phase("Solid");
@@ -942,7 +942,7 @@ void TH2MLocalAssembler<ShapeFunctionDisplacement, ShapeFunctionPressure,
         local_x.template segment<temperature_size>(temperature_index);
 
     constexpr double dt = std::numeric_limits<double>::quiet_NaN();
-    auto const& medium = *_process_data.media_map->getMedium(_element.getID());
+    auto const& medium = *_process_data.media_map.getMedium(_element.getID());
     auto const& solid_phase = medium.phase("Solid");
 
     unsigned const n_integration_points =
diff --git a/ProcessLib/TH2M/TH2MProcessData.h b/ProcessLib/TH2M/TH2MProcessData.h
index e3c8da8d1fd9c991ceeb0abb985baaab7c951a4e..d1faea0402b62ab6f9814d67adb00f471e137770 100644
--- a/ProcessLib/TH2M/TH2MProcessData.h
+++ b/ProcessLib/TH2M/TH2MProcessData.h
@@ -28,8 +28,7 @@ struct TH2MProcessData
 {
     MeshLib::PropertyVector<int> const* const material_ids = nullptr;
 
-    std::unique_ptr<MaterialPropertyLib::MaterialSpatialDistributionMap>
-        media_map = nullptr;
+    MaterialPropertyLib::MaterialSpatialDistributionMap media_map;
 
     /// The constitutive relation for the mechanical part.
     std::map<int, std::unique_ptr<
diff --git a/ProcessLib/ThermalTwoPhaseFlowWithPP/ThermalTwoPhaseFlowWithPPLocalAssembler-impl.h b/ProcessLib/ThermalTwoPhaseFlowWithPP/ThermalTwoPhaseFlowWithPPLocalAssembler-impl.h
index fd2371eaa967fb5a3c7b247443a193340144d0d7..5febeba6387fc33ff6b53c58134d111317c6416f 100644
--- a/ProcessLib/ThermalTwoPhaseFlowWithPP/ThermalTwoPhaseFlowWithPPLocalAssembler-impl.h
+++ b/ProcessLib/ThermalTwoPhaseFlowWithPP/ThermalTwoPhaseFlowWithPPLocalAssembler-impl.h
@@ -170,7 +170,7 @@ void ThermalTwoPhaseFlowWithPPLocalAssembler<ShapeFunction, GlobalDim>::
         vars.phase_pressure = pg_int_pt;
 
         auto const& medium =
-            *_process_data.media_map->getMedium(this->_element.getID());
+            *_process_data.media_map.getMedium(this->_element.getID());
         auto const& liquid_phase = medium.phase("AqueousLiquid");
         auto const& solid_phase = medium.phase("Solid");
         auto const& gas_phase = medium.phase("Gas");
diff --git a/ProcessLib/ThermalTwoPhaseFlowWithPP/ThermalTwoPhaseFlowWithPPProcessData.h b/ProcessLib/ThermalTwoPhaseFlowWithPP/ThermalTwoPhaseFlowWithPPProcessData.h
index 14e478a676f6125807e8161365c20c74e3784562..ee6867a4de5d16946061e2a8d65f84db7498a228 100644
--- a/ProcessLib/ThermalTwoPhaseFlowWithPP/ThermalTwoPhaseFlowWithPPProcessData.h
+++ b/ProcessLib/ThermalTwoPhaseFlowWithPP/ThermalTwoPhaseFlowWithPPProcessData.h
@@ -21,8 +21,7 @@ namespace ThermalTwoPhaseFlowWithPP
 {
 struct ThermalTwoPhaseFlowWithPPProcessData
 {
-    std::unique_ptr<MaterialPropertyLib::MaterialSpatialDistributionMap>
-        media_map;
+    MaterialPropertyLib::MaterialSpatialDistributionMap media_map;
     Eigen::VectorXd const specific_body_force;
 
     bool const has_gravity;
diff --git a/ProcessLib/ThermoHydroMechanics/ThermoHydroMechanicsFEM-impl.h b/ProcessLib/ThermoHydroMechanics/ThermoHydroMechanicsFEM-impl.h
index 995a2e9452c2d1591de87e34b613977c0be149aa..5993811df26ea7b3e975a4068456b87c2b81bab6 100644
--- a/ProcessLib/ThermoHydroMechanics/ThermoHydroMechanicsFEM-impl.h
+++ b/ProcessLib/ThermoHydroMechanics/ThermoHydroMechanicsFEM-impl.h
@@ -71,7 +71,7 @@ ThermoHydroMechanicsLocalAssembler<ShapeFunctionDisplacement,
 
     // Consistency check: if frozen liquid phase is given, then the constitutive
     // relation for ice must also be given, and vice versa.
-    auto const& medium = _process_data.media_map->getMedium(_element.getID());
+    auto const& medium = _process_data.media_map.getMedium(_element.getID());
     if (medium->hasPhase("FrozenLiquid") !=
         (_process_data.ice_constitutive_relation != nullptr))
     {
@@ -166,7 +166,7 @@ ConstitutiveRelationsValues<DisplacementDim> ThermoHydroMechanicsLocalAssembler<
             _process_data.solid_materials, _process_data.material_ids,
             _element.getID());
 
-    auto const& medium = _process_data.media_map->getMedium(_element.getID());
+    auto const& medium = _process_data.media_map.getMedium(_element.getID());
     auto const& liquid_phase = medium->phase("AqueousLiquid");
     auto const& solid_phase = medium->phase("Solid");
     auto* const frozen_liquid_phase = medium->hasPhase("FrozenLiquid")
@@ -528,7 +528,7 @@ void ThermoHydroMechanicsLocalAssembler<
         Kup;
     Kup.setZero(displacement_size, pressure_size);
 
-    auto const& medium = _process_data.media_map->getMedium(_element.getID());
+    auto const& medium = _process_data.media_map.getMedium(_element.getID());
     bool const has_frozen_liquid_phase = medium->hasPhase("FrozenLiquid");
 
     unsigned const n_integration_points =
diff --git a/ProcessLib/ThermoHydroMechanics/ThermoHydroMechanicsProcessData.h b/ProcessLib/ThermoHydroMechanics/ThermoHydroMechanicsProcessData.h
index 1cd5de077f16cc69bd35d8618e5ec12958c27bfa..9dcecc5dfcf7016ab2eeba39e14ac8afc5b1b50b 100644
--- a/ProcessLib/ThermoHydroMechanics/ThermoHydroMechanicsProcessData.h
+++ b/ProcessLib/ThermoHydroMechanics/ThermoHydroMechanicsProcessData.h
@@ -35,8 +35,7 @@ struct ThermoHydroMechanicsProcessData
 {
     MeshLib::PropertyVector<int> const* const material_ids = nullptr;
 
-    std::unique_ptr<MaterialPropertyLib::MaterialSpatialDistributionMap>
-        media_map = nullptr;
+    MaterialPropertyLib::MaterialSpatialDistributionMap media_map;
 
     /// The constitutive relation for the mechanical part.
     std::map<int, std::unique_ptr<
diff --git a/ProcessLib/ThermoMechanics/ThermoMechanicsFEM-impl.h b/ProcessLib/ThermoMechanics/ThermoMechanicsFEM-impl.h
index d188ac47300fd51610d2a0808cd1416d6c428322..921e27dd20b6ae87c670aaa981f898659c381229 100644
--- a/ProcessLib/ThermoMechanics/ThermoMechanicsFEM-impl.h
+++ b/ProcessLib/ThermoMechanics/ThermoMechanicsFEM-impl.h
@@ -162,7 +162,7 @@ void ThermoMechanicsLocalAssembler<ShapeFunction, DisplacementDim>::
     ParameterLib::SpatialPosition x_position;
     x_position.setElementID(_element.getID());
 
-    auto const& medium = _process_data.media_map->getMedium(_element.getID());
+    auto const& medium = _process_data.media_map.getMedium(_element.getID());
     auto const& solid_phase = medium->phase("Solid");
 
     for (unsigned ip = 0; ip < n_integration_points; ip++)
@@ -382,7 +382,7 @@ void ThermoMechanicsLocalAssembler<ShapeFunction, DisplacementDim>::
     MPL::VariableArray variables_prev;
     ParameterLib::SpatialPosition x_position;
     x_position.setElementID(_element.getID());
-    auto const& medium = _process_data.media_map->getMedium(_element.getID());
+    auto const& medium = _process_data.media_map.getMedium(_element.getID());
     auto const& solid_phase = medium->phase("Solid");
 
     for (unsigned ip = 0; ip < n_integration_points; ip++)
@@ -520,7 +520,7 @@ void ThermoMechanicsLocalAssembler<ShapeFunction, DisplacementDim>::
 
     ParameterLib::SpatialPosition x_position;
     x_position.setElementID(_element.getID());
-    auto const& medium = _process_data.media_map->getMedium(_element.getID());
+    auto const& medium = _process_data.media_map.getMedium(_element.getID());
     auto const& solid_phase = medium->phase("Solid");
     MPL::VariableArray variables;
 
diff --git a/ProcessLib/ThermoMechanics/ThermoMechanicsProcessData.h b/ProcessLib/ThermoMechanics/ThermoMechanicsProcessData.h
index 2a284319889234410bb5ea18f2de9691d87e4bbf..8b12f7d0f255e35355693e5bab36f8dbb542d349 100644
--- a/ProcessLib/ThermoMechanics/ThermoMechanicsProcessData.h
+++ b/ProcessLib/ThermoMechanics/ThermoMechanicsProcessData.h
@@ -34,8 +34,7 @@ struct ThermoMechanicsProcessData
 {
     MeshLib::PropertyVector<int> const* const material_ids = nullptr;
 
-    std::unique_ptr<MaterialPropertyLib::MaterialSpatialDistributionMap>
-        media_map = nullptr;
+    MaterialPropertyLib::MaterialSpatialDistributionMap media_map;
 
     /// The constitutive relation for the mechanical part.
     std::map<int, std::unique_ptr<
diff --git a/ProcessLib/ThermoRichardsFlow/ThermoRichardsFlowFEM-impl.h b/ProcessLib/ThermoRichardsFlow/ThermoRichardsFlowFEM-impl.h
index e353ec4515b38e2477e375c4f1830e8e982f6db4..7f301cab832c0349515bf7a7df52045c0d48303c 100644
--- a/ProcessLib/ThermoRichardsFlow/ThermoRichardsFlowFEM-impl.h
+++ b/ProcessLib/ThermoRichardsFlow/ThermoRichardsFlowFEM-impl.h
@@ -52,7 +52,7 @@ ThermoRichardsFlowLocalAssembler<ShapeFunction, GlobalDim>::
         NumLib::initShapeMatrices<ShapeFunction, ShapeMatricesType, GlobalDim>(
             e, is_axially_symmetric, _integration_method);
 
-    auto const& medium = *_process_data.media_map->getMedium(_element.getID());
+    auto const& medium = *_process_data.media_map.getMedium(_element.getID());
 
     for (unsigned ip = 0; ip < n_integration_points; ip++)
     {
@@ -120,7 +120,7 @@ void ThermoRichardsFlowLocalAssembler<ShapeFunction, GlobalDim>::
         typename ShapeMatricesType::template VectorType<pressure_size> const>(
         local_x.data() + pressure_index, pressure_size);
 
-    auto const& medium = *_process_data.media_map->getMedium(_element.getID());
+    auto const& medium = *_process_data.media_map.getMedium(_element.getID());
     MPL::VariableArray variables;
 
     unsigned const n_integration_points =
@@ -219,7 +219,7 @@ void ThermoRichardsFlowLocalAssembler<ShapeFunction, GlobalDim>::
     typename ShapeMatricesType::NodalMatrixType storage_p_a_S =
         ShapeMatricesType::NodalMatrixType::Zero(pressure_size, pressure_size);
 
-    auto const& medium = *_process_data.media_map->getMedium(_element.getID());
+    auto const& medium = *_process_data.media_map.getMedium(_element.getID());
     auto const& liquid_phase = medium.phase("AqueousLiquid");
     auto const& solid_phase = medium.phase("Solid");
     MPL::Phase const* gas_phase =
@@ -717,7 +717,7 @@ void ThermoRichardsFlowLocalAssembler<ShapeFunction, GlobalDim>::assemble(
         typename ShapeMatricesType::template VectorType<local_matrix_dim>>(
         local_rhs_data, local_matrix_dim);
 
-    auto const& medium = *_process_data.media_map->getMedium(_element.getID());
+    auto const& medium = *_process_data.media_map.getMedium(_element.getID());
     auto const& liquid_phase = medium.phase("AqueousLiquid");
     auto const& solid_phase = medium.phase("Solid");
     MPL::Phase const* gas_phase =
@@ -1207,7 +1207,7 @@ void ThermoRichardsFlowLocalAssembler<ShapeFunction, GlobalDim>::
     auto p_L_prev =
         local_x_prev.template segment<pressure_size>(pressure_index);
 
-    auto const& medium = *_process_data.media_map->getMedium(_element.getID());
+    auto const& medium = *_process_data.media_map.getMedium(_element.getID());
     auto const& liquid_phase = medium.phase("AqueousLiquid");
     auto const& solid_phase = medium.phase("Solid");
     MPL::VariableArray variables;
diff --git a/ProcessLib/ThermoRichardsFlow/ThermoRichardsFlowProcessData.h b/ProcessLib/ThermoRichardsFlow/ThermoRichardsFlowProcessData.h
index 3d5d9cd7c956b3ee38d874240072052844b9763c..9605af559500a3dc54c38f0d9c3555530f631aeb 100644
--- a/ProcessLib/ThermoRichardsFlow/ThermoRichardsFlowProcessData.h
+++ b/ProcessLib/ThermoRichardsFlow/ThermoRichardsFlowProcessData.h
@@ -13,6 +13,8 @@
 #include <Eigen/Core>
 #include <memory>
 
+#include "MaterialLib/MPL/MaterialSpatialDistributionMap.h"
+
 namespace ProcessLib
 {
 namespace ThermoRichardsFlow
@@ -21,19 +23,13 @@ struct SimplifiedElasticityModel;
 }
 }
 
-namespace MaterialPropertyLib
-{
-class MaterialSpatialDistributionMap;
-}
-
 namespace ProcessLib
 {
 namespace ThermoRichardsFlow
 {
 struct ThermoRichardsFlowProcessData
 {
-    std::unique_ptr<MaterialPropertyLib::MaterialSpatialDistributionMap>
-        media_map = nullptr;
+    MaterialPropertyLib::MaterialSpatialDistributionMap media_map;
 
     /// Specific body forces applied to solid and fluid.
     /// It is usually used to apply gravitational forces.
diff --git a/ProcessLib/ThermoRichardsMechanics/ThermoRichardsMechanicsFEM-impl.h b/ProcessLib/ThermoRichardsMechanics/ThermoRichardsMechanicsFEM-impl.h
index fca55c74931c5cb34208ef2c8ba6bb5277c2db90..2a44d66ca82e727e8eb01520ade41d6f3ec0c9fd 100644
--- a/ProcessLib/ThermoRichardsMechanics/ThermoRichardsMechanicsFEM-impl.h
+++ b/ProcessLib/ThermoRichardsMechanics/ThermoRichardsMechanicsFEM-impl.h
@@ -101,7 +101,7 @@ void ThermoRichardsMechanicsLocalAssembler<ShapeFunctionDisplacement,
 
     constexpr double dt = std::numeric_limits<double>::quiet_NaN();
     auto const& medium =
-        this->process_data_.media_map->getMedium(this->element_.getID());
+        this->process_data_.media_map.getMedium(this->element_.getID());
     MPL::VariableArray variables;
 
     auto const& solid_phase = medium->phase("Solid");
@@ -167,7 +167,7 @@ void ThermoRichardsMechanicsLocalAssembler<ShapeFunctionDisplacement,
                          std::vector<double>& local_Jac_data)
 {
     auto& medium =
-        *this->process_data_.media_map->getMedium(this->element_.getID());
+        *this->process_data_.media_map.getMedium(this->element_.getID());
 
     LocalMatrices loc_mat;
     loc_mat.setZero();
@@ -459,7 +459,7 @@ void ThermoRichardsMechanicsLocalAssembler<ShapeFunctionDisplacement,
 
     auto const e_id = this->element_.getID();
     auto const& process_data = this->process_data_;
-    auto& medium = *process_data.media_map->getMedium(e_id);
+    auto& medium = *process_data.media_map.getMedium(e_id);
 
     unsigned const n_integration_points =
         this->integration_method_.getNumberOfPoints();
diff --git a/ProcessLib/ThermoRichardsMechanics/ThermoRichardsMechanicsFEM.h b/ProcessLib/ThermoRichardsMechanics/ThermoRichardsMechanicsFEM.h
index 48af81481098ede6be26d02c6f6d653b6f5bc883..5da3af91f0a17f72e48715834717f813324ad352 100644
--- a/ProcessLib/ThermoRichardsMechanics/ThermoRichardsMechanicsFEM.h
+++ b/ProcessLib/ThermoRichardsMechanics/ThermoRichardsMechanicsFEM.h
@@ -277,7 +277,7 @@ public:
             this->integration_method_.getNumberOfPoints();
         auto const time_independent = std::numeric_limits<double>::quiet_NaN();
         auto const& medium =
-            *this->process_data_.media_map->getMedium(this->element_.getID());
+            *this->process_data_.media_map.getMedium(this->element_.getID());
 
         for (unsigned ip = 0; ip < n_integration_points; ip++)
         {
diff --git a/ProcessLib/ThermoRichardsMechanics/ThermoRichardsMechanicsProcessData.h b/ProcessLib/ThermoRichardsMechanics/ThermoRichardsMechanicsProcessData.h
index 60648ebf4c8925537e0f95af11042060415c52dd..cbf21df32cc25ac2473f39f57115bd948cea15a6 100644
--- a/ProcessLib/ThermoRichardsMechanics/ThermoRichardsMechanicsProcessData.h
+++ b/ProcessLib/ThermoRichardsMechanics/ThermoRichardsMechanicsProcessData.h
@@ -26,8 +26,7 @@ struct ThermoRichardsMechanicsProcessData
 {
     MeshLib::PropertyVector<int> const* const material_ids = nullptr;
 
-    std::unique_ptr<MaterialPropertyLib::MaterialSpatialDistributionMap>
-        media_map = nullptr;
+    MaterialPropertyLib::MaterialSpatialDistributionMap media_map;
 
     /// The constitutive relation for the mechanical part.
     std::map<int, std::unique_ptr<
diff --git a/ProcessLib/TwoPhaseFlowWithPP/TwoPhaseFlowWithPPLocalAssembler-impl.h b/ProcessLib/TwoPhaseFlowWithPP/TwoPhaseFlowWithPPLocalAssembler-impl.h
index e3239bf3fc24bf4f7ffe869ae4ad9aa8b35b502c..370176a434843222df5b061c7c59a39f0bc7fa94 100644
--- a/ProcessLib/TwoPhaseFlowWithPP/TwoPhaseFlowWithPPLocalAssembler-impl.h
+++ b/ProcessLib/TwoPhaseFlowWithPP/TwoPhaseFlowWithPPLocalAssembler-impl.h
@@ -88,7 +88,7 @@ void TwoPhaseFlowWithPPLocalAssembler<ShapeFunction, GlobalDim>::assemble(
     auto Bl =
         local_b.template segment<cap_pressure_size>(cap_pressure_matrix_index);
 
-    auto const& medium = *_process_data.media_map->getMedium(_element.getID());
+    auto const& medium = *_process_data.media_map.getMedium(_element.getID());
     auto const& liquid_phase = medium.phase("AqueousLiquid");
     auto const& gas_phase = medium.phase("Gas");
 
diff --git a/ProcessLib/TwoPhaseFlowWithPP/TwoPhaseFlowWithPPProcessData.h b/ProcessLib/TwoPhaseFlowWithPP/TwoPhaseFlowWithPPProcessData.h
index 074b0d730ff886ac0326c39fb3d628ca238256f4..2e3cfce55534b39d1cc3e0eea16c17bfa901ea8f 100644
--- a/ProcessLib/TwoPhaseFlowWithPP/TwoPhaseFlowWithPPProcessData.h
+++ b/ProcessLib/TwoPhaseFlowWithPP/TwoPhaseFlowWithPPProcessData.h
@@ -30,8 +30,7 @@ struct TwoPhaseFlowWithPPProcessData
     //! Enables lumping of the mass matrix.
     bool const has_mass_lumping;
     ParameterLib::Parameter<double> const& temperature;
-    std::unique_ptr<MaterialPropertyLib::MaterialSpatialDistributionMap>
-        media_map;
+    MaterialPropertyLib::MaterialSpatialDistributionMap media_map;
 };
 
 }  // namespace TwoPhaseFlowWithPP