Index: trunk/src/org/openstreetmap/josm/data/validation/tests/SimilarNamedWays.java
===================================================================
--- trunk/src/org/openstreetmap/josm/data/validation/tests/SimilarNamedWays.java	(revision 12282)
+++ trunk/src/org/openstreetmap/josm/data/validation/tests/SimilarNamedWays.java	(revision 12283)
@@ -7,4 +7,5 @@
 
 import java.awt.geom.Point2D;
+import java.text.Normalizer;
 import java.util.ArrayList;
 import java.util.Arrays;
@@ -34,4 +35,6 @@
 
     protected static final int SIMILAR_NAMED = 701;
+
+    private static final Pattern REMOVE_DIACRITICS = Pattern.compile("\\p{InCombiningDiacriticalMarks}+");
 
     /** All ways, grouped by cells */
@@ -202,4 +205,9 @@
         boolean similar = distance > 0 && distance <= 2;
 
+        // check if only the case differs, so we don't consider large distance as different strings
+        if (distance > 2 && name.length() == name2.length()) {
+            similar = deAccent(name).equalsIgnoreCase(deAccent(name2));
+        }
+
         // try all rules
         for (NormalizeRule rule : rules) {
@@ -216,4 +224,15 @@
     }
 
+    /**
+     * Removes diacritics (accents) from string.
+     * @param str string
+     * @return {@code str} without any diacritic (accent)
+     * @since 12283
+     */
+    public static String deAccent(String str) {
+        // https://stackoverflow.com/a/1215117/2257172
+        return REMOVE_DIACRITICS.matcher(Normalizer.normalize(str, Normalizer.Form.NFD)).replaceAll("");
+    }
+
     @FunctionalInterface
     public interface NormalizeRule {
Index: trunk/test/unit/org/openstreetmap/josm/data/validation/tests/SimilarNamedWaysTest.java
===================================================================
--- trunk/test/unit/org/openstreetmap/josm/data/validation/tests/SimilarNamedWaysTest.java	(revision 12282)
+++ trunk/test/unit/org/openstreetmap/josm/data/validation/tests/SimilarNamedWaysTest.java	(revision 12283)
@@ -88,4 +88,7 @@
     }
 
+    /**
+     * Test similar names.
+     */
     @Test
     public void testSimilarNames() {
@@ -118,4 +121,10 @@
         checkSimilarity("first and second 2 changes", "First Street", "Soconds Street", true);
         checkSimilarity("first and second 3 changes", "First Street", "Soconds Stret", false);
+
+        // case only, see #14858
+        checkSimilarity("case only", "Rua São João", "Rua Sao Joao", true);
+        checkSimilarity("case only", "Rua São João", "Rua SAO JOAO", true);
+        checkSimilarity("case only", "Rua Sao Joao", "Rua SAO JOAO", true);
+        checkSimilarity("case only", "Rue éèçàïù", "Rue EeCAIU", true);
     }
 }
