Index: src/org/openstreetmap/josm/actions/ValidateAction.java
===================================================================
--- src/org/openstreetmap/josm/actions/ValidateAction.java	(revision 14461)
+++ src/org/openstreetmap/josm/actions/ValidateAction.java	(working copy)
@@ -168,6 +168,7 @@
             }
             tests = null;
             if (ValidatorPrefHelper.PREF_USE_IGNORE.get()) {
+                getProgressMonitor().setCustomText("");
                 getProgressMonitor().subTask(tr("Updating ignored errors ..."));
                 for (TestError error : errors) {
                     if (canceled) return;
Index: src/org/openstreetmap/josm/data/validation/Test.java
===================================================================
--- src/org/openstreetmap/josm/data/validation/Test.java	(revision 14461)
+++ src/org/openstreetmap/josm/data/validation/Test.java	(working copy)
@@ -76,6 +76,8 @@
     /** the start time to compute elapsed time when test finishes */
     protected long startTime;
 
+    private boolean showElementCount;
+
     /**
      * Constructor
      * @param name Name of the test
@@ -202,6 +204,7 @@
         if (progressMonitor != null) {
             progressMonitor.setTicksCount(selection.size());
         }
+        long cnt = 0;
         for (OsmPrimitive p : selection) {
             if (isCanceled()) {
                 break;
@@ -211,6 +214,12 @@
             }
             if (progressMonitor != null) {
                 progressMonitor.worked(1);
+                cnt++;
+                // add frequently changing info to progress monitor so that it
+                // doesn't seem to hang when test takes long
+                if (showElementCount && cnt % 1000 == 0 ) {
+                    progressMonitor.setExtraText(tr("{0} of {1} elements done", cnt, selection.size()));
+                }
             }
         }
     }
@@ -373,4 +382,9 @@
     public int compareTo(Test t) {
         return name.compareTo(t.name);
     }
+
+    protected void setShowElements(boolean b) {
+        showElementCount = b;
+    }
+
 }
Index: src/org/openstreetmap/josm/data/validation/tests/MapCSSTagChecker.java
===================================================================
--- src/org/openstreetmap/josm/data/validation/tests/MapCSSTagChecker.java	(revision 14461)
+++ src/org/openstreetmap/josm/data/validation/tests/MapCSSTagChecker.java	(working copy)
@@ -60,6 +60,7 @@
 import org.openstreetmap.josm.gui.mappaint.mapcss.parsergen.MapCSSParser;
 import org.openstreetmap.josm.gui.mappaint.mapcss.parsergen.ParseException;
 import org.openstreetmap.josm.gui.mappaint.mapcss.parsergen.TokenMgrError;
+import org.openstreetmap.josm.gui.progress.ProgressMonitor;
 import org.openstreetmap.josm.io.CachedFile;
 import org.openstreetmap.josm.io.FileWatcher;
 import org.openstreetmap.josm.io.IllegalDataException;
@@ -841,4 +842,10 @@
             }
         }
     }
+
+    @Override
+    public void startTest(ProgressMonitor progressMonitor) {
+        super.startTest(progressMonitor);
+        super.setShowElements(true);
+    }
 }
