diff --git a/channels/chan_brcm.c b/channels/chan_brcm.c
index e587042daafc071f277cc8e895c83277cd1c7d17..76a2830fc994c9b5930680ca3db4a12a3da58afc 100644
--- a/channels/chan_brcm.c
+++ b/channels/chan_brcm.c
@@ -782,7 +782,13 @@ static int brcm_call(struct ast_channel *chan, const char *dest, int timeout)
 
 	p = sub->parent;
 	sub_peer = brcm_subchannel_get_peer(sub);
-	if (line_config[p->line_id].do_not_disturb) {
+	if (!line_config[p->line_id].enabled) {
+		ast_debug(1, "tel_line %d disabled!\n", p->line_id);
+		ast_channel_hangupcause_set(chan, AST_CAUSE_CALL_REJECTED);
+		ast_queue_control(chan, AST_CONTROL_BUSY);
+	}
+
+	else if (line_config[p->line_id].do_not_disturb) {
 		ast_debug(1, "Do not disturbed\n");
 		ast_channel_hangupcause_set(chan, AST_CAUSE_USER_BUSY);
 		ast_queue_control(chan, AST_CONTROL_BUSY);
@@ -2277,6 +2283,12 @@ static void *brcm_process_event(struct endpt_event *ev) {
 		return NULL;
 	}
 
+	// ignore events when the telline is not enabled
+	if (!line_config[ev->line].enabled) {
+		ast_debug(3, "Line %d disabled, ignore event %s!\n", ev->line, ev->name);
+		return NULL;
+	}
+
 	/* Get locks in correct order */
 	//ast_mutex_lock(&p->lock);
 	pvt_lock(p, "brcm monitor events");
@@ -3133,6 +3145,7 @@ static int unload_module(void)
 static line_settings line_settings_create(void)
 {
 	line_settings line_conf = (line_settings){
+		.enabled = 1,
 		.language = "",
 		.cid_num = "",
 		.cid_name = "",
@@ -3161,7 +3174,9 @@ static line_settings line_settings_create(void)
 static void line_settings_load(line_settings *line_config, struct ast_variable *v)
 {
 	while(v) {
-		if (!strcasecmp(v->name, "language")) {
+		if (!strcasecmp(v->name, "enabled")) {
+			line_config->enabled = ast_true(v->value)?1:0;
+		} else if (!strcasecmp(v->name, "language")) {
 			ast_copy_string(line_config->language, v->value, sizeof(line_config->language));
 		} else if (!strcasecmp(v->name, "callerid")) {
 			ast_callerid_split(v->value, line_config->cid_name, sizeof(line_config->cid_name), line_config->cid_num, sizeof(line_config->cid_num));
diff --git a/channels/chan_brcm.h b/channels/chan_brcm.h
index aa5ff7c06b6248ff62f4d3fa252f3525f3bb048a..37776853b49445f42cb27c98a995fa8808fde3aa 100644
--- a/channels/chan_brcm.h
+++ b/channels/chan_brcm.h
@@ -194,6 +194,7 @@ static const DIALTONE_MAP dialtone_map[] =
 
 /* Struct for individual endpoint settings */
 typedef struct {
+	int enabled;
 	char language[MAX_LANGUAGE];
 	char cid_num[AST_MAX_EXTENSION];
 	char cid_name[AST_MAX_EXTENSION];