diff --git a/channels/chan_sip.c b/channels/chan_sip.c
index 1de780634ee45d87f25d5e7f71b5f61c75f57356..2774841a48c70d6a7bfe229d761d89242d40dff0 100644
--- a/channels/chan_sip.c
+++ b/channels/chan_sip.c
@@ -15859,22 +15859,22 @@ static int extensionstate_update(const char *context, const char *exten, struct
 		} else if (data->state & AST_EXTENSION_RINGING) {
 			/* check if another channel than last time is ringing now to be notified */
 			struct ast_channel *ringing = find_ringing_channel(data->device_state_info, p);
-			if (!ringing) {
-				/* there's something wrong, the device is ringing but there is no
-				 * ringing channel (yet, chan_sip is strange
-				 * the device is in AST_DEVICE_RINGING but the channel is in AST_STATE_DOWN)
-				 */
-				sip_pvt_unlock(p);
-				return 0;
-			}
-			if (!ast_tvcmp(ast_channel_creationtime(ringing), p->last_ringing_channel_time)) {
-				/* we assume here that no two channels have the exact same creation time */
-				ao2_ref(ringing, -1);
-				sip_pvt_unlock(p);
-				return 0;
+			if (ringing) {
+				if (!ast_tvcmp(ast_channel_creationtime(ringing), p->last_ringing_channel_time)) {
+					/* we assume here that no two channels have the exact same creation time */
+					ao2_ref(ringing, -1);
+					sip_pvt_unlock(p);
+					return 0;
+				} else {
+					p->last_ringing_channel_time = ast_channel_creationtime(ringing);
+					ao2_ref(ringing, -1);
+				}
 			}
-			p->last_ringing_channel_time = ast_channel_creationtime(ringing);
-			ao2_ref(ringing, -1);
+			/* If no ringing channel was found, it doesn't necessarily indicate anything bad.
+			 * Likely, a device state change occurred for a custom device state, which does not
+			 * correspond to any channel. In such a case, just go ahead and pass the notification
+			 * along.
+			 */
 		}
 		/* ref before unref because the new could be the same as the old one. Don't risk destruction! */
 		if (data->device_state_info) {
@@ -27011,13 +27011,10 @@ static int handle_request_subscribe(struct sip_pvt *p, struct sip_request *req,
 				if (ringing) {
 					p->last_ringing_channel_time = ast_channel_creationtime(ringing);
 					ao2_ref(ringing, -1);
-				} else {
-					/* The device is ringing but there is no ringing channel (chan_sip:
-					 * the device can be AST_DEVICE_RINGING but the channel is AST_STATE_DOWN yet),
-					 * correct state for state_notify_build_xml not to search a ringing channel.
-					 */
-					data.state &= ~AST_EXTENSION_RINGING;
 				}
+				/* If there is no channel, this likely indicates that the ringing indication
+				 * is due to a custom device state. These do not have associated channels.
+				 */
 			}
 			extensionstate_update(p->context, p->exten, &data, p, TRUE);
 			append_history(p, "Subscribestatus", "%s", ast_extension_state2str(data.state));