Closes #7, #8, #9