closes #5, closes #7, closes #8, closes #9, closes #10, closes #11, closes #13