refactor part 1
make all tests but last pass on part 2