closes #36 closes #42 closes #43 closes #44 closes #46