add object model implementation plus tests