diff --git a/Documentation/ProjectFile/properties/property/SaturationVanGenuchtenWithVolumetricStrain/c_SaturationVanGenuchten.md b/Documentation/ProjectFile/properties/property/SaturationVanGenuchtenWithVolumetricStrain/c_SaturationVanGenuchten.md
new file mode 100644
index 0000000000000000000000000000000000000000..52a5da84e631b26049d2acc01c416417653728ba
--- /dev/null
+++ b/Documentation/ProjectFile/properties/property/SaturationVanGenuchtenWithVolumetricStrain/c_SaturationVanGenuchten.md
@@ -0,0 +1 @@
+\copydoc MaterialPropertyLib::SaturationVanGenuchtenWithVolumetricStrain
diff --git a/Documentation/ProjectFile/properties/property/SaturationVanGenuchtenWithVolumetricStrain/t_a.md b/Documentation/ProjectFile/properties/property/SaturationVanGenuchtenWithVolumetricStrain/t_a.md
new file mode 100644
index 0000000000000000000000000000000000000000..77ef249420d3bf133719c97000b11667ce43af1f
--- /dev/null
+++ b/Documentation/ProjectFile/properties/property/SaturationVanGenuchtenWithVolumetricStrain/t_a.md
@@ -0,0 +1 @@
+Scaling parameter for the effect of the volumetric strain.
diff --git a/Documentation/ProjectFile/properties/property/SaturationVanGenuchtenWithVolumetricStrain/t_d_diff.md b/Documentation/ProjectFile/properties/property/SaturationVanGenuchtenWithVolumetricStrain/t_d_diff.md
new file mode 100644
index 0000000000000000000000000000000000000000..a3a411c4dd46cdb0d8c5e2b7e1eb1666c5b8465d
--- /dev/null
+++ b/Documentation/ProjectFile/properties/property/SaturationVanGenuchtenWithVolumetricStrain/t_d_diff.md
@@ -0,0 +1 @@
+Pore size density parameter to calculate \f$p_b\f$ values between micro and macropores.
diff --git a/Documentation/ProjectFile/properties/property/SaturationVanGenuchtenWithVolumetricStrain/t_e_0.md b/Documentation/ProjectFile/properties/property/SaturationVanGenuchtenWithVolumetricStrain/t_e_0.md
new file mode 100644
index 0000000000000000000000000000000000000000..c1a181af997609c9806a0ce470f0d757a0e05d20
--- /dev/null
+++ b/Documentation/ProjectFile/properties/property/SaturationVanGenuchtenWithVolumetricStrain/t_e_0.md
@@ -0,0 +1,4 @@
+Total void ratio.
+
+It can be calculated using the porosity (\f$\phi\f$) as follows:
+\f$e_0 =\phi/(1-\phi)\f$.
diff --git a/Documentation/ProjectFile/properties/property/SaturationVanGenuchtenWithVolumetricStrain/t_e_m.md b/Documentation/ProjectFile/properties/property/SaturationVanGenuchtenWithVolumetricStrain/t_e_m.md
new file mode 100644
index 0000000000000000000000000000000000000000..1a72232ee3571aab284f68408d8501022ba01b32
--- /dev/null
+++ b/Documentation/ProjectFile/properties/property/SaturationVanGenuchtenWithVolumetricStrain/t_e_m.md
@@ -0,0 +1,6 @@
+Void ratio of the micropores.
+
+It can be calculated as
+\f$e_{\text{m}} = \frac{V_{\text{m}}}{V_{\text{s}}_{\text{m}}}\f$, where
+\f$V_{\text{m}}\f$ is the volume of the micropores, and \f$V_{\text{s}}\f$ is
+the solid volume.
diff --git a/Documentation/ProjectFile/properties/property/SaturationVanGenuchtenWithVolumetricStrain/t_exponent.md b/Documentation/ProjectFile/properties/property/SaturationVanGenuchtenWithVolumetricStrain/t_exponent.md
new file mode 100644
index 0000000000000000000000000000000000000000..260b1dd015e7c9cb8b04a65e4df7587dc81b9224
--- /dev/null
+++ b/Documentation/ProjectFile/properties/property/SaturationVanGenuchtenWithVolumetricStrain/t_exponent.md
@@ -0,0 +1 @@
+The exponent of the van Genuchten saturation function.
diff --git a/Documentation/ProjectFile/properties/property/SaturationVanGenuchtenWithVolumetricStrain/t_p_b.md b/Documentation/ProjectFile/properties/property/SaturationVanGenuchtenWithVolumetricStrain/t_p_b.md
new file mode 100644
index 0000000000000000000000000000000000000000..146d2d144354f812ae014c59557ed90cd7496242
--- /dev/null
+++ b/Documentation/ProjectFile/properties/property/SaturationVanGenuchtenWithVolumetricStrain/t_p_b.md
@@ -0,0 +1,9 @@
+Pressure scaling parameter with units of pressure for the micropores.
+
+Corresponds to the van Genuchten parameter \f$\rho g / alpha\f$.
+The inverse of \f$\alpha\f$ "corresponds to the water contents lower then
+saturation" [1].
+
+[1] van Lier, Quirijn de Jong, and Everton Alves Rodrigues Pinheiro. "An alert
+regarding a common misinterpretation of the van Genuchten α parameter." Revista
+Brasileira de Ciência do Solo 42 (2018).
diff --git a/Documentation/ProjectFile/properties/property/SaturationVanGenuchtenWithVolumetricStrain/t_residual_gas_saturation.md b/Documentation/ProjectFile/properties/property/SaturationVanGenuchtenWithVolumetricStrain/t_residual_gas_saturation.md
new file mode 100644
index 0000000000000000000000000000000000000000..89df995e0324903f98b9b6308ac7164848603adc
--- /dev/null
+++ b/Documentation/ProjectFile/properties/property/SaturationVanGenuchtenWithVolumetricStrain/t_residual_gas_saturation.md
@@ -0,0 +1,2 @@
+The smallest degree of saturation of the gas (or non-wetting) phase in the
+medium.
diff --git a/Documentation/ProjectFile/properties/property/SaturationVanGenuchtenWithVolumetricStrain/t_residual_liquid_saturation.md b/Documentation/ProjectFile/properties/property/SaturationVanGenuchtenWithVolumetricStrain/t_residual_liquid_saturation.md
new file mode 100644
index 0000000000000000000000000000000000000000..fd93070baedc37e28fa006e76180cddc21afa8e5
--- /dev/null
+++ b/Documentation/ProjectFile/properties/property/SaturationVanGenuchtenWithVolumetricStrain/t_residual_liquid_saturation.md
@@ -0,0 +1,2 @@
+The smallest degree of saturation of the liquid (or wetting) phase in the
+medium.
diff --git a/MaterialLib/MPL/CreateProperty.cpp b/MaterialLib/MPL/CreateProperty.cpp
index 2c4f5035361ee78d4a774e585f984391f54aea40..20279a58b356353bb570c013ad3df40dcbba799d 100644
--- a/MaterialLib/MPL/CreateProperty.cpp
+++ b/MaterialLib/MPL/CreateProperty.cpp
@@ -195,6 +195,12 @@ std::unique_ptr<MaterialPropertyLib::Property> createProperty(
         return createSaturationVanGenuchten(config);
     }
 
