this should close #8 , close #9 , close #10 and close #12