closes #3 closes #4 closes #5