diff --git a/runtime/src/kmp.h b/runtime/src/kmp.h
index 6f97ab27ecbb65895f74198dbf2dbcd2cf8d6df1..400c02f78bda0b43a1e91ae993df2e25d68c2f19 100644
--- a/runtime/src/kmp.h
+++ b/runtime/src/kmp.h
@@ -662,7 +662,10 @@ public:
     // Return true iff two sets are equals
     virtual int isequal(const Mask *d) const {}
     // Convert cpuset mask type to nodeset mask
-    virtual void cpuset2nodeset(Mask *d) const {}
+    virtual void cpuset2nodeset(Mask *d) const {
+      fprintf(stderr, "Using cpuset2nodeset with another topology than hwloc, it makes no sense. Please use KMP_TOPOLOGY_METHOD=hwloc!\n");
+      KMP_ASSERT(0);
+    }
     // Set the system's affinity to this affinity mask's value
     virtual int set_system_affinity(bool abort_on_error) const { return -1; }
     // Set this affinity mask to the current system affinity
diff --git a/runtime/src/kmp_affinity.cpp b/runtime/src/kmp_affinity.cpp
index bc50288d9d6d96ea80ae6c178bee1e72857187d2..d97c2dfc433bb0bb4503ec6816db344931bec7db 100644
--- a/runtime/src/kmp_affinity.cpp
+++ b/runtime/src/kmp_affinity.cpp
@@ -65,9 +65,10 @@ void KMPAffinity::pick_api() {
     return;
 #if KMP_USE_HWLOC
   // Only use Hwloc if affinity isn't explicitly disabled and
-  // user requests Hwloc topology method
-  if (__kmp_affinity_top_method == affinity_top_method_hwloc &&
-      __kmp_affinity_type != affinity_disabled) {
+  // unless the user specified a specific method
+  if (__kmp_affinity_type != affinity_disabled &&
+      (__kmp_affinity_top_method == affinity_top_method_default ||
+       __kmp_affinity_top_method == affinity_top_method_hwloc)) {
     affinity_dispatch = new KMPHwlocAffinity();
   } else
 #endif
diff --git a/runtime/src/kmp_affinity.h b/runtime/src/kmp_affinity.h
index c479a8b697c9934c0bb3e356dc53d3a47d0b4629..edec3c613acc9e33f1a49e469a5caf0310dc7bec 100644
--- a/runtime/src/kmp_affinity.h
+++ b/runtime/src/kmp_affinity.h
@@ -262,7 +262,10 @@ class KMPNativeAffinity : public KMPAffinity {
         __kmp_free(mask);
     }
     int size() override {
-      return BITS_PER_MASK_T;
+      int weight = 0;
+      for (size_t i = 0; i < __kmp_affin_mask_size; ++i)
+        weight += __builtin_popcount(mask[i]);
+      return weight;
     }
     void set(int i) override {
       mask[i / BITS_PER_MASK_T] |= ((mask_t)1 << (i % BITS_PER_MASK_T));