Index: uk/me/parabola/mkgmap/build/MapBuilder.java
===================================================================
--- uk/me/parabola/mkgmap/build/MapBuilder.java	(revision 2582)
+++ uk/me/parabola/mkgmap/build/MapBuilder.java	(working copy)
@@ -27,6 +27,7 @@
 
 import uk.me.parabola.imgfmt.ExitException;
 import uk.me.parabola.imgfmt.app.Coord;
+import uk.me.parabola.imgfmt.app.CoordNode;
 import uk.me.parabola.imgfmt.app.Exit;
 import uk.me.parabola.imgfmt.app.Label;
 import uk.me.parabola.imgfmt.app.lbl.City;
@@ -969,9 +970,10 @@
 
 		//TODO: Maybe this is the wrong place to do merging.
 		// Maybe more efficient if merging before creating subdivisions.
-		if (mergeLines && res < 22) {
+		
+		if (mergeLines) {
 			LineMergeFilter merger = new LineMergeFilter();
-			lines = merger.merge(lines);
+			lines = merger.merge(lines, doRoads);
 		}
 
 		LayerFilterChain filters = new LayerFilterChain(config);
@@ -1133,8 +1135,12 @@
 
 					pl.setRoadDef(roaddef);
 					roaddef.addPolylineRef(pl);
+					List<Coord> points = line.getPoints();
+					if (points.get(0) instanceof CoordNode == false || points.get(points.size()-1) instanceof CoordNode == false){
+						log.error("possible routing problem: road end-points not both coordNodes: " + roaddef);
+					}
 				} else if (routingErrorMsgPrinted == false){
-					if (line.getMaxResolution() == 24 && GType.isRoutableLineType(line.getType())){
+					if (div.getResolution() == 24 && GType.isRoutableLineType(line.getType())){
 						Coord start = line.getPoints().get(0);
 						log.error("Non-routable way with routable type " + GType.formatType(line.getType()) + " starting at " +
 					start.toOSMURL() + 
Index: uk/me/parabola/mkgmap/filters/DouglasPeuckerFilter.java
===================================================================
--- uk/me/parabola/mkgmap/filters/DouglasPeuckerFilter.java	(revision 2582)
+++ uk/me/parabola/mkgmap/filters/DouglasPeuckerFilter.java	(working copy)
@@ -154,7 +154,7 @@
 			// All points in tolerance, delete all of them.
 
 			// Remove the endpoint if it is the same as the start point
-			if (ab == 0)
+			if (ab == 0 && points.get(endIndex).preserved() == false)
 				points.remove(endIndex);
 
 			// Remove the points in between
Index: uk/me/parabola/mkgmap/filters/LineMergeFilter.java
===================================================================
--- uk/me/parabola/mkgmap/filters/LineMergeFilter.java	(revision 2582)
+++ uk/me/parabola/mkgmap/filters/LineMergeFilter.java	(working copy)
@@ -53,9 +53,15 @@
 		endPoints.add(points.get(points.size()-1), line);
 	}
 
-	public List<MapLine> merge(List<MapLine> lines) {
+	public List<MapLine> merge(List<MapLine> lines, boolean skipRoads) {
 		linesMerged = new ArrayList<MapLine>(lines.size());	//better use LinkedList??
 		for (MapLine line : lines) {
+			
+			if (skipRoads && line.isRoad()){
+				linesMerged.add(line);
+				continue;
+			}
+			
 			boolean isMerged = false;
 			List<Coord> points = line.getPoints();
 			Coord start = points.get(0); 
Index: uk/me/parabola/mkgmap/filters/LineSplitterFilter.java
===================================================================
--- uk/me/parabola/mkgmap/filters/LineSplitterFilter.java	(revision 2582)
+++ uk/me/parabola/mkgmap/filters/LineSplitterFilter.java	(working copy)
@@ -23,6 +23,7 @@
 import uk.me.parabola.log.Logger;
 import uk.me.parabola.mkgmap.general.MapElement;
 import uk.me.parabola.mkgmap.general.MapLine;
+import uk.me.parabola.mkgmap.general.MapRoad;
 import uk.me.parabola.mkgmap.general.MapShape;
 
 /**
@@ -64,6 +65,10 @@
 		}
 
 		log.debug("line too long, splitting");
+		if(line.isRoad()) {
+			MapRoad road = ((MapRoad)line);
+			log.error("Way " + road.getRoadDef() + " has more than "+ MAX_POINTS_IN_LINE + " points and is about to be split (routing will be broken)");
+		} 
 
 		MapLine l = line.copy();
 
