Index: /trunk/src/org/openstreetmap/josm/data/osm/DefaultNameFormatter.java
===================================================================
--- /trunk/src/org/openstreetmap/josm/data/osm/DefaultNameFormatter.java	(revision 16936)
+++ /trunk/src/org/openstreetmap/josm/data/osm/DefaultNameFormatter.java	(revision 16937)
@@ -7,5 +7,4 @@
 import static org.openstreetmap.josm.tools.I18n.trn;
 
-import java.awt.ComponentOrientation;
 import java.util.ArrayList;
 import java.util.Arrays;
@@ -16,5 +15,4 @@
 import java.util.LinkedList;
 import java.util.List;
-import java.util.Locale;
 import java.util.Map;
 import java.util.Objects;
@@ -44,5 +42,12 @@
  */
 public class DefaultNameFormatter implements NameFormatter, HistoryNameFormatter {
-
+    /**
+     * U+2068 FIRST STRONG ISOLATE
+     */
+    public static final char BIDI_FIRST_STRONG_ISOLATE = '\u2068';
+    /**
+     * U+2069 POP DIRECTIONAL ISOLATE
+     */
+    public static final char BIDI_POP_DIRECTIONAL_ISOLATE = '\u2069';
     private static DefaultNameFormatter instance;
 
@@ -142,10 +147,10 @@
                     primitive.getUniqueId() : primitive.getId();
             if (Config.getPref().getBoolean("osm-primitives.showversion") && version > 0) {
-                name.append(tr(" [id: {0}, v{1}]", id, version));
+                bdi(name, tr(" [id: {0}, v{1}]", id, version));
             } else {
-                name.append(tr(" [id: {0}]", id));
+                bdi(name, tr(" [id: {0}]", id));
             }
         } else if (Config.getPref().getBoolean("osm-primitives.showversion")) {
-            name.append(tr(" [v{0}]", version));
+            bdi(name, tr(" [v{0}]", version));
         }
     }
@@ -206,12 +211,11 @@
                     n = node.isNew() ? tr("node") : Long.toString(node.getId());
                 }
-                name.append(n);
+                bdi(name, n);
             } else {
                 preset.nameTemplate.appendText(name, (TemplateEngineDataProvider) node);
             }
             if (node.isLatLonKnown() && Config.getPref().getBoolean("osm-primitives.showcoor")) {
-                name.append(" \u200E(");
-                name.append(CoordinateFormatManager.getDefaultFormat().toString(node, ", "));
-                name.append(')');
+                name.append(' ');
+                bdiParen(name, CoordinateFormatManager.getDefaultFormat().toString(node, ", "));
             }
         }
@@ -235,17 +239,4 @@
     public String format(IWay<?> way) {
         StringBuilder name = new StringBuilder();
-
-        char mark;
-        // If current language is left-to-right (almost all languages)
-        if (ComponentOrientation.getOrientation(Locale.getDefault()).isLeftToRight()) {
-            // will insert Left-To-Right Mark to ensure proper display of text in the case when object name is right-to-left
-            mark = '\u200E';
-        } else {
-            // otherwise will insert Right-To-Left Mark to ensure proper display in the opposite case
-            mark = '\u200F';
-        }
-        // Initialize base direction of the string
-        name.append(mark);
-
         if (way.isIncomplete()) {
             name.append(tr("incomplete"));
@@ -293,5 +284,5 @@
                 }
 
-                name.append(n);
+                bdi(name, n);
             } else {
                 preset.nameTemplate.appendText(name, (TemplateEngineDataProvider) way);
@@ -303,5 +294,6 @@
             /* I18n: count of nodes as parameter */
             String nodes = trn("{0} node", "{0} nodes", nodesNo, nodesNo);
-            name.append(mark).append(" (").append(nodes).append(')');
+            name.append(" ");
+            bdiParen(name, nodes);
         }
         decorateNameWithId(name, way);
