See 3f78d3bf638df0be5e38056ab79102aa11131e1e

closes #102, #101, closes #88, closes #61