new tests, classes, refactor