closes #4 #5 #10