Closes #19, #16, #15, #14, #13, #12, #10, #7, #6, and #5