Index: src/uk/me/parabola/imgfmt/app/trergn/Subdivision.java
===================================================================
--- src/uk/me/parabola/imgfmt/app/trergn/Subdivision.java	(revision 4881)
+++ src/uk/me/parabola/imgfmt/app/trergn/Subdivision.java	(working copy)
@@ -160,15 +160,15 @@
 		endRgnPointer = data.getEndRgnOffset();
 
 		int elem = data.getFlags();
-		if ((elem & 0x10) != 0)
+		if ((elem & 0x1) != 0)
 			setHasPoints(true);
-		if ((elem & 0x20) != 0)
+		if ((elem & 0x2) != 0)
 			setHasIndPoints(true);
-		if ((elem & 0x40) != 0)
+		if ((elem & 0x4) != 0)
 			setHasPolylines(true);
-		if ((elem & 0x80) != 0)
+		if ((elem & 0x8) != 0)
 			setHasPolygons(true);
-		if ((elem & 0x1) != 0) // from top bit in height 
+		if ((elem & 0x10) != 0) // from top bit in height 
 			setHasRoadRefs(true);
 	}	
 
Index: src/uk/me/parabola/imgfmt/app/trergn/TREFileReader.java
===================================================================
--- src/uk/me/parabola/imgfmt/app/trergn/TREFileReader.java	(revision 4881)
+++ src/uk/me/parabola/imgfmt/app/trergn/TREFileReader.java	(working copy)
@@ -98,7 +98,7 @@
 		reader.position(start);
 
 		int subdivNum = 1;
-		int lastRgnOffset = reader.get3u();
+		int lastRgnOffset = reader.get4();
 		for (int count = 0; count < levelDivs.length && reader.position() < end; count++) {
 
 			Subdivision[] divs = levelDivs[count];
@@ -107,7 +107,7 @@
 				break;
 
 			for (int i = 0; i < divs.length; i++) {
-				int flags = reader.get1u();
+				int flags = (lastRgnOffset >> 28) & 0xf;
 				int lon = reader.get3s();
 				int lat = reader.get3s();
 				int width = reader.get2u() & 0x7fff;
@@ -114,7 +114,7 @@
 				int height = reader.get2u();
 				int extFlags = flags; 
 				if (reader.getGMPOffset() > 0 && (height & 0x8000) != 0) {
-					extFlags |= 0x1;
+					extFlags |= 0x10;
 					height &= 0x7fff;
 				}
 
@@ -121,11 +121,11 @@
 				if (count < levelDivs.length-1)
 					reader.get2u();
 
-				int endRgnOffset = reader.get3u();
+				int endRgnOffset = reader.get4();
 
 				SubdivData subdivData = new SubdivData(extFlags,
 						lat, lon, width, height,
-						lastRgnOffset, endRgnOffset);
+						lastRgnOffset & 0xfffffff, endRgnOffset & 0xfffffff);
 
 				Subdivision subdiv = Subdivision.readSubdivision(mapLevels[count], subdivData);
 				subdiv.setNumber(subdivNum++);
