fix #25  #27 #19  #23 #28 #31  #32  #33 #34 #36 #37 #38 #35