fix #30
fix #29
fix #28
fix #27