Index: /trunk/src/org/openstreetmap/josm/data/validation/tests/TagChecker.java
===================================================================
--- /trunk/src/org/openstreetmap/josm/data/validation/tests/TagChecker.java	(revision 14731)
+++ /trunk/src/org/openstreetmap/josm/data/validation/tests/TagChecker.java	(revision 14732)
@@ -631,5 +631,7 @@
         if (presetValues != null)
             sets.add(presetValues);
-        sets.add(oftenUsedTags.get(key));
+        Set<String> usedValues = oftenUsedTags.get(key);
+        if (usedValues != null)
+            sets.add(usedValues);
         for (Set<String> possibleValues: sets) {
             if (possibleValues.contains(harmonizedValue)) {
Index: /trunk/test/unit/org/openstreetmap/josm/data/validation/tests/TagCheckerTest.java
===================================================================
--- /trunk/test/unit/org/openstreetmap/josm/data/validation/tests/TagCheckerTest.java	(revision 14731)
+++ /trunk/test/unit/org/openstreetmap/josm/data/validation/tests/TagCheckerTest.java	(revision 14732)
@@ -201,3 +201,18 @@
     }
 
+    /**
+     * Key in presets but not in ignored.cfg. Caused a NPE with r14727.
+     * @throws IOException if any I/O error occurs
+     */
+    @Test
+    public void testRegression17246() throws IOException {
+        final List<TestError> errors = test(OsmUtils.createPrimitive("node access=privat"));
+        assertEquals(1, errors.size());
+        assertEquals("Unknown property value", errors.get(0).getMessage());
+        assertEquals("Value 'privat' for key 'access' is unknown, maybe 'private' is meant?",
+                errors.get(0).getDescription());
+        assertEquals(Severity.WARNING, errors.get(0).getSeverity());
+        assertFalse(errors.get(0).isFixable());
+    }
+
 }
