make decorator use callback, enabling potentially asynchronous decoration