Refactoring, add Strategy Pattern