leave some functions to be completed