Index: src/org/openstreetmap/josm/data/osm/Segment.java
===================================================================
--- src/org/openstreetmap/josm/data/osm/Segment.java	(revision 96)
+++ src/org/openstreetmap/josm/data/osm/Segment.java	(revision 97)
@@ -80,8 +80,9 @@
 
 	@Override public boolean realEqual(OsmPrimitive osm) {
-		return osm instanceof Segment ? 
-				super.realEqual(osm) && 
-				from.equals(((Segment)osm).from) && 
-				to.equals(((Segment)osm).to) : false;
+		if (!(osm instanceof Segment))
+			return super.realEqual(osm); 
+		if (incomplete)
+			return ((Segment)osm).incomplete;
+		return from.equals(((Segment)osm).from) && to.equals(((Segment)osm).to);
 	}
 
Index: src/org/openstreetmap/josm/data/osm/visitor/MergeVisitor.java
===================================================================
--- src/org/openstreetmap/josm/data/osm/visitor/MergeVisitor.java	(revision 96)
+++ src/org/openstreetmap/josm/data/osm/visitor/MergeVisitor.java	(revision 97)
@@ -82,4 +82,7 @@
 	 */
 	public void visit(Segment other) {
+		if (other.incomplete)
+			return; // won't merge in an incomplete line segment!
+		
 		if (mergeAfterId(mergedSegments, ds.segments, other))
 			return;
@@ -252,4 +255,7 @@
 	}
 
+	/**
+	 * @return <code>true</code>, if no merge is needed.
+	 */
 	private <P extends OsmPrimitive> boolean mergeAfterId(Map<P,P> merged, Collection<P> primitives, P other) {
 		for (P my : primitives) {
@@ -257,4 +263,6 @@
 				return true; // no merge needed.
 			if (my.id == other.id) {
+				if (my instanceof Segment && ((Segment)my).incomplete)
+					return false; // merge always over an incomplete
 				Date d1 = my.timestamp == null ? new Date(0) : my.timestamp;
 				Date d2 = other.timestamp == null ? new Date(0) : other.timestamp;
Index: src/org/openstreetmap/josm/io/OsmServerReader.java
===================================================================
--- src/org/openstreetmap/josm/io/OsmServerReader.java	(revision 96)
+++ src/org/openstreetmap/josm/io/OsmServerReader.java	(revision 97)
@@ -28,5 +28,5 @@
 	private final double lat2;
 	private final double lon2;
-	
+
 	/**
 	 * Construct the reader and store the information for attaching
@@ -51,6 +51,7 @@
 			Collection<Collection<GpsPoint>> data = new LinkedList<Collection<GpsPoint>>();
 			Collection<GpsPoint> list = new LinkedList<GpsPoint>();
-			
+
 			for (int i = 0;;++i) {
+				currentAction.setText("Downloading points "+(i*5000)+" to "+((i+1)*5000)+"...");
 				Reader r = getReader(url+i);
 				if (r == null)
@@ -70,5 +71,5 @@
 				activeConnection = null;
 			}
-	
+
 			data.add(list);
 			return data;
Index: src/org/openstreetmap/josm/test/MergeVisitorTest.java
===================================================================
--- src/org/openstreetmap/josm/test/MergeVisitorTest.java	(revision 96)
+++ src/org/openstreetmap/josm/test/MergeVisitorTest.java	(revision 97)
@@ -16,5 +16,5 @@
 public class MergeVisitorTest extends TestCase {
 
-	
+
 	private DataSet ds;
 	private Node dsNode;
@@ -27,5 +27,5 @@
 		v = new MergeVisitor(ds);
 		n = DataSetTestCaseHelper.createNode(null);
-    }
+	}
 
 
@@ -101,5 +101,5 @@
 		ds.segments.add(sold);
 		// have a conflicting segment point to the new node
-		Segment s = new Segment(n,n);
+		Segment s = new Segment(n,DataSetTestCaseHelper.createNode(null));
 		s.id = 23;
 		s.modified = true;
@@ -108,9 +108,9 @@
 		assertEquals(n.timestamp, dsNode.timestamp);
 		v.visit(s);
+		assertEquals(1, v.conflicts.size());
 		v.fixReferences();
 		assertSame(s.from, dsNode);
-		assertSame(s.to, dsNode);
 	}
-	
+
 	public void testNoConflictForSame() {
 		dsNode.id = 1;
@@ -136,5 +136,18 @@
 		assertEquals("segment should have been merged.", 1, ds.segments.size());
 	}
-	
+
+	/**
+	 * Incomplete segments should always loose.
+	 */
+	public void testImportIncomplete() throws Exception {
+		Segment s1 = DataSetTestCaseHelper.createSegment(ds, dsNode, dsNode);
+		s1.id = 1;
+		Segment s2 = new Segment(s1);
+		s1.incomplete = true;
+		v.visit(s2);
+		assertTrue(s1.realEqual(s2));
+	}
+
+
 	/**
 	 * Nodes beeing merged are equal but should be the same.
@@ -163,6 +176,6 @@
 		assertSame(ls1.from, ls2.from);
 	}
-	
-	
+
+
 	/**
 	 * Create that amount of nodes and add them to the dataset. The id will be 1,2,3,4...
