finalized OOP