Initial commit
work in progress 2
Refactor #2
Refactor #3
Fixed tests