+    if (boost::iequals(property_type,
+                       "SaturationVanGenuchtenWithVolumetricStrain"))
+    {
+        return createSaturationVanGenuchtenWithVolumetricStrain(config);
+    }
+
     if (boost::iequals(property_type, "CapillaryPressureVanGenuchten"))
     {
         return createCapillaryPressureVanGenuchten(config);
diff --git a/MaterialLib/MPL/Properties/CapillaryPressureSaturation/CreateSaturationVanGenuchtenWithVolumetricStrain.cpp b/MaterialLib/MPL/Properties/CapillaryPressureSaturation/CreateSaturationVanGenuchtenWithVolumetricStrain.cpp
new file mode 100644
index 0000000000000000000000000000000000000000..4f67eff06d9ad27bbb92e8370e9f6b6a2aa3a401
--- /dev/null
+++ b/MaterialLib/MPL/Properties/CapillaryPressureSaturation/CreateSaturationVanGenuchtenWithVolumetricStrain.cpp
@@ -0,0 +1,60 @@
+/**
+ * \file
+ * \copyright
+ * Copyright (c) 2012-2023, OpenGeoSys Community (http://www.opengeosys.org)
+ *            Distributed under a Modified BSD License.
+ *              See accompanying file LICENSE.txt or
+ *              http://www.opengeosys.org/project/license
+ */
+
+#include "BaseLib/ConfigTree.h"
+#include "SaturationVanGenuchtenWithVolumetricStrain.h"
+
+namespace MaterialPropertyLib
+{
+std::unique_ptr<SaturationVanGenuchtenWithVolumetricStrain>
+createSaturationVanGenuchtenWithVolumetricStrain(
+    BaseLib::ConfigTree const& config)
+{
+    //! \ogs_file_param{properties__property__type}
+    config.checkConfigParameter("type",
+                                "SaturationVanGenuchtenWithVolumetricStrain");
+
+    // Second access for storage.
+    //! \ogs_file_param{properties__property__name}
+    auto property_name = config.peekConfigParameter<std::string>("name");
+
+    DBUG(
+        "Create SaturationVanGenuchtenWithVolumetricStrain medium property "
+        "{:s}.",
+        property_name);
+
+    auto const residual_liquid_saturation =
+        //! \ogs_file_param{properties__property__SaturationVanGenuchtenWithVolumetricStrain__residual_liquid_saturation}
+        config.getConfigParameter<double>("residual_liquid_saturation");
+    auto const residual_gas_saturation =
+        //! \ogs_file_param{properties__property__SaturationVanGenuchtenWithVolumetricStrain__residual_gas_saturation}
+        config.getConfigParameter<double>("residual_gas_saturation");
+    auto const exponent =
+        //! \ogs_file_param{properties__property__SaturationVanGenuchtenWithVolumetricStrain__exponent}
+        config.getConfigParameter<double>("exponent");
+    //! \ogs_file_param{properties__property__SaturationVanGenuchtenWithVolumetricStrain__p_b}
+    auto const p_b = config.getConfigParameter<double>("p_b");
+    auto const e_0 =
+        //! \ogs_file_param{properties__property__SaturationVanGenuchtenWithVolumetricStrain__e_0}
+        config.getConfigParameter<double>("e_0");
+    auto const e_m =
+        //! \ogs_file_param{properties__property__SaturationVanGenuchtenWithVolumetricStrain__e_m}
+        config.getConfigParameter<double>("e_m");
+    auto const a =
+        //! \ogs_file_param{properties__property__SaturationVanGenuchtenWithVolumetricStrain__a}
+        config.getConfigParameter<double>("a");
+    auto const d_diff =
+        //! \ogs_file_param{properties__property__SaturationVanGenuchtenWithVolumetricStrain__d_diff}
+        config.getConfigParameter<double>("d_diff");
+
+    return std::make_unique<SaturationVanGenuchtenWithVolumetricStrain>(
+        std::move(property_name), residual_liquid_saturation,
+        residual_gas_saturation, exponent, p_b, e_0, e_m, a, d_diff);
+}
+}  // namespace MaterialPropertyLib
diff --git a/MaterialLib/MPL/Properties/CapillaryPressureSaturation/CreateSaturationVanGenuchtenWithVolumetricStrain.h b/MaterialLib/MPL/Properties/CapillaryPressureSaturation/CreateSaturationVanGenuchtenWithVolumetricStrain.h
new file mode 100644
index 0000000000000000000000000000000000000000..78c9658f863c532eba76afaca002a70385c60dae
--- /dev/null
+++ b/MaterialLib/MPL/Properties/CapillaryPressureSaturation/CreateSaturationVanGenuchtenWithVolumetricStrain.h
@@ -0,0 +1,29 @@
+/**
+ * \file
+ * \copyright
+ * Copyright (c) 2012-2023, OpenGeoSys Community (http://www.opengeosys.org)
+ *            Distributed under a Modified BSD License.
+ *              See accompanying file LICENSE.txt or
+ *              http://www.opengeosys.org/project/license
+ */
+
+#pragma once
+
+#include <memory>
+
+namespace BaseLib
+{
+class ConfigTree;
+}
+
+namespace MaterialPropertyLib
+{
+class SaturationVanGenuchtenWithVolumetricStrain;
+}
+
+namespace MaterialPropertyLib
+{
+std::unique_ptr<SaturationVanGenuchtenWithVolumetricStrain>
+createSaturationVanGenuchtenWithVolumetricStrain(
+    BaseLib::ConfigTree const& config);
+}  // namespace MaterialPropertyLib
diff --git a/MaterialLib/MPL/Properties/CapillaryPressureSaturation/SaturationVanGenuchtenWithVolumetricStrain.cpp b/MaterialLib/MPL/Properties/CapillaryPressureSaturation/SaturationVanGenuchtenWithVolumetricStrain.cpp
new file mode 100644
index 0000000000000000000000000000000000000000..b4c08d67dc5c66e91150ff9318cdb52214677ed2
--- /dev/null
+++ b/MaterialLib/MPL/Properties/CapillaryPressureSaturation/SaturationVanGenuchtenWithVolumetricStrain.cpp
@@ -0,0 +1,129 @@
+/**
+ * \file
+ * \copyright
+ * Copyright (c) 2012-2023, OpenGeoSys Community (http://www.opengeosys.org)
+ *            Distributed under a Modified BSD License.
+ *              See accompanying file LICENSE.txt or
+ *              http://www.opengeosys.org/project/license
+ */
+
+#include "SaturationVanGenuchtenWithVolumetricStrain.h"
+
+#include <algorithm>
+#include <cmath>
+#include <limits>
+
+#include "BaseLib/Error.h"
+#include "MaterialLib/MPL/Medium.h"
+#include "MathLib/MathTools.h"
+
+namespace MaterialPropertyLib
+{
+SaturationVanGenuchtenWithVolumetricStrain::
+    SaturationVanGenuchtenWithVolumetricStrain(
+        std::string name,
+        double const residual_liquid_saturation,
+        double const residual_gas_saturation,
+        double const exponent,
+        double const p_b,
+        double const e_0,
+        double const e_m,
+        double const a,
+        double const d_diff)
+    : S_L_res_(residual_liquid_saturation),
+      S_L_max_(1. - residual_gas_saturation),
+      m_(exponent),
+      p_b_(p_b),
+      e_0_(e_0),
+      e_m_(e_m),
+      a_(a),
+      d_diff_(d_diff)
+{
+    name_ = std::move(name);
+
+    if (!(m_ > 0 && m_ < 1))
+    {
+        OGS_FATAL("The exponent value m = {:g}, is out of its range of (0, 1)",
+                  m_);
+    }
+}
+
+PropertyDataType SaturationVanGenuchtenWithVolumetricStrain::value(
+    VariableArray const& variable_array,
+    ParameterLib::SpatialPosition const& /*pos*/, double const /*t*/,
+    double const /*dt*/) const
+{
+    const double p_cap = variable_array.capillary_pressure;
+
+    if (p_cap <= 0)
+    {
+        return S_L_max_;
+    }
+
+    double const e_vol = variable_array.volumetric_strain;
+
+    double const n = 1. / (1. - m_);
+    double const d_e = -1 * (1 + e_0_) * e_vol / e_0_;
+    double const p_b_M = p_b_ * (1 / d_diff_);
+    double const p = p_cap / p_b_;
+    double const p_to_n = std::pow(p, n);
+    double const S_eff_mi = std::pow(p_to_n + 1., -m_);
+    double const p_M = p_cap / p_b_M;
+    double const p_to_n_M = std::pow(p_M, n);
+    double const S_eff_M = std::pow(p_to_n_M + 1., -m_);
+    double const S_eff = (((e_m_ + (a_ * d_e)) * (S_eff_mi)) +
+                          ((e_0_ - e_m_ - (a_ * d_e)) * (S_eff_M))) /
+                         e_0_;
+    double const S = S_eff * S_L_max_ - S_eff * S_L_res_ + S_L_res_;
+
+    return std::clamp(S, S_L_res_, S_L_max_);
+}
+
+PropertyDataType SaturationVanGenuchtenWithVolumetricStrain::dValue(
+    VariableArray const& variable_array, Variable const variable,
+    ParameterLib::SpatialPosition const& /*pos*/, double const /*t*/,
+    double const /*dt*/) const
+{
+    if (variable != Variable::capillary_pressure)
+    {
+        OGS_FATAL(
+            "SaturationVanGenuchtenWithVolumetricStrain::dValue is implemented "
+            "for derivatives with respect to capillary pressure only.");
+    }
+    const double p_cap = variable_array.capillary_pressure;
+
+    if (p_cap <= 0)
+    {
+        return 0.;
+    }
+
+    double const e_vol = variable_array.volumetric_strain;
+
+    double const n = 1. / (1. - m_);
+    double const d_e = -1 * (1 + e_0_) * e_vol / e_0_;
+    double const p_b_M = p_b_ * (1 / d_diff_);
+    double const p = p_cap / p_b_;
+    double const p_to_n = std::pow(p, n);
+    double const S_eff_mi = std::pow(p_to_n + 1., -m_);
+    double const p_M = p_cap / p_b_M;
+    double const p_to_n_M = std::pow(p_M, n);
+    double const S_eff_M = std::pow(p_to_n_M + 1., -m_);
+    double const S_eff = (((e_m_ + (a_ * d_e)) * (S_eff_mi)) +
+                          ((e_0_ - e_m_ - (a_ * d_e)) * (S_eff_M))) /
+                         e_0_;
+    double const S = S_eff * S_L_max_ - S_eff * S_L_res_ + S_L_res_;
+
+    if (S < S_L_res_ || S > S_L_max_)
+    {
+        return 0.;
+    }
+
+    double const dS_eff_dp_cap =
+        (-(e_m_ + (a_ * d_e)) * n * m_ * p_to_n *
+             std::pow(p_to_n + 1., -m_ - 1) -
+         (e_0_ - e_m_ - (a_ * d_e)) * n * m_ * p_to_n_M *
+             std::pow(p_to_n_M + 1., -m_ - 1)) /
+        (e_0_ * p_cap);
+    return dS_eff_dp_cap * (S_L_max_ - S_L_res_);
+}
+}  // namespace MaterialPropertyLib
diff --git a/MaterialLib/MPL/Properties/CapillaryPressureSaturation/SaturationVanGenuchtenWithVolumetricStrain.h b/MaterialLib/MPL/Properties/CapillaryPressureSaturation/SaturationVanGenuchtenWithVolumetricStrain.h
new file mode 100644
index 0000000000000000000000000000000000000000..7cf978082b806c02162af6f488541cd3708f4871
--- /dev/null
+++ b/MaterialLib/MPL/Properties/CapillaryPressureSaturation/SaturationVanGenuchtenWithVolumetricStrain.h
@@ -0,0 +1,92 @@
+/**
+ * \file
+ * \copyright
+ * Copyright (c) 2012-2023, OpenGeoSys Community (http://www.opengeosys.org)
+ *            Distributed under a Modified BSD License.
+ *              See accompanying file LICENSE.txt or
+ *              http://www.opengeosys.org/project/license
+ */
+
+#pragma once
+
+#include "MaterialLib/MPL/Property.h"
+
+namespace MaterialPropertyLib
+{
+class Medium;
+class Phase;
+class Component;
+/**
+ * \brief A strain dependent bimodal water retention model.
+ *
+ * It is based on the van Genuchten model.
+ *
+ * The equation is as follows
+ * \f[S_{e} = \left((e_{m}+a \Delta e)
+ *   \left[\frac{1}{((\frac{p_{c}}{p_{b}})^{n}+1)}\right]^{m}
+ *  + (e_{M} - a \Delta e)
+ *   \left[\frac{1}{((\frac{p_{c}}{p_{{b,M}}})^{n} +1)}\right]^{n}
+ * \right) \frac{1}{e}\f]
+ * with effective saturation defined as \f$S_{e}=\frac{S-S_r}{S_{max}-S_r}\f$,
+ * where \f$S_r\f$ and \f$S_{max}\f$ are the residual saturation and the maximum
+ * saturation, respectively.
+ * The exponent \f$m \in (0,1)\f$ is the same as in the van Genuchten equation (
+ * see SaturationVanGenuchten). In the original work another exponent \f$n\f$ is
+ * used, but usually set to \f$n = 1 / (1 - m)\f$, and also in this
+ * implementation.
+ * The pressure scaling parameter \f$p_{b}\f$ is added by the user and is the
+ * scaling parameter of the micropores. The scaling parameter of the macropores
+ * can be calculated as follows \f$p_{b,M} = p_{b} d_{diff}\f$ The total void
+ * ratio and the void ratio of the micropores are \f$e_0\f$ and \f$e_m\f$.
+ * Another scaling factor \f$a\f$ scales the effect of the strain
+ *
+ * The changing void ratio is calculated as
+ * \f$\Delta e = -\frac{(1-e)\epsilon_{vol}}{e}\f$,
+ * with \f$\epsilon_{vol}\f$ as the volumetric strain. The result is then
+ * clamped between the residual and maximum liquid saturations.
+ */
+class SaturationVanGenuchtenWithVolumetricStrain final : public Property
+{
+public:
+    SaturationVanGenuchtenWithVolumetricStrain(
+        std::string name,
+        double const residual_liquid_saturation,
+        double const residual_gas_saturation,
+        double const exponent,
+        double const p_b,
+        double const e_0,
+        double const e_m,
+        double const a,
+        double const d_diff);
+
+    void checkScale() const override
+    {
+        if (!std::holds_alternative<Medium*>(scale_))
+        {
+            OGS_FATAL(
+                "The property 'SaturationVanGenuchtenWithVolumetricStrain' is "
+                "implemented on the 'media' scale only.");
+        }
+    }
+
+    /// Those methods override the base class implementations and actually
+    /// compute and set the property values_ and dValues_.
+    PropertyDataType value(VariableArray const& variable_array,
+                           ParameterLib::SpatialPosition const& pos,
+                           double const t, double const dt) const override;
+    PropertyDataType dValue(VariableArray const& variable_array,
+                            Variable const variable,
+                            ParameterLib::SpatialPosition const& pos,
+                            double const t, double const dt) const override;
+
+private:
+    double const S_L_res_;
+    double const S_L_max_;
+    double const m_;
+    double const p_b_;
+    double const e_0_;
+    double const e_m_;
+    double const a_;
+    double const d_diff_;
+};
+}  // namespace MaterialPropertyLib
diff --git a/MaterialLib/MPL/Properties/CreateProperties.h b/MaterialLib/MPL/Properties/CreateProperties.h
index dfe4b2059fdc61321ff6ab4dd1157d38d754a465..5d16b8c14608c500df0aaf21000803885a2f3db8 100644
--- a/MaterialLib/MPL/Properties/CreateProperties.h
+++ b/MaterialLib/MPL/Properties/CreateProperties.h
@@ -17,6 +17,7 @@
 #include "CapillaryPressureSaturation/CreateSaturationExponential.h"
 #include "CapillaryPressureSaturation/CreateSaturationLiakopoulos.h"
 #include "CapillaryPressureSaturation/CreateSaturationVanGenuchten.h"
+#include "CapillaryPressureSaturation/CreateSaturationVanGenuchtenWithVolumetricStrain.h"
 #include "CreateAverageMolarMass.h"
 #include "CreateBishopsPowerLaw.h"
 #include "CreateBishopsSaturationCutoff.h"
diff --git a/MaterialLib/MPL/Properties/Properties.h b/MaterialLib/MPL/Properties/Properties.h
index 7324d4255d3eca480c3f1c0ae64a2d0a586a5bc3..dada0e0cfef4034cfefd906cf2bfa71632ac8134 100644
--- a/MaterialLib/MPL/Properties/Properties.h
+++ b/MaterialLib/MPL/Properties/Properties.h
@@ -18,6 +18,7 @@
 #include "CapillaryPressureSaturation/SaturationExponential.h"
 #include "CapillaryPressureSaturation/SaturationLiakopoulos.h"
 #include "CapillaryPressureSaturation/SaturationVanGenuchten.h"
+#include "CapillaryPressureSaturation/SaturationVanGenuchtenWithVolumetricStrain.h"
 #include "ClausiusClapeyron.h"
 #include "Constant.h"
 #include "Curve.h"
diff --git a/Tests/MaterialLib/TestMPLSaturationVanGenuchtenWithVolumetricStrain.cpp b/Tests/MaterialLib/TestMPLSaturationVanGenuchtenWithVolumetricStrain.cpp
new file mode 100644
index 0000000000000000000000000000000000000000..489212b31b725def5421c110f212700f92860773
--- /dev/null
+++ b/Tests/MaterialLib/TestMPLSaturationVanGenuchtenWithVolumetricStrain.cpp
@@ -0,0 +1,77 @@
+/**
+ * \file
+ * \copyright
+ * Copyright (c) 2012-2023, OpenGeoSys Community (http://www.opengeosys.org)
+ *            Distributed under a Modified BSD License.
+ *              See accompanying file LICENSE.txt or
+ *              http://www.opengeosys.org/project/license
+ */
+
+#include <gtest/gtest.h>
+
+#include "MaterialLib/MPL/Medium.h"
+#include "MaterialLib/MPL/Properties/CapillaryPressureSaturation/SaturationVanGenuchtenWithVolumetricStrain.h"
+#include "TestMPL.h"
+#include "Tests/TestTools.h"
+
+namespace MPL = MaterialPropertyLib;
+
+TEST(MaterialPropertyLib, SaturationVanGenuchtenWithVolumetricStrain)
+{
+    double const residual_liquid_saturation = 0.1;
+    double const residual_gas_saturation = 0.05;
+    double const exponent = 0.5;
+    double const p_b = 5000000;
+    double const e_0 = 0.7;
+    double const e_m = 0.5;
+    double const a = 8;
+    double const d_diff = 20;
+
+    MPL::Property const& pressure_saturation =
+        MPL::SaturationVanGenuchtenWithVolumetricStrain{
+            "saturation",
+            residual_liquid_saturation,
+            residual_gas_saturation,
+            exponent,
+            p_b,
+            e_0,
+            e_m,
+            a,
+            d_diff};
+
+    MPL::VariableArray variable_array;
+    ParameterLib::SpatialPosition const pos;
+    double const t = std::numeric_limits<double>::quiet_NaN();
+    double const dt = std::numeric_limits<double>::quiet_NaN();
+
+    /// No volumetric strain
+    {
+        double const vol_s = 0;
+        double const p_L = 1000000;
+
+        variable_array.capillary_pressure = p_L;
+        variable_array.volumetric_strain = vol_s;
+
+        double const S = pressure_saturation.template value<double>(
+            variable_array, pos, t, dt);
+
+        double const S_expected = 0.75426406;
+
+        ASSERT_NEAR(S, S_expected, 1e-5);
+    }
+    /// Volumetric strain
+    {
+        double const vol_s = 0.002;
+        double const p_L = 1000000;
+
+        variable_array.capillary_pressure = p_L;
+        variable_array.volumetric_strain = vol_s;
+
+        double const S = pressure_saturation.template value<double>(
+            variable_array, pos, t, dt);
+
+        double const S_expected = 0.71943039;
+
+        ASSERT_NEAR(S, S_expected, 1e-5);
+    }
+}