Hello, I've seen this already asked and answered but it is still a no go for me. I'm trying to do some preprocessing in the middle of a call, before bridging. I've seen two choices: M() and G() parameters of the Dial() command. G() was discarded because I don't know if it is possible to bridge channels after processing. With M() I've done something like that: macro screen ( screen_file, destination, caller_email ) { Set(screen_file=${ARG1}); Set(destination=${ARG2}); Set(caller_email=${ARG3}); begin: // compute play prompt for background() Set(BACKGROUND_PROMPT=voip-call-pending&${screen_file}); Wait(0.5); Background(${BACKGROUND_PROMPT}); catch 2 { Noop(GOTCHA!!!!!!!!!!); }; catch t { goto s|begin; }; }; The dial command looks like this: Dial(IAX2/shortcut1:shortcut1@bu-vg1/${EXTEN}@from-network|120|M (screen^${SCREEN_FILE}^${EXTEN}^${EMAIL_ADDRESS})); What I do want is to ask the called person to press a key and make a choice. everything goes well until a key is pressed, macro exits with status 48 + ASCII code of the key and the call is bridged. I've read that for both G() and M() the pbx services are not available. This means that I cannot read a DTMF option in the Background() command during the called person IVR? Shouldn't catch 2 { } block catch the press of the '2' key and print GHOTCHA!! ? Thanks, Alex