Index: /trunk/src/org/openstreetmap/josm/data/osm/MultipolygonCreate.java
===================================================================
--- /trunk/src/org/openstreetmap/josm/data/osm/MultipolygonCreate.java	(revision 6840)
+++ /trunk/src/org/openstreetmap/josm/data/osm/MultipolygonCreate.java	(revision 6841)
@@ -4,4 +4,5 @@
 import static org.openstreetmap.josm.tools.I18n.tr;
 
+import java.awt.geom.Area;
 import java.util.ArrayList;
 import java.util.Collection;
@@ -26,4 +27,5 @@
         public final List<Boolean> reversed;
         public final List<Node> nodes;
+        public final Area area;
 
         public JoinedPolygon(List<Way> ways, List<Boolean> reversed) {
@@ -31,4 +33,5 @@
             this.reversed = reversed;
             this.nodes = this.getNodes();
+            this.area = Geometry.getArea(nodes);
         }
 
@@ -38,9 +41,6 @@
          */
         public JoinedPolygon(Way way) {
-            this.ways = Collections.singletonList(way);
-            this.reversed = Collections.singletonList(Boolean.FALSE);
-            this.nodes = this.getNodes();
-        }
-
+            this(Collections.singletonList(way), Collections.singletonList(Boolean.FALSE));
+        }
 
         /**
@@ -233,5 +233,5 @@
                 }
 
-                PolygonIntersection intersection = Geometry.polygonIntersection(outerWay.nodes, innerWay.nodes);
+                PolygonIntersection intersection = Geometry.polygonIntersection(outerWay.area, innerWay.area);
 
                 if (intersection == PolygonIntersection.FIRST_INSIDE_SECOND) {
Index: /trunk/src/org/openstreetmap/josm/tools/Geometry.java
===================================================================
--- /trunk/src/org/openstreetmap/josm/tools/Geometry.java	(revision 6840)
+++ /trunk/src/org/openstreetmap/josm/tools/Geometry.java	(revision 6841)
@@ -441,5 +441,11 @@
     }
 
-    private static Area getArea(List<Node> polygon) {
+    /**
+     * 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
+     * @since 6841
+     */
+    public static Area getArea(List<Node> polygon) {
         Path2D path = new Path2D.Double();
 
@@ -462,12 +468,22 @@
     /**
      * Tests if two polygons intersect.
-     * @param first
-     * @param second
+     * @param first List of nodes forming first polygon
+     * @param second List of nodes forming second polygon
      * @return intersection kind
      */
     public static PolygonIntersection polygonIntersection(List<Node> first, List<Node> second) {
-
         Area a1 = getArea(first);
         Area a2 = getArea(second);
+        return polygonIntersection(a1, a2);
+    }
+
+    /**
+     * Tests if two polygons intersect.
+     * @param a1 Area of first polygon
+     * @param a2 Area of second polygon
+     * @return intersection kind
+     * @since 6841
+     */
+    public static PolygonIntersection polygonIntersection(Area a1, Area a2) {
 
         Area inter = new Area(a1);
