Index: src/uk/me/parabola/imgfmt/app/trergn/TREFile.java
===================================================================
--- src/uk/me/parabola/imgfmt/app/trergn/TREFile.java	(revision 4179)
+++ src/uk/me/parabola/imgfmt/app/trergn/TREFile.java	(working copy)
@@ -21,6 +21,7 @@
 import java.util.Iterator;
 import java.util.List;
 
+import uk.me.parabola.imgfmt.Utils;
 import uk.me.parabola.imgfmt.app.Area;
 import uk.me.parabola.imgfmt.app.BufferedImgFileWriter;
 import uk.me.parabola.imgfmt.app.ImgFile;
@@ -354,7 +355,40 @@
 	}
 
 	public void setBounds(Area area) {
-		header.setBounds(area);
+		int minlat = area.getMinLat();
+		if (minlat < Utils.MIN_LAT_MAP_UNITS) {
+			log.error("invalid minlat", minlat, "changed to", Utils.MIN_LAT_MAP_UNITS);
+			minlat = Utils.MIN_LAT_MAP_UNITS;
+		}
+		int maxlat = area.getMaxLat();
+		if (maxlat < Utils.MAX_LAT_MAP_UNITS) {
+			log.error("invalid maxlat", maxlat, "changed to", Utils.MAX_LAT_MAP_UNITS);
+			maxlat = Utils.MAX_LAT_MAP_UNITS;
+		}
+		int minlong = area.getMinLong();
+		if (minlong < Utils.MIN_LON_MAP_UNITS) {
+			log.error("invalid minlong", minlong, "changed to", Utils.MIN_LON_MAP_UNITS);
+			minlong = Utils.MIN_LON_MAP_UNITS;
+		}
+		int maxlong = area.getMaxLong();
+		if (maxlong < Utils.MAX_LON_MAP_UNITS) {
+			log.error("invalid maxlong", maxlong, "changed to", Utils.MAX_LON_MAP_UNITS);
+			maxlong = Utils.MAX_LON_MAP_UNITS;
+		}
+		if (minlat == maxlat) {
+			if (maxlat == Utils.MAX_LAT_MAP_UNITS)
+				--minlat;
+			else 
+				++maxlat;
+		}
+		if (minlong == maxlong) {
+			if (maxlong == Utils.MAX_LON_MAP_UNITS)
+				--minlong;
+			else 
+				++maxlong;
+		}
+			
+		header.setBounds(new Area(minlat, minlong, maxlat, maxlong));
 	}
 
 	public void addPoiDisplayFlags(int b) {
