Index: trunk/src/org/openstreetmap/josm/gui/dialogs/InspectPrimitiveDialog.java
===================================================================
--- trunk/src/org/openstreetmap/josm/gui/dialogs/InspectPrimitiveDialog.java	(revision 16321)
+++ trunk/src/org/openstreetmap/josm/gui/dialogs/InspectPrimitiveDialog.java	(revision 16322)
@@ -7,4 +7,6 @@
 import java.awt.Dimension;
 import java.awt.GridBagLayout;
+import java.io.PrintWriter;
+import java.io.StringWriter;
 import java.text.Collator;
 import java.util.ArrayList;
@@ -118,9 +120,12 @@
         double scale = nc.getDist100Pixel();
 
-        final StringBuilder txtMappaint = new StringBuilder();
+        final StringWriter stringWriter = new StringWriter();
+        final PrintWriter txtMappaint = new PrintWriter(stringWriter);
         MapCSSStyleSource.STYLE_SOURCE_LOCK.readLock().lock();
         try {
             for (IPrimitive osm : sel) {
-                txtMappaint.append(tr("Styles Cache for \"{0}\":", osm.getDisplayName(DefaultNameFormatter.getInstance())));
+                String heading = tr("Styles for \"{0}\":", osm.getDisplayName(DefaultNameFormatter.getInstance()));
+                txtMappaint.println(heading);
+                txtMappaint.println(repeatString("=", heading.length()));
 
                 MultiCascade mc = new MultiCascade();
@@ -128,20 +133,27 @@
                 for (StyleSource s : elemstyles.getStyleSources()) {
                     if (s.active) {
-                        txtMappaint.append(tr("\n\n> applying {0} style \"{1}\"\n", getSort(s), s.getDisplayString()));
+                        heading = tr("{0} style \"{1}\"", getSort(s), s.getDisplayString());
+                        txtMappaint.println(heading);
+                        txtMappaint.println(repeatString("-", heading.length()));
                         s.apply(mc, osm, scale, false);
-                        txtMappaint.append(tr("\nRange:{0}", mc.range));
+                        txtMappaint.println(tr("Display range: {0}", mc.range));
                         for (Entry<String, Cascade> e : mc.getLayers()) {
-                            txtMappaint.append("\n ").append(e.getKey()).append(": \n").append(e.getValue());
+                            txtMappaint.println(tr("Layer {0}", e.getKey()));
+                            txtMappaint.print(" * ");
+                            txtMappaint.println(e.getValue());
                         }
-                    } else {
-                        txtMappaint.append(tr("\n\n> skipping \"{0}\" (not active)", s.getDisplayString()));
                     }
                 }
-                txtMappaint.append(tr("\n\nList of generated Styles:\n"));
+                txtMappaint.println();
+                heading = tr("List of generated Styles:");
+                txtMappaint.println(heading);
+                txtMappaint.println(repeatString("-", heading.length()));
                 StyleElementList sl = elemstyles.get(osm, scale, nc);
                 for (StyleElement s : sl) {
-                    txtMappaint.append(" * ").append(s).append('\n');
+                    txtMappaint.print(" * ");
+                    txtMappaint.println(s);
                 }
-                txtMappaint.append("\n\n");
+                txtMappaint.println();
+                txtMappaint.println();
             }
         } finally {
@@ -153,14 +165,19 @@
             StyleCache sc2 = selList.get(1).getCachedStyle();
             if (sc1 == sc2) {
-                txtMappaint.append(tr("The 2 selected objects have identical style caches."));
+                txtMappaint.println(tr("The 2 selected objects have identical style caches."));
             }
             if (!sc1.equals(sc2)) {
-                txtMappaint.append(tr("The 2 selected objects have different style caches."));
+                txtMappaint.println(tr("The 2 selected objects have different style caches."));
             }
             if (sc1 != sc2 && sc1.equals(sc2)) {
-                txtMappaint.append(tr("Warning: The 2 selected objects have equal, but not identical style caches."));
-            }
-        }
-        return txtMappaint.toString();
+                txtMappaint.println(tr("Warning: The 2 selected objects have equal, but not identical style caches."));
+            }
+        }
+        return stringWriter.toString();
+    }
+
+    private static String repeatString(String string, int count) {
+        // Java 11: use String.repeat
+        return new String(new char[count]).replace("\0", string);
     }
 
@@ -201,7 +218,7 @@
     private static String getSort(StyleSource s) {
         if (s instanceof MapCSSStyleSource) {
-            return tr("mapcss");
+            return "MapCSS";
         } else {
-            return tr("unknown");
+            return tr("UNKNOWN");
         }
     }
Index: trunk/src/org/openstreetmap/josm/gui/mappaint/Range.java
===================================================================
--- trunk/src/org/openstreetmap/josm/gui/mappaint/Range.java	(revision 16321)
+++ trunk/src/org/openstreetmap/josm/gui/mappaint/Range.java	(revision 16322)
@@ -103,5 +103,5 @@
     @Override
     public String toString() {
-        return String.format("|s%s-%s", lower, upper);
+        return String.format("|z%.4f-%.4f", lower, upper);
     }
 
Index: trunk/test/unit/org/openstreetmap/josm/gui/dialogs/InspectPrimitiveDialogTest.java
===================================================================
--- trunk/test/unit/org/openstreetmap/josm/gui/dialogs/InspectPrimitiveDialogTest.java	(revision 16321)
+++ trunk/test/unit/org/openstreetmap/josm/gui/dialogs/InspectPrimitiveDialogTest.java	(revision 16322)
@@ -115,15 +115,14 @@
         // CHECKSTYLE.OFF: LineLength
         String baseText =
-                "Styles Cache for \"node\":\n" +
-                "\n" +
-                "> applying mapcss style \"JOSM default (MapCSS)\"\n" +
-                "\n" +
-                "Range:|s119.4328566955879-Infinity\n" +
-                " default: \n" +
-                "Cascade{ font-size:8.0; major-z-index:4.95; symbol-fill-color:#FF0000; symbol-shape:Keyword{square}; symbol-size:6.0; symbol-stroke-color:#FF0000; }\n" +
-                "\n" +
-                "> skipping \"Potlatch 2\" (not active)\n" +
+                "Styles for \"node\":\n" +
+                "==================\n" +
+                "MapCSS style \"JOSM default (MapCSS)\"\n" +
+                "------------------------------------\n" +
+                "Display range: |z119.4329-Infinity\n" +
+                "Layer default\n" +
+                " * Cascade{ font-size:8.0; major-z-index:4.95; symbol-fill-color:#FF0000; symbol-shape:Keyword{square}; symbol-size:6.0; symbol-stroke-color:#FF0000; }\n" +
                 "\n" +
                 "List of generated Styles:\n" +
+                "-------------------------\n" +
                 " * NodeElement{z_idx=[4.95/0.0/0.0]  symbol=[symbolShape=SQUARE size=6 stroke=java.awt.BasicStroke strokeColor=java.awt.Color[r=255,g=0,b=0] fillColor=java.awt.Color[r=255,g=0,b=0]]}\n" +
                 "\n" +
@@ -144,5 +143,5 @@
             ds.addPrimitive(n);
             ds.addSelected(n);
-            assertEquals(baseText + baseText + "The 2 selected objects have identical style caches.",
+            assertEquals(baseText + baseText + "The 2 selected objects have identical style caches.\n",
                     InspectPrimitiveDialog.buildMapPaintText().replaceAll("@(\\p{XDigit})+", ""));
         } finally {
