add call back functions and progress