closes #6 #4 #2