diff --git a/src/channels/chan_voicemngr.c b/src/channels/chan_voicemngr.c
index 1250bda0d543533a8750e3e49ba9fbb203a7754d..722e646cc31d54e22aec6b568235a414a12bf03f 100644
--- a/src/channels/chan_voicemngr.c
+++ b/src/channels/chan_voicemngr.c
@@ -118,7 +118,7 @@ static int chan_voicemngr_signal_ringing_callerid_pending(struct chan_voicemngr_
 static int chan_voicemngr_stop_ringing_callerid_pending(struct chan_voicemngr_pvt *p);
 static int chan_voicemngr_signal_callwaiting(const struct chan_voicemngr_pvt *p);
 static int chan_voicemngr_stop_callwaiting(const struct chan_voicemngr_pvt *p);
-static int chan_voicemngr_signal_callerid(struct ast_channel *chan, struct chan_voicemngr_subchannel *sub);
+static int chan_voicemngr_signal_callerid(struct ast_channel *chan, struct chan_voicemngr_subchannel *sub, int callwt);
 static struct chan_voicemngr_subchannel *chan_voicemngr_get_idle_subchannel(const struct chan_voicemngr_pvt *p);
 static struct chan_voicemngr_subchannel* chan_voicemngr_get_active_subchannel(const struct chan_voicemngr_pvt *p);
 static int chan_voicemngr_get_sip_client_id(struct chan_voicemngr_subchannel *sub);
@@ -735,7 +735,7 @@ static void chan_voicemngr_modify_codec(struct chan_voicemngr_subchannel *sub) {
 
 			}
 
-			ast_debug(4, "sub->owner Channel %s, ast_channel_codec_get(): %s\n",ast_channel_name(sub->owner), ast_channel_codec_get(sub->owner));
+			ast_log(LOG_NOTICE, "Sync local codec to :%s, and ptime to %d \n", ast_channel_codec_get(sub->owner), ast_channel_ptime_get(sub->owner));
 			ao2_ref(bridged_chan, -1);
 		} else {
 			ast_channel_unlock(sub->owner);
@@ -1256,7 +1256,8 @@ static int chan_voicemngr_call(struct ast_channel *chan, const char *dest, int t
 		is_call_waiting_enabled(p->context)) {			// call waiting enabled
 		ast_debug(1, "Call waiting\n");
 		sub->channel_state = CALLWAITING;
-		chan_voicemngr_signal_callwaiting(p);
+		p->tech->signal_callerid(chan, sub, 1);
+		chan_voicemngr_send_ubus_event("CALLWAITING",p->line_id);
 		int cwtimeout_ms = cwtimeout * 1000;
 		int cwBeep_ms = cwBeep * 1000;
 		sub->cw_timer_id = ast_sched_add(sched, cwtimeout_ms, cwtimeout_cb, sub);
@@ -1298,7 +1299,7 @@ static int chan_voicemngr_call(struct ast_channel *chan, const char *dest, int t
 			p->tech->signal_ringing(p);
 		} else {
 			p->tech->signal_ringing_callerid_pending(p);
-			p->tech->signal_callerid(chan, sub);
+			p->tech->signal_callerid(chan, sub, 0);
 		}
 
 		if (has_call_in_sip_client(p->context)) {
@@ -1661,8 +1662,6 @@ static int chan_voicemngr_write(struct ast_channel *ast, struct ast_frame *frame
 		if (sip_client_id >= 0 && sip_client_id < MAX_SIP_CLIENTS) {
 				line_stats[sip_client_id].rxpkts++;
 				line_stats[sip_client_id].rxbytes += ap->rtp_size;
-		} else {
-			ast_debug(9, "Wrong sip client id: %d\n", sip_client_id);
 		}
 
 		/* set rtp payload type sent to voicemngr */
@@ -1699,8 +1698,6 @@ static int chan_voicemngr_write(struct ast_channel *ast, struct ast_frame *frame
 		if (sip_client_id >= 0 && sip_client_id < MAX_SIP_CLIENTS) {
 				line_stats[sip_client_id].rxpkts++;
 				line_stats[sip_client_id].rxbytes += ap->rtp_size;
-		} else {
-			ast_debug(9, "Wrong sip client id: %d\n", sip_client_id);
 		}
 
 		/* set rtp payload type sent to voicemngr */
@@ -3419,7 +3416,7 @@ static void chan_voicemngr_process_event(struct endpt_event *ev)
 				endpt_connection(sub_peer->parent->line_id, sub_peer->call_id, "destroy");
 				usleep(500000);
 				p->tech->signal_ringing_callerid_pending(p);
-				p->tech->signal_callerid(sub_peer->owner, sub_peer);
+				p->tech->signal_callerid(sub_peer->owner, sub_peer, 0);
 				sub->channel_state = RINGING;
 				ast_queue_control(peer_owner, AST_CONTROL_RINGING);
 				chan_voicemngr_send_ubus_event("RINGING",p->line_id);
@@ -5071,7 +5068,7 @@ static int chan_voicemngr_stop_ringing_callerid_pending(struct chan_voicemngr_pv
  * 'O' in number or name => not available
  * 'P' in number or name => presentation not allowed
  */
-static int chan_voicemngr_signal_callerid(struct ast_channel *chan, struct chan_voicemngr_subchannel *sub)
+static int chan_voicemngr_signal_callerid(struct ast_channel *chan, struct chan_voicemngr_subchannel *sub, int callwt)
 {
 	if (channel_config[sub->parent->line_id].ringsignal) {
 		CLID_STRING clid_string;
@@ -5138,7 +5135,10 @@ static int chan_voicemngr_signal_callerid(struct ast_channel *chan, struct chan_
 		clid_string.number_name[str_length++] = '\0';
 
 		ast_debug(2, "CLIP info: caller number [%s], caller name [%s], final string [%s]\n", number, name, (char *)&clid_string);
-		endpt_signal(sub->parent->line_id, "callid", "on", (char *)&clid_string);
+		if (callwt)
+			endpt_signal(sub->parent->line_id, "callwt", "on", (char *)&clid_string);
+		else
+			endpt_signal(sub->parent->line_id, "callid", "on", (char *)&clid_string);
 		return 0;
 	}
 
diff --git a/src/channels/chan_voicemngr.h b/src/channels/chan_voicemngr.h
index eb4aecbe7798c3206049a9ef129408fee215538a..a61cfb99361e14cf1df3b5618499fdb92401f9d1 100644
--- a/src/channels/chan_voicemngr.h
+++ b/src/channels/chan_voicemngr.h
@@ -176,7 +176,7 @@ struct chan_voicemngr_subchannel {
 struct chan_voicemngr_channel_tech {
 	int (* signal_ringing)(struct chan_voicemngr_pvt *p);
 	int (* signal_ringing_callerid_pending)(struct chan_voicemngr_pvt *p);
-	int (* signal_callerid)(struct ast_channel *chan, struct chan_voicemngr_subchannel *s);
+	int (* signal_callerid)(struct ast_channel *chan, struct chan_voicemngr_subchannel *s, int callwt);
 	int (* stop_ringing)(struct chan_voicemngr_pvt *p);
 	int (* stop_ringing_callerid_pending)(struct chan_voicemngr_pvt *p);
 	int (* release)(struct chan_voicemngr_pvt *p);