Index: /trunk/src/org/openstreetmap/josm/corrector/ReverseWayTagCorrector.java
===================================================================
--- /trunk/src/org/openstreetmap/josm/corrector/ReverseWayTagCorrector.java	(revision 11068)
+++ /trunk/src/org/openstreetmap/josm/corrector/ReverseWayTagCorrector.java	(revision 11069)
@@ -5,5 +5,4 @@
 
 import java.util.ArrayList;
-import java.util.Arrays;
 import java.util.Collection;
 import java.util.HashMap;
@@ -80,37 +79,4 @@
             };
         }
-
-        static IStringSwitcher compassCardinal() {
-            final List<String> cardinal = Arrays.asList(
-                    "N", "NNE", "NE", "ENE", "E", "ESE", "SE", "SSE",
-                    "S", "SSW", "SW", "WSW", "W", "WNW", "NW", "NNW");
-            return key -> {
-                final int index = cardinal.indexOf(key);
-                if (index >= 0) {
-                    return cardinal.get((index + cardinal.size() / 2) % cardinal.size());
-                }
-                return key;
-            };
-        }
-
-        static IStringSwitcher compassDegrees() {
-            return key -> {
-                if (!key.matches("\\d+")) {
-                    return key;
-                }
-                final int i = Integer.parseInt(key);
-                if (i < 0 || i > 360) {
-                    return key;
-                }
-                return Integer.toString((i + 180) % 360);
-            };
-        }
-
-        static IStringSwitcher compass() {
-            return combined(
-                    IStringSwitcher.compassCardinal(),
-                    IStringSwitcher.compassDegrees()
-            );
-        }
     }
 
@@ -188,7 +154,4 @@
             } else if (key.startsWith("direction") || key.endsWith("direction")) {
                 newValue = COMBINED_SWITCHERS.apply(value);
-                if (newValue.equals(value)) {
-                    newValue = IStringSwitcher.compass().apply(value);
-                }
             } else if (key.endsWith(":forward") || key.endsWith(":backward")) {
                 // Change key but not left/right value (fix #8518)
Index: /trunk/test/unit/org/openstreetmap/josm/corrector/ReverseWayTagCorrectorTest.java
===================================================================
--- /trunk/test/unit/org/openstreetmap/josm/corrector/ReverseWayTagCorrectorTest.java	(revision 11068)
+++ /trunk/test/unit/org/openstreetmap/josm/corrector/ReverseWayTagCorrectorTest.java	(revision 11069)
@@ -53,8 +53,4 @@
         assertSwitch(new Tag("direction", "backward"), new Tag("direction", "forward"));
         assertSwitch(new Tag("direction", "north"), new Tag("direction", "south"));
-        assertSwitch(new Tag("direction", "NNE"), new Tag("direction", "SSW"));
-        assertSwitch(new Tag("direction", "270"), new Tag("direction", "90"));
-        assertSwitch(new Tag("direction", "135"), new Tag("direction", "315"));
-        assertSwitch(new Tag("direction", "337"), new Tag("direction", "157"));
         // :left/:right with oneway (see #10977)
         assertSwitch(new Tag("cycleway:left:oneway", "-1"), new Tag("cycleway:right:oneway", "yes"));
@@ -118,4 +114,13 @@
     }
 
+    private Map<OsmPrimitive, List<TagCorrection>> getTagCorrectionsForWay(String middleNodeTags) {
+        final OsmPrimitive n1 = OsmUtils.createPrimitive("node");
+        final OsmPrimitive n2 = OsmUtils.createPrimitive("node " + middleNodeTags);
+        final OsmPrimitive n3 = OsmUtils.createPrimitive("node");
+        final Way w = new Way();
+        Stream.of(n1, n2, n3).map(Node.class::cast).forEach(w::addNode);
+        return ReverseWayTagCorrector.getTagCorrectionsMap(w);
+    }
+
     /**
      * Test tag correction on way nodes
@@ -123,15 +128,17 @@
     @Test
     public void testSwitchingWayNodes() {
-        final OsmPrimitive n1 = OsmUtils.createPrimitive("node");
-        final OsmPrimitive n2 = OsmUtils.createPrimitive("node direction=SSW");
-        final OsmPrimitive n3 = OsmUtils.createPrimitive("node");
-        final Way w = new Way();
-        Stream.of(n1, n2, n3).map(Node.class::cast).forEach(w::addNode);
-        final Map<OsmPrimitive, List<TagCorrection>> tagCorrections = ReverseWayTagCorrector.getTagCorrectionsMap(w);
+        final Map<OsmPrimitive, List<TagCorrection>> tagCorrections = getTagCorrectionsForWay("direction=forward");
         Assert.assertEquals(1, tagCorrections.size());
-        Assert.assertEquals(Collections.singleton(n2),
-                tagCorrections.keySet());
-        Assert.assertEquals(Collections.singletonList(new TagCorrection("direction", "SSW", "direction", "NNE")),
+        Assert.assertEquals(Collections.singletonList(new TagCorrection("direction", "forward", "direction", "backward")),
                 tagCorrections.values().iterator().next());
     }
+
+    /**
+     * Test tag correction on way nodes are not applied for absolute values such as compass cardinal directions
+     */
+    @Test
+    public void testNotSwitchingWayNodes() {
+        Assert.assertEquals(0, getTagCorrectionsForWay("direction=SSW").size());
+        Assert.assertEquals(0, getTagCorrectionsForWay("direction=145").size());
+    }
 }
