--- apps/app_confbridge.c 2012-04-24 13:44:54.545100310 -0600 +++ apps/app_confbridge.c 2012-04-24 13:46:26.733096948 -0600 @@ -1191,12 +1191,14 @@ continue; /* Waiting for marked user and one's already here */ } } - if (!ast_bridge_suspend(conference_bridge->bridge, other_participant->chan)) { - ast_moh_start(other_participant->chan, other_participant->u_profile.moh_class, NULL); - other_participant->playing_moh = 1; - other_participant->features.mute = 1; - ast_bridge_unsuspend(conference_bridge->bridge, other_participant->chan); - } + if (!other_participant->forced_moh && !other_participant->playing_moh) { + if (!ast_bridge_suspend(conference_bridge->bridge, other_participant->chan)) { + ast_moh_start(other_participant->chan, other_participant->u_profile.moh_class, NULL); + other_participant->playing_moh = 1; + other_participant->features.mute = 1; + ast_bridge_unsuspend(conference_bridge->bridge, other_participant->chan); + } + } } } } else { @@ -2183,20 +2183,21 @@ } } if (participant) { - participant->forced_moh = moh; - if (!participant->playing_moh) { /* Don't start playback on channels already playing MoH, and no need to disable it on those that aren't */ + if (moh && (!participant->playing_moh && !participant->forced_moh)) { if (!ast_bridge_suspend(bridge->bridge, participant->chan)) { - if (participant->forced_moh) { - ast_moh_start(participant->chan, participant->u_profile.moh_class, NULL); - participant->features.mute = 1; - } else { - ast_moh_stop(participant->chan); - if (!participant->forced_mute) { - participant->features.mute = 0; - } - } - ast_bridge_unsuspend(bridge->bridge, participant->chan); + ast_moh_start(participant->chan, participant->u_profile.moh_class, NULL); + participant->playing_moh = 1; + ast_bridge_unsuspend(bridge->bridge, participant->chan); } + } else if (!moh && participant->playing_moh) { + if (!ast_bridge_suspend(bridge->bridge, participant->chan)) { + ast_moh_stop(participant->chan); + ast_bridge_unsuspend(bridge->bridge, participant->chan); + } + } + participant->forced_moh = moh; + if (!participant->forced_mute) { + participant->features.mute = moh; } ast_test_suite_event_notify("CONF_HOLD", "Message: participant %s %s\r\nConference: %s\r\nChannel: %s", ast_channel_name(participant->chan), participant->forced_moh ? "moh-on" : "moh-off", bridge->b_profile.name, ast_channel_name(participant->chan)); } else {