Index: src/uk/me/parabola/imgfmt/app/lbl/POIRecord.java
===================================================================
--- src/uk/me/parabola/imgfmt/app/lbl/POIRecord.java	(revision 4531)
+++ src/uk/me/parabola/imgfmt/app/lbl/POIRecord.java	(working copy)
@@ -18,7 +18,6 @@
 
 import java.util.List;
 
-import uk.me.parabola.imgfmt.Utils;
 import uk.me.parabola.imgfmt.app.Exit;
 import uk.me.parabola.imgfmt.app.ImgFileWriter;
 import uk.me.parabola.imgfmt.app.Label;
@@ -106,7 +105,7 @@
 	}
 
 	void write(ImgFileWriter writer, int POIGlobalFlags, int realofs,
-		   long numCities, long numZips, long numHighways, long numExitFacilities) {
+		   int cityPtrSize, int zipPtrSize, int highwayPtrSize, int exitFacilityPtrSize) {
 		assert offset == realofs : "offset = " + offset + " realofs = " + realofs;
 		int ptr = poiName.getOffset();
 		if (POIGlobalFlags != getPOIFlags())
@@ -130,10 +129,10 @@
 			writer.put3u(streetName.getOffset());
 
 		if (city != null)
-			writer.putNu(Utils.numberToPointerSize((int)numCities), city.getIndex());
+			writer.putNu(cityPtrSize, city.getIndex());
 
 		if (zip != null)
-			writer.putNu(Utils.numberToPointerSize((int)numZips), zip.getIndex());
+			writer.putNu(zipPtrSize, zip.getIndex());
 
 		if (complexPhoneNumber != null)
 		{
@@ -163,11 +162,11 @@
 			writer.put3u(val);
 
 			int highwayIndex = exit.getHighway().getIndex();
-			writer.putNu(Utils.numberToPointerSize((int)numHighways), highwayIndex);
+			writer.putNu(highwayPtrSize, highwayIndex);
 
 			if(ef != null) {
 				int exitFacilityIndex = ef.getIndex();
-				writer.putNu(Utils.numberToPointerSize((int)numExitFacilities), exitFacilityIndex);
+				writer.putNu(exitFacilityPtrSize, exitFacilityIndex);
 			}
 		}
 	}
@@ -179,9 +178,9 @@
 		if (simpleStreetNumber.isUsed() || streetNumberName != null)
 			b |= HAS_STREET_NUM;
 		if (city != null)
-		        b |= HAS_CITY;
+			b |= HAS_CITY;
 		if (zip != null)
-		        b |= HAS_ZIP;
+			b |= HAS_ZIP;
 		if (simplePhoneNumber.isUsed() || complexPhoneNumber != null)
 			b |= HAS_PHONE;
 		if (exit != null)
@@ -214,7 +213,7 @@
 		}
 
 		flag |= 0x80; // gpsmapedit asserts for this bit set
-	    
+
 		return flag;
 	}
 
@@ -223,14 +222,14 @@
 	 *
 	 * @return Number of bytes needed by this entry
 	 */
-	int calcOffset(int ofs, int POIGlobalFlags, long numCities, long numZips, long numHighways, long numExitFacilities) {
+	int calcOffset(int ofs, int POIGlobalFlags, int cityPtrSize, int zipPtrSize, int highwayPtrSize, int exitFacilityPtrSize) {
 		offset = ofs;
 		int size = 3;
 		if (exit != null) {
 			size += 3;
-			size += Utils.numberToPointerSize((int)numHighways);
+			size += highwayPtrSize;
 			if(!exit.getFacilities().isEmpty())
-				size += Utils.numberToPointerSize((int)numExitFacilities);
+				size += exitFacilityPtrSize;
 		}
 		if (POIGlobalFlags != getPOIFlags())
 			size += 1;
@@ -244,18 +243,10 @@
 			size += 3;			
 		if (streetName != null)
 			size += 3;	
-		if (city != null) 
-		{
-			/*
-			  depending on how many cities are in the LBL block we have
-			  to write one to three bytes 
-			*/
-			size += Utils.numberToPointerSize((int)numCities);
-		}
-		if (zip != null) {
-			// depending on how many zips are in the LBL block we have to write one to three bytes
-			size += Utils.numberToPointerSize((int)numZips);
-		}
+		if (city != null)
+			size += cityPtrSize;
+		if (zip != null)
+			size += zipPtrSize;
 		return size;
 	}
 
Index: src/uk/me/parabola/imgfmt/app/lbl/PlacesFile.java
===================================================================
--- src/uk/me/parabola/imgfmt/app/lbl/PlacesFile.java	(revision 4531)
+++ src/uk/me/parabola/imgfmt/app/lbl/PlacesFile.java	(working copy)
@@ -24,6 +24,7 @@
 import java.util.Random;
 import java.util.TreeMap;
 
+import uk.me.parabola.imgfmt.Utils;
 import uk.me.parabola.imgfmt.app.Exit;
 import uk.me.parabola.imgfmt.app.ImgFileWriter;
 import uk.me.parabola.imgfmt.app.Label;
@@ -104,9 +105,13 @@
 
 		int poistart = writer.position();
 		int poiglobalflags = placeHeader.getPOIGlobalFlags();
+		final int cityPtrSize = Utils.numberToPointerSize(cityList.size());
+		final int zipPtrSize = Utils.numberToPointerSize(postalCodes.size());
+		final int highwayPtrSize = Utils.numberToPointerSize(highways.size());
+		final int exitFacilityPtrSize = Utils.numberToPointerSize(exitFacilities.size());
 		for (POIRecord p : pois)
 			p.write(writer, poiglobalflags,
-				writer.position() - poistart, cityList.size(), postalCodes.size(), highways.size(), exitFacilities.size());
+				writer.position() - poistart, cityPtrSize, zipPtrSize, highwayPtrSize, exitFacilityPtrSize);
 		placeHeader.endPOI(writer.position());
 
 		int numPoiIndexEntries = 0;
