callback restructure