first pass at an object model