add some function
revise conflict