Rework callback API