Closes #46, closes #35, closes #34, closes #32, closes #33, closes #29