closes #46 #47 #48 #49