Index: trunk/src/org/openstreetmap/josm/tools/DefaultGeoProperty.java
===================================================================
--- trunk/src/org/openstreetmap/josm/tools/DefaultGeoProperty.java	(revision 11360)
+++ trunk/src/org/openstreetmap/josm/tools/DefaultGeoProperty.java	(revision 11361)
@@ -3,4 +3,5 @@
 
 import java.awt.geom.Area;
+import java.awt.geom.Path2D;
 import java.util.Collection;
 
@@ -23,14 +24,10 @@
      */
     public DefaultGeoProperty(Collection<Way> ways) {
-        Area area = null;
+        Path2D path = new Path2D.Double();
+        path.setWindingRule(Path2D.WIND_EVEN_ODD);
         for (Way w : ways) {
-            Area wayArea = Geometry.getAreaLatLon(w.getNodes());
-            if (area == null) {
-                area = wayArea;
-            } else {
-                area.add(wayArea);
-            }
+            Geometry.buildPath2DLatLon(w.getNodes(), path);
         }
-        this.area = area;
+        this.area = new Area(path);
     }
 
Index: trunk/src/org/openstreetmap/josm/tools/Geometry.java
===================================================================
--- trunk/src/org/openstreetmap/josm/tools/Geometry.java	(revision 11360)
+++ trunk/src/org/openstreetmap/josm/tools/Geometry.java	(revision 11361)
@@ -505,12 +505,13 @@
 
     /**
-     * Returns the Area of a polygon, from its list of nodes.
-     * @param polygon List of nodes forming polygon
-     * @return Area for the given list of nodes (LatLon coordinates)
-     * @since 6841
-     */
-    public static Area getAreaLatLon(List<Node> polygon) {
-        Path2D path = new Path2D.Double();
-
+     * Builds a path from a list of nodes
+     * @param polygon Nodes, forming a closed polygon
+     * @param path path to add to; can be null, then a new path is created
+     * @return the path (LatLon coordinates)
+     */
+    public static Path2D buildPath2DLatLon(List<Node> polygon, Path2D path) {
+        if (path == null) {
+            path = new Path2D.Double();
+        }
         boolean begin = true;
         for (Node n : polygon) {
@@ -525,6 +526,5 @@
             path.closePath();
         }
-
-        return new Area(path);
+        return path;
     }
 
@@ -538,18 +538,13 @@
                 ? new Multipolygon(multipolygon)
                 : MultipolygonCache.getInstance().get(Main.map.mapView, multipolygon);
-        Area result = null;
+        Path2D path = new Path2D.Double();
+        path.setWindingRule(Path2D.WIND_EVEN_ODD);
         for (Multipolygon.PolyData pd : mp.getCombinedPolygons()) {
-            Area area = getAreaLatLon(pd.getNodes());
+            buildPath2DLatLon(pd.getNodes(), path);
             for (Multipolygon.PolyData pdInner : pd.getInners()) {
-                Area areaInner = getAreaLatLon(pdInner.getNodes());
-                area.subtract(areaInner);
-            }
-            if (result == null) {
-                result = area;
-            } else {
-                result.add(area);
-            }
-        }
-        return result;
+                buildPath2DLatLon(pdInner.getNodes(), path);
+            }
+        }
+        return new Area(path);
     }
 
