Closes #17 #21 #23