closes #12 closes #16 closes