fix #16
fix #17
fix #18