closes #40, closes #50, closes #55, closes #53