diff --git a/btypes_big_integer/src/main/cpp/BRelation.hpp b/btypes_big_integer/src/main/cpp/BRelation.hpp
index 9c8b1718505d76d61ea3fbdeb9110ff3ce332837..848292ecdddfc02196912f66b5042ca60635af21 100644
--- a/btypes_big_integer/src/main/cpp/BRelation.hpp
+++ b/btypes_big_integer/src/main/cpp/BRelation.hpp
@@ -1514,10 +1514,11 @@ class BRelation : public BObject {
             S prj1 = object.projection1();
             T prj2 = object.projection2();
 
-            if(this->domain().getSet().count(prj1) == 0) {
+            const immer::set<T, typename BSet<T>::Hash, typename BSet<T>::HashEqual>* rangePtr = this->map.find(prj1);
+            if(rangePtr == nullptr) {
                 return BBoolean(false);
             }
-            immer::set<T, typename BSet<T>::Hash, typename BSet<T>::HashEqual> range = this->map[prj1];
+            immer::set<T, typename BSet<T>::Hash, typename BSet<T>::HashEqual> range = *rangePtr;
             return BBoolean(range.count(prj2) > 0);
         }
 
@@ -1525,10 +1526,12 @@ class BRelation : public BObject {
             S prj1 = object.projection1();
             T prj2 = object.projection2();
 
-            if(this->domain().getSet().count(prj1) == 0) {
+            const immer::set<T, typename BSet<T>::Hash, typename BSet<T>::HashEqual>* rangePtr = this->map.find(prj1);
+            if(rangePtr == nullptr) {
                 return BBoolean(true);
             }
-            immer::set<T, typename BSet<T>::Hash, typename BSet<T>::HashEqual> range = this->map[prj1];
+
+            immer::set<T, typename BSet<T>::Hash, typename BSet<T>::HashEqual> range = *rangePtr;
             return BBoolean(range.count(prj2) == 0);
         }
 
diff --git a/btypes_primitives/src/main/cpp/BRelation.hpp b/btypes_primitives/src/main/cpp/BRelation.hpp
index f6f4eb08f009513a5e1b0747167681af5006b597..35c453b867ad669327da1a70016135d86d8a3e6a 100644
--- a/btypes_primitives/src/main/cpp/BRelation.hpp
+++ b/btypes_primitives/src/main/cpp/BRelation.hpp
@@ -1514,10 +1514,11 @@ class BRelation : public BObject {
             S prj1 = object.projection1();
             T prj2 = object.projection2();
 
-            if(this->domain().getSet().count(prj1) == 0) {
+            const immer::set<T, typename BSet<T>::Hash, typename BSet<T>::HashEqual>* rangePtr = this->map.find(prj1);
+            if(rangePtr == nullptr) {
                 return BBoolean(false);
             }
-            immer::set<T, typename BSet<T>::Hash, typename BSet<T>::HashEqual> range = this->map[prj1];
+            immer::set<T, typename BSet<T>::Hash, typename BSet<T>::HashEqual> range = *rangePtr;
             return BBoolean(range.count(prj2) > 0);
         }
 
@@ -1525,10 +1526,12 @@ class BRelation : public BObject {
             S prj1 = object.projection1();
             T prj2 = object.projection2();
 
-            if(this->domain().getSet().count(prj1) == 0) {
+            const immer::set<T, typename BSet<T>::Hash, typename BSet<T>::HashEqual>* rangePtr = this->map.find(prj1);
+            if(rangePtr == nullptr) {
                 return BBoolean(true);
             }
-            immer::set<T, typename BSet<T>::Hash, typename BSet<T>::HashEqual> range = this->map[prj1];
+
+            immer::set<T, typename BSet<T>::Hash, typename BSet<T>::HashEqual> range = *rangePtr;
             return BBoolean(range.count(prj2) == 0);
         }