Closes #15.
Closes #3.
Start on #17.