refactor to strategies