complete all the function