Decouple, Refactor, and Use Factory