add a lot of function