add block-based callbacks