added cancel callback