closes #1, #5, and #6