refactor to strategy