diff --git a/res/res_pjsip_session.c b/res/res_pjsip_session.c
index 52db333e6e5911ee3652a537a8c340a6a5eec071..c248670b7d213534d0214049c018cf6baccb39db 100644
--- a/res/res_pjsip_session.c
+++ b/res/res_pjsip_session.c
@@ -1458,6 +1458,7 @@ static void set_from_header(struct ast_sip_session *session)
 	pjsip_sip_uri *dlg_info_uri;
 	pjsip_sip_uri *dlg_contact_uri;
 	int restricted;
+	const char *pjsip_from_domain;
 
 	if (!session->channel || session->saved_from_hdr) {
 		return;
@@ -1501,6 +1502,17 @@ static void set_from_header(struct ast_sip_session *session)
 		pj_strdup2(dlg_pool, &dlg_info_uri->host, session->endpoint->fromdomain);
 	}
 
+	/*
+	 * Channel variable for compatibility with chan_sip SIPFROMDOMAIN
+	 */
+	ast_channel_lock(session->channel);
+	pjsip_from_domain = pbx_builtin_getvar_helper(session->channel, "SIPFROMDOMAIN");
+	if (!ast_strlen_zero(pjsip_from_domain)) {
+		ast_debug(3, "From header domain reset by channel variable SIPFROMDOMAIN (%s)\n", pjsip_from_domain);
+		pj_strdup2(dlg_pool, &dlg_info_uri->host, pjsip_from_domain);
+	}
+	ast_channel_unlock(session->channel);
+
 	/* We need to save off the non-anonymized From for RPID/PAI generation (for domain) */
 	session->saved_from_hdr = pjsip_hdr_clone(dlg_pool, dlg_info);
 	ast_sip_add_usereqphone(session->endpoint, dlg_pool, session->saved_from_hdr->uri);