Index: trunk/src/org/openstreetmap/josm/data/validation/tests/TagChecker.java
===================================================================
--- trunk/src/org/openstreetmap/josm/data/validation/tests/TagChecker.java	(revision 14511)
+++ trunk/src/org/openstreetmap/josm/data/validation/tests/TagChecker.java	(revision 14517)
@@ -533,9 +533,12 @@
                 } else if (!isTagInPresets(key, value)) {
                     // try to fix common typos and check again if value is still unknown
-                    String fixedValue = harmonizeValue(prop.getValue());
+                    final String harmonizedValue = harmonizeValue(prop.getValue());
+                    String fixedValue = null;
                     Set<String> possibleValues = getPresetValues(key);
                     List<String> fixVals = new ArrayList<>();
                     int maxPresetValueLen = 0;
-                    if (!possibleValues.contains(fixedValue)) {
+                    if (possibleValues.contains(harmonizedValue)) {
+                        fixedValue = harmonizedValue;
+                    } else {
                         // use Levenshtein distance to find typical typos
                         int minDist = MAX_LEVENSHTEIN_DISTANCE + 1;
@@ -544,6 +547,11 @@
                             if (possibleVal.isEmpty())
                                 continue;
+                            if (harmonizedValue.length() < 3 && possibleVal.length() >= harmonizedValue.length() + MAX_LEVENSHTEIN_DISTANCE) {
+                                // don't suggest fix value when given value is short and lengths are too different
+                                // for example surface=u would result in surface=mud
+                                continue;
+                            }
                             maxPresetValueLen = Math.max(maxPresetValueLen, possibleVal.length());
-                            int dist = Utils.getLevenshteinDistance(possibleVal, fixedValue);
+                            int dist = Utils.getLevenshteinDistance(possibleVal, harmonizedValue);
                             if (dist < minDist) {
                                 closest = possibleVal;
@@ -555,5 +563,4 @@
                             }
                         }
-                        fixedValue = null;
                         if (minDist <= MAX_LEVENSHTEIN_DISTANCE && maxPresetValueLen > MAX_LEVENSHTEIN_DISTANCE) {
                             if (fixVals.size() < 2) {
