Basic functionality tests are green
all tests green. code is ugly. will refactor if have time