finish OOP