Index: src/uk/me/parabola/mkgmap/combiners/MdrBuilder.java
===================================================================
--- src/uk/me/parabola/mkgmap/combiners/MdrBuilder.java	(revision 1351)
+++ src/uk/me/parabola/mkgmap/combiners/MdrBuilder.java	(working copy)
@@ -168,6 +168,7 @@
 	 */
 	private void addPoints(MapReader mr, Map<Integer, Mdr5Record> cityMap) {
 		List<Point> list = mr.pointsForLevel(0);
+		int isCity;
 		for (Point p : list) {
 			Label label = p.getLabel();
 			if (p.getNumber() > 256) {
@@ -185,7 +186,7 @@
 					city.setLblOffset(label.getOffset());
 					city.setName(label.getText());
 				}
-
+				isCity = 1;
 			} else {
 				// This is not a city, but we have information about which city
 				// it is in.  If so then add the mdr5 record number of the city.
@@ -193,10 +194,11 @@
 				City c = poi.getCity();
 				if (c != null)
 					city = cityMap.get((c.getSubdivNumber()<<8) + (c.getPointIndex() & 0xff));
+				isCity = 0;
 			}
 
 			if (label != null && label.getText().trim().length() > 0)
-				mdrFile.addPoint(p, city);
+				mdrFile.addPoint(p, city, isCity);
 		}
 	}
 
Index: src/uk/me/parabola/imgfmt/app/mdr/MDRFile.java
===================================================================
--- src/uk/me/parabola/imgfmt/app/mdr/MDRFile.java	(revision 1351)
+++ src/uk/me/parabola/imgfmt/app/mdr/MDRFile.java	(working copy)
@@ -111,7 +111,7 @@
 		}
 	}
 
-	public void addPoint(Point point, Mdr5Record city) {
+	public void addPoint(Point point, Mdr5Record city, int isCity) {
 		assert currentMap > 0;
 
 		int fullType = point.getType();
@@ -124,6 +124,7 @@
 
 		Mdr11Record poi = mdr11.addPoi(currentMap, point, name, strOff);
 		poi.setCity(city);
+		poi.setIsCity(isCity);
 
 		mdr10.addPoiType(fullType, poi);
 
Index: src/uk/me/parabola/imgfmt/app/mdr/Mdr11.java
===================================================================
--- src/uk/me/parabola/imgfmt/app/mdr/Mdr11.java	(revision 1351)
+++ src/uk/me/parabola/imgfmt/app/mdr/Mdr11.java	(working copy)
@@ -58,8 +58,10 @@
 			writer.put((byte) poi.getPointIndex());
 			writer.putChar((char) poi.getSubdiv());
 			writer.put3(poi.getLblOffset());
-
-			putCityIndex(writer, poi.getCityIndex(), true);
+			if (poi.getIsCity()>0)
+				putRegionIndex(writer, poi.getRegionIndex());
+			else
+				putCityIndex(writer, poi.getCityIndex(), true);
 			putStringOffset(writer, poi.getStrOffset());
 		}
 	}
Index: src/uk/me/parabola/imgfmt/app/mdr/MdrMapSection.java
===================================================================
--- src/uk/me/parabola/imgfmt/app/mdr/MdrMapSection.java	(revision 1351)
+++ src/uk/me/parabola/imgfmt/app/mdr/MdrMapSection.java	(working copy)
@@ -60,8 +60,13 @@
 	public abstract int getPointerSize();
 
 	protected void putCityIndex(ImgFileWriter writer, int cityIndex, boolean isNew) {
-		int flag = (isNew && cityIndex > 0)? getSizes().getCityFlag(): 0;
-		putN(writer, getSizes().getCitySize(), cityIndex | flag);
+		//int flag = (isNew && cityIndex > 0)? getSizes().getCityFlag(): 0;
+		//putN(writer, getSizes().getCitySize(), cityIndex | flag);
+		putN(writer, 2, cityIndex | 0x8000);
+	}
+
+	protected void putRegionIndex(ImgFileWriter writer, int region) {
+		putN(writer, 2, region);
 	}
 
 	protected void putPoiIndex(ImgFileWriter writer, int poiIndex, boolean isNew) {
Index: src/uk/me/parabola/imgfmt/app/mdr/Mdr11Record.java
===================================================================
--- src/uk/me/parabola/imgfmt/app/mdr/Mdr11Record.java	(revision 1351)
+++ src/uk/me/parabola/imgfmt/app/mdr/Mdr11Record.java	(working copy)
@@ -25,6 +25,15 @@
 	private int recordNumber;
 	private String name;
 	private Mdr5Record city;
+	private int isCity;
+
+	public int getIsCity() {
+		return isCity;
+	}
+
+	public void setIsCity(int isCity) {
+		this.isCity = isCity;
+	}
 
 	public int compareTo(Mdr11Record o) {
 		return name.compareTo(o.name);
@@ -58,6 +67,10 @@
 		return city == null ? 0 : city.getGlobalCityIndex();
 	}
 
+	public int getRegionIndex() {
+		return city == null ? 0 : city.getRegion();
+	}
+
 	public int getStrOffset() {
 		return strOffset;
 	}
@@ -84,6 +97,10 @@
 		this.name = name;
 	}
 
+	public Mdr5Record getCity() {
+		return city;
+	}
+
 	public void setCity(Mdr5Record city) {
 		this.city = city;
 	}
