fix #2 #3 #5