closes #11
closes #20
closes #21