Closes #4 #5 #6