closes #12, closes #13, closes #14