Closes #75, #92, #91, #80, #90