Closes #16
Closes #21
Closes #20.