Index: /trunk/src/org/openstreetmap/josm/data/osm/DefaultNameFormatter.java
===================================================================
--- /trunk/src/org/openstreetmap/josm/data/osm/DefaultNameFormatter.java	(revision 16949)
+++ /trunk/src/org/openstreetmap/josm/data/osm/DefaultNameFormatter.java	(revision 16950)
@@ -7,4 +7,5 @@
 import static org.openstreetmap.josm.tools.I18n.trn;
 
+import java.awt.ComponentOrientation;
 import java.util.ArrayList;
 import java.util.Arrays;
@@ -15,4 +16,5 @@
 import java.util.LinkedList;
 import java.util.List;
+import java.util.Locale;
 import java.util.Map;
 import java.util.Objects;
@@ -42,12 +44,5 @@
  */
 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;
 
@@ -147,10 +142,10 @@
                     primitive.getUniqueId() : primitive.getId();
             if (Config.getPref().getBoolean("osm-primitives.showversion") && version > 0) {
-                bdi(name, tr(" [id: {0}, v{1}]", id, version));
+                name.append(tr(" [id: {0}, v{1}]", id, version));
             } else {
-                bdi(name, tr(" [id: {0}]", id));
+                name.append(tr(" [id: {0}]", id));
             }
         } else if (Config.getPref().getBoolean("osm-primitives.showversion")) {
-            bdi(name, tr(" [v{0}]", version));
+            name.append(tr(" [v{0}]", version));
         }
     }
@@ -211,11 +206,12 @@
                     n = node.isNew() ? tr("node") : Long.toString(node.getId());
                 }
-                bdi(name, n);
+                name.append(n);
             } else {
                 preset.nameTemplate.appendText(name, (TemplateEngineDataProvider) node);
             }
             if (node.isLatLonKnown() && Config.getPref().getBoolean("osm-primitives.showcoor")) {
-                name.append(' ');
-                bdiParen(name, CoordinateFormatManager.getDefaultFormat().toString(node, ", "));
+                name.append(" \u200E(");
+                name.append(CoordinateFormatManager.getDefaultFormat().toString(node, ", "));
+                name.append(')');
             }
         }
@@ -239,4 +235,17 @@
     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"));
@@ -284,5 +293,5 @@
                 }
 
-                bdi(name, n);
+                name.append(n);
             } else {
                 preset.nameTemplate.appendText(name, (TemplateEngineDataProvider) way);
@@ -294,6 +303,5 @@
             /* I18n: count of nodes as parameter */
             String nodes = trn("{0} node", "{0} nodes", nodesNo, nodesNo);
-            name.append(" ");
-            bdiParen(name, nodes);
+            name.append(mark).append(" (").append(nodes).append(')');
         }
         decorateNameWithId(name, way);
@@ -635,28 +643,4 @@
 
     /**
-     * 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 16949)
+++ /trunk/src/org/openstreetmap/josm/gui/datatransfer/PrimitiveTransferable.java	(revision 16950)
@@ -91,5 +91,5 @@
             sb.append(OsmPrimitiveType.from(primitive).getAPIName()).append(' ').append(primitive.getId());
         }
-        return sb.toString();
+        return sb.toString().replace("\u200E", "").replace("\u200F", "");
     }
 }
Index: /trunk/src/org/openstreetmap/josm/gui/dialogs/InspectPrimitiveDialog.java
===================================================================
--- /trunk/src/org/openstreetmap/josm/gui/dialogs/InspectPrimitiveDialog.java	(revision 16949)
+++ /trunk/src/org/openstreetmap/josm/gui/dialogs/InspectPrimitiveDialog.java	(revision 16950)
@@ -129,7 +129,5 @@
         try {
             for (IPrimitive osm : sel) {
-                String heading = tr("Styles for \"{0}\":", osm.getDisplayName(DefaultNameFormatter.getInstance())
-                        .replace(Character.toString(DefaultNameFormatter.BIDI_FIRST_STRONG_ISOLATE), "")
-                        .replace(Character.toString(DefaultNameFormatter.BIDI_POP_DIRECTIONAL_ISOLATE), ""));
+                String heading = tr("Styles for \"{0}\":", osm.getDisplayName(DefaultNameFormatter.getInstance()));
                 txtMappaint.println(heading);
                 txtMappaint.println(repeatString("=", heading.length()));
Index: /trunk/test/unit/org/openstreetmap/josm/data/osm/DefaultNameFormatterTest.java
===================================================================
--- /trunk/test/unit/org/openstreetmap/josm/data/osm/DefaultNameFormatterTest.java	(revision 16949)
+++ /trunk/test/unit/org/openstreetmap/josm/data/osm/DefaultNameFormatterTest.java	(revision 16950)
@@ -124,20 +124,18 @@
     @Test
     public void testWayName() {
-        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"));
+        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"));
     }
 
     static String getFormattedRelationName(String tagsString) {
-        return DefaultNameFormatter.getInstance().format((Relation) OsmUtils.createPrimitive("relation " + tagsString));
+        return DefaultNameFormatter.getInstance().format((Relation) OsmUtils.createPrimitive("relation " + tagsString))
+                .replace("\u200E", "").replace("\u200F", "");
     }
 
     static String getFormattedWayName(String tagsString) {
-        return DefaultNameFormatter.getInstance().format((Way) OsmUtils.createPrimitive("way " + tagsString));
+        return DefaultNameFormatter.getInstance().format((Way) OsmUtils.createPrimitive("way " + tagsString))
+                .replace("\u200E", "").replace("\u200F", "");
     }
 
@@ -152,10 +150,5 @@
         List<Node> nodes = IntStream.rangeClosed(1, 10).mapToObj(i -> new Node(i, 1))
                 .collect(Collectors.toList());
-        assertEquals("<ul>" +
-                        "<li>\u20681\u2069</li>" +
-                        "<li>\u20682\u2069</li>" +
-                        "<li>\u20683\u2069</li>" +
-                        "<li>\u20684\u2069</li>" +
-                        "<li>...</li></ul>",
+        assertEquals("<ul><li>1</li><li>2</li><li>3</li><li>4</li><li>...</li></ul>",
                 DefaultNameFormatter.getInstance().formatAsHtmlUnorderedList(nodes, 5));
     }
Index: /trunk/test/unit/org/openstreetmap/josm/data/validation/util/MultipleNameVisitorTest.java
===================================================================
--- /trunk/test/unit/org/openstreetmap/josm/data/validation/util/MultipleNameVisitorTest.java	(revision 16949)
+++ /trunk/test/unit/org/openstreetmap/josm/data/validation/util/MultipleNameVisitorTest.java	(revision 16950)
@@ -33,5 +33,5 @@
         MultipleNameVisitor visitor = new MultipleNameVisitor();
         visitor.visit(Arrays.asList(new Way(), new Way()));
-        assertEquals("2 ways: \u20680\u2069 \u2068(0 nodes)\u2069, \u20680\u2069 \u2068(0 nodes)\u2069", visitor.toString());
+        assertEquals("2 ways: ‎0‎ (0 nodes), ‎0‎ (0 nodes)", visitor.toString());
     }
 
@@ -46,5 +46,5 @@
                 TestUtils.newWay("addr:housename=Stark"),
                 TestUtils.newRelation("type=route")));
-        assertEquals("3 objects: \u2068foo\u2069, \u2068House Stark\u2069 \u2068(0 nodes)\u2069, route (0, 0 members)", visitor.toString());
+        assertEquals("3 objects: foo, ‎House Stark‎ (0 nodes), route (0, 0 members)", visitor.toString());
     }
 }
