diff --git a/channels/chan_dahdi.c b/channels/chan_dahdi.c
index 331278ec23bcdd0ef7c6a6562b78144d3169e66f..0f0f63962f679007f0c413590b96c9f9c54fc9f2 100644
--- a/channels/chan_dahdi.c
+++ b/channels/chan_dahdi.c
@@ -2505,6 +2505,11 @@ static void my_pri_open_media(void *p)
 	if (res < 0) {
 		ast_log(LOG_WARNING, "Unable to set gains on channel %d\n", pvt->channel);
 	}
+
+	if (pvt->dsp_features && pvt->dsp) {
+		ast_dsp_set_features(pvt->dsp, pvt->dsp_features);
+		pvt->dsp_features = 0;
+	}
 }
 #endif	/* defined(HAVE_PRI) */
 
diff --git a/channels/sig_pri.c b/channels/sig_pri.c
index 9d18a303bd09ddf5e371f53a75648865362fccec..22f9501dda38f9e8c259f12134550a894475fd60 100644
--- a/channels/sig_pri.c
+++ b/channels/sig_pri.c
@@ -4907,6 +4907,17 @@ static void *pri_dchannel(void *vpri)
 						pri_queue_control(pri, chanpos, AST_CONTROL_RINGING);
 						pri->pvts[chanpos]->alerting = 1;
 
+						if (
+#ifdef PRI_PROGRESS_MASK
+							e->ringing.progressmask & PRI_PROG_INBAND_AVAILABLE
+#else
+							e->ringing.progress == 8
+#endif
+							) {
+							sig_pri_open_media(pri->pvts[chanpos]);
+						}
+
+
 #ifdef SUPPORT_USERUSER
 						if (!ast_strlen_zero(e->ringing.useruserinfo)) {
 							struct ast_channel *owner;
@@ -4965,6 +4976,7 @@ static void *pri_dchannel(void *vpri)
 						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]);
 					}
 					sig_pri_unlock_private(pri->pvts[chanpos]);
 				}
@@ -4998,6 +5010,7 @@ static void *pri_dchannel(void *vpri)
 						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]);
 					}
 					sig_pri_unlock_private(pri->pvts[chanpos]);
 				}