A major refactoring for OOP!