Closes #2, #3, #6