diff --git a/Documentation/ProjectFile/prj/processes/process/HEAT_TRANSPORT_BHE/t_mass_lumping.md b/Documentation/ProjectFile/prj/processes/process/HEAT_TRANSPORT_BHE/t_mass_lumping.md
new file mode 100644
index 0000000000000000000000000000000000000000..0db7601f612203c04c2385193ebcb807fbd9796f
--- /dev/null
+++ b/Documentation/ProjectFile/prj/processes/process/HEAT_TRANSPORT_BHE/t_mass_lumping.md
@@ -0,0 +1,3 @@
+The default setting is false.
+If set, mass lumping is applied to the BHE connected soil elements.
+With mass lumping, the non-physical oscillation of temperatures in the direct vicinity of the BHE can be improved.
diff --git a/ProcessLib/HeatTransportBHE/CreateHeatTransportBHEProcess.cpp b/ProcessLib/HeatTransportBHE/CreateHeatTransportBHEProcess.cpp
index 6dcfe609e7307c2340d3e0b3c364dc2ef2776a8a..9ef4eae17365d57c06eab5c12fee0efb1bcd06e8 100644
--- a/ProcessLib/HeatTransportBHE/CreateHeatTransportBHEProcess.cpp
+++ b/ProcessLib/HeatTransportBHE/CreateHeatTransportBHEProcess.cpp
@@ -176,6 +176,10 @@ std::unique_ptr<Process> createHeatTransportBHEProcess(
         //! \ogs_file_param{prj__processes__process__HEAT_TRANSPORT_BHE__use_server_communication}
         config.getConfigParameter<bool>("use_server_communication", false);
 
+    auto const mass_lumping =
+        //! \ogs_file_param{prj__processes__process__HEAT_TRANSPORT_BHE__mass_lumping}
+        config.getConfigParameter<bool>("mass_lumping", false);
+
     auto const using_algebraic_bc =
         //! \ogs_file_param{prj__processes__process__HEAT_TRANSPORT_BHE__use_algebraic_bc}
         config.getConfigParameter<bool>("use_algebraic_bc", false);
@@ -331,7 +335,7 @@ std::unique_ptr<Process> createHeatTransportBHEProcess(
 
     HeatTransportBHEProcessData process_data(
         std::move(media_map), std::move(bhes), py_object, using_tespy,
-        using_server_communication,
+        using_server_communication, mass_lumping,
         {using_algebraic_bc, weighting_factor, is_linear});
 
     SecondaryVariableCollection secondary_variables;
diff --git a/ProcessLib/HeatTransportBHE/HeatTransportBHEProcessData.h b/ProcessLib/HeatTransportBHE/HeatTransportBHEProcessData.h
index 5aa319a139c2f2b28bde86555a5d49e62d7437ce..575018be59ccf9011752b231f9342ab22a9f2194 100644
--- a/ProcessLib/HeatTransportBHE/HeatTransportBHEProcessData.h
+++ b/ProcessLib/HeatTransportBHE/HeatTransportBHEProcessData.h
@@ -41,12 +41,14 @@ struct HeatTransportBHEProcessData final
             nullptr,
         const bool use_tespy = false,
         const bool use_server_communication = false,
+        const bool mass_lumping = false,
         AlgebraicBCSetting algebraicBCSetting = {false, 100.0, false})
         : 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),
+          _mass_lumping(mass_lumping),
           _algebraic_BC_Setting(algebraicBCSetting)
     {
     }
@@ -64,6 +66,8 @@ struct HeatTransportBHEProcessData final
 
     const bool _use_server_communication;
 
+    const bool _mass_lumping;
+
     AlgebraicBCSetting const _algebraic_BC_Setting;
 };
 }  // namespace ProcessLib::HeatTransportBHE
diff --git a/ProcessLib/HeatTransportBHE/LocalAssemblers/HeatTransportBHELocalAssemblerSoil-impl.h b/ProcessLib/HeatTransportBHE/LocalAssemblers/HeatTransportBHELocalAssemblerSoil-impl.h
index 6f91e8ec7d2ca2eea710759ffaaacb21e55f156e..e5cd081e40f17dc97ef9e3957a2d5e1486f6fe30 100644
--- a/ProcessLib/HeatTransportBHE/LocalAssemblers/HeatTransportBHELocalAssemblerSoil-impl.h
+++ b/ProcessLib/HeatTransportBHE/LocalAssemblers/HeatTransportBHELocalAssemblerSoil-impl.h
@@ -183,7 +183,10 @@ void HeatTransportBHELocalAssemblerSoil<ShapeFunction>::assemble(
                              (density_s * heat_capacity_s * (1 - porosity) +
                               density_f * heat_capacity_f * porosity);
     }
-
+    if (_process_data._mass_lumping)
+    {
+        local_M = local_M.colwise().sum().eval().asDiagonal();
+    }
     // debugging
     // std::string sep = "\n----------------------------------------\n";
     // Eigen::IOFormat CleanFmt(4, 0, ", ", "\n", "[", "]");