Index: trunk/src/org/openstreetmap/josm/actions/corrector/ReverseWayTagCorrector.java
===================================================================
--- trunk/src/org/openstreetmap/josm/actions/corrector/ReverseWayTagCorrector.java	(revision 17283)
+++ trunk/src/org/openstreetmap/josm/actions/corrector/ReverseWayTagCorrector.java	(revision 17289)
@@ -14,4 +14,5 @@
 import java.util.regex.Matcher;
 import java.util.regex.Pattern;
+import java.util.stream.Collectors;
 
 import org.openstreetmap.josm.command.Command;
@@ -25,5 +26,4 @@
 import org.openstreetmap.josm.data.osm.RelationMember;
 import org.openstreetmap.josm.data.osm.Tag;
-import org.openstreetmap.josm.data.osm.TagCollection;
 import org.openstreetmap.josm.data.osm.Tagged;
 import org.openstreetmap.josm.data.osm.Way;
@@ -174,14 +174,10 @@
      * Tests whether way can be reversed without semantic change, i.e., whether tags have to be changed.
      * Looks for keys like oneway, oneway:bicycle, cycleway:right:oneway, left/right.
+     * Also tests the nodes, e.g. a highway=stop with direction, see #20013.
      * @param way way to test
      * @return false if tags should be changed to keep semantic, true otherwise.
      */
     public static boolean isReversible(Way way) {
-        for (Tag tag : TagCollection.from(way)) {
-            if (!tag.equals(TagSwitcher.apply(tag))) {
-                return false;
-            }
-        }
-        return true;
+        return getTagCorrectionsMap(way).isEmpty();
     }
 
@@ -193,11 +189,5 @@
      */
     public static List<Way> irreversibleWays(List<Way> ways) {
-        List<Way> newWays = new ArrayList<>(ways);
-        for (Way way : ways) {
-            if (isReversible(way)) {
-                newWays.remove(way);
-            }
-        }
-        return newWays;
+        return ways.stream().filter(w -> !isReversible(w)).collect(Collectors.toList());
     }
 
