closes #6, closes #4, closes #2