Index: trunk/src/org/openstreetmap/josm/data/validation/Test.java
===================================================================
--- trunk/src/org/openstreetmap/josm/data/validation/Test.java	(revision 4058)
+++ trunk/src/org/openstreetmap/josm/data/validation/Test.java	(revision 4059)
@@ -216,3 +216,7 @@
         return name;
     }
+
+    public boolean isCancelled() {
+        return progressMonitor.isCancelled();
+    }
 }
Index: trunk/src/org/openstreetmap/josm/data/validation/tests/UnconnectedWays.java
===================================================================
--- trunk/src/org/openstreetmap/josm/data/validation/tests/UnconnectedWays.java	(revision 4058)
+++ trunk/src/org/openstreetmap/josm/data/validation/tests/UnconnectedWays.java	(revision 4059)
@@ -79,19 +79,8 @@
     @Override
     public void endTest() {
-        //Area a = Main.ds.getDataSourceArea();
         Map<Node, Way> map = new HashMap<Node, Way>();
-        //long last = -1;
         for (int iter = 0; iter < 1; iter++) {
-            //last = System.currentTimeMillis();
-            long last_print = -1;
-            int nr = 0;
             Collection<MyWaySegment> tmp_ways = ways;
             for (MyWaySegment s : tmp_ways) {
-                nr++;
-                long now = System.currentTimeMillis();
-                if (now - last_print > 200) {
-                    //System.err.println("processing segment nr: " + nr + " of " + ways.size());
-                    last_print = now;
-                }
                 Collection<Node> nearbyNodes = s.nearbyNodes(mindist);
                 for (Node en : nearbyNodes) {
@@ -113,7 +102,7 @@
                     map.put(en, s.w);
                 }
-            }
-            //System.out.println("p1 elapsed: " + (System.currentTimeMillis()-last));
-            //last = System.currentTimeMillis();
+                if(isCancelled())
+                    return;
+            }
         }
         for (Map.Entry<Node, Way> error : map.entrySet()) {
@@ -125,4 +114,6 @@
         map.clear();
         for (MyWaySegment s : ways) {
+            if(isCancelled())
+                return;
             for (Node en : s.nearbyNodes(mindist)) {
                 if (endnodes_highway.contains(en) && !s.highway && !s.isArea()) {
@@ -133,6 +124,4 @@
             }
         }
-        //System.out.println("p2 elapsed: " + (System.currentTimeMillis()-last));
-        //last = System.currentTimeMillis();
         for (Map.Entry<Node, Way> error : map.entrySet()) {
             errors.add(new TestError(this, Severity.WARNING,
@@ -145,4 +134,6 @@
             map.clear();
             for (MyWaySegment s : ways) {
+                if(isCancelled())
+                    return;
                 for (Node en : s.nearbyNodes(minmiddledist)) {
                     if (!middlenodes.contains(en)) {
@@ -163,4 +154,6 @@
             for (MyWaySegment s : ways) {
                 for (Node en : s.nearbyNodes(minmiddledist)) {
+                    if(isCancelled())
+                        return;
                     if (!othernodes.contains(en)) {
                         continue;
