strategy refactor and testing