This closes #13, This closes #25, This closes #31