Index: src/uk/me/parabola/mkgmap/reader/osm/MultiPolygonRelation.java
===================================================================
--- src/uk/me/parabola/mkgmap/reader/osm/MultiPolygonRelation.java	(revision 4922)
+++ src/uk/me/parabola/mkgmap/reader/osm/MultiPolygonRelation.java	(working copy)
@@ -96,8 +96,6 @@
 	
 	private boolean noRecalc;
 
-	private boolean renderingFailed;
-	
 	/**
 	 * Create an instance based on an existing relation. We need to do this
 	 * because the type of the relation is not known until after all its tags
@@ -626,8 +624,6 @@
 		}
 		for (List<JoinedWay> some : partitions) {
 			processPartition(new Partition(some));
-			if (renderingFailed)
-				break;
 		}
 
 		tagOuterWays();
@@ -720,8 +716,8 @@
 		if (partition.innerEqualsOuter)
 			return;
 		if (partition.outerPolygons.isEmpty()) {
-			renderingFailed = true;
-			log.error("Internal error: Failed to render " + this);
+			uk.me.parabola.imgfmt.app.Area fullArea = calcBounds(partition.polygons);
+			log.warn("Part of divided multipolygon has no outer area and is ignored", this, "in bbox", fullArea);
 			return;
 		}
 			
@@ -941,16 +937,14 @@
 			addTag(TKM_CACHE_AREA_SIZEKEY, mpAreaSizeStr);
 		}
 
-		if (!renderingFailed) {
-			for (Way w : mpPolygons.values()) {
-				String role = w.deleteTag(TKM_MP_ROLE); 
-				if (mpAreaSizeStr != null && ROLE_OUTER.equals(role)) {
-					w.addTag(TKM_CACHE_AREA_SIZEKEY, mpAreaSizeStr);
-				}
+		for (Way w : mpPolygons.values()) {
+			String role = w.deleteTag(TKM_MP_ROLE); 
+			if (mpAreaSizeStr != null && ROLE_OUTER.equals(role)) {
+				w.addTag(TKM_CACHE_AREA_SIZEKEY, mpAreaSizeStr);
 			}
-			// copy all polygons created by the multipolygon algorithm to the global way map
-			tileWayMap.putAll(mpPolygons);
 		}
+		// copy all polygons created by the multipolygon algorithm to the global way map
+		tileWayMap.putAll(mpPolygons);
 		if (cOfG == null && largestOuterPolygon != null) {
 			// use the center of the largest polygon as reference point
 			cOfG = largestOuterPolygon.getCofG();
@@ -1981,7 +1975,7 @@
 		if (mostComplex.getPoints().size() > 2000) {
 			uk.me.parabola.imgfmt.app.Area fullArea = calcBounds(partition);
 			uk.me.parabola.imgfmt.app.Area[] areas;
-			final int niceSplitShift = 11; 
+			final int niceSplitShift = 0; 
 			if (fullArea.getHeight() > fullArea.getWidth())
 				areas = fullArea.split(1, 2, niceSplitShift);
 			else 
