first commit of code and tests ... docs and tests need more work.