strategy refactor