diff --git a/include/teqp/cpp/teqpcpp.hpp b/include/teqp/cpp/teqpcpp.hpp
index ca0cac427e7da0ba4e6ba6c395697dac3bf4388d..b1981235274304f7613177a8c260c7a99061499e 100644
--- a/include/teqp/cpp/teqpcpp.hpp
+++ b/include/teqp/cpp/teqpcpp.hpp
@@ -125,6 +125,7 @@ namespace teqp {
             virtual std::tuple<double, double> extrapolate_from_critical(const double Tc, const double rhoc, const double Tgiven) const = 0;
             virtual std::tuple<EArrayd, EMatrixd> get_pure_critical_conditions_Jacobian(const double T, const double rho, int alternative_pure_index=-1, int alternative_length=2) const  = 0;
             virtual EArray2 pure_VLE_T(const double T, const double rhoL, const double rhoV, int maxiter) const = 0;
+            virtual double dpsatdT_pure(const double T, const double rhoL, const double rhoV) const = 0;
             
             virtual std::tuple<EArrayd, EArrayd> get_drhovecdp_Tsat(const double T, const REArrayd& rhovecL, const REArrayd& rhovecV) const = 0;
             virtual std::tuple<EArrayd, EArrayd> get_drhovecdT_psat(const double T, const REArrayd& rhovecL, const REArrayd& rhovecV) const = 0;
diff --git a/interface/CPP/teqp_impl_VLE.cpp b/interface/CPP/teqp_impl_VLE.cpp
index 017d76127ddab417e610097bb497f70e98ec03be..91be45db837653c24104a13b6c0af5adf376606e 100644
--- a/interface/CPP/teqp_impl_VLE.cpp
+++ b/interface/CPP/teqp_impl_VLE.cpp
@@ -50,3 +50,9 @@ EArray2 MI::pure_VLE_T(const double T, const double rhoL, const double rhoV, int
         return teqp::pure_VLE_T(model, T, rhoL, rhoV, maxiter);
     }, m_model);
 }
+
+double MI::dpsatdT_pure(const double T, const double rhoL, const double rhoV) const {
+    return std::visit([&](const auto& model) {
+        return teqp::dpsatdT_pure(model, T, rhoL, rhoV);
+    }, m_model);
+}
diff --git a/interface/CPP/teqpcpp.cpp b/interface/CPP/teqpcpp.cpp
index d23eaa9ef9a7d5c9d21fc53111c78d489c8db34a..11e268b7a293a6fa7b5f7846f9518beab035baaa 100644
--- a/interface/CPP/teqpcpp.cpp
+++ b/interface/CPP/teqpcpp.cpp
@@ -84,6 +84,7 @@ namespace teqp {
             double get_neff(const double T, const double rho, const EArrayd& molefracs) const override;
 
             EArray2 pure_VLE_T(const double T, const double rhoL, const double rhoV, int maxiter) const override;
+            double dpsatdT_pure(const double T, const double rhoL, const double rhoV) const override;
             std::tuple<EArrayd, EArrayd> get_drhovecdp_Tsat(const double T, const REArrayd& rhovecL, const REArrayd& rhovecV) const override;
             std::tuple<EArrayd, EArrayd> get_drhovecdT_psat(const double T, const REArrayd& rhovecL, const REArrayd& rhovecV) const override;
             double get_dpsat_dTsat_isopleth(const double T, const REArrayd& rhovecL, const REArrayd& rhovecV) const override;