Closes #46, #44, #41, #40, #39, #25