Closes #45, closes #18, closes #32