changed to be OOP