Index: /src/org/openstreetmap/josm/data/osm/visitor/MergeVisitor.java
===================================================================
--- /src/org/openstreetmap/josm/data/osm/visitor/MergeVisitor.java	(revision 225)
+++ /src/org/openstreetmap/josm/data/osm/visitor/MergeVisitor.java	(revision 226)
@@ -250,4 +250,6 @@
 		if (ls1.id == ls2.id && ls1.id != 0)
 			return true;
+		//if (ls1.id != 0 && ls2.id != 0)
+		//	return false;
 		if (ls1.incomplete || ls2.incomplete)
 			return false;
@@ -288,5 +290,5 @@
 		if (other.keys == null)
 			return;
-		if (my.keySet().containsAll(other.keys.entrySet()))
+		if (my.keySet().containsAll(other.keys.keySet()))
 			return;
 		if (my.keys == null)
Index: /test/org/openstreetmap/josm/data/osm/visitor/MergeVisitorTest.java
===================================================================
--- /test/org/openstreetmap/josm/data/osm/visitor/MergeVisitorTest.java	(revision 225)
+++ /test/org/openstreetmap/josm/data/osm/visitor/MergeVisitorTest.java	(revision 226)
@@ -350,3 +350,13 @@
 		assertEquals(23, ds.segments.iterator().next().id);
 	}
+	
+	public void testDoNotMergeEqualObjectsWithDifferentNonZeroId() throws Exception {
+		DataSet ds = new DataSet();
+		Segment s1 = createSegment(ds, false, false, 23);
+		Segment s2 = new Segment(s1);
+		s2.id = 42;
+		MergeVisitor v = new MergeVisitor(ds);
+		v.visit(s2);
+		assertEquals(2, ds.segments.size());
+	}
 }
