diff --git a/channels/chan_sip.c b/channels/chan_sip.c
index 632b0711ce80d66e8ba114272816e8da6fa96166..832dfb0635b68f1b28a354f84a02120cd73f33d1 100755
--- a/channels/chan_sip.c
+++ b/channels/chan_sip.c
@@ -1261,6 +1261,7 @@ static int create_addr(struct sip_pvt *r, char *opeer)
 	struct sip_peer *p;
 	int found=0;
 	char *port;
+	char *callhost;
 	int portno;
 	char host[256], *hostn;
 	char peer[256]="";
@@ -1294,6 +1295,11 @@ static int create_addr(struct sip_pvt *r, char *opeer)
 			strncpy(r->username, p->username, sizeof(r->username)-1);
 			strncpy(r->tohost, p->tohost, sizeof(r->tohost)-1);
 			strncpy(r->fullcontact, p->fullcontact, sizeof(r->fullcontact)-1);
+			if (!r->initreq.headers && !ast_strlen_zero(p->fromdomain)) {
+				if ((callhost = strchr(r->callid, '@'))) {
+					strncpy(callhost + 1, p->fromdomain, sizeof(r->callid) - (callhost - r->callid) - 2);
+				}
+			}
 			if (ast_strlen_zero(r->tohost)) {
 				if (p->addr.sin_addr.s_addr)
 					ast_inet_ntoa(r->tohost, sizeof(r->tohost), p->addr.sin_addr);