Index: /trunk/src/org/openstreetmap/josm/data/osm/DataSetMerger.java
===================================================================
--- /trunk/src/org/openstreetmap/josm/data/osm/DataSetMerger.java	(revision 14921)
+++ /trunk/src/org/openstreetmap/josm/data/osm/DataSetMerger.java	(revision 14922)
@@ -318,5 +318,5 @@
             //
         } else if (!target.isModified() && !source.isModified() && target.isVisible() != source.isVisible()
-                && target.getVersion() == source.getVersion())
+                && target.getVersion() == source.getVersion()) {
             // Same version, but different "visible" attribute and neither of them are modified.
             // It indicates a serious problem in datasets.
@@ -325,8 +325,12 @@
             throw new DataIntegrityProblemException(tr("Conflict in ''visible'' attribute for object of type {0} with id {1}",
                     target.getType(), target.getId()));
-        else if (target.isDeleted() && !source.isDeleted() && target.getVersion() == source.getVersion()) {
+        } else if (target.isDeleted() && !source.isDeleted() && target.getVersion() == source.getVersion()) {
             // same version, but target is deleted. Assume target takes precedence
             // otherwise too many conflicts when refreshing from the server
-            // but, if source has a referrer that is not in the target dataset there is a conflict
+            // but, if source is modified, there is a conflict
+            if (source.isModified()) {
+                addConflict(new Conflict<>(target, source, true));
+            }
+            // or, if source has a referrer that is not in the target dataset there is a conflict
             // If target dataset refers to the deleted primitive, conflict will be added in fixReferences method
             for (OsmPrimitive referrer: source.getReferrers()) {
Index: /trunk/test/unit/org/openstreetmap/josm/data/osm/DataSetMergerTest.java
===================================================================
--- /trunk/test/unit/org/openstreetmap/josm/data/osm/DataSetMergerTest.java	(revision 14921)
+++ /trunk/test/unit/org/openstreetmap/josm/data/osm/DataSetMergerTest.java	(revision 14922)
@@ -23,4 +23,5 @@
 import org.openstreetmap.josm.data.projection.Projections;
 import org.openstreetmap.josm.testutils.JOSMTestRules;
+import org.openstreetmap.josm.tools.date.DateUtils;
 
 import edu.umd.cs.findbugs.annotations.SuppressFBWarnings;
@@ -342,6 +343,5 @@
         n1.setOsmId(1, 1);
         n1.put("key1", "value1");
-        Date timestamp = new Date();
-        n1.setTimestamp(timestamp);
+        n1.setTimestamp(new Date());
         their.addPrimitive(n1);
 
@@ -974,4 +974,51 @@
     }
 
+    private void doTestTicket7481(DataSet source, DataSet target) {
+        // Local node A
+        Node nA = new Node(2848219691L, 1);
+        nA.setCoor(LatLon.ZERO);
+        nA.setTimestamp(DateUtils.fromString("2014-05-10T14:25:40Z"));
+        nA.setChangesetId(22251108);
+        nA.setUser(User.createOsmUser(385987, "yaho"));
+        nA.put("name", "Mionga");
+        nA.put("tourism", "hotel");
+
+        // Local node B, duplicated
+        Node nB = new Node(nA);
+
+        // Move and delete node A
+        nA.setCoor(new LatLon(0.1321894855, 6.64627402075));
+        nA.setDeleted(true);
+        my.addPrimitive(nA);
+
+        // Move and modify node B
+        nB.setCoor(new LatLon(0.1322066, 6.6462202));
+        nB.put("phone", "999");
+        nB.setModified(true);
+        their.addPrimitive(nB);
+
+        // Merge
+        DataSetMerger visitor = new DataSetMerger(source, target);
+        visitor.merge();
+
+        assertEquals(1, visitor.getConflicts().size());
+    }
+
+    /**
+     * Non-regression test 1 for <a href="https://josm.openstreetmap.de/ticket/7481">Bug #7481</a>.
+     */
+    @Test
+    public void testTicket07481ab() {
+        doTestTicket7481(my, their);
+    }
+
+    /**
+     * Non-regression test 2 for <a href="https://josm.openstreetmap.de/ticket/7481">Bug #7481</a>.
+     */
+    @Test
+    public void testTicket07481ba() {
+        doTestTicket7481(their, my);
+    }
+
     /**
      * Non-regression test for <a href="https://josm.openstreetmap.de/ticket/12599">Bug #12599</a>.
@@ -1014,5 +1061,4 @@
     }
 
-
     /**
      * Non-regression test for <a href="https://josm.openstreetmap.de/ticket/12616">Bug #12616</a>.
