Index: uk/me/parabola/mkgmap/osmstyle/ConvertedWay.java
===================================================================
--- uk/me/parabola/mkgmap/osmstyle/ConvertedWay.java	(revision 3265)
+++ uk/me/parabola/mkgmap/osmstyle/ConvertedWay.java	(working copy)
@@ -83,7 +83,7 @@
 		return index;
 	}
 	
-	public GType getType(){
+	public GType getGType(){
 		return gt;
 	}
 
@@ -232,7 +232,7 @@
 	}
 	
 	public String toString(){
-		return getType() + " " + getWay().getId() + " " + getWay().toTagString();
+		return getGType() + " " + getWay().getId() + " " + getWay().toTagString();
 
 	}
 	
Index: uk/me/parabola/mkgmap/osmstyle/RoadMerger.java
===================================================================
--- uk/me/parabola/mkgmap/osmstyle/RoadMerger.java	(revision 3265)
+++ uk/me/parabola/mkgmap/osmstyle/RoadMerger.java	(working copy)
@@ -406,7 +406,7 @@
 		}
 
 		// check if certain fields in the GType objects are the same
-		if (isGTypeMergeable(road1.getType(), road2.getType()) == false) {
+		if (isGTypeMergeable(road1.getGType(), road2.getGType()) == false) {
 			return false;
 		}
 
Index: uk/me/parabola/mkgmap/osmstyle/StyledConverter.java
===================================================================
--- uk/me/parabola/mkgmap/osmstyle/StyledConverter.java	(revision 3265)
+++ uk/me/parabola/mkgmap/osmstyle/StyledConverter.java	(working copy)
@@ -20,6 +20,7 @@
 import java.util.ArrayList;
 
 import java.util.Arrays;
+import java.util.BitSet;
 import java.util.Collections;
 import java.util.HashMap;
 import java.util.HashSet;
@@ -215,6 +216,7 @@
 	private final static short makeCycleWayTagKey = TagDict.getInstance().xlate("mkgmap:make-cycle-way");
 	private long lastRoadId = 0; 
 	private int lineCacheId = 0;
+	private BitSet routingWarningWasPrinted = new BitSet();
 	public void convertWay(final Way way) {
 		if (way.getPoints().size() < 2 || way.getTagCount() == 0){
 			// no tags or no points => nothing to convert
@@ -260,8 +262,18 @@
 			// which have to be skipped by WrongAngleFixer
 			for (int i = lines.size()-1; i >= 0; --i){
 				ConvertedWay cw = lines.get(i); 
-				if (cw.getWay().getId() == way.getId())
+				if (cw.getWay().getId() == way.getId()){
 					cw.setOverlay(true);
+					int lineType = cw.getGType().getType();
+					if (GType.isProtectedRoutableLineType(lineType)){
+						if (!routingWarningWasPrinted.get(lineType)){
+							log.error("routable type", GType.formatType(cw.getGType().getType()),
+							"is used with a non-routable way which was also added as a routable way. This leads to routing errors.",
+							"Try --check-styles to check the style.");
+							routingWarningWasPrinted.set(lineType);
+						}
+					}
+				}
 				else 
 					break;
 			}
@@ -497,7 +509,7 @@
 		
 		for (ConvertedWay cw : lines){
 			if (cw.isValid())
-				addLine(cw.getWay(), cw.getType());
+				addLine(cw.getWay(), cw.getGType());
 		}
 		lines = null;
 		if (roadLog.isInfoEnabled()) {
@@ -1311,7 +1323,7 @@
 
 	private void addRoadWithoutLoops(ConvertedWay cw) {
 		Way way = cw.getWay();
-		GType gt = cw.getType();
+		GType gt = cw.getGType();
 		List<Integer> nodeIndices = new ArrayList<>();
 		List<Coord> points = way.getPoints();
 		Way trailingWay = null;
@@ -1453,7 +1465,7 @@
 		}
 
 		MapLine line = new MapLine();
-		elementSetup(line, cw.getType(), way);
+		elementSetup(line, cw.getGType(), way);
 		line.setPoints(points);
 		MapRoad road = new MapRoad(way.getId(), line);
 
@@ -1818,7 +1830,7 @@
 							}
 							if (typeNoConnection != -1 ){
 								log.info("road not connected to other roads, added as line with type", replType + ":", way.toBrowseURL());
-								addLine(way, cw.getType(), typeNoConnection);
+								addLine(way, cw.getGType(), typeNoConnection);
 							} else {
 								log.warn("road not connected to other roads, but replacement type is invalid. Dropped:", way.toBrowseURL());
 							}
Index: uk/me/parabola/mkgmap/osmstyle/TypeReader.java
===================================================================
--- uk/me/parabola/mkgmap/osmstyle/TypeReader.java	(revision 3265)
+++ uk/me/parabola/mkgmap/osmstyle/TypeReader.java	(working copy)
@@ -122,6 +122,22 @@
 						msg += typeOverlaidMsg;
 					System.out.println(msg);
 				}
+				if (kind == FeatureKind.POLYLINE && gt.getMinLevel() == 0 && gt.getMaxLevel() >= 0){ 
+					if (GType.isProtectedRoutableLineType(usedType)){
+						if (gt.isRoad() == false){
+							String msg = "Warning: routable type " + type  + " is used for non-routable line with level 0. This may break routing. Style file "+ ts.getFileName() + ", line " + ts.getLinenumber();
+							if (fromOverlays)
+								msg += typeOverlaidMsg;
+							System.out.println(msg);
+						}
+						else if (i > 0){
+							System.out.println("Warning: routable type " + type + " is used for non-routable line with level 0. " +
+									"This may break routing. Style file " + ts.getFileName() + ", line " + ts.getLinenumber() + 
+									typeOverlaidMsg +
+									" which is used for adding the non-routable copy of the way.");
+						}
+					}
+				}
 				if (kind == FeatureKind.POLYLINE && GType.isRoutableLineType(usedType)){
 						foundRoutableType = true;
 				}
Index: uk/me/parabola/mkgmap/reader/osm/GType.java
===================================================================
--- uk/me/parabola/mkgmap/reader/osm/GType.java	(revision 3265)
+++ uk/me/parabola/mkgmap/reader/osm/GType.java	(working copy)
@@ -217,12 +217,19 @@
 	/**
 	 * 
 	 * @param type the type value
-	 * @return true if the type is known as routable.
+	 * @return true if the type is can be used for routable lines
 	 */
 	public static boolean isRoutableLineType(int type){
-		//return type >= 0x01 && type <= 0x13 || type == 0x1a || type == 0x1b || type == 0x16;
 		return type >= 0x01 && type <= 0x3f;
 	}
+	/**
+	 * 
+	 * @param type the type value
+	 * @return true if the type is known as routable in Garmin maps.
+	 */
+	public static boolean isProtectedRoutableLineType(int type){
+		return type >= 0x01 && type <= 0x09;
+	}
 	
 	/**
 	 * Return a type value in the commonly used hex format 
