--- asterisk-1.8.7.0/main/cdr.c.orig 2011-11-01 09:53:22.000000000 -0400 +++ asterisk-1.8.7.0/main/cdr.c 2011-11-01 09:53:04.000000000 -0400 @@ -850,18 +850,24 @@ /* set cid info for one record */ static void set_one_cid(struct ast_cdr *cdr, struct ast_channel *c) { - const char *num; + const char *numclid, *numsrc; if (!cdr) { return; } - /* Grab source from ANI or normal Caller*ID */ - num = S_COR(c->caller.ani.number.valid, c->caller.ani.number.str, - S_COR(c->caller.id.number.valid, c->caller.id.number.str, NULL)); + /* Grab clid from normal Caller*ID or ANI */ + numclid = S_COR(c->caller.id.number.valid, c->caller.id.number.str, + S_COR(c->caller.ani.number.valid, c->caller.ani.number.str, NULL)); + ast_callerid_merge(cdr->clid, sizeof(cdr->clid), - S_COR(c->caller.id.name.valid, c->caller.id.name.str, NULL), num, ""); - ast_copy_string(cdr->src, S_OR(num, ""), sizeof(cdr->src)); + S_COR(c->caller.id.name.valid, c->caller.id.name.str, NULL), numclid, ""); + + /* Grab source from ANI or normal Caller*ID */ + numsrc = S_COR(c->caller.ani.number.valid, c->caller.ani.number.str, + S_COR(c->caller.id.number.valid, c->caller.id.number.str, NULL)); + + ast_copy_string(cdr->src, S_OR(numsrc, ""), sizeof(cdr->src)); ast_cdr_setvar(cdr, "dnid", S_OR(c->dialed.number.str, ""), 0); if (c->caller.id.subaddress.valid) {