Index: src/uk/me/parabola/mkgmap/reader/osm/boundary/BoundaryCoverageUtil.java
===================================================================
--- src/uk/me/parabola/mkgmap/reader/osm/boundary/BoundaryCoverageUtil.java	(revision 2252)
+++ src/uk/me/parabola/mkgmap/reader/osm/boundary/BoundaryCoverageUtil.java	(working copy)
@@ -16,9 +16,7 @@
 import java.io.File;
 import java.util.ArrayList;
 import java.util.Collections;
-import java.util.Hashtable;
 import java.util.List;
-import java.util.Map;
 import java.util.concurrent.BlockingQueue;
 import java.util.concurrent.ExecutionException;
 import java.util.concurrent.ExecutorCompletionService;
@@ -49,11 +47,11 @@
 				.areaToShapes(covered);
 		Collections.reverse(coveredPolys);
 		int i = 0;
-		for (List<Coord> emptyPart : coveredPolys) {
-			Way w = new Way(0, emptyPart);
+		for (List<Coord> coveredPart : coveredPolys) {
+			Way w = new Way(0, coveredPart);
 			String attr = w.clockwise() ? "o" : "i";
 			GpxCreator.createGpx(gpxBasename + "/" + i + "_" + attr,
-					emptyPart);
+					coveredPart);
 			i++;
 		}
 	}
Index: src/uk/me/parabola/mkgmap/reader/osm/boundary/BoundaryQuadTree.java
===================================================================
--- src/uk/me/parabola/mkgmap/reader/osm/boundary/BoundaryQuadTree.java	(revision 2252)
+++ src/uk/me/parabola/mkgmap/reader/osm/boundary/BoundaryQuadTree.java	(working copy)
@@ -551,7 +551,7 @@
 					
 					if (a.isEmpty())
 						continue;
-					Path2D.Float path = new Path2D.Float(a);
+					Path2D.Double path = new Path2D.Double(a);
 					a = new Area(path);
 					if (a.isEmpty())
 						continue;
@@ -805,9 +805,11 @@
 						// empty intersection: nothing to do
 						continue;
 					}
+					Path2D.Float path = new Path2D.Float(toAddxCurr);
+					Area testArea = new Area(path);
+					if (testArea.isEmpty())
+						continue;  // intersection would not be written to *.bnd file
 
-					// test if toAdd contains usable tag(s)
-					String chkMsg = currElem.checkAddTags(toAdd, bounds);
 					
 					Area toAddMinusCurr = new Area(toAdd.area);
 					toAddMinusCurr.subtract(currElem.area);
@@ -821,26 +823,25 @@
 						}
 					}
 
+					// test if toAdd contains usable tag(s)
+					String chkMsg = currElem.checkAddTags(toAdd, bounds);
+					// warning: intersection of areas with equal levels   
+					if (chkMsg != null){
+						if (DEBUG){
+							// save debug GPX for areas that wiil 
+							// appear in warning message below 
+							toAdd.saveGPX("warn_toAdd",treePath);
+							currElem.saveGPX("warn_curr",treePath);
+						}
+						log.warn(chkMsg);
+					}
+					
 					Area currMinusToAdd = new Area(currElem.area);
 					currMinusToAdd.subtract(toAdd.area);
+					// remove intersection part from toAdd
+					toAdd.area = toAddMinusCurr;
 					if (currMinusToAdd.isEmpty()){
 					    // curr is fully covered by toAdd 
-						if (DEBUG){
-							if (chkMsg != null){
-								// save debug GPX for areas that wiil 
-								// appear in warning message below 
-								toAdd.saveGPX("warn_toAdd",treePath);
-								currElem.saveGPX("warn_curr",treePath);
-							}
-						}
-						// remove intersection part from toAdd
-						toAdd.area = toAddMinusCurr;
-						
-						if (chkMsg != null){
-							// warning: intersection of areas with equal levels   
-							log.warn(chkMsg);
-						}
-
 						if (toAdd.tagMask != POSTCODE_ONLY){
 							currElem.addLocInfo(toAdd);
 						}
@@ -848,24 +849,14 @@
 					}
 
 					NodeElem intersect = new NodeElem(currElem, toAddxCurr, i);
-
-					if (chkMsg != null){
-						// if we get here we have  a partial overlapping of two 
-						// boundaries that have the same level
-						if (DEBUG){
-							toAdd.saveGPX("warn_toAdd", treePath);
-							currElem.saveGPX("warn_curr", treePath);
+					
+					if (DEBUG){
+						if (chkMsg != null)
 							intersect.saveGPX("warn_inter", treePath);
-						}
-						log.warn(chkMsg);
-						toAdd.area = toAddMinusCurr;
-						currElem.addLocInfo(toAdd);
-						continue;
 					}
 
-					// remove intersection part from the source areas
+					// remove intersection part also from curr 
 					currElem.area = currMinusToAdd;
-					toAdd.area = toAddMinusCurr;
 					
 					if (toAdd.tagMask != POSTCODE_ONLY){
 						// combine tag info in intersection
@@ -949,8 +940,8 @@
 					removeThis = true;
 				else {
 					Path2D.Float path = new Path2D.Float(chkRemove.area);
-					chkRemove.area = new Area(path);
-					if (chkRemove.area.isEmpty())
+					Area testArea = new Area(path);
+					if (testArea.isEmpty())
 						removeThis = true;
 				}
 				if (removeThis){
