TDD
Looks to be working, still some edge cases to figure out