use more OOP