diff --git a/bbf_plugin/qos_bbf.c b/bbf_plugin/qos_bbf.c
index 93adf25eb9216e5a636150a9041fdcaf34994904..63173cb3a3c8b8f77a4555d874e86b90bfbdbeca 100644
--- a/bbf_plugin/qos_bbf.c
+++ b/bbf_plugin/qos_bbf.c
@@ -188,36 +188,27 @@ static int addObjQoSClassification(char *refparam, struct dmctx *ctx, void *data
 
 static int delObjQoSClassification(char *refparam, struct dmctx *ctx, void *data, char *instance, unsigned char del_action)
 {
-	struct uci_section *s = NULL, *stmp = NULL;
 	char *curr_order = NULL;
 
-	switch (del_action) {
-	case DEL_INST:
-		dmuci_get_value_by_section_string(((struct dm_data *)data)->config_section, "order", &curr_order);
-		qos_update_order(curr_order, true);
+	dmuci_get_value_by_section_string(((struct dm_data *)data)->config_section, "order", &curr_order);
+	qos_update_order(curr_order, true);
 
-		dmuci_delete_by_section(((struct dm_data *)data)->config_section, NULL, NULL);
-		dmuci_delete_by_section(((struct dm_data *)data)->dmmap_section, NULL, NULL);
-		break;
-	case DEL_ALL:
-		uci_foreach_sections_safe("qos", "classify", stmp, s) {
-			struct uci_section *dmmap_qos = NULL;
-
-			get_dmmap_section_of_config_section("dmmap_qos", "classify", section_name(s), &dmmap_qos);
-			dmuci_delete_by_section(dmmap_qos, NULL, NULL);
+	dmuci_delete_by_section(((struct dm_data *)data)->config_section, NULL, NULL);
+	dmuci_delete_by_section(((struct dm_data *)data)->dmmap_section, NULL, NULL);
 
-			dmuci_delete_by_section(s, NULL, NULL);
-		}
-		break;
-	}
 	return 0;
 }
 
 static int addObjQoSPolicer(char *refparam, struct dmctx *ctx, void *data, char **instance)
 {
 	struct uci_section *dmmap = NULL, *s = NULL;
+	char s_name[16] = {0};
+
+	snprintf(s_name, sizeof(s_name), "policer_%s", *instance);
 
 	dmuci_add_section("qos", "policer", &s);
+	dmuci_rename_section_by_section(s, s_name);
+
 	dmuci_set_value_by_section(s, "enable", "0");
 	dmuci_set_value_by_section(s, "committed_rate", "0");
 	dmuci_set_value_by_section(s, "committed_burst_size", "0");
@@ -225,59 +216,45 @@ static int addObjQoSPolicer(char *refparam, struct dmctx *ctx, void *data, char
 	dmuci_set_value_by_section(s, "peak_rate", "0");
 	dmuci_set_value_by_section(s, "peak_burst_size", "0");
 	dmuci_set_value_by_section(s, "meter_type", "0");
-	dmuci_set_value_by_section(s, "name", section_name(s));
+	dmuci_set_value_by_section(s, "name", s_name);
 
 	dmuci_add_section_bbfdm("dmmap_qos", "policer", &dmmap);
-	dmuci_set_value_by_section(dmmap, "section_name", section_name(s));
+	dmuci_set_value_by_section(dmmap, "section_name", s_name);
 	dmuci_set_value_by_section(dmmap, "policer_instance", *instance);
 	return 0;
 }
 
 static int delObjQoSPolicer(char *refparam, struct dmctx *ctx, void *data, char *instance, unsigned char del_action)
 {
-	struct uci_section *s = NULL, *stmp = NULL, *sec = NULL;
+	struct uci_section *sec = NULL;
 	char *p_name = NULL;
 
-	switch (del_action) {
-		case DEL_INST:
-			// store section name to update corresponding classification
-			// section if any
-			dmuci_get_value_by_section_string(((struct dm_data *)data)->config_section, "name", &p_name);
-
-			// Set the Classification.Policer to blank if corresponding
-			// Policer instance has been deleted
-			uci_foreach_option_eq("qos", "classify", "policer", p_name, sec) {
-				dmuci_set_value_by_section(sec, "policer", "");
-			}
-
-			dmuci_delete_by_section(((struct dm_data *)data)->config_section, NULL, NULL);
-			dmuci_delete_by_section(((struct dm_data *)data)->dmmap_section, NULL, NULL);
-			break;
-		case DEL_ALL:
-			uci_foreach_sections_safe("qos", "policer", stmp, s) {
-				struct uci_section *dmmap_section = NULL;
+	// store section name to update corresponding classification
+	// section if any
+	dmuci_get_value_by_section_string(((struct dm_data *)data)->config_section, "name", &p_name);
 
-				get_dmmap_section_of_config_section("dmmap_qos", "policer", section_name(s), &dmmap_section);
-				dmuci_delete_by_section(dmmap_section, NULL, NULL);
+	// Set the Classification.Policer to blank if corresponding
+	// Policer instance has been deleted
+	uci_foreach_option_eq("qos", "classify", "policer", p_name, sec) {
+		dmuci_set_value_by_section(sec, "policer", "");
+	}
 
-				dmuci_delete_by_section(s, NULL, NULL);
-			}
+	dmuci_delete_by_section(((struct dm_data *)data)->config_section, NULL, NULL);
+	dmuci_delete_by_section(((struct dm_data *)data)->dmmap_section, NULL, NULL);
 
-			// Since all policer have been deleted, we can safely set the
-			// value of all Classification.Policer params to empty
-			uci_foreach_sections("qos", "classify", sec) {
-				dmuci_set_value_by_section(sec, "policer", "");
-			}
-			break;
-	}
 	return 0;
 }
 
 static int addObjQoSQueue(char *refparam, struct dmctx *ctx, void *data, char **instance)
 {
 	struct uci_section  *dmmap = NULL, *s = NULL;
+	char s_name[16] = {0};
+
+	snprintf(s_name, sizeof(s_name), "queue_%s", *instance);
 
 	dmuci_add_section("qos", "queue", &s);
+	dmuci_rename_section_by_section(s, s_name);
+
 	dmuci_set_value_by_section(s, "enable", "false");
 	dmuci_set_value_by_section(s, "weight", "0");
 	dmuci_set_value_by_section(s, "precedence", "1");
@@ -286,31 +263,16 @@ static int addObjQoSQueue(char *refparam, struct dmctx *ctx, void *data, char **
 	dmuci_set_value_by_section(s, "rate", "-1");
 
 	dmuci_add_section_bbfdm("dmmap_qos", "queue", &dmmap);
-	dmuci_set_value_by_section(dmmap, "section_name", section_name(s));
+	dmuci_set_value_by_section(dmmap, "section_name", s_name);
 	dmuci_set_value_by_section(dmmap, "queueinstance", *instance);
 	return 0;
 }
 
 static int delObjQoSQueue(char *refparam, struct dmctx *ctx, void *data, char *instance, unsigned char del_action)
 {
-	struct uci_section *s = NULL, *stmp = NULL;
-
-	switch (del_action) {
-		case DEL_INST:
-			dmuci_delete_by_section(((struct dm_data *)data)->config_section, NULL, NULL);
-			dmuci_delete_by_section(((struct dm_data *)data)->dmmap_section, NULL, NULL);
-			break;
-		case DEL_ALL:
-			uci_foreach_sections_safe("qos", "queue", stmp, s) {
-				struct uci_section *dmmap_section = NULL;
-
-				get_dmmap_section_of_config_section("dmmap_qos", "queue", section_name(s), &dmmap_section);
-				dmuci_delete_by_section(dmmap_section, NULL, NULL);
+	dmuci_delete_by_section(((struct dm_data *)data)->config_section, NULL, NULL);
+	dmuci_delete_by_section(((struct dm_data *)data)->dmmap_section, NULL, NULL);
 
-				dmuci_delete_by_section(s, NULL, NULL);
-			}
-			break;
-	}
 	return 0;
 }
 
@@ -325,56 +287,36 @@ static int addObjQoSQueueStats(char *refparam, struct dmctx *ctx, void *data, ch
 
 static int delObjQoSQueueStats(char *refparam, struct dmctx *ctx, void *data, char *instance, unsigned char del_action)
 {
-	struct uci_section *s = NULL, *stmp = NULL;
-
-	switch (del_action) {
-		case DEL_INST:
-			dmuci_delete_by_section(((struct dm_data *)data)->config_section, NULL, NULL);
-			break;
-		case DEL_ALL:
-			uci_path_foreach_sections_safe(bbfdm, "dmmap_qstats", "queue_stats", stmp, s) {
-				dmuci_delete_by_section(s, NULL, NULL);
-			}
-			break;
-	}
+	dmuci_delete_by_section(((struct dm_data *)data)->config_section, NULL, NULL);
 	return 0;
 }
 
 static int addObjQoSShaper(char *refparam, struct dmctx *ctx, void *data, char **instance)
 {
 	struct uci_section  *dmmap = NULL, *s = NULL;
+	char s_name[16] = {0};
+
+	snprintf(s_name, sizeof(s_name), "shaper_%s", *instance);
 
 	dmuci_add_section("qos", "shaper", &s);
+	dmuci_rename_section_by_section(s, s_name);
+
 	dmuci_set_value_by_section(s, "enable", "0");
 	dmuci_set_value_by_section(s, "burst_size", "0");
 	dmuci_set_value_by_section(s, "rate", "0");
 
 	dmuci_add_section_bbfdm("dmmap_qos", "shaper", &dmmap);
-	dmuci_set_value_by_section(dmmap, "section_name", section_name(s));
+	dmuci_set_value_by_section(dmmap, "section_name", s_name);
 	dmuci_set_value_by_section(dmmap, "shaperinstance", *instance);
+
 	return 0;
 }
 
 static int delObjQoSShaper(char *refparam, struct dmctx *ctx, void *data, char *instance, unsigned char del_action)
 {
-	struct uci_section *s = NULL, *stmp = NULL;
-
-	switch (del_action) {
-		case DEL_INST:
-			dmuci_delete_by_section(((struct dm_data *)data)->config_section, NULL, NULL);
-			dmuci_delete_by_section(((struct dm_data *)data)->dmmap_section, NULL, NULL);
-			break;
-		case DEL_ALL:
-			uci_foreach_sections_safe("qos", "shaper", stmp, s) {
-				struct uci_section *dmmap_section = NULL;
+	dmuci_delete_by_section(((struct dm_data *)data)->config_section, NULL, NULL);
+	dmuci_delete_by_section(((struct dm_data *)data)->dmmap_section, NULL, NULL);
 
-				get_dmmap_section_of_config_section("dmmap_qos", "shaper", section_name(s), &dmmap_section);
-				dmuci_delete_by_section(dmmap_section, NULL, NULL);
-
-				dmuci_delete_by_section(s, NULL, NULL);
-			}
-			break;
-	}
 	return 0;
 }
 
@@ -1330,22 +1272,25 @@ static int set_QoSClassification_Policer(char *refparam, struct dmctx *ctx, void
 {
 	struct uci_section *dmmap_s = NULL;
 	char *linker = NULL;
+	char link_inst[8] = {0};
+	int inst = 0;
 
 	switch (action)	{
 		case VALUECHECK:
-			if (bbfdm_validate_string(ctx, value, -1, 64, NULL, NULL))
+			if (bbfdm_validate_string(ctx, value, -1, 256, NULL, NULL))
+				return FAULT_9007;
+
+			if (match(value, "Device.QoS.Policer.", 0, NULL) == false)
 				return FAULT_9007;
 			break;
 		case VALUESET:
-			if (DM_LSTRNCMP(value, "Device.QoS.Policer.", 19) == 0 && strlen(value) >= 20) {
-				char link_inst[8] = {0};
+			sscanf(value, "Device.QoS.Policer.%d.", &inst);
+			snprintf(link_inst, sizeof(link_inst), "%d", inst);
 
-				snprintf(link_inst, sizeof(link_inst), "%c", value[19]);
+			get_dmmap_section_of_config_section_eq("dmmap_qos", "policer", "policer_instance", link_inst, &dmmap_s);
+			dmuci_get_value_by_section_string(dmmap_s, "section_name", &linker);
+			dmuci_set_value_by_section(((struct dm_data *)data)->config_section, "policer", linker);
 
-				get_dmmap_section_of_config_section_eq("dmmap_qos", "policer", "policer_instance", link_inst, &dmmap_s);
-				dmuci_get_value_by_section_string(dmmap_s, "section_name", &linker);
-				dmuci_set_value_by_section(((struct dm_data *)data)->config_section, "policer", linker);
-			}
 			break;
 	}
 	return 0;