Refactored to (self-referencing) OOP