diff --git a/src/js/DefaultRules.js b/src/js/DefaultRules.js
index cf7161a16602f3e0b2af5a75d23cafc232cb9e33..c3547e8a06287d5539dca82ff52508f2405036cf 100644
--- a/src/js/DefaultRules.js
+++ b/src/js/DefaultRules.js
@@ -16,9 +16,10 @@ window.DefaultRules = (function() {
 		if (slave.useRulesAssistant === 0) { return r; } // exempted
 		r = "";
 		({he, him, his} = getPronouns(slave));
-		let slaveReadOnly = createReadonlyProxy(slave);
-		let rule = runWithReadonlyProxy(()=>MergeRules(slaveReadOnly));
-		if (Object.keys(rule).length === 0) { return r; } // no rules apply
+		const slaveReadOnly = createReadonlyProxy(slave);
+		const {rule, ruleIds} = runWithReadonlyProxy(()=>ProcessSlaveRules(slaveReadOnly));
+		if (ruleIds.length === 0) { return r; } // no rules apply
+		slave.currentRules = ruleIds;
 
 		AssignJobToSlave(slave, rule);
 		if (slave.fuckdoll === 0) {
@@ -80,12 +81,17 @@ window.DefaultRules = (function() {
 	 * @param {App.Entity.SlaveState} slave
 	 * @returns {map}
 	 */
-	function MergeRules(slave) {
+	function ProcessSlaveRules(slave) {
 		// merge all rules applying on a slave into one big rule
 		/** @type {App.RA.Rule[]} */
 		const rules = V.defaultRules.filter((x) => ruleAppliesP(x.condition, slave));
-		slave.currentRules = rules.map((x) => x.ID);
-		return mergeRules(rules.map((x) => ProcessAssignments(slave, Object.assign({}, x.set))));
+		const ruleIds = [], assignments = [];
+		for(const rule of rules)
+		{
+			ruleIds.push(rule.ID);
+			assignments.push(ProcessAssignments(slave, Object.assign({}, rule.set)));
+		}
+		return {ruleIds, rule: mergeRules(assignments)};
 	}
 
 	/**