Index: src/uk/me/parabola/mkgmap/osmstyle/StyledConverter.java
===================================================================
--- src/uk/me/parabola/mkgmap/osmstyle/StyledConverter.java	(revision 4127)
+++ src/uk/me/parabola/mkgmap/osmstyle/StyledConverter.java	(working copy)
@@ -299,9 +299,12 @@
 	 */
 	private final static short styleFilterTagKey = TagDict.getInstance().xlate("mkgmap:stylefilter");
 	private final static short makeCycleWayTagKey = TagDict.getInstance().xlate("mkgmap:make-cycle-way");
+	private static final int MAX_ROUTABLE_WAYS_FOR_ONE_OSM_WAY = 4;
 	private long lastRoadId = 0; 
 	private int lineCacheId = 0;
 	private BitSet routingWarningWasPrinted = new BitSet();
+	private int oldNumRoads = 0;
+	
 	public void convertWay(final Way way) {
 		if (way.getPoints().size() < 2 || way.getTagCount() == 0){
 			// no tags or no points => nothing to convert
@@ -309,7 +312,7 @@
 			return;
 		}
 		preConvertRules(way);
-
+		oldNumRoads = numRoads;
 		String styleFilterTag = way.getTag(styleFilterTagKey);
 		Rule rules;
 		if ("polyline".equals(styleFilterTag))
@@ -402,6 +405,10 @@
 		ConvertedWay cw = new ConvertedWay(lineIndex++, way, foundType);
 		cw.setReversed(wasReversed);
 		if (cw.isRoad()){
+			if (numRoads - oldNumRoads > MAX_ROUTABLE_WAYS_FOR_ONE_OSM_WAY) {
+				log.warn("max number of routable ways for one OSM way reached, ignoring ", cw, "reversed:",cw.isReversed());
+				return;
+			}
 			roads.add(cw);
 			numRoads++;
 			if (cw.isFerry() == false){
