some OOP-ization :P