Refactor and decouple classes for easier unit testing
Refactor and decouple classes for easier unit testing