diff --git a/src/js/DefaultRules.js b/src/js/DefaultRules.js
index f2e2f0a69220c282fe8bcb7d8abd3667218d74f7..46d0eeb7ddee0d9cd08acdd763a09989c005ea06 100644
--- a/src/js/DefaultRules.js
+++ b/src/js/DefaultRules.js
@@ -2902,15 +2902,43 @@ window.DefaultRules = (function() {
 	 * @param {App.RA.RuleSetters} rule
 	 */
 	function ProcessLabel(slave, rule) {
-		if (rule.label !== null && rule.label !== '' && !slave.custom.label.includes(`[${rule.label}]`)) {
-			slave.custom.label = `${slave.custom.label}[${rule.label}]`;
-			r += `<br>${slave.slaveName} has been tagged as ${rule.label}`;
+		
+		//mass removal of old tags, variant from '*' mask.
+		if (rule.removeLabel !== null && rule.removeLabel !== '' && rule.removeLabel == '*') {
+			slave.custom.label = slave.custom.label.replace(/(?:\[.+\])+/, "");
+			r += `<br>All ${slave.slaveName}'s tags is removed.`;
 		}
 
-		if (rule.removeLabel !== null && rule.removeLabel !== '' && slave.custom.label.includes(`[${rule.removeLabel}]`)) {
-			slave.custom.label = slave.custom.label.replace(`[${rule.removeLabel}]`, "");
-			r += `<br>${slave.slaveName}'s tag [${rule.removeLabel}] is removed.`;
+		//mass removal of old tags, variant from GUI swith.
+		if (rule.labelTagsClear === true) {
+			slave.custom.label = slave.custom.label.replace(/(?:\[.+\])+/, "");
+			r += `<br>All ${slave.slaveName}'s tags is removed.`;
 		}
+
+		//removing tags selected for removal.
+		let tags = [], i;
+		if (rule.removeLabel != null && rule.removeLabel !== '')
+			tags = rule.removeLabel.split("|");
+		
+		for (i in tags) {
+			if (tags[i] !== null && tags[i] !== '' && slave.custom.label.includes(`[${tags[i]}]`)) {
+				slave.custom.label = slave.custom.label.replace(`[${tags[i]}]`, "");
+				r += `<br>${slave.slaveName}'s tag [${tags[i]}] is removed.`;
+			}
+		}
+		
+		//finally adding new tags.
+		tags = [];
+		if (rule.label != null && rule.label !== '')
+			tags = rule.label.split("|");
+
+		for (i in tags) {
+			if (tags[i] != null && tags[i] !== '' && !slave.custom.label.includes(`[${tags[i]}]`)) {
+				slave.custom.label = `${slave.custom.label}[${tags[i]}]`;
+				r += `<br>${slave.slaveName} has been tagged as ${tags[i]}`;
+			}
+		}
+				
 	}
 
 	return DefaultRules;
diff --git a/src/js/rulesAssistant.js b/src/js/rulesAssistant.js
index 8a492943876c6815cd0672e1721c966b7e33d1a8..abab9a1e041d4230795d43013b000c6654eafe8e 100644
--- a/src/js/rulesAssistant.js
+++ b/src/js/rulesAssistant.js
@@ -594,6 +594,12 @@ App.RA.ruleDeepAssign = function deepAssign(target, source) {
 				target[key] = {};
 			}
 			deepAssign(target[key], source[key]);
+		} else if (key == "label" || key == "removeLabel") {
+				if (source[key] != null)
+					if (target[key] != null)
+						target[key] += "|" + source[key];
+					else	
+						target[key] = source[key];
 		} else {
 			// A rule overrides any preceding ones if,
 			// * there are no preceding ones,
@@ -608,5 +614,6 @@ App.RA.ruleDeepAssign = function deepAssign(target, source) {
 			}
 		}
 	}
+	
 	return target;
 };
diff --git a/src/js/rulesAssistantOptions.js b/src/js/rulesAssistantOptions.js
index 9074ecd66f5ab06917395cffaa99bcc8e6d15bc0..add70b98472f00374756fd60f75956f6af52b567 100644
--- a/src/js/rulesAssistantOptions.js
+++ b/src/js/rulesAssistantOptions.js
@@ -1545,8 +1545,18 @@ window.rulesAssistantOptions = (function() {
 	class OtherTab extends Tab {
 		constructor(tabButtons) {
 			super("other", "Other", tabButtons);
+			this.appendChild(new ClearLabelSwitch());
 			this.appendChild(new LabelList());
 			this.appendChild(new LabelRemoveList());
+			
+		}
+	}
+
+	class ClearLabelSwitch extends BooleanSwitch {
+		constructor() {
+			super("Remove all tags (Gobal swith)", [false, true]);
+			this.setValue(current_rule.set.labelTagsClear);
+			this.onchange = (value) => current_rule.set.labelTagsClear = value;
 		}
 	}
 
@@ -4133,7 +4143,7 @@ window.rulesAssistantOptions = (function() {
 
 	class LabelList extends StringEditor {
 		constructor() {
-			super("Custom label", [], true, true);
+			super("Custom label(s) (separate by '|')", [], true, true);
 			this.setValue(current_rule.set.label);
 			this.onchange = (value) => current_rule.set.label = value;
 		}
@@ -4141,7 +4151,7 @@ window.rulesAssistantOptions = (function() {
 
 	class LabelRemoveList extends StringEditor {
 		constructor() {
-			super("Remove custom label", [], true, true);
+			super("Remove custom label(s) (separate by '|')", [], true, true);
 			this.setValue(current_rule.set.removeLabel);
 			this.onchange = (value) => current_rule.set.removeLabel = value;
 		}