closes #65, closes #23, closes #57, closes #51