@@ -1486,25 +1513,14 @@
     PMC *multi_sig, *mro;
     INTVAL i, n, args, dist, j, m;
 
-    /* has to be a builtin multi method */
-    if (pmc->vtable->base_type == enum_class_NCI) {
-        multi_sig = PMC_pmc_val(pmc);
-    }
-    else if (VTABLE_isa(interp, pmc, CONST_STRING(interp, "Sub"))
-         ||  VTABLE_isa(interp, pmc, CONST_STRING(interp, "Closure"))) {
-        multi_sig = PMC_sub(pmc)->multi_signature;
+    if (PMC_IS_NULL(PMC_sub(pmc)->multi_signature))
+        return 0;
 
-        /* some method */
-        if (!multi_sig)
-            return 0;
+    multi_sig = Parrot_mmd_get_cached_multi_sig(interp, pmc);
 
-        if (multi_sig->vtable->base_type == enum_class_FixedPMCArray) {
-            multi_sig = PMC_sub(pmc)->multi_signature =
-                mmd_cvt_to_types(interp, multi_sig);
-        }
-    }
-    else
+    if (PMC_IS_NULL(multi_sig))
         return MMD_BIG_DISTANCE;
+
     n    = VTABLE_elements(interp, multi_sig);
     args = VTABLE_elements(interp, arg_tuple);
 

