Index: src/uk/me/parabola/imgfmt/app/mdr/MDRFile.java
===================================================================
--- src/uk/me/parabola/imgfmt/app/mdr/MDRFile.java	(revision 4835)
+++ src/uk/me/parabola/imgfmt/app/mdr/MDRFile.java	(working copy)
@@ -54,6 +54,7 @@
 	private final Mdr13 mdr13;
 	private final Mdr14 mdr14;
 	private final Mdr15 mdr15;
+	private final Mdr16 mdr16;
 	private final Mdr17 mdr17;
 	private final Mdr18 mdr18;
 	private final Mdr19 mdr19;
@@ -114,6 +115,7 @@
 		mdr13 = new Mdr13(config);
 		mdr14 = new Mdr14(config);
 		mdr15 = new Mdr15(config);
+		mdr16 = new Mdr16(config);
 		mdr17 = new Mdr17(config);
 		mdr18 = new Mdr18(config);
 		mdr19 = new Mdr19(config);
@@ -132,7 +134,7 @@
 				null,
 				mdr1, null, null, mdr4, mdr5, mdr6,
 				mdr7, mdr8, mdr9, mdr10, mdr11, mdr12,
-				mdr13, mdr14, mdr15, null, mdr17, mdr18, mdr19,
+				mdr13, mdr14, mdr15, mdr16, mdr17, mdr18, mdr19,
 				mdr20, mdr21, mdr22, mdr23, mdr24, mdr25,
 				mdr26, mdr27, mdr28, mdr29,
 		};
@@ -378,6 +380,7 @@
 		writeSection(writer, 13, mdr13);
 		writeSection(writer, 14, mdr14);
 		writeSection(writer, 15, mdr15);
+		writeSection(writer, 16, mdr16);
 
 		writeSection(writer, 23, mdr23);
 		writeSection(writer, 24, mdr24);
Index: src/uk/me/parabola/imgfmt/app/mdr/MDRHeader.java
===================================================================
--- src/uk/me/parabola/imgfmt/app/mdr/MDRHeader.java	(revision 4835)
+++ src/uk/me/parabola/imgfmt/app/mdr/MDRHeader.java	(working copy)
@@ -76,7 +76,7 @@
 		sections[13].writeSectionInfo(writer, true, true);
 		sections[14].writeSectionInfo(writer, true, true);
 		sections[15].writeSectionInfo(writer);
-		writer.put1u(0);
+		writer.put1u(1); // compressed
 
 		sections[16].writeSectionInfo(writer, true, true);
 		sections[17].writeSectionInfo(writer, false, true);
Index: src/uk/me/parabola/imgfmt/app/mdr/Mdr15.java
===================================================================
--- src/uk/me/parabola/imgfmt/app/mdr/Mdr15.java	(revision 4835)
+++ src/uk/me/parabola/imgfmt/app/mdr/Mdr15.java	(working copy)
@@ -55,10 +55,34 @@
 			tempFile.deleteOnExit();
 
 			stringFile = new BufferedOutputStream(new FileOutputStream(tempFile), 64 * 1024);
-
+			byte[] fake15 = { 0x70, 0x27, (byte) 0x97, (byte) 0xc1, 0x1b, (byte) 0x90, 0x45, (byte) 0x9c, 
+					(byte) 0x9d, 0x38, (byte) 0xee, 0x27, (byte) 0xa8, (byte) 0xd8, 0x5e, (byte) 0xe0
+					, 0x26 , 0x5a , 0x5e , (byte) 0xe0 , 0x27 , 0x11 , 0x4b , (byte) 0x97
+					,0x25 ,(byte) 0xb2 ,0x77 ,0x26 ,(byte) 0xc3 ,0x65 ,0x2c ,(byte) 0xcc
+					};
+			
+			stringFile.write(fake15);
+			nextOffset = fake15.length;
 			// reserve the string at offset 0 to be the empty string.
