better oo structure