Index: src/uk/me/parabola/imgfmt/app/mdr/Mdr11.java
===================================================================
--- src/uk/me/parabola/imgfmt/app/mdr/Mdr11.java	(revision 4817)
+++ src/uk/me/parabola/imgfmt/app/mdr/Mdr11.java	(working copy)
@@ -19,6 +19,8 @@
 import java.util.Map;
 
 import uk.me.parabola.imgfmt.app.ImgFileWriter;
+import uk.me.parabola.imgfmt.app.srt.DoubleSortKey;
+import uk.me.parabola.imgfmt.app.srt.IntegerSortKey;
 import uk.me.parabola.imgfmt.app.srt.Sort;
 import uk.me.parabola.imgfmt.app.srt.Sort.SrtCollator;
 import uk.me.parabola.imgfmt.app.srt.SortKey;
@@ -66,7 +68,13 @@
 			
 			@Override
 			protected SortKey<Mdr11Record> makeKey(Mdr11Record r, Sort sort, Map<String, byte[]> cache) {
-				return sort.createSortKey(r, r.getName(), r.getMapIndex(), cache);
+				SortKey<Mdr11Record> key1 = sort.createSortKey(r, r.getName(), r.getMapIndex(), cache);
+				SortKey<Mdr11Record> key2;
+				if (r.isCity())
+					key2 = new IntegerSortKey<>(null, r.getRegionIndex(), 0);
+				else
+					key2 = new IntegerSortKey<>(null, r.getCityIndex(), 0);
+				return new DoubleSortKey<>(key1, key2);
 			}
 		};
 		sorter.sort(pois);
@@ -121,8 +129,10 @@
 			mdr11flags |= (citySize-2) << 2;
 
 		if (isForDevice()) {
-			if (!getConfig().getSort().isMulti())
-				mdr11flags |= 0x80; // mdr17 sub section present (not with unicode)
+			if (!getConfig().getSort().isMulti()) {
+				// mdr17 sub section present (not with unicode)
+				mdr11flags |= 0x80;  // without roads this might be 0x40
+			}
 		}
 		else 
 			mdr11flags |= 0x2;
Index: src/uk/me/parabola/imgfmt/app/mdr/Mdr19.java
===================================================================
--- src/uk/me/parabola/imgfmt/app/mdr/Mdr19.java	(revision 4817)
+++ src/uk/me/parabola/imgfmt/app/mdr/Mdr19.java	(working copy)
@@ -53,12 +53,15 @@
 		String lastName = null;
 		int lastType = -1;
 		int record = 1;
+		int lastKey2 = -1;
 		for (Mdr11Record p : pois) {
 			int index = p.getRecordNumber();
 			String name = p.getName();
-			if (!name.equals(lastName)) {
+			int key2 = p.isCity() ? p.getRegionIndex() : p.getCityIndex();
+			if (!name.equals(lastName) || key2 != lastKey2) {
 				index |= flag;
 				lastName = name;
+				lastKey2 = key2;
 			}
 			writer.putNu(n, index);
 
Index: src/uk/me/parabola/imgfmt/app/mdr/Mdr20.java
===================================================================
--- src/uk/me/parabola/imgfmt/app/mdr/Mdr20.java	(revision 4817)
+++ src/uk/me/parabola/imgfmt/app/mdr/Mdr20.java	(working copy)
@@ -56,7 +56,7 @@
 		});
 
 		Collator collator = getConfig().getSort().getCollator();
-		collator.setStrength(Collator.SECONDARY);
+		collator.setStrength(Collator.TERTIARY);
 		
 		Mdr5Record lastCity = null;
 		Mdr7Record lastStreet = null;
Index: src/uk/me/parabola/imgfmt/app/mdr/Mdr2x.java
===================================================================
--- src/uk/me/parabola/imgfmt/app/mdr/Mdr2x.java	(revision 4817)
+++ src/uk/me/parabola/imgfmt/app/mdr/Mdr2x.java	(working copy)
@@ -37,7 +37,7 @@
 	public void writeSectData(ImgFileWriter writer) {
 		Mdr7Record prev = null;
 		Collator collator = getConfig().getSort().getCollator();
-		collator.setStrength(Collator.SECONDARY);
+		collator.setStrength(Collator.TERTIARY);
 
 		int size = getSizes().getStreetSizeFlagged();
 		int magic = getExtraValue();
Index: src/uk/me/parabola/imgfmt/app/mdr/Mdr7.java
===================================================================
--- src/uk/me/parabola/imgfmt/app/mdr/Mdr7.java	(revision 4817)
+++ src/uk/me/parabola/imgfmt/app/mdr/Mdr7.java	(working copy)
@@ -218,7 +218,7 @@
 		String lastPartial = null;
 		List<Mdr7Record> samePartial = new ArrayList<>();
 		Collator collator = sort.getCollator();
-		collator.setStrength(Collator.SECONDARY);
+		collator.setStrength(Collator.TERTIARY);
 		for (int i = 0; i < sorted.size(); i++) {
 			Mdr7Record r = sorted.get(i);
 			String partial = r.getPartialName();
@@ -284,7 +284,7 @@
 		boolean hasStrings = hasFlag(MDR7_HAS_STRING);
 		boolean hasNameOffset = hasFlag(MDR7_HAS_NAME_OFFSET);
 		Collator collator = sort.getCollator();
-		collator.setStrength(Collator.SECONDARY); 
+		collator.setStrength(Collator.TERTIARY); 
 		Mdr7Record last = null;
 		for (Mdr7Record s : streets) {
 			addIndexPointer(s.getMapIndex(), s.getIndex());
