diff --git a/include/teqp/models/multifluid.hpp b/include/teqp/models/multifluid.hpp
index 4feb68ea07842163e4f327b6a1b8ba066773591a..322f53303f30aa7c4f0b33e32d5840b94cd4ac9d 100644
--- a/include/teqp/models/multifluid.hpp
+++ b/include/teqp/models/multifluid.hpp
@@ -43,7 +43,6 @@ public:
         resulttype alphar = 0.0;
         auto N = molefracs.size();
         for (auto i = 0; i < N; ++i) {
-            if (molefracs[i] == 0.0) { continue; }
             alphar = alphar + molefracs[i] * EOSs[i].alphar(tau, delta);
         }
         return alphar;
@@ -465,31 +464,6 @@ struct PowIUnaryFunctor {
     }
 };
 
-template<typename... Args>
-class EOSTermContainer {
-public:
-    using varEOSTerms = std::variant<Args...>;
-private:
-    std::vector<varEOSTerms> coll;
-public:
-
-    auto size() const { return coll.size(); }
-
-    template<typename Instance>
-    auto add_term(Instance&& instance) {
-        coll.emplace_back(std::move(instance));
-    }
-
-    template <class Tau, class Delta>
-    auto alphar(const Tau& tau, const Delta& delta) const {
-        std::common_type_t <Tau, Delta> ar = 0.0;
-        for (auto& term : coll) {
-            std::visit([&](auto& term) { ar = ar + term.alphar(tau, delta); }, term);
-        }
-        return ar;
-    }
-};
-
 class PowerEOSTerm {
 public:
     Eigen::ArrayXd n, t, d, c, l;
@@ -561,6 +535,42 @@ public:
     }
 };
 
+
+
+template<typename... Args>
+class EOSTermContainer {
+public:
+    using varEOSTerms = std::variant<Args...>;
+private:
+    std::vector<varEOSTerms> coll;
+public:
+
+    auto size() const { return coll.size(); }
+
+    template<typename Instance>
+    auto add_term(Instance&& instance) {
+        coll.emplace_back(std::move(instance));
+    }
+
+    template <class Tau, class Delta>
+    auto alphar(const Tau& tau, const Delta& delta) const {
+        std::common_type_t <Tau, Delta> ar = 0.0;
+        for (const auto& term : coll) {
+            auto contrib = std::visit([&](auto& t) { return t.alphar(tau, delta); }, term);
+            if (std::holds_alternative<NonAnalyticEOSTerm>(term)) {
+                double dbl = getbaseval(abs(contrib));
+                if (std::isfinite(dbl)) {
+                    ar = ar + contrib;
+                }
+            }
+            else {
+                ar = ar + contrib;
+            }
+        }
+        return ar;
+    }
+};
+
 using EOSTerms = EOSTermContainer<PowerEOSTerm, GaussianEOSTerm, NonAnalyticEOSTerm, Lemmon2005EOSTerm, GaoBEOSTerm>;
 
 inline auto get_EOS_terms(const std::string& coolprop_root, const std::string& name)
diff --git a/include/teqp/types.hpp b/include/teqp/types.hpp
index f0ffc4155d64c9f68907e9dd076d990c048401b6..f315d2116760a3bae1e1bfa1086bbbc03f0cc585 100644
--- a/include/teqp/types.hpp
+++ b/include/teqp/types.hpp
@@ -26,4 +26,16 @@ auto forceeval(T&& expr)
     else {
         return expr;
     }
+}
+
+template<typename T>
+auto getbaseval(T&& expr)
+{
+    using namespace autodiff::detail;
+    if constexpr (isDual<T> || isExpr<T>) {
+        return val(expr);
+    }
+    else {
+        return expr;
+    }
 }
\ No newline at end of file