Closes #18, Closes #19, Closes #23