Index: trunk/src/org/openstreetmap/josm/actions/ValidateAction.java
===================================================================
--- trunk/src/org/openstreetmap/josm/actions/ValidateAction.java	(revision 14880)
+++ trunk/src/org/openstreetmap/josm/actions/ValidateAction.java	(revision 14882)
@@ -177,13 +177,5 @@
                 for (TestError error : errors) {
                     if (canceled) return;
-                    List<String> s = new ArrayList<>();
-                    s.add(error.getIgnoreState());
-                    s.add(error.getIgnoreGroup());
-                    s.add(error.getIgnoreSubGroup());
-                    for (String state : s) {
-                        if (state != null && OsmValidator.hasIgnoredError(state)) {
-                            error.setIgnored(true);
-                        }
-                    }
+                    error.updateIgnored();
                 }
             }
Index: trunk/src/org/openstreetmap/josm/actions/upload/ValidateUploadHook.java
===================================================================
--- trunk/src/org/openstreetmap/josm/actions/upload/ValidateUploadHook.java	(revision 14880)
+++ trunk/src/org/openstreetmap/josm/actions/upload/ValidateUploadHook.java	(revision 14882)
@@ -44,4 +44,6 @@
     /**
      * Validate the modified data before uploading
+     * @param apiDataSet contains primitives to be uploaded
+     * @return true if upload should continue, else false
      */
     @Override
@@ -77,20 +79,11 @@
 
         if (ValidatorPrefHelper.PREF_USE_IGNORE.get()) {
-            int nume = 0;
+            boolean allIgnored = true;
             for (TestError error : errors) {
-                List<String> s = new ArrayList<>();
-                s.add(error.getIgnoreState());
-                s.add(error.getIgnoreGroup());
-                s.add(error.getIgnoreSubGroup());
-                for (String state : s) {
-                    if (state != null && OsmValidator.hasIgnoredError(state)) {
-                        error.setIgnored(true);
-                    }
-                }
-                if (!error.isIgnored()) {
-                    ++nume;
+                if (!error.updateIgnored()) {
+                    allIgnored = false;
                 }
             }
-            if (nume == 0)
+            if (allIgnored)
                 return true;
         }
Index: trunk/src/org/openstreetmap/josm/data/validation/TestError.java
===================================================================
--- trunk/src/org/openstreetmap/josm/data/validation/TestError.java	(revision 14880)
+++ trunk/src/org/openstreetmap/josm/data/validation/TestError.java	(revision 14882)
@@ -279,5 +279,4 @@
     public String getIgnoreState() {
         Collection<String> strings = new TreeSet<>();
-        StringBuilder ignorestring = new StringBuilder(getIgnoreSubGroup());
         for (OsmPrimitive o : primitives) {
             // ignore data not yet uploaded
@@ -294,8 +293,30 @@
             strings.add(type + '_' + o.getId());
         }
+        StringBuilder ignorestring = new StringBuilder(getIgnoreSubGroup());
         for (String o : strings) {
             ignorestring.append(':').append(o);
         }
         return ignorestring.toString();
+    }
+
+    /**
+     * Check if this error matches an entry in the ignore list and
+     * set the ignored flag if it is.
+     * @return the new ignored state
+     */
+    public boolean updateIgnored() {
+        setIgnored(calcIgnored());
+        return isIgnored();
+    }
+
+    private boolean calcIgnored() {
+        String state = getIgnoreGroup();
+        if (state != null && OsmValidator.hasIgnoredError(state))
+            return true;
+        state = getIgnoreSubGroup();
+        if (state != null && OsmValidator.hasIgnoredError(state))
+            return true;
+        state = getIgnoreState();
+        return state != null && OsmValidator.hasIgnoredError(state);
     }
 
