Index: trunk/src/org/openstreetmap/josm/data/validation/tests/TagChecker.java
===================================================================
--- trunk/src/org/openstreetmap/josm/data/validation/tests/TagChecker.java	(revision 14895)
+++ trunk/src/org/openstreetmap/josm/data/validation/tests/TagChecker.java	(revision 14897)
@@ -297,4 +297,5 @@
             case "E:":
                 ignoreDataEquals.add(line);
+                addToKeyDictionary(line);
                 break;
             case "F:":
@@ -305,4 +306,5 @@
                 ignoreDataTag.add(tag);
                 oftenUsedTags.put(tag.getKey(), tag.getValue());
+                addToKeyDictionary(tag.getKey());
                 break;
             default:
@@ -314,4 +316,13 @@
             Logging.error("Invalid line in {0} : {1}", source, e.getMessage());
             Logging.trace(e);
+        }
+    }
+
+    private static void addToKeyDictionary(String key) {
+        if (key != null) {
+            String hk = harmonizeKey(key);
+            if (!key.equals(hk)) {
+                harmonizedKeys.put(hk, key);
+            }
         }
     }
@@ -356,8 +367,5 @@
     private static void addPresetValue(KeyedItem ky) {
         if (ky.key != null && ky.getValues() != null) {
-            String hk = harmonizeKey(ky.key);
-            if (!ky.key.equals(hk)) {
-                harmonizedKeys.put(hk, ky.key);
-            }
+            addToKeyDictionary(ky.key);
         }
     }
@@ -602,14 +610,29 @@
     private void spellCheckKey(MultiMap<OsmPrimitive, String> withErrors, OsmPrimitive p, String key) {
         String prettifiedKey = harmonizeKey(key);
-        String fixedKey = isKeyInPresets(prettifiedKey) ? prettifiedKey : harmonizedKeys.get(prettifiedKey);
+        String fixedKey;
+        if (ignoreDataEquals.contains(prettifiedKey)) {
+            fixedKey = prettifiedKey;
+        } else {
+            fixedKey = isKeyInPresets(prettifiedKey) ? prettifiedKey : harmonizedKeys.get(prettifiedKey);
+        }
+        if (fixedKey == null) {
+            for (Tag a : ignoreDataTag) {
+                if (a.getKey().equals(prettifiedKey)) {
+                    fixedKey = prettifiedKey;
+                    break;
+                }
+            }
+        }
+
         if (fixedKey != null && !"".equals(fixedKey) && !fixedKey.equals(key)) {
+            final String proposedKey = fixedKey;
             // misspelled preset key
             final TestError.Builder error = TestError.builder(this, Severity.WARNING, MISSPELLED_KEY)
-                    .message(tr("Misspelled property key"), marktr("Key ''{0}'' looks like ''{1}''."), key, fixedKey)
+                    .message(tr("Misspelled property key"), marktr("Key ''{0}'' looks like ''{1}''."), key, proposedKey)
                     .primitives(p);
             if (p.hasKey(fixedKey)) {
                 errors.add(error.build());
             } else {
-                errors.add(error.fix(() -> new ChangePropertyKeyCommand(p, key, fixedKey)).build());
+                errors.add(error.fix(() -> new ChangePropertyKeyCommand(p, key, proposedKey)).build());
             }
             withErrors.put(p, "WPK");
