#51 done, in OOP way