diff --git a/res/res_pjsip_outbound_registration.c b/res/res_pjsip_outbound_registration.c
index df50cf40fe3e5ba7c76fd616265bb0d29b5759b1..acc4b1d3a1f948ab03fd3f06972754c654f2bdbf 100644
--- a/res/res_pjsip_outbound_registration.c
+++ b/res/res_pjsip_outbound_registration.c
@@ -1033,7 +1033,17 @@ static int handle_registration_response(void *data)
 	ast_debug(1, "Processing REGISTER response %d from server '%s' for client '%s'\n",
 			response->code, server_uri, client_uri);
 
-	if ((response->code == 401 || response->code == 407)
+	if (response->code == 408 || response->code == 503) {
+		if ((ast_sip_failover_request(response->old_request))) {
+			int res = registration_client_send(response->client_state, response->old_request);
+			/* The tdata ref was stolen */
+			response->old_request = NULL;
+			if (res == PJ_SUCCESS) {
+				ao2_ref(response, -1);
+				return 0;
+			}
+		}
+	} else if ((response->code == 401 || response->code == 407)
 		&& (!response->client_state->auth_attempted
 			|| response->rdata->msg_info.cseq->cseq != response->client_state->auth_cseq)) {
 		int res;