diff --git a/src/js/DefaultRules.js b/src/js/DefaultRules.js
index ec840fb7a165ce2d0fc947fe46aabefb631c0b93..2585e787bd5ff9ccf035a5f45b5f91f00a415fc0 100644
--- a/src/js/DefaultRules.js
+++ b/src/js/DefaultRules.js
@@ -3088,29 +3088,45 @@ window.DefaultRules = (function() {
 	 */
 	function ProcessLabel(slave, rule) {
 		
+		//mass removal of old tags, variant from '*' mask.
 		if (rule.removeLabel !== null && rule.removeLabel !== '' && rule.removeLabel == '*') {
-			console.log(`${slave.slaveName}: rules remove triggered ('*').`);
+			//console.log(`${slave.slaveName}: rules remove triggered ('*').`);
 			slave.custom.label = slave.custom.label.replace(/(?:\[.+\])+/, "");
 			r += `All <br>${slave.slaveName}'s tags is removed.`;
 		}
 
+		//mass removal of old tags, variant from GUI swith.
 		console.log(rule.labelTagsClear);
 		if (rule.labelTagsClear === true) {
-			console.log(`${slave.slaveName}: rules remove triggered (labelTagsClean).`);
+			//console.log(`${slave.slaveName}: rules remove triggered (labelTagsClean).`);
 			slave.custom.label = slave.custom.label.replace(/(?:\[.+\])+/, "");
 			r += `All <br>${slave.slaveName}'s tags is removed.`;
 		}
 
-		if (rule.removeLabel !== null && rule.removeLabel !== '' && slave.custom.label.includes(`[${rule.removeLabel}]`)) {
-			console.log(`${slave.slaveName}: rule remove with |${rule.rule.removeLabel}| triggered.`);
-			slave.custom.label = slave.custom.label.replace(`[${rule.removeLabel}]`, "");
-			r += `<br>${slave.slaveName}'s tag [${rule.removeLabel}] is removed.`;
+		//removing tags selected for removal.
+		let tags = [], i;
+		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]}]`)) {
+				//console.log(`${slave.slaveName}: rule add with |${tags[i]}| triggered.`);
+				slave.custom.label = `${slave.custom.label}[${tags[i]}]`;
+				r += `<br>${slave.slaveName} has been tagged as ${tags[i]}`;
+			}
 		}
+		
+		//finally adding new tags.
+		tags = [];
+		if (rule.removeLabel != null && rule.removeLabel !== '')
+			tags = rule.label.split("|");
 
-		if (rule.label !== null && rule.label !== '' && !slave.custom.label.includes(`[${rule.label}]`)) {
-			console.log(`${slave.slaveName}: rule add with |${rule.label}| triggered.`);
-			slave.custom.label = `${slave.custom.label}[${rule.label}]`;
-			r += `<br>${slave.slaveName} has been tagged as ${rule.label}`;
+		for (i in tags) {
+			if (tags[i] !== null && tags[i] !== '' && slave.custom.label.includes(`[${tags[i]}]`)) {
+				//console.log(`${slave.slaveName}: rule remove with |${tags[i]}| triggered.`);
+				slave.custom.label = slave.custom.label.replace(`[${tags[i]}]`, "");
+				r += `<br>${slave.slaveName}'s tag [${tags[i]}] is removed.`;
+			}
 		}
 
 	}
diff --git a/src/js/rulesAssistant.js b/src/js/rulesAssistant.js
index 8a492943876c6815cd0672e1721c966b7e33d1a8..a6c1f53dec5cb3d90d0e6561bbaa0afeab7602cc 100644
--- a/src/js/rulesAssistant.js
+++ b/src/js/rulesAssistant.js
@@ -594,6 +594,13 @@ App.RA.ruleDeepAssign = function deepAssign(target, source) {
 				target[key] = {};
 			}
 			deepAssign(target[key], source[key]);
+		} else if (key == "label" || key == "removeLabel") {
+				console.log( key + " key found");
+				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 +615,6 @@ App.RA.ruleDeepAssign = function deepAssign(target, source) {
 			}
 		}
 	}
+	console.log(target);
 	return target;
 };
diff --git a/src/js/rulesAssistantOptions.js b/src/js/rulesAssistantOptions.js
index d2a1b2e1e22287748f0b654116ac974ba93cdf94..add70b98472f00374756fd60f75956f6af52b567 100644
--- a/src/js/rulesAssistantOptions.js
+++ b/src/js/rulesAssistantOptions.js
@@ -1554,7 +1554,7 @@ window.rulesAssistantOptions = (function() {
 
 	class ClearLabelSwitch extends BooleanSwitch {
 		constructor() {
-			super("Remove all previous labels", [false, true]);
+			super("Remove all tags (Gobal swith)", [false, true]);
 			this.setValue(current_rule.set.labelTagsClear);
 			this.onchange = (value) => current_rule.set.labelTagsClear = value;
 		}
@@ -4143,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;
 		}
@@ -4151,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;
 		}