major changes

this includes a major refactor and changes to all of the tests. this is
more in line with the original idea