add some function: need to be improved