closes #31, closes #32 , closes #33