diff --git a/channels/chan_dahdi.c b/channels/chan_dahdi.c
index bb621acabc8f8fadae07ab8beef9cb36e2da5458..aeb15e014c4b787d779f2ad8a4f8836264ccc9f8 100644
--- a/channels/chan_dahdi.c
+++ b/channels/chan_dahdi.c
@@ -1408,6 +1408,7 @@ static struct dahdi_chan_conf dahdi_chan_conf_default(void)
 			.localdialplan = PRI_NATIONAL_ISDN + 1,
 			.nodetype = PRI_CPE,
 			.qsigchannelmapping = DAHDI_CHAN_MAPPING_PHYSICAL,
+			.inband_on_proceeding = 1,
 
 #if defined(HAVE_PRI_CCSS)
 			.cc_ptmp_recall_mode = 1,/* specificRecall */
@@ -12930,6 +12931,7 @@ static struct dahdi_pvt *mkintf(int channel, const struct dahdi_chan_conf *conf,
 							pris[span].pri.layer1_ignored = 0;
 						}
 						pris[span].pri.append_msn_to_user_tag = conf->pri.pri.append_msn_to_user_tag;
+						pris[span].pri.inband_on_proceeding = conf->pri.pri.inband_on_proceeding;
 						ast_copy_string(pris[span].pri.initial_user_tag, conf->chan.cid_tag, sizeof(pris[span].pri.initial_user_tag));
 						ast_copy_string(pris[span].pri.msn_list, conf->pri.pri.msn_list, sizeof(pris[span].pri.msn_list));
 #if defined(HAVE_PRI_MWI)
@@ -18192,6 +18194,8 @@ static int process_dahdi(struct dahdi_chan_conf *confp, const char *cat, struct
 #endif	/* defined(HAVE_PRI_MWI) */
 			} else if (!strcasecmp(v->name, "append_msn_to_cid_tag")) {
 				confp->pri.pri.append_msn_to_user_tag = ast_true(v->value);
+			} else if (!strcasecmp(v->name, "inband_on_proceeding")) {
+				confp->pri.pri.inband_on_proceeding = ast_true(v->value);
 #if defined(HAVE_PRI_DISPLAY_TEXT)
 			} else if (!strcasecmp(v->name, "display_send")) {
 				confp->pri.pri.display_flags_send = dahdi_display_text_option(v->value);
diff --git a/channels/sig_pri.c b/channels/sig_pri.c
index 96ae24e1760cf439b6f93ffd9367109412f9739d..be8dfb4d3337a575d5b9505fb5baf57e7b6ae244 100644
--- a/channels/sig_pri.c
+++ b/channels/sig_pri.c
@@ -6752,9 +6752,11 @@ static void *pri_dchannel(void *vpri)
 					/* Bring voice path up */
 					pri_queue_control(pri, chanpos, AST_CONTROL_PROGRESS);
 					pri->pvts[chanpos]->progress = 1;
+					sig_pri_set_dialing(pri->pvts[chanpos], 0);
 					sig_pri_open_media(pri->pvts[chanpos]);
+				} else if (pri->inband_on_proceeding) {
+					sig_pri_set_dialing(pri->pvts[chanpos], 0);
 				}
-				sig_pri_set_dialing(pri->pvts[chanpos], 0);
 				sig_pri_unlock_private(pri->pvts[chanpos]);
 				break;
 			case PRI_EVENT_FACILITY:
diff --git a/channels/sig_pri.h b/channels/sig_pri.h
index 80f22c9a68948788c2d1d98d27b9f6cad7f12978..43acb12697de1e3a4f7d3933148b354cf9283238 100644
--- a/channels/sig_pri.h
+++ b/channels/sig_pri.h
@@ -470,6 +470,8 @@ struct sig_pri_span {
 	 * appended to the initial_user_tag[].
 	 */
 	unsigned int append_msn_to_user_tag:1;
+	/*! TRUE if a PROCEEDING message needs to unsquelch the received audio. */
+	unsigned int inband_on_proceeding:1;
 #if defined(HAVE_PRI_MCID)
 	/*! \brief TRUE if allow sending MCID request on this span. */
 	unsigned int mcid_send:1;
diff --git a/configs/chan_dahdi.conf.sample b/configs/chan_dahdi.conf.sample
index 85ffd6d616a316578316f28f4bb37e30e921e149..7d64cf3831bdcbd7f5ab329bc954844866391989 100644
--- a/configs/chan_dahdi.conf.sample
+++ b/configs/chan_dahdi.conf.sample
@@ -196,6 +196,18 @@ context=public
 ;
 ;resetinterval = 3600
 ;
+; Assume inband audio may be present when a PROCEEDING message is received.
+; Q.931 Section 5.1.2 says the network cannot assume that the CPE side has
+; attached to the B channel at this time without explicitly sending the
+; progress indicator ie informing the CPE side to attach to the B channel
+; for audio.  However, some non-compliant ISDN switches send a PROCEEDING
+; without the progress indicator ie indicating inband audio is available and
+; assume that the CPE device has connected the media path for listening to
+; ringback and other messages.
+; Default yes in current release branches for backward compatibility.
+;
+;inband_on_proceeding=yes
+;
 ; Overlap dialing mode (sending overlap digits)
 ; Cannot be changed on a reload.
 ;