first commit, really needs unit tests first, as well as a GA framework