this resolves #6 #7 #8 #9 #10 #11 #12 #13 #14