fix #10
fix #15
fix #17