improved OOP