Index: /trunk/src/org/openstreetmap/josm/data/osm/DataSetMerger.java
===================================================================
--- /trunk/src/org/openstreetmap/josm/data/osm/DataSetMerger.java	(revision 19174)
+++ /trunk/src/org/openstreetmap/josm/data/osm/DataSetMerger.java	(revision 19175)
@@ -352,4 +352,5 @@
                 target.setModified(false);
             }
+            target.setReferrersDownloaded(target.isReferrersDownloaded() || source.isReferrersDownloaded());
         } else if (source.isDeleted() != target.isDeleted()) {
             // target is modified and deleted state differs.
Index: /trunk/test/unit/org/openstreetmap/josm/data/osm/DataSetMergerTest.java
===================================================================
--- /trunk/test/unit/org/openstreetmap/josm/data/osm/DataSetMergerTest.java	(revision 19174)
+++ /trunk/test/unit/org/openstreetmap/josm/data/osm/DataSetMergerTest.java	(revision 19175)
@@ -14,8 +14,12 @@
 import java.time.Instant;
 import java.util.Arrays;
+import java.util.function.BiConsumer;
+import java.util.stream.Stream;
 
 import org.junit.jupiter.api.AfterEach;
 import org.junit.jupiter.api.BeforeEach;
 import org.junit.jupiter.api.Test;
+import org.junit.jupiter.params.ParameterizedTest;
+import org.junit.jupiter.params.provider.MethodSource;
 import org.openstreetmap.josm.data.coor.LatLon;
 import org.openstreetmap.josm.data.projection.ProjectionRegistry;
@@ -1357,3 +1361,28 @@
     }
 
+    static Stream<BiConsumer<Node, Node>> testNonRegression23846() {
+        return Stream.of(
+                (firstNode, secondNode) -> firstNode.setModified(true),
+                (firstNode, secondNode) -> { /* No modifications */ }
+        );
+    }
+
+    @ParameterizedTest
+    @MethodSource
+    void testNonRegression23846(BiConsumer<Node, Node> nodeSetup) {
+        final Node firstNode = new Node(1234, 1);
+        final Node secondNode = new Node(1234, 1);
+        final DataSetMerger merge = new DataSetMerger(my, their);
+        firstNode.setCoor(LatLon.ZERO);
+        secondNode.setCoor(LatLon.ZERO);
+        nodeSetup.accept(firstNode, secondNode);
+        my.addPrimitive(firstNode);
+        their.addPrimitive(secondNode);
+        secondNode.setReferrersDownloaded(true);
+        assertFalse(firstNode.isReferrersDownloaded());
+        assertTrue(secondNode.isReferrersDownloaded());
+        merge.merge();
+        assertTrue(firstNode.isReferrersDownloaded());
+        assertTrue(secondNode.isReferrersDownloaded());
+    }
 }
