support callbacks with arguments