Closes #70. Closes #69. Closes #68. Closes #41. Closes #33. Closes #21.