@@ -287,8 +292,12 @@
 		placeHeader.setPOIGlobalFlags(poiFlags);
 
 		int ofs = 0;
+		final int cityPtrSize = Utils.numberToPointerSize(cityList.size());
+		final int zipPtrSize = Utils.numberToPointerSize(postalCodes.size());
+		final int highwayPtrSize = Utils.numberToPointerSize(highways.size());
+		final int exitFacilityPtrSize = Utils.numberToPointerSize(exitFacilities.size());
 		for (POIRecord p : pois)
-			ofs += p.calcOffset(ofs, poiFlags, cityList.size(), postalCodes.size(), highways.size(), exitFacilities.size());
+			ofs += p.calcOffset(ofs, poiFlags, cityPtrSize, zipPtrSize, highwayPtrSize, exitFacilityPtrSize);
 	}
 
 	/**
Index: src/uk/me/parabola/imgfmt/app/mdr/Mdr7.java
===================================================================
--- src/uk/me/parabola/imgfmt/app/mdr/Mdr7.java	(revision 4531)
+++ src/uk/me/parabola/imgfmt/app/mdr/Mdr7.java	(working copy)
@@ -363,7 +363,7 @@
 
 
 	public List<Mdr7Record> getStreets() {
-		return Collections.unmodifiableList((ArrayList<Mdr7Record>) allStreets);
+		return Collections.unmodifiableList(allStreets);
 	}
 	
 	public List<Mdr7Record> getSortedStreets() {
Index: src/uk/me/parabola/imgfmt/app/net/RouteArc.java
===================================================================
--- src/uk/me/parabola/imgfmt/app/net/RouteArc.java	(revision 4531)
+++ src/uk/me/parabola/imgfmt/app/net/RouteArc.java	(working copy)
@@ -317,7 +317,7 @@
 
 		// We write this big endian
 		if(log.isDebugEnabled())
-			log.debug("val is", Integer.toHexString((int)val));
+			log.debug("val is", Integer.toHexString(val));
 		writer.put1u(val >> 8);
 		writer.put1u(val & 0xff);
 	}
Index: src/uk/me/parabola/mkgmap/combiners/MdrBuilder.java
===================================================================
--- src/uk/me/parabola/mkgmap/combiners/MdrBuilder.java	(revision 4531)
+++ src/uk/me/parabola/mkgmap/combiners/MdrBuilder.java	(working copy)
@@ -183,7 +183,7 @@
 		for (Country c : countries) {
 			if (c != null) {
 				Mdr14Record record = mdrFile.addCountry(c);
-				countryMap.put((int) c.getIndex(), record);
+				countryMap.put(c.getIndex(), record);
 			}
 		}
 		return countryMap;
@@ -195,9 +195,9 @@
 		List<Region> regions = mr.getRegions();
 		for (Region region : regions) {
 			if (region != null) {
-				Mdr14Record mdr14 = maps.countries.get((int) region.getCountry().getIndex());
+				Mdr14Record mdr14 = maps.countries.get(region.getCountry().getIndex());
 				Mdr13Record record = mdrFile.addRegion(region, mdr14);
-				regionMap.put((int) region.getIndex(), record);
+				regionMap.put(region.getIndex(), record);
 			}
 		}
 		return regionMap;
Index: src/uk/me/parabola/mkgmap/osmstyle/PrefixSuffixFilter.java
===================================================================
--- src/uk/me/parabola/mkgmap/osmstyle/PrefixSuffixFilter.java	(revision 4531)
+++ src/uk/me/parabola/mkgmap/osmstyle/PrefixSuffixFilter.java	(working copy)
@@ -167,7 +167,6 @@
 			}
 			countryLanguageMap .put(iso, langs);
 			languages.addAll(langs);
-		default:
 			break;
 		}
 	}
Index: src/uk/me/parabola/mkgmap/reader/osm/boundary/BoundaryMerger.java
===================================================================
--- src/uk/me/parabola/mkgmap/reader/osm/boundary/BoundaryMerger.java	(revision 4531)
+++ src/uk/me/parabola/mkgmap/reader/osm/boundary/BoundaryMerger.java	(working copy)
@@ -42,8 +42,6 @@
 		try (FileChannel in = (new FileInputStream(file)).getChannel();
 				FileChannel out = (new FileOutputStream(new File(to, filename))).getChannel()) {
 			in.transferTo(0, file.length(), out);
-			in.close();
-			out.close();
 		} catch (IOException exp) {
 			System.err.println(exp);
 		}
Index: src/uk/me/parabola/mkgmap/reader/osm/boundary/BoundarySaver.java
===================================================================
--- src/uk/me/parabola/mkgmap/reader/osm/boundary/BoundarySaver.java	(revision 4531)
+++ src/uk/me/parabola/mkgmap/reader/osm/boundary/BoundarySaver.java	(working copy)
@@ -378,6 +378,7 @@
 	 * @param area the area (can be non-singular)
 	 * @throws IOException
 	 */
+	@SuppressWarnings("fallthrough")
 	public static void writeArea(DataOutputStream dos, Shape area) throws IOException{
 		double[] res = new double[6];
 		double[] lastRes = new double[2];
