diff --git a/channels/chan_zap.c b/channels/chan_zap.c
index ad3d2281bd90a95ca818ccb744282ca77da4e34c..7863dfaa767314ebbd4de7347fc4e90a75457d6e 100644
--- a/channels/chan_zap.c
+++ b/channels/chan_zap.c
@@ -6020,7 +6020,7 @@ static void *ss_thread(void *data)
 					    chan->_state == AST_STATE_RINGING) 
 						break; /* Got ring */
 				}
-				dtmfbuf[i] = 0;
+				dtmfbuf[i] = '\0';
 				zt_setlinear(p->subs[index].zfd, p->subs[index].linear);
 				/* Got cid and ring. */
 				ast_log(LOG_DEBUG, "CID got string '%s'\n", dtmfbuf);
@@ -6028,10 +6028,10 @@ static void *ss_thread(void *data)
 				ast_log(LOG_DEBUG, "CID is '%s', flags %d\n", 
 					dtmfcid, flags);
 				/* If first byte is NULL, we have no cid */
-				if (dtmfcid[0]) 
+				if (!ast_strlen_zero(dtmfcid)) 
 					number = dtmfcid;
 				else
-					number = 0;
+					number = NULL;
 			/* If set to use V23 Signalling, launch our FSK gubbins and listen for it */
 			} else if ((p->cid_signalling == CID_SIG_V23) || (p->cid_signalling == CID_SIG_V23_JP)) {
 				cs = callerid_new(p->cid_signalling);
@@ -6396,24 +6396,17 @@ static void *ss_thread(void *data)
 		}
 		else
 			cs = NULL;
-		if (number || name) {
-		    if (chan->cid.cid_num) {
-			free(chan->cid.cid_num);
-			chan->cid.cid_num = NULL;
-		    }
-		    if (chan->cid.cid_name) {
-			free(chan->cid.cid_name);
-			chan->cid.cid_name = NULL;
-		    }
-		}
+
 		if (number)
 			ast_shrink_phone_number(number);
-
 		ast_set_callerid(chan, number, name, number);
+
 		if (smdi_msg)
 			ASTOBJ_UNREF(smdi_msg, ast_smdi_md_message_destroy);
+
 		if (cs)
 			callerid_free(cs);
+
 		ast_setstate(chan, AST_STATE_RING);
 		chan->rings = 1;
 		p->ringt = p->ringt_base;