fix #3, fix #4, fix #2