Starting OOP rewrite