Index: trunk/src/org/openstreetmap/josm/data/osm/MultipolygonBuilder.java
===================================================================
--- trunk/src/org/openstreetmap/josm/data/osm/MultipolygonBuilder.java	(revision 7421)
+++ trunk/src/org/openstreetmap/josm/data/osm/MultipolygonBuilder.java	(revision 7422)
@@ -4,4 +4,5 @@
 import static org.openstreetmap.josm.tools.I18n.tr;
 
+import java.awt.Rectangle;
 import java.awt.geom.Area;
 import java.util.ArrayList;
@@ -32,4 +33,5 @@
         public final List<Node> nodes;
         public final Area area;
+        public final Rectangle bounds;
 
         /**
@@ -42,4 +44,5 @@
             this.nodes = this.getNodes();
             this.area = Geometry.getArea(nodes);
+            this.bounds = area.getBounds();
         }
 
@@ -275,14 +278,18 @@
                 }
 
-                PolygonIntersection intersection = Geometry.polygonIntersection(outerWay.area, innerWay.area);
-
-                if (intersection == PolygonIntersection.FIRST_INSIDE_SECOND) {
-                    outerGood = false;  // outer is inside another polygon
-                    break;
-                } else if (intersection == PolygonIntersection.SECOND_INSIDE_FIRST) {
-                    innerCandidates.add(innerWay);
-                } else if (intersection == PolygonIntersection.CROSSING) {
-                    //ways intersect
-                    return null;
+                // Preliminary computation on bounds. If bounds do not intersect, no need to do a costly area intersection
+                if (outerWay.bounds.intersects(innerWay.bounds)) {
+                    // Bounds intersection, let's see in detail
+                    PolygonIntersection intersection = Geometry.polygonIntersection(outerWay.area, innerWay.area);
+
+                    if (intersection == PolygonIntersection.FIRST_INSIDE_SECOND) {
+                        outerGood = false;  // outer is inside another polygon
+                        break;
+                    } else if (intersection == PolygonIntersection.SECOND_INSIDE_FIRST) {
+                        innerCandidates.add(innerWay);
+                    } else if (intersection == PolygonIntersection.CROSSING) {
+                        //ways intersect
+                        return null;
+                    }
                 }
             }
Index: trunk/src/org/openstreetmap/josm/gui/preferences/validator/ValidatorTestsPreference.java
===================================================================
--- trunk/src/org/openstreetmap/josm/gui/preferences/validator/ValidatorTestsPreference.java	(revision 7421)
+++ trunk/src/org/openstreetmap/josm/gui/preferences/validator/ValidatorTestsPreference.java	(revision 7422)
@@ -44,5 +44,5 @@
         }
     }
-    
+
     private JCheckBox prefUseIgnore;
     private JCheckBox prefUseLayer;
@@ -92,5 +92,5 @@
             test.addGui(testPanel);
         }
-        
+
         gui.getValidatorPreference().addSubTab(this, tr("Tests"),
                 GuiHelper.embedInVerticalScrollPane(testPanel),
@@ -105,5 +105,5 @@
         for (Test test : allTests) {
             test.ok();
-            String name = test.getClass().getSimpleName();
+            String name = test.getClass().getName();
             if(!test.enabled)
                 tests.add(name);
@@ -111,5 +111,5 @@
                 testsBeforeUpload.add(name);
         }
-        
+
         // Initializes all tests but MapCSSTagChecker because it is initialized
         // later in ValidatorTagCheckerRulesPreference.ok(),
