use one method for all heterogeneous* in frees