bunch of refactoring, addition of tests, circle ci stuff