Closes #7, #5, #4