Closes #23. Closes #84. #77.