Closes #31. Closes #32. Closes #33. Closes #35. Closes #36. Closes #37. Closes #38. Closes #39