Closes #2, #3 and #4