fix #19
fix #14
fix #17