diff --git a/channels/sig_pri.c b/channels/sig_pri.c
index 9440df6488998f8b28b0f8ab0943ede427422a62..a65679f63fae175a6ff6d49a95be707221ce520d 100644
--- a/channels/sig_pri.c
+++ b/channels/sig_pri.c
@@ -6242,6 +6242,11 @@ static void *pri_dchannel(void *vpri)
 					e->ringing.call);
 				sig_pri_cc_generic_check(pri, chanpos, AST_CC_CCNR);
 				sig_pri_set_echocanceller(pri->pvts[chanpos], 1);
+				sig_pri_lock_owner(pri, chanpos);
+				if (pri->pvts[chanpos]->owner) {
+					ast_setstate(pri->pvts[chanpos]->owner, AST_STATE_RINGING);
+					ast_channel_unlock(pri->pvts[chanpos]->owner);
+				}
 				pri_queue_control(pri, chanpos, AST_CONTROL_RINGING);
 				if (pri->pvts[chanpos]->call_level < SIG_PRI_CALL_LEVEL_ALERTING) {
 					pri->pvts[chanpos]->call_level = SIG_PRI_CALL_LEVEL_ALERTING;
diff --git a/channels/sig_ss7.c b/channels/sig_ss7.c
index ebc5ca858761fe5591b9a6f1ffa94b15a73ed225..b533e9e19ca58d3f0c790c587ed22669d2be8be1 100644
--- a/channels/sig_ss7.c
+++ b/channels/sig_ss7.c
@@ -697,6 +697,11 @@ void *ss7_linkset(void *data)
 					if (p->call_level < SIG_SS7_CALL_LEVEL_ALERTING) {
 						p->call_level = SIG_SS7_CALL_LEVEL_ALERTING;
 					}
+					sig_ss7_lock_owner(linkset, chanpos);
+					if (p->owner) {
+						ast_setstate(p->owner, AST_STATE_RINGING);
+						ast_channel_unlock(p->owner);
+					}
 					sig_ss7_queue_control(linkset, chanpos, AST_CONTROL_RINGING);
 					break;
 				case CPG_EVENT_PROGRESS:
@@ -948,6 +953,11 @@ void *ss7_linkset(void *data)
 						if (p->call_level < SIG_SS7_CALL_LEVEL_ALERTING) {
 							p->call_level = SIG_SS7_CALL_LEVEL_ALERTING;
 						}
+						sig_ss7_lock_owner(linkset, chanpos);
+						if (p->owner) {
+							ast_setstate(p->owner, AST_STATE_RINGING);
+							ast_channel_unlock(p->owner);
+						}
 						sig_ss7_queue_control(linkset, chanpos, AST_CONTROL_RINGING);
 					}
 					sig_ss7_unlock_private(p);