Update callback with more abstraction