update with callbacks