diff --git a/Documentation/ProjectFile/prj/processes/process/HEAT_CONDUCTION/t_mass_lumping.md b/Documentation/ProjectFile/prj/processes/process/HEAT_CONDUCTION/t_mass_lumping.md
new file mode 100644
index 0000000000000000000000000000000000000000..13289a8507e981c3a9aa12484cfc453c7c461804
--- /dev/null
+++ b/Documentation/ProjectFile/prj/processes/process/HEAT_CONDUCTION/t_mass_lumping.md
@@ -0,0 +1 @@
+\copydoc ProcessLib::HeatConduction::HeatConductionProcessData::mass_lumping
diff --git a/ProcessLib/HeatConduction/CreateHeatConductionProcess.cpp b/ProcessLib/HeatConduction/CreateHeatConductionProcess.cpp
index d9febf6331422803ef6b40227cb4b49bd1e6ac41..3ad6b7cce0f6318ef99e1573261a4b83191d6b35 100644
--- a/ProcessLib/HeatConduction/CreateHeatConductionProcess.cpp
+++ b/ProcessLib/HeatConduction/CreateHeatConductionProcess.cpp
@@ -72,8 +72,12 @@ std::unique_ptr<Process> createHeatConductionProcess(
 
     DBUG("Use '{:s}' as density parameter.", density.name);
 
+    //! \ogs_file_param{prj__processes__process__HEAT_CONDUCTION__mass_lumping}
+    auto const mass_lumping =
+        config.getConfigParameter<bool>("mass_lumping", false);
+
     HeatConductionProcessData process_data{thermal_conductivity, heat_capacity,
-                                           density};
+                                           density, mass_lumping};
 
     SecondaryVariableCollection secondary_variables;
 
diff --git a/ProcessLib/HeatConduction/HeatConductionFEM.h b/ProcessLib/HeatConduction/HeatConductionFEM.h
index b4c7714e146b580c35f9915bb98c0543c0fa6ca8..df9d2cf41860780fe92a193b5caf77a543107f44 100644
--- a/ProcessLib/HeatConduction/HeatConductionFEM.h
+++ b/ProcessLib/HeatConduction/HeatConductionFEM.h
@@ -128,6 +128,10 @@ public:
                                  sm.N * sm.detJ * wp.getWeight() *
                                  sm.integralMeasure;
         }
+        if (_process_data.mass_lumping)
+        {
+            local_M = local_M.colwise().sum().eval().asDiagonal();
+        }
     }
 
     void assembleWithJacobian(double const t, double const dt,
@@ -182,6 +186,10 @@ public:
             storage.noalias() +=
                 sm.N.transpose() * density * heat_capacity * sm.N * w;
         }
+        if (_process_data.mass_lumping)
+        {
+            storage = storage.colwise().sum().eval().asDiagonal();
+        }
 
         local_Jac.noalias() += laplace + storage / dt;
         local_rhs.noalias() -= laplace * x + storage * x_dot;
diff --git a/ProcessLib/HeatConduction/HeatConductionProcessData.h b/ProcessLib/HeatConduction/HeatConductionProcessData.h
index 3ff877701624cea1593760a9aba135030485d38c..0801fdf08224bbdd02c0c797ca8998c0eae47af2 100644
--- a/ProcessLib/HeatConduction/HeatConductionProcessData.h
+++ b/ProcessLib/HeatConduction/HeatConductionProcessData.h
@@ -23,5 +23,8 @@ struct HeatConductionProcessData
     ParameterLib::Parameter<double> const& thermal_conductivity;
     ParameterLib::Parameter<double> const& heat_capacity;
     ParameterLib::Parameter<double> const& density;
+
+    /// If set mass lumping will be applied to the equation.
+    bool const mass_lumping;
 };
 }  // namespace ProcessLib::HeatConduction