refactored to remove strategy