Strategy pattern first attempt & other refactoring