let refine_on data klass_name method_name refine_name actuals ret_type =
    (* These are all the refinements available from subclasses *)
    let refines = refinable_lookup data klass_name method_name refine_name in

    (* Compatible functions *)
    let compat = List.filter (compatible_signature data ret_type actuals) refines in

    (* Organize by inklass *)
    let to_class map f = add_map_list f.inklass f map in
    let by_class = List.fold_left to_class StringMap.empty compat in

    (* Now make a map of only the best *)
    let best funcs = match best_matching_signature data actuals funcs with
        | [func] -> func
        | _ -> raise(Failure("Compiler error finding a unique best refinement.")) in
    let to_best klass funcs map = StringMap.add klass (best funcs) map in
    let best_map = StringMap.fold to_best by_class StringMap.empty in

    (* Now just return the bindings from the best *)
    List.map snd (StringMap.bindings best_map)