Closes #38 #39 #40