diff --git a/channels/chan_brcm.c b/channels/chan_brcm.c
index 6f9a2b369d920a7fd79651d73fe8cd434b35413b..bca823c4ab8d3af851b21e3d8f2de85089da3a46 100644
--- a/channels/chan_brcm.c
+++ b/channels/chan_brcm.c
@@ -645,6 +645,9 @@ static int brcm_indicate(struct ast_channel *ast, int condition, const void *dat
 					break;
 				}
 				res = -1;
+		  case AST_CAUSE_NETWORK_OUT_OF_ORDER:
+			  brcm_stop_dialtone(sub->parent); // stop any dialtone exist if disconnection happened due to network/server
+			  break;
 		  default:
 			  ast_debug(1, "Don't know how to handle cause code %d\n", ast_cause);
 			  break;
@@ -1408,9 +1411,7 @@ static int brcm_signal_dialtone(struct brcm_pvt *p) {
 	ast_verbose("Setting dialtone to %s\n", dialtone_map[p->dialtone].str);	
 	switch (p->dialtone) {
 		case DIALTONE_OFF:
-			endpt_signal(p->line_id, "dial", "off", NULL);
-			endpt_signal(p->line_id, "stutter", "off", NULL);
-			endpt_signal(p->line_id, "unobtainable", "off", NULL);
+			endpt_signal(p->line_id, "dial", "off", NULL); // this will turn off any tones that is playing. Act as play dial-off.
 			break;
 		case DIALTONE_ON:
 			endpt_signal(p->line_id, "dial", "on", NULL);