Closes #4, Closes #5, Closes #6