Initial checkin.  needs some documentation and tests