fix #21
fix #20
fix #19
fix #18
fix #17
fix #16
fix #2