closes #19, closes #20, closes #21