Index: src/org/openstreetmap/josm/actions/DownloadIncompleteAction.java
===================================================================
--- src/org/openstreetmap/josm/actions/DownloadIncompleteAction.java	(revision 223)
+++ src/org/openstreetmap/josm/actions/DownloadIncompleteAction.java	(revision 224)
@@ -48,5 +48,5 @@
 
 		@Override protected void finish() {
-			MergeVisitor merger = new MergeVisitor(Main.ds);
+			MergeVisitor merger = new MergeVisitor(Main.ds, reader.data);
 			for (OsmPrimitive osm : reader.data.allPrimitives())
 				osm.visit(merger);
Index: src/org/openstreetmap/josm/data/osm/visitor/MergeVisitor.java
===================================================================
--- src/org/openstreetmap/josm/data/osm/visitor/MergeVisitor.java	(revision 223)
+++ src/org/openstreetmap/josm/data/osm/visitor/MergeVisitor.java	(revision 224)
@@ -29,4 +29,5 @@
 
 	private final DataSet ds;
+	private final DataSet mergeds;
 
 	/**
@@ -43,6 +44,7 @@
 	private final Map<Segment, Segment> mergedSegments = new HashMap<Segment, Segment>();
 
-	public MergeVisitor(DataSet ds) {
+	public MergeVisitor(DataSet ds, DataSet mergeds) {
 		this.ds = ds;
+		this.mergeds = mergeds;
 	}
 
@@ -57,5 +59,5 @@
 		Node my = null;
 		for (Node n : ds.nodes) {
-			if (match(n, other)) {
+			if (match(n, other) && ((mergeds == null) || (!mergeds.nodes.contains(n)))) {
 				my = n;
 				break;
@@ -87,9 +89,10 @@
 		Segment my = null;
 		for (Segment ls : ds.segments) {
-			if (match(other, ls)) {
+			if (match(other, ls) && ((mergeds == null) || (!mergeds.segments.contains(ls)))) {
 				my = ls;
 				break;
 			}
 		}
+		
 		if (my == null)
 			ds.segments.add(other);
@@ -145,5 +148,5 @@
 		Way my = null;
 		for (Way w : ds.ways) {
-			if (match(other, w)) {
+			if (match(other, w) && ((mergeds == null) || (!mergeds.ways.contains(w)))) {
 				my = w;
 				break;
@@ -291,4 +294,5 @@
 		else
 			my.keys.putAll(other.keys);
+		
 		my.modified = true;
 	}
Index: src/org/openstreetmap/josm/gui/layer/OsmDataLayer.java
===================================================================
--- src/org/openstreetmap/josm/gui/layer/OsmDataLayer.java	(revision 223)
+++ src/org/openstreetmap/josm/gui/layer/OsmDataLayer.java	(revision 224)
@@ -157,5 +157,5 @@
 
 	@Override public void mergeFrom(final Layer from) {
-		final MergeVisitor visitor = new MergeVisitor(data);
+		final MergeVisitor visitor = new MergeVisitor(data,((OsmDataLayer)from).data);
 		for (final OsmPrimitive osm : ((OsmDataLayer)from).data.allPrimitives())
 			osm.visit(visitor);
Index: src/org/openstreetmap/josm/io/IncompleteDownloader.java
===================================================================
--- src/org/openstreetmap/josm/io/IncompleteDownloader.java	(revision 223)
+++ src/org/openstreetmap/josm/io/IncompleteDownloader.java	(revision 224)
@@ -44,5 +44,5 @@
 	 */
 	private final Collection<Way> toDownload;
-	private MergeVisitor merger = new MergeVisitor(data);
+	private MergeVisitor merger = new MergeVisitor(data, null);
 
 	public IncompleteDownloader(Collection<Way> toDownload) {
