Index: trunk/src/org/openstreetmap/josm/gui/dialogs/validator/ValidatorTreePanel.java
===================================================================
--- trunk/src/org/openstreetmap/josm/gui/dialogs/validator/ValidatorTreePanel.java	(revision 14859)
+++ trunk/src/org/openstreetmap/josm/gui/dialogs/validator/ValidatorTreePanel.java	(revision 14860)
@@ -12,4 +12,5 @@
 import java.util.List;
 import java.util.Map;
+import java.util.Map.Entry;
 import java.util.Set;
 import java.util.function.Consumer;
@@ -164,5 +165,5 @@
 
         // Remember the currently expanded rows
-        Set<Object> oldSelectedRows = new HashSet<>();
+        Set<Object> oldExpandedRows = new HashSet<>();
         Enumeration<TreePath> expanded = getExpandedDescendants(new TreePath(getRoot()));
         if (expanded != null) {
@@ -172,5 +173,5 @@
                 Object userObject = node.getUserObject();
                 if (userObject instanceof Severity) {
-                    oldSelectedRows.add(userObject);
+                    oldExpandedRows.add(userObject);
                 } else if (userObject instanceof String) {
                     String msg = (String) userObject;
@@ -179,5 +180,5 @@
                         msg = msg.substring(0, index);
                     }
-                    oldSelectedRows.add(msg);
+                    oldExpandedRows.add(msg);
                 }
             }
@@ -195,25 +196,24 @@
 
         final List<TreePath> expandedPaths = new ArrayList<>();
-        errorsBySeverityMessageDescription.forEach((severity, errorsByMessageDescription) -> {
+        for (Entry<Severity, Map<String, Map<String, List<TestError>>>> entry: errorsBySeverityMessageDescription.entrySet()) {
+            Severity severity = entry.getKey();
+            Map<String, Map<String, List<TestError>>> errorsByMessageDescription = entry.getValue();
+
             // Severity node
             final DefaultMutableTreeNode severityNode = new GroupTreeNode(severity);
             rootNode.add(severityNode);
 
-            if (oldSelectedRows.contains(severity)) {
-                expandedPaths.add(new TreePath(new Object[] {rootNode, severityNode}));
-            }
-
             final Map<String, List<TestError>> errorsWithEmptyMessageByDescription = errorsByMessageDescription.get("");
             if (errorsWithEmptyMessageByDescription != null) {
-                errorsWithEmptyMessageByDescription.forEach((description, errors) -> {
-                    final String msg = tr("{0} ({1})", description, errors.size());
+                errorsWithEmptyMessageByDescription.forEach((description, noDescriptionErrors) -> {
+                    final String msg = tr("{0} ({1})", description, noDescriptionErrors.size());
                     final DefaultMutableTreeNode messageNode = new DefaultMutableTreeNode(msg);
                     severityNode.add(messageNode);
 
-                    if (oldSelectedRows.contains(description)) {
-                        expandedPaths.add(new TreePath(new Object[] {rootNode, severityNode, messageNode}));
+                    if (oldExpandedRows.contains(description)) {
+                        expandedPaths.add(new TreePath(new Object[] { rootNode, severityNode, messageNode }));
                     }
-
-                    errors.stream().map(DefaultMutableTreeNode::new).forEach(messageNode::add);
+                    // add the matching errors to the current node
+                    noDescriptionErrors.stream().map(DefaultMutableTreeNode::new).forEach(messageNode::add);
                 });
             }
@@ -228,5 +228,5 @@
                     groupNode = new GroupTreeNode(message);
                     severityNode.add(groupNode);
-                    if (oldSelectedRows.contains(message)) {
+                    if (oldExpandedRows.contains(message)) {
                         expandedPaths.add(new TreePath(new Object[] {rootNode, severityNode, groupNode}));
                     }
@@ -235,14 +235,14 @@
                 }
 
-                errorsByDescription.forEach((description, errors) -> {
+                errorsByDescription.forEach((description, errorsWithDescription) -> {
                     boolean emptyDescription = description == null || description.isEmpty();
                     // Message node
                     final String msg;
                     if (groupNode != null) {
-                        msg = tr("{0} ({1})", description, errors.size());
+                        msg = tr("{0} ({1})", description, errorsWithDescription.size());
                     } else if (emptyDescription) {
-                        msg = tr("{0} ({1})", message, errors.size());
+                        msg = tr("{0} ({1})", message, errorsWithDescription.size());
                     } else {
-                        msg = tr("{0} - {1} ({2})", message, description, errors.size());
+                        msg = tr("{0} - {1} ({2})", message, description, errorsWithDescription.size());
                     }
                     final DefaultMutableTreeNode messageNode = new DefaultMutableTreeNode(msg);
@@ -253,5 +253,5 @@
                     }
 
-                    if (oldSelectedRows.contains(description) || (emptyDescription && oldSelectedRows.contains(message))) {
+                    if (oldExpandedRows.contains(description) || (emptyDescription && oldExpandedRows.contains(message))) {
                         if (groupNode != null) {
                             expandedPaths.add(new TreePath(new Object[] {rootNode, severityNode, groupNode, messageNode}));
@@ -261,9 +261,9 @@
                     }
 
-                 // add the matching errors to the current node
-                    errors.stream().map(DefaultMutableTreeNode::new).forEach(messageNode::add);
+                    // add the matching errors to the current node
+                    errorsWithDescription.stream().map(DefaultMutableTreeNode::new).forEach(messageNode::add);
                 });
             });
-        });
+        }
 
         valTreeModel.setRoot(rootNode);
