Fix #2
fix #1
Fix #3
Fix #8