diff --git a/include/teqp/cpp/teqpcpp.hpp b/include/teqp/cpp/teqpcpp.hpp
index 85f8bf953150f6869049f4467d544176f47d9f08..8f0252291248c550288f2c2c693735eaa0fc8e89 100644
--- a/include/teqp/cpp/teqpcpp.hpp
+++ b/include/teqp/cpp/teqpcpp.hpp
@@ -124,6 +124,11 @@ namespace teqp {
             virtual std::tuple<double, double> extrapolate_from_critical(const double Tc, const double rhoc, const double Tgiven) const = 0;
             virtual EArray2 pure_VLE_T(const double T, const double rhoL, const double rhoV, int maxiter) 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;
+            virtual double get_dpsat_dTsat_isopleth(const double T, const REArrayd& rhovecL, const REArrayd& rhovecV) const = 0;
+            
+            
         };
         
         // Generic JSON-based interface where the model description is encoded as JSON
diff --git a/interface/CPP/teqpcpp.cpp b/interface/CPP/teqpcpp.cpp
index 7799f66ee9a721d5ef1ba5dd1b11480b0a742f18..b2944adbb1eb291078578aa371807734cb93d2e5 100644
--- a/interface/CPP/teqpcpp.cpp
+++ b/interface/CPP/teqpcpp.cpp
@@ -161,6 +161,22 @@ namespace teqp {
                     return tdx::template get_neff(model, T, rho, molefracs);
                 }, m_model);
             }
+            
+            std::tuple<EArrayd, EArrayd> get_drhovecdp_Tsat(const double T, const REArrayd& rhovecL, const REArrayd& rhovecV) const override {
+                return std::visit([&](const auto& model) {
+                    return teqp::get_drhovecdp_Tsat(model, T, rhovecL, rhovecV);
+                }, m_model);
+            }
+            std::tuple<EArrayd, EArrayd> get_drhovecdT_psat(const double T, const REArrayd& rhovecL, const REArrayd& rhovecV) const override {
+                return std::visit([&](const auto& model) {
+                    return teqp::get_drhovecdT_psat(model, T, rhovecL, rhovecV);
+                }, m_model);
+            }
+            double get_dpsat_dTsat_isopleth(const double T, const REArrayd& rhovecL, const REArrayd& rhovecV) const override {
+                return std::visit([&](const auto& model) {
+                    return teqp::get_dpsat_dTsat_isopleth(model, T, rhovecL, rhovecV);
+                }, m_model);
+            }
         };
 
         std::shared_ptr<AbstractModel> make_model(const nlohmann::json& j) {