add synchronous callback