@@ -643,4 +635,28 @@
 
     /**
+     * Wraps the content in a bidirectional isolate
+     * @param builder the builder to append to
+     * @param content the text to wrap
+     */
+    private static void bdi(StringBuilder builder, String content) {
+        builder.append(BIDI_FIRST_STRONG_ISOLATE);
+        builder.append(content);
+        builder.append(BIDI_POP_DIRECTIONAL_ISOLATE);
+    }
+
+    /**
+     * Wraps the content in parenthesis and a bidirectional isolate
+     * @param builder the builder to append to
+     * @param content the text to wrap
+     */
+    private static void bdiParen(StringBuilder builder, String content) {
+        builder.append(BIDI_FIRST_STRONG_ISOLATE);
+        builder.append('(');
+        builder.append(content);
+        builder.append(')');
+        builder.append(BIDI_POP_DIRECTIONAL_ISOLATE);
+    }
+
+    /**
      * Builds a default tooltip text for an HistoryOsmPrimitive <code>primitive</code>.
      *
Index: /trunk/src/org/openstreetmap/josm/gui/datatransfer/PrimitiveTransferable.java
===================================================================
--- /trunk/src/org/openstreetmap/josm/gui/datatransfer/PrimitiveTransferable.java	(revision 16936)
+++ /trunk/src/org/openstreetmap/josm/gui/datatransfer/PrimitiveTransferable.java	(revision 16937)
@@ -91,5 +91,5 @@
             sb.append(OsmPrimitiveType.from(primitive).getAPIName()).append(' ').append(primitive.getId());
         }
-        return sb.toString().replace("\u200E", "").replace("\u200F", "");
+        return sb.toString();
     }
 }
Index: /trunk/test/unit/org/openstreetmap/josm/data/osm/DefaultNameFormatterTest.java
===================================================================
--- /trunk/test/unit/org/openstreetmap/josm/data/osm/DefaultNameFormatterTest.java	(revision 16936)
+++ /trunk/test/unit/org/openstreetmap/josm/data/osm/DefaultNameFormatterTest.java	(revision 16937)
@@ -124,18 +124,20 @@
     @Test
     public void testWayName() {
-        assertEquals("building (0 nodes)", getFormattedWayName("building=yes"));
-        assertEquals("House number 123 (0 nodes)", getFormattedWayName("building=yes addr:housenumber=123"));
-        assertEquals("House number 123 at FooStreet (0 nodes)", getFormattedWayName("building=yes addr:housenumber=123 addr:street=FooStreet"));
-        assertEquals("House FooName (0 nodes)", getFormattedWayName("building=yes addr:housenumber=123 addr:housename=FooName"));
+        assertEquals("\u2068building\u2069 \u2068(0 nodes)\u2069",
+                getFormattedWayName("building=yes"));
+        assertEquals("\u2068House number 123\u2069 \u2068(0 nodes)\u2069",
+                getFormattedWayName("building=yes addr:housenumber=123"));
+        assertEquals("\u2068House number 123 at FooStreet\u2069 \u2068(0 nodes)\u2069",
+                getFormattedWayName("building=yes addr:housenumber=123 addr:street=FooStreet"));
+        assertEquals("\u2068House FooName\u2069 \u2068(0 nodes)\u2069",
+                getFormattedWayName("building=yes addr:housenumber=123 addr:housename=FooName"));
     }
 
     static String getFormattedRelationName(String tagsString) {
-        return DefaultNameFormatter.getInstance().format((Relation) OsmUtils.createPrimitive("relation " + tagsString))
-                .replace("\u200E", "").replace("\u200F", "");
+        return DefaultNameFormatter.getInstance().format((Relation) OsmUtils.createPrimitive("relation " + tagsString));
     }
 
     static String getFormattedWayName(String tagsString) {
-        return DefaultNameFormatter.getInstance().format((Way) OsmUtils.createPrimitive("way " + tagsString))
-                .replace("\u200E", "").replace("\u200F", "");
+        return DefaultNameFormatter.getInstance().format((Way) OsmUtils.createPrimitive("way " + tagsString));
     }
 
@@ -150,5 +152,10 @@
         List<Node> nodes = IntStream.rangeClosed(1, 10).mapToObj(i -> new Node(i, 1))
                 .collect(Collectors.toList());
-        assertEquals("<ul><li>1</li><li>2</li><li>3</li><li>4</li><li>...</li></ul>",
+        assertEquals("<ul>" +
+                        "<li>\u20681\u2069</li>" +
+                        "<li>\u20682\u2069</li>" +
+                        "<li>\u20683\u2069</li>" +
+                        "<li>\u20684\u2069</li>" +
+                        "<li>...</li></ul>",
                 DefaultNameFormatter.getInstance().formatAsHtmlUnorderedList(nodes, 5));
     }
