Index: trunk/src/org/openstreetmap/josm/gui/dialogs/validator/ValidatorTreePanel.java
===================================================================
--- trunk/src/org/openstreetmap/josm/gui/dialogs/validator/ValidatorTreePanel.java	(revision 14906)
+++ trunk/src/org/openstreetmap/josm/gui/dialogs/validator/ValidatorTreePanel.java	(revision 14907)
@@ -184,9 +184,5 @@
                         oldExpandedRows.add(userObject);
                     } else if (userObject instanceof String) {
-                        String msg = (String) userObject;
-                        int index = msg.lastIndexOf(" (");
-                        if (index > 0) {
-                            msg = msg.substring(0, index);
-                        }
+                        String msg = removeSize((String) userObject);
                         oldExpandedRows.add(msg);
                     }
@@ -215,5 +211,5 @@
 
             if (oldExpandedRows.contains(severity)) {
-                expandedPaths.add(new TreePath(new Object[] {rootNode, severityNode}));
+                expandedPaths.add(new TreePath(severityNode.getPath()));
             }
 
@@ -221,10 +217,10 @@
             if (errorsWithEmptyMessageByDescription != null) {
                 errorsWithEmptyMessageByDescription.forEach((description, noDescriptionErrors) -> {
-                    final String msg = tr("{0} ({1})", description, noDescriptionErrors.size());
+                    final String msg = addSize(description, noDescriptionErrors);
                     final DefaultMutableTreeNode messageNode = new DefaultMutableTreeNode(msg);
                     severityNode.add(messageNode);
 
                     if (oldExpandedRows.contains(description)) {
-                        expandedPaths.add(new TreePath(new Object[] {rootNode, severityNode, messageNode}));
+                        expandedPaths.add(new TreePath(messageNode.getPath()));
                     }
                     // add the matching errors to the current node
@@ -243,5 +239,5 @@
                     severityNode.add(groupNode);
                     if (oldExpandedRows.contains(message)) {
-                        expandedPaths.add(new TreePath(new Object[] {rootNode, severityNode, groupNode}));
+                        expandedPaths.add(new TreePath(groupNode.getPath()));
                     }
                 } else {
@@ -250,27 +246,20 @@
 
                 errorsByDescription.forEach((description, errorsWithDescription) -> {
-                    boolean emptyDescription = description == null || description.isEmpty();
                     // Message node
-                    final String msg;
+                    final String searchMsg;
                     if (groupNode != null) {
-                        msg = tr("{0} ({1})", description, errorsWithDescription.size());
-                    } else if (emptyDescription) {
-                        msg = tr("{0} ({1})", message, errorsWithDescription.size());
+                        searchMsg = description;
+                    } else if (description == null || description.isEmpty()) {
+                        searchMsg = message;
                     } else {
-                        msg = tr("{0} - {1} ({2})", message, description, errorsWithDescription.size());
+                        searchMsg = message + " - " + description;
                     }
+                    final String msg = addSize(searchMsg, errorsWithDescription);
+
                     final DefaultMutableTreeNode messageNode = new DefaultMutableTreeNode(msg);
-                    if (groupNode != null) {
-                        groupNode.add(messageNode);
-                    } else {
-                        severityNode.add(messageNode);
-                    }
-
-                    if (oldExpandedRows.contains(description) || (emptyDescription && oldExpandedRows.contains(message))) {
-                        if (groupNode != null) {
-                            expandedPaths.add(new TreePath(new Object[] {rootNode, severityNode, groupNode, messageNode}));
-                        } else {
-                            expandedPaths.add(new TreePath(new Object[] {rootNode, severityNode, messageNode}));
-                        }
+                    DefaultMutableTreeNode  currNode = groupNode != null ? groupNode : severityNode;
+                    currNode.add(messageNode);
+                    if (oldExpandedRows.contains(searchMsg)) {
+                        expandedPaths.add(new TreePath(messageNode.getPath()));
                     }
 
@@ -300,9 +289,5 @@
             String msg = null;
             if (searchObject instanceof String) {
-                msg = (String) searchObject;
-                int index = msg.lastIndexOf(" (");
-                if (index > 0) {
-                    msg = msg.substring(0, index);
-                }
+                msg = removeSize((String) searchObject);
             }
             String searchString = msg;
@@ -338,4 +323,13 @@
     }
 
+    private static String addSize(String msg, Collection<?> coll) {
+        return msg + " (" + coll.size() + ")";
+    }
+
+    private static String removeSize(String msg) {
+        int index = msg.lastIndexOf(" (");
+        return index > 0 ? msg.substring(0, index) : msg;
+    }
+
     /**
      * Sort list of errors in place (#8517).
