closes #39, closes #79, closes #95, closes #85, closes #43