now with more OOP
now with more OOP