diff --git a/src/js/rulesAssistantOptions.js b/src/js/rulesAssistantOptions.js
index 61fbc7a9ad2987c34b10b9604b9d764c73b666a8..3e03234e13f6d93c107430ada628b1c4cca68e38 100644
--- a/src/js/rulesAssistantOptions.js
+++ b/src/js/rulesAssistantOptions.js
@@ -808,6 +808,16 @@ App.RA.options = (function() {
 			const v = this.parse(this.numEditor.value);
 			return v === null ? null : App.RA.makeTarget(this.opSelector.value, v);
 		}
+
+		dataEqual(left, right) {
+			// when comparing a plain number to a target, assume equal conditions
+			const xor = (a, b) => (a) ? !(b) : !!(b);
+			if (xor(_.isNumber(left), _.isNumber(right))) {
+				left = _.isNil(left.val) ? left : left.val;
+				right = _.isNil(right.val) ? right : right.val;
+			}
+			return _.isEqual(left, right);
+		}
 	}
 
 	class NumericRangeEditor extends EditorWithShortcuts {
@@ -966,6 +976,16 @@ App.RA.options = (function() {
 			const v = isNaN(n) ? this.numEditor.value : Math.floor(n);                         // return numEditor.value as number if !NaN (should result in realValue being of number)
 			return v === null || v === "" ? null : { cond: this.opSelector.value, val: v };
 		}
+
+		dataEqual(left, right) {
+			// when comparing a plain number to a target, assume equal conditions
+			const xor = (a, b) => (a) ? !(b) : !!(b);
+			if (xor(_.isNumber(left), _.isNumber(right))) {
+				left = _.isNil(left.val) ? left : left.val;
+				right = _.isNil(right.val) ? right : right.val;
+			}
+			return _.isEqual(left, right);
+		}
 	}
 
 	// a way to organize lists with too many elements in subsections