Index: test/functional/org/openstreetmap/josm/data/osm/TaginfoTestIT.java
===================================================================
--- test/functional/org/openstreetmap/josm/data/osm/TaginfoTestIT.java	(revision 16387)
+++ test/functional/org/openstreetmap/josm/data/osm/TaginfoTestIT.java	(working copy)
@@ -3,6 +3,7 @@
 
 import static org.junit.Assert.assertTrue;
 
+import java.io.BufferedReader;
 import java.io.IOException;
 import java.io.InputStream;
 import java.net.URL;
@@ -17,10 +18,12 @@
 import org.junit.Rule;
 import org.junit.Test;
 import org.openstreetmap.josm.data.coor.LatLon;
+import org.openstreetmap.josm.data.validation.TestError;
 import org.openstreetmap.josm.data.validation.tests.MapCSSTagChecker;
 import org.openstreetmap.josm.data.validation.tests.TagChecker;
 import org.openstreetmap.josm.gui.mappaint.mapcss.parsergen.ParseException;
 import org.openstreetmap.josm.gui.tagging.presets.TaggingPresets;
+import org.openstreetmap.josm.io.CachedFile;
 import org.openstreetmap.josm.testutils.JOSMTestRules;
 import org.openstreetmap.josm.tools.HttpClient;
 import org.xml.sax.SAXException;
@@ -91,4 +94,56 @@
         }
         assertTrue(errors.toString(), errors.isEmpty());
     }
+
+    /**
+     * Checks that tags with a count > 1000 are not reported as false positives.
+     * @throws SAXException if any XML parsing error occurs
+     * @throws IOException if any I/O error occurs
+     * @throws ParseException if any MapCSS parsing error occurs
+     */
+    @Test
+    public void testCheckLessPopularTags() throws SAXException, IOException, ParseException {
+        TaggingPresets.readFromPreferences();
+        TagChecker tc = new TagChecker();
+        tc.initialize();
+        tc.startTest(null);
+
+        List<String> errors = new ArrayList<>();
+        try (
+                CachedFile cf = new CachedFile("nodist/data/frequent-tags.cfg");
+                BufferedReader reader = cf.getContentReader()
+            ) {
+            String line;
+            while ((line = reader.readLine()) != null && (!line.isEmpty())) {
+                if (!line.startsWith("#")) {
+                    String[] parts = line.split("\\|");
+                    // select key, value, count_nodes, count_ways, count_relations from tags
+                    if (parts.length >= 2) {
+                        String key = parts[0];
+                        String value = parts[1];
+
+                        if (!TagChecker.isTagInPresets(key, value) && !TagChecker.isTagIgnored(key, value)) {
+                            Node n = new Node(LatLon.NORTH_POLE);
+                            n.put(key, value);
+                            new DataSet(n);
+                            tc.check(n);
+                            if (!tc.getErrors().isEmpty()) {
+                                for (TestError e : tc.getErrors()) {
+                                    if (e.getDescription() != null && e.getDescription().contains("is meant?")) {
+                                        errors.add(key+"="+value+ " " + e.getDescription() + " " + line);
+                                    }
+                                }
+
+                            }
+                            tc.clear();
+                        }
+                    }
+                }
+            }
+        }
+        for (String error : errors) {
+            System.err.println("false positive? " + error);
+        }
+        assertTrue(errors.toString(), errors.isEmpty());
+    }
 }
