fix #3
fix #4
fix #5
first check #8