initial attempt at oo