closes #36; closes #37; closes #38; closes #39; closes #40; closes #41