diff --git a/channels/chan_brcm.c b/channels/chan_brcm.c
index d5aeb9440457fbad33db6929d2aee1da560cd98a..5f2b7a7d15171f1101f6f3d857d1e3c16a45b58c 100644
--- a/channels/chan_brcm.c
+++ b/channels/chan_brcm.c
@@ -598,6 +598,7 @@ static int brcm_indicate(struct ast_channel *ast, int condition, const void *dat
 		  case AST_CAUSE_USER_BUSY:
 				if (ast_channel_state(ast) != AST_STATE_UP) {
 					/* XXX We should play a busy tone here!! */
+                                        sub->channel_state = CALLENDED;
 					endpt_signal(sub->parent->line_id, "busy", "on", NULL);
 					break;
 				}
@@ -1028,6 +1029,7 @@ static int brcm_answer(struct ast_channel *ast)
 	 * Treated like a normal call but we want to preserve the channel_state
 	 */
 	if(pvt->dialtone != DIALTONE_HOWLER) {
+            if(sub->channel_state != CALLENDED)/*Dont change the channel state if call is terminated */
 		sub->channel_state = INCALL;
 	}
         //send_ubus_event("RINGING_OFF",pvt->line_id);