Index: data/validator/ignoretags.cfg
===================================================================
--- data/validator/ignoretags.cfg	(revision 14886)
+++ data/validator/ignoretags.cfg	(working copy)
@@ -1,10 +1,11 @@
 # JOSM IgnoreTags
 ; This is used for checks "key/tag not in presets"
 ; K:  the given tag will not produce a "tag not in presets" error, but it is 
-;     used as dictionary entry for spell checking the given key.
-; E:  ignore tags with this key
-; S:  ignore tag if key starts with this string
-; F:  ignore tag if key ends with this string
+;     used as dictionary entry for spell checking the given key and also 
+;     for the key/value combination.
+; E:  ignore tags with this key and add the key to the spell check dictionary.
+; S:  ignore tag if key starts with this string.
+; F:  ignore tag if key ends with this string.
 ;
 ;
 ; Ignore valid and semi-valid keys that start with...
Index: data/validator/words.cfg
===================================================================
--- data/validator/words.cfg	(revision 14886)
+++ data/validator/words.cfg	(working copy)
@@ -7,7 +7,8 @@
 #
 # There must not be any white space before or after words, unless they are to be included in
 # the bad spelling.
-# There is no need to add bad spelling with different upper/lower case.
+# There is no need to add bad spelling with different upper/lower case for keys 
+#   which appear in the presets or the ignoreTags.cfg (prefixes E: and K:)
 # There is no need to add bad spelling with leading or trailing blanks.
 
 +abutters
@@ -39,6 +40,8 @@
 -amenty
 -maenity
 -emenity
++barrier
+-barier
 +bicycle
 -bycycle
 -biycle
@@ -49,14 +52,6 @@
 -bikes
 +commercial
 -comercial
-+created_by
--cretaed_by
--crated_by
--creared_by
--creayed_by
--{created_by
--creeated_by
--created_bu
 +denomination
 -denonimation
 -denomionation
@@ -160,9 +155,6 @@
 -onway
 -oeway
 -eway
-+osmarender:nameDirection
--name_direction
--osmarender:name_direction
 +railway
 -raillway
 +source
@@ -177,8 +169,6 @@
 -waterwa
 -waterwy
 -wateway
-+unknown
--unknwon
 #
 # Not sorted.
 #
@@ -207,8 +197,6 @@
 -buiding
 -bulding
 -buildinq
-+city
--citya
 +complete
 -complite
 +construction
@@ -220,15 +208,10 @@
 -descripion
 -desription
 -decription
-+feature
--featuer
 +freight
 -frieght
 +full_name:fa
 -full_name:Fa
-+highway_border
--highway_boarder
--highway_boreder
 +int_name
 -iint_name
 +junction
@@ -289,11 +272,6 @@
 -note2
 +old_name
 -oldname
-+osmarender:renderName
--osmarender:rendername
--soamrender:renderName
-+osmarender:renderRef
--osmrender:renderRef
 +postal_code
 -posatl_code
 +private
@@ -323,8 +301,6 @@
 -tractype
 -tracltype
 -trackype
-+tramline
--tram_line
 +tunnel
 -tunne
 -tunel
Index: src/org/openstreetmap/josm/data/validation/tests/TagChecker.java
===================================================================
--- src/org/openstreetmap/josm/data/validation/tests/TagChecker.java	(revision 14886)
+++ src/org/openstreetmap/josm/data/validation/tests/TagChecker.java	(working copy)
@@ -296,6 +296,7 @@
                 break;
             case "E:":
                 ignoreDataEquals.add(line);
+                addToKeyDictionary(line);
                 break;
             case "F:":
                 ignoreDataEndsWith.add(line);
@@ -304,6 +305,7 @@
                 Tag tag = Tag.ofString(line);
                 ignoreDataTag.add(tag);
                 oftenUsedTags.put(tag.getKey(), tag.getValue());
+                addToKeyDictionary(tag.getKey());
                 break;
             default:
                 if (!key.startsWith(";")) {
@@ -316,6 +318,15 @@
         }
     }
 
+    private static void addToKeyDictionary(String key) {
+        if (key != null) {
+            String hk = harmonizeKey(key);
+            if (!key.equals(hk)) {
+                harmonizedKeys.put(hk, key);
+            }
+        }
+    }
+
     /**
      * Reads the presets data.
      *
@@ -355,10 +366,7 @@
 
     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);
         }
     }
 
@@ -601,16 +609,31 @@
 
     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");
         } else {
Index: test/unit/org/openstreetmap/josm/data/validation/tests/TagCheckerTest.java
===================================================================
--- test/unit/org/openstreetmap/josm/data/validation/tests/TagCheckerTest.java	(revision 14886)
+++ test/unit/org/openstreetmap/josm/data/validation/tests/TagCheckerTest.java	(working copy)
@@ -83,6 +83,38 @@
     }
 
     /**
+     * Check for misspelled key where the suggested alternative is given with prefix E: in ignoreTags.cfg.
+     * The error should be fixable.
+     * @throws IOException if any I/O error occurs
+     */
+    @Test
+    public void testUpperCaseIgnoredKey() throws IOException {
+        // ticket 17468
+        final List<TestError> errors = test(OsmUtils.createPrimitive("node wheelchair:Description=bla"));
+        assertEquals(1, errors.size());
+        assertEquals("Misspelled property key", errors.get(0).getMessage());
+        assertEquals("Key 'wheelchair:Description' looks like 'wheelchair:description'.", errors.get(0).getDescription());
+        assertEquals(Severity.WARNING, errors.get(0).getSeverity());
+        assertTrue(errors.get(0).isFixable());
+    }
+
+    /**
+     * Check for misspelled key where the suggested alternative is given with prefix K: in ignoreTags.cfg.
+     * The error should be fixable.
+     * @throws IOException if any I/O error occurs
+     */
+    @Test
+    public void testUpperCaseInKeyIgnoredTag() throws IOException {
+        // ticket 17468
+        final List<TestError> errors = test(OsmUtils.createPrimitive("node land_Area=administrative"));
+        assertEquals(1, errors.size());
+        assertEquals("Misspelled property key", errors.get(0).getMessage());
+        assertEquals("Key 'land_Area' looks like 'land_area'.", errors.get(0).getDescription());
+        assertEquals(Severity.WARNING, errors.get(0).getSeverity());
+        assertTrue(errors.get(0).isFixable());
+    }
+
+    /**
      * Check for unknown key.
      * @throws IOException if any I/O error occurs
      */
