actually do OO right