Closes #2. Closes #16. Closes #17. Closes #18.