Index: trunk/src/org/openstreetmap/josm/corrector/ReverseWayTagCorrector.java
===================================================================
--- trunk/src/org/openstreetmap/josm/corrector/ReverseWayTagCorrector.java	(revision 5598)
+++ trunk/src/org/openstreetmap/josm/corrector/ReverseWayTagCorrector.java	(revision 5599)
@@ -71,5 +71,5 @@
     }
 
-    private static PrefixSuffixSwitcher[] prefixSuffixSwitchers =
+    private static final PrefixSuffixSwitcher[] prefixSuffixSwitchers =
         new PrefixSuffixSwitcher[] {
         new PrefixSuffixSwitcher("left", "right"),
@@ -81,15 +81,23 @@
     };
 
-    private static ArrayList<String> reversibleTags = new ArrayList<String>(
-            Arrays.asList(new String[] {"oneway", "incline", "direction"}));
-
+    /**
+     * 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.
+     * @param way
+     * @return false if tags should be changed to keep semantic, true otherwise.
+     */
     public static boolean isReversible(Way way) {
         for (String key : way.keySet()) {
-            if (reversibleTags.contains(key)) return false;
+            for (String k : Arrays.asList("oneway", "incline", "direction")) {
+                if (key.startsWith(k) || key.endsWith(k)) {
+                    return false;
+                }
+            }
             for (PrefixSuffixSwitcher prefixSuffixSwitcher : prefixSuffixSwitchers) {
-                if (!key.equals(prefixSuffixSwitcher.apply(key))) return false;
-            }
-        }
-
+                if (!key.equals(prefixSuffixSwitcher.apply(key))) {
+                    return false;
+                }
+            }
+        }
         return true;
     }
@@ -126,5 +134,5 @@
             String newValue = value;
 
-            if (key.equals("oneway")) {
+            if (key.startsWith("oneway") || key.endsWith("oneway")) {
                 if (OsmUtils.isReversed(value)) {
                     newValue = OsmUtils.trueval;
@@ -132,5 +140,6 @@
                     newValue = OsmUtils.reverseval;
                 }
-            } else if (key.equals("incline") || key.equals("direction")) {
+            } else if (key.startsWith("incline") || key.endsWith("incline")
+                    || key.startsWith("direction") || key.endsWith("direction")) {
                 PrefixSuffixSwitcher switcher = new PrefixSuffixSwitcher("up", "down");
                 newValue = switcher.apply(value);
