diff --git a/res/res_pjsip_outbound_registration.c b/res/res_pjsip_outbound_registration.c
index cd88dc38e9db7d885b3724bd856969ddfe397fa1..72499c5f69176566192c8301ace66e23d3a92cfd 100644
--- a/res/res_pjsip_outbound_registration.c
+++ b/res/res_pjsip_outbound_registration.c
@@ -1788,6 +1788,10 @@ static int handle_registration_response(void *data)
 	} else {
 		ast_debug(1, "Processing response %d from %s for %s(%s)\n",
 			response->code, server_uri, client_state->registration_name, client_uri);
+		ast_debug(1, "No destination addresses available (tdata=%p, addr.count=%d)\n"
+			"Setting client's retry counter to max_retries(%d) immediately\n",
+			tdata, tdata ? tdata->dest_info.addr.count : 0, client_state->max_retries);
+		client_state->retries = client_state->max_retries;
 	}
 
 
@@ -1854,7 +1858,7 @@ static int handle_registration_response(void *data)
 			client_state->registration_resend_timer_id = ast_sched_add(sched, 1, registration_resend, response);
 			return 0;
 		}
-		if(!response->retry_after && endpoint && endpoint->failover_reg_addr == 1){
+		if((!response->retry_after && endpoint && endpoint->failover_reg_addr == 1) && (tdata && tdata->dest_info.addr.count)){
 			// 2nd registration on 504 with xml failed, back to the original registration schedule.
 			endpoint->failover_reg_addr = 2;
 
@@ -2087,7 +2091,7 @@ static int handle_registration_response(void *data)
 			ao2_ref(response, -1);
 			return 0;
 		}
-	} else if (response->retry_after) {
+	} else if (response->retry_after && tdata && tdata->dest_info.addr.count) {
 		/* If we have been instructed to retry after a period of time, schedule it as such */
 		schedule_retry(response, response->retry_after, server_uri, client_uri, client_num);
 	} else if (client_state->failover_max_retries &&
@@ -2120,6 +2124,13 @@ static int handle_registration_response(void *data)
 		}
 	} else if (client_state->retry_interval &&
 		   sip_outbound_registration_is_temporal(response->code, client_state)) {
+		if (!tdata || !tdata->dest_info.addr.count) {
+			client_state->retries = client_state->max_retries;
+			ast_log(LOG_ERROR, "No destination addresses available (tdata=%p, addr.count=%d)\n"
+				"Setting client's retry counter to max_retries(%d) immediately\n",
+				tdata, tdata ? tdata->dest_info.addr.count : 0, client_state->max_retries);
+		}
+
 		if (client_state->retries == client_state->max_retries) {
 			/* If we received enough temporal responses to exceed our maximum give up permanently */
 			update_client_state_status(client_state, SIP_REGISTRATION_REJECTED_PERMANENT);
@@ -2161,6 +2172,12 @@ static int handle_registration_response(void *data)
 			schedule_retry(response, waiting_time, server_uri, client_uri, client_num);
 		}
 	} else {
+		if (!tdata || !tdata->dest_info.addr.count) {
+			client_state->retries = client_state->max_retries;
+			ast_log(LOG_ERROR, "No destination addresses available (tdata=%p, addr.count=%d)\n"
+				"Setting client's retry counter to max_retries(%d) immediately\n",
+				tdata, tdata ? tdata->dest_info.addr.count : 0, client_state->max_retries);
+		}
 		if (response->code == 403
 			&& client_state->forbidden_retry_interval
 			&& client_state->retries < client_state->max_retries) {