closes #50; closes #48; closes #45; closes #44