added tests, executable, classes broken out