closes #18, #19, and #20