add cancel callback