Closes #7, #10, #12