refactored to decouple