Complete and utter reorganization using OOP