Major Refactor and Decouple.