closes #77, #86, #87, #88, #92