-			stringFile.write(0);
-			nextOffset = 1;
+//			stringFile.write(0);
+//			nextOffset = 1;
+			/* 
+			 * offsets into this are 1,11,16,20,24,27,36,47,58,63,...
+0051233f | 000000 | 70 27 97 c1 1b 90 45 9c | p'Á.E
+00512347 | 000008 | 9d 38 ee 27 a8 d8 5e e0 | 8î'¨Ø^à
+0051234f | 000010 | 26 5a 5e e0 27 11 4b 97 | &Z^à'.K
+00512357 | 000018 | 25 b2 77 26 c3 65 2c cc | %²w&Ãe,Ì
+0051235f | 000020 | f0 4c b7 b8 26 c3 65 2c | ðL·¸&Ãe,
+00512367 | 000028 | cc f0 4e 19 1b 85 ee 26 | ÌðN..î&
+0051236f | 000030 | c3 65 2c cc f0 59 35 2f | Ãe,ÌðY5/
+00512377 | 000038 | 0b dc 26 f5 7e bb 80 26 | .Ü&õ~»&
+0051237f | 000040 | d5 25 70 27 64 5c a5 b8 | Õ%p'd\¥¸
+00512387 | 000048 | 27 6c ee 2f 3e 8a e0 2c | 'lî/>à,
+0051238f | 000050 | 8c 6b 2f 70 3d a9 72 e0 | k/p=©rà
+00512397 | 000058 | 3e c8 d5 85 ee 3e c8 d5 | >ÈÕî>ÈÕ
+0051239f | 000060 | 86 64 c6 f5 54 b8 16 f6 | dÆõT¸.ö
+			 
+			 */
 
 		} catch (IOException e) {
 			throw new ExitException("Could not create temporary file");
@@ -66,27 +90,28 @@
 	}
 
 	public int createString(String str) {
-		Integer offset = strings.get(str);
-		if (offset != null)
-			return offset;
-
-		int off;
-		try {
-			off = nextOffset;
-
-			byte[] bytes = str.getBytes(charset);
-			stringFile.write(bytes);
-			stringFile.write(0);
-
-			// Increase offset for the length of the string and the null byte
-			nextOffset += bytes.length + 1;
-		} catch (IOException e) {
-			// Can't convert, return empty string instead.
-			off = 0;
-		}
-
-		strings.put(str, off);
-		return off;
+		return 1;
+//		Integer offset = strings.get(str);
+//		if (offset != null)
+//			return offset;
+//
+//		int off;
+//		try {
+//			off = nextOffset;
+//
+//			byte[] bytes = str.getBytes(charset);
+//			stringFile.write(bytes);
+//			stringFile.write(0);
+//
+//			// Increase offset for the length of the string and the null byte
+//			nextOffset += bytes.length + 1;
+//		} catch (IOException e) {
+//			// Can't convert, return empty string instead.
+//			off = 0;
+//		}
+//
+//		strings.put(str, off);
+//		return off;
 	}
 
 	/**
Index: src/uk/me/parabola/imgfmt/app/mdr/Mdr16.java
===================================================================
--- src/uk/me/parabola/imgfmt/app/mdr/Mdr16.java	(nonexistent)
+++ src/uk/me/parabola/imgfmt/app/mdr/Mdr16.java	(working copy)
@@ -0,0 +1,96 @@
+package uk.me.parabola.imgfmt.app.mdr;
+
+import java.util.Arrays;
+import java.util.BitSet;
+
+import uk.me.parabola.imgfmt.app.BitReader;
+import uk.me.parabola.imgfmt.app.ImgFileWriter;
+
+public class Mdr16 extends MdrSection implements HasHeaderFlags {
+	byte[] table = {0x4a, 0x03,0x15,0x14,0x0f,0x08,(byte) 0x85,0x00
+	,0x00 ,0x00 ,0x14 ,0x00 ,0x06 ,0x00 ,0x00 ,0x13
+	,0x06 ,0x18 ,0x00 ,0x00 ,0x12 ,0x0f ,0x30 ,0x00
+	,0x00 ,0x11 ,0x15 ,0x50 ,0x00 ,0x00 ,0x10 ,0x19
+	,(byte) 0x80 ,0x00 ,0x00 ,0x0f ,0x1c ,(byte) 0xc0 ,0x00 ,0x00
+	,0x0e ,0x1e ,0x00 ,0x02 ,0x00 ,0x0d ,0x23 ,0x00
+	,0x03 ,0x00 ,0x0c ,0x25 ,0x00 ,0x06 ,0x00 ,0x0b 
+	,0x28 ,0x00 ,0x0c ,0x00 ,0x0a ,0x2b ,0x00 ,0x10 
+	,0x00 ,0x09 ,0x2c ,0x00 ,0x30 ,0x00 ,0x08 ,0x30 
+	,0x00 ,(byte) 0xc0 ,0x00 ,0x07 ,0x39 ,0x00 ,0x40 ,0x01  
+	,0x06 ,0x3d ,0x00 ,0x0c ,0x18 ,0x0d ,0x1a ,0x0e  
+	,0x1c ,0x0e ,0x1c ,0x0e ,0x0b ,0x43 ,0x0b ,0x53  
+	,0x0b ,0x44 ,0x0b ,0x54 ,0x0b ,0x4d ,0x0b ,0x56  
+	,0x0b ,0x4a ,0x0b ,0x4b ,0x0b ,0x4c ,0x09 ,0x00  
+	,0x09 ,0x00 ,0x09 ,0x20 ,0x09 ,0x20 ,0x09 ,0x45  
+	,0x09 ,0x45 ,0x09 ,0x4e ,0x09 ,0x4e ,0x09 ,0x4f  
+	,0x09 ,0x4f ,0x09 ,0x49 ,0x09 ,0x49 ,0x09 ,0x52  
+	,0x09 ,0x52 ,0x07 ,0x41 ,0x07 ,0x41 ,0x07 ,0x41  
+	,0x07 ,0x41 ,0x03 ,0x25 ,0x3a ,0x3b ,(byte) 0x8f ,(byte) 0xb8  
+	,0x3f ,0x60 ,(byte) 0x84 ,(byte) 0x8e ,(byte) 0x92 ,(byte) 0xc4 ,(byte) 0xd8 ,(byte) 0xda  
+	,(byte) 0xdb ,0x5f ,0x7b ,(byte) 0x93 ,(byte) 0xc9 ,(byte) 0xd0 ,(byte) 0xd6 ,0x2b  
+	,(byte) 0x96 ,(byte) 0xc1 ,(byte) 0xdc ,0x04 ,0x21 ,(byte) 0x9e ,(byte) 0xc6 ,(byte) 0xc8  
+	,0x51 ,(byte) 0x8a ,0x27 ,(byte) 0xcb ,0x2f ,0x26 ,0x1f ,0x57  
+	,0x58 ,0x05 ,0x59 ,0x22 ,0x06 ,0x2a ,0x46 ,0x2c  
+	,0x28 ,0x29 ,0x35 ,0x36 ,0x2d ,0x37 ,0x33 ,0x38  
+	,0x39 ,0x30 ,0x34 ,0x48 ,0x31 ,0x32 ,0x2e ,0x47  
+	,0x5a ,0x55 ,0x50 ,0x42
+	};
+	
+	
+	/*
+	000002b6 | 000000 | 4a 03 15 14 0f 08 85 00 | record 0 (len: 212, 0xd4)
+	000002be | 000008 | 00 00 14 00 06 00 00 13 | 
+	000002c6 | 000010 | 06 18 00 00 12 0f 30 00 | 
+	000002ce | 000018 | 00 11 15 50 00 00 10 19 | 
+	000002d6 | 000020 | 80 00 00 0f 1c c0 00 00 | 
+	000002de | 000028 | 0e 1e 00 02 00 0d 23 00 | 
+	000002e6 | 000030 | 03 00 0c 25 00 06 00 0b | 
+	000002ee | 000038 | 28 00 0c 00 0a 2b 00 10 | 
+	000002f6 | 000040 | 00 09 2c 00 30 00 08 30 | 
+	000002fe | 000048 | 00 c0 00 07 39 00 40 01 | 
+	00000306 | 000050 | 06 3d 00 0c 18 0d 1a 0e | 
+	0000030e | 000058 | 1c 0e 1c 0e 0b 43 0b 53 | 
+	00000316 | 000060 | 0b 44 0b 54 0b 4d 0b 56 | 
+	0000031e | 000068 | 0b 4a 0b 4b 0b 4c 09 00 | 
+	00000326 | 000070 | 09 00 09 20 09 20 09 45 | 
+	0000032e | 000078 | 09 45 09 4e 09 4e 09 4f | 
+	00000336 | 000080 | 09 4f 09 49 09 49 09 52 | 
+	0000033e | 000088 | 09 52 07 41 07 41 07 41 | 
+	00000346 | 000090 | 07 41 03 25 3a 3b 8f b8 | 
+	0000034e | 000098 | 3f 60 84 8e 92 c4 d8 da | 
+	00000356 | 0000a0 | db 5f 7b 93 c9 d0 d6 2b | 
+	0000035e | 0000a8 | 96 c1 dc 04 21 9e c6 c8 | 
+	00000366 | 0000b0 | 51 8a 27 cb 2f 26 1f 57 | 
+	0000036e | 0000b8 | 58 05 59 22 06 2a 46 2c | 
+	00000376 | 0000c0 | 28 29 35 36 2d 37 33 38 | 
+	0000037e | 0000c8 | 39 30 34 48 31 32 2e 47 | 
+	00000386 | 0000d0 | 5a 55 50 42             | 
+*/	
+	public Mdr16(MdrConfig config) {
+		setConfig(config);
+		byte[] bled = {0x25, (byte) 0xb2, 0x77};  
+		String s = new String(bled);
+		// decoding should return BLED or BLED\0
+	}
+
+	@Override
+	public void writeSectData(ImgFileWriter writer) {
+		writer.put(table);
+	}
+	
+	@Override
+	public int getItemSize() {
+		return table.length;
+	}
+
+	@Override
+	protected int numberOfItems() {
+		return 1;
+	}
+
+	@Override
+	public int getExtraValue() {
+		return 0;
+	}
+
+}
