fix #31
fix #32
fix #27
fix #28
fix #33