make it more OOP