resolve #2 #3 #6 #9