Replace somewhat confusing callback with a virtual proxy object