diff --git a/res/res_pjsip_session.c b/res/res_pjsip_session.c
index 7dca1af41def5e2396721ead3e35b2e55e80394b..1414869e125462cf5f82d9a623560ef44e0b7d77 100644
--- a/res/res_pjsip_session.c
+++ b/res/res_pjsip_session.c
@@ -2609,6 +2609,7 @@ void ast_sip_session_send_response(struct ast_sip_session *session, pjsip_tx_dat
 static pj_bool_t session_on_rx_request(pjsip_rx_data *rdata);
 static pj_bool_t session_on_rx_response(pjsip_rx_data *rdata);
 static void session_on_tsx_state(pjsip_transaction *tsx, pjsip_event *e);
+static pj_status_t session_on_tx_request(pjsip_tx_data *tdata);
 
 static pjsip_module session_module = {
 	.name = {"Session Module", 14},
@@ -2616,6 +2617,7 @@ static pjsip_module session_module = {
 	.on_rx_request = session_on_rx_request,
 	.on_rx_response = session_on_rx_response,
 	.on_tsx_state = session_on_tsx_state,
+	.on_tx_request = session_on_tx_request,
 };
 
 /*! \brief Determine whether the SDP provided requires deferral of negotiating or not
@@ -4289,6 +4291,38 @@ static void session_on_tsx_state(pjsip_transaction *tsx, pjsip_event *e)
 	SCOPE_EXIT_RTN();
 }
 
+/*!
+ * \internal
+ * Added for setting the CallLog.{i}.X_Vendor_SIPIPAddress of outgoing INVITE
+ */
+static pj_status_t session_on_tx_request(pjsip_tx_data *tdata)
+{
+	SCOPE_ENTER(1, "session_on_tx_request, update SIPIPAddress\n");
+	pjsip_dialog *dlg = tdata ? pjsip_tdata_get_dlg(tdata) : NULL;
+	pjsip_inv_session *inv_session = dlg ? pjsip_dlg_get_inv_session(dlg) : NULL;
+	struct ast_sip_session *session = (inv_session ? inv_session->mod_data[session_module.id] : NULL);
+
+	if (inv_session && inv_session->invite_tsx) {
+		ast_debug(3, "%s: TSX State: %s  Inv State: %s\n", ast_sip_session_get_name(session),
+			pjsip_tsx_state_str(inv_session->invite_tsx->state), pjsip_inv_state_name(inv_session->state));
+
+		if (inv_session->state == PJSIP_INV_STATE_CALLING && inv_session->invite_tsx->state == PJSIP_TSX_STATE_CALLING
+			&& ast_strlen_zero(ast_channel_sipIpAddress(session->channel)) ) {
+			/* Log the IP that the INVITE been sent as CallLog.{i}.X_Vendor_SIPIPAddress */
+			/* With condition, tsx_state is calling && inv_state is calling && SIPIPAddress has no value */
+			const char *addr_buf;
+			char tempaddr[AST_SOCKADDR_BUFLEN];
+
+			addr_buf = pj_sockaddr_print(&tdata->tp_info.dst_addr, tempaddr, sizeof(tempaddr), 0);
+			ast_channel_sipIpAddress_set(session->channel, addr_buf, strlen(addr_buf));
+
+			ast_debug(3, "%s:SIPIPAddress has been set to: %s\n",
+				ast_sip_session_get_name(session), ast_channel_sipIpAddress(session->channel));
+		}
+	}
+	SCOPE_EXIT_RTN_VALUE(PJ_SUCCESS);
+}
+
 /*!
  * \internal
  * Added for debugging purposes
@@ -5051,15 +5085,6 @@ static void session_inv_on_tsx_state_changed(pjsip_inv_session *inv, pjsip_trans
 		break;
 	}
 
-	if (inv->state == PJSIP_INV_STATE_CALLING && tsx->state == PJSIP_TSX_STATE_CALLING ) {
-		/* Log the IP that the INVITE been sent as CallLog.{i}.X_Vendor_SIPIPAddress */
-		const char *addr_buf;
-		char tempaddr[AST_SOCKADDR_BUFLEN];
-		addr_buf = pj_sockaddr_print(&tsx->addr, tempaddr, sizeof(tempaddr), 0);
-		ast_debug(3, "%s: INVITE sent to IP: %s \n", ast_sip_session_get_name(session), addr_buf );
-		ast_channel_sipIpAddress_set(session->channel, addr_buf, strlen(addr_buf));
-	}
-
 	if (AST_LIST_EMPTY(&session->delayed_requests)) {
 		/* No delayed request pending, so just return */
 		SCOPE_EXIT_RTN("Nothing delayed\n");