resolves #49 #50 #51 #71