Index: channels/chan_dahdi.c =================================================================== --- channels/chan_dahdi.c (revision 257495) +++ channels/chan_dahdi.c (working copy) @@ -6823,7 +6823,7 @@ return &p->subs[idx].f; } - if (p->subs[idx].needcallerid) { + if (p->subs[idx].needcallerid && !ast->cid.cid_tns) { ast_set_callerid(ast, S_OR(p->lastcid_num, NULL), S_OR(p->lastcid_name, NULL), S_OR(p->lastcid_num, NULL) @@ -13195,12 +13195,12 @@ if (chanpos < 0) { ast_log(LOG_WARNING, "Facility Name requested on channel %d/%d not in use on span %d\n", PRI_SPAN(e->facname.channel), PRI_CHANNEL(e->facname.channel), pri->span); - } else { + } else if (pri->pvts[chanpos]->use_callerid) { /* Re-use *69 field for PRI */ ast_mutex_lock(&pri->pvts[chanpos]->lock); ast_copy_string(pri->pvts[chanpos]->lastcid_num, e->facname.callingnum, sizeof(pri->pvts[chanpos]->lastcid_num)); ast_copy_string(pri->pvts[chanpos]->lastcid_name, e->facname.callingname, sizeof(pri->pvts[chanpos]->lastcid_name)); - pri->pvts[chanpos]->subs[SUB_REAL].needcallerid =1; + pri->pvts[chanpos]->subs[SUB_REAL].needcallerid = 1; dahdi_enable_ec(pri->pvts[chanpos]); ast_mutex_unlock(&pri->pvts[chanpos]->lock); } Index: funcs/func_callerid.c =================================================================== --- funcs/func_callerid.c (revision 257495) +++ funcs/func_callerid.c (working copy) @@ -191,6 +191,7 @@ static int callerid_write(struct ast_channel *chan, const char *cmd, char *data, const char *value) { + int valid = 1; if (!value || !chan) return -1; @@ -267,8 +268,13 @@ chan->cid.cid_ton = atoi(value); } else { ast_log(LOG_ERROR, "Unknown callerid data type '%s'.\n", data); + valid = 0; } + if (valid) { + chan->cid.cid_tns = 1; + } + return 0; }