basic functions are finished