Closes #4. closes #9, closes #11, closes #14, closes #15, closes #16, and closes #17