code reduction with lots of OOP