refactor to composite all the ranges