closes #49
closes #50
closes #51
closes #53
#54
closes #55
closes #56
#58