Index: resources/help/en/options
===================================================================
--- resources/help/en/options	(revision 2585)
+++ resources/help/en/options	(working copy)
@@ -275,8 +275,6 @@
 	Try to merge lines. This helps the simplify filter to straighten out
 	longer chunks at lower zoom levels. Decreases file size more.
 	Increases paint speed at low zoom levels.
-	At the moment this option causes routing errors. Use only if routing 
-	is not needed in your map.
 	
 --min-size-polygon=NUM
   Removes all polygons smaller than NUM from the map.
Index: src/uk/me/parabola/mkgmap/build/MapBuilder.java
===================================================================
--- src/uk/me/parabola/mkgmap/build/MapBuilder.java	(revision 2585)
+++ src/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 && res == 24);
 		}
 
 		LayerFilterChain filters = new LayerFilterChain(config);
@@ -1133,6 +1135,12 @@
 
 					pl.setRoadDef(roaddef);
 					roaddef.addPolylineRef(pl);
+					List<Coord> points = line.getPoints();
+					if (div.getResolution() == 24
+							&& (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 (div.getResolution() == 24 && GType.isRoutableLineType(line.getType())){
 						Coord start = line.getPoints().get(0);
Index: src/uk/me/parabola/mkgmap/filters/DouglasPeuckerFilter.java
===================================================================
--- src/uk/me/parabola/mkgmap/filters/DouglasPeuckerFilter.java	(revision 2585)
+++ src/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: src/uk/me/parabola/mkgmap/filters/LineMergeFilter.java
===================================================================
--- src/uk/me/parabola/mkgmap/filters/LineMergeFilter.java	(revision 2585)
+++ src/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: src/uk/me/parabola/mkgmap/filters/LineSplitterFilter.java
===================================================================
--- src/uk/me/parabola/mkgmap/filters/LineSplitterFilter.java	(revision 2585)
+++ src/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;
 
 /**
@@ -38,8 +39,10 @@
 	// Not sure of the value, probably 255.  Say 250 here.
 	public static final int MAX_POINTS_IN_LINE = 250;
 	public static final int MIN_POINTS_IN_LINE = 50;
+	private int resolution;
 
 	public void init(FilterConfig config) {
+		this.resolution = config.getResolution();
 	}
 
 	/**
@@ -64,6 +67,10 @@
 		}
 
 		log.debug("line too long, splitting");
+		if(line.isRoad() && resolution == 24) {
+			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();
 
