closes #49 closes #51 #52 closes #53