Index: applications/editors/josm/plugins/validator/src/org/openstreetmap/josm/plugins/validator/ErrorTreePanel.java
===================================================================
--- applications/editors/josm/plugins/validator/src/org/openstreetmap/josm/plugins/validator/ErrorTreePanel.java	(revision 2800)
+++ applications/editors/josm/plugins/validator/src/org/openstreetmap/josm/plugins/validator/ErrorTreePanel.java	(revision 2801)
@@ -77,5 +77,26 @@
 			return;
 		}
-		
+
+        // Remember the currently expanded rows
+        Set<Object> oldSelectedRows = new HashSet<Object>();
+        Enumeration<TreePath> expanded = getExpandedDescendants( new TreePath(getRoot()) );
+        if( expanded != null )
+        {
+            while( expanded.hasMoreElements() )
+            {
+                TreePath path = expanded.nextElement();
+                DefaultMutableTreeNode node = (DefaultMutableTreeNode) path.getLastPathComponent(); 
+                Object userObject = node.getUserObject();
+                if( userObject instanceof Severity )
+                    oldSelectedRows.add(userObject);
+                else if (userObject instanceof String)
+                {
+                    String msg = (String)userObject;
+                    msg = msg.substring(0, msg.lastIndexOf(" ("));
+                    oldSelectedRows.add(msg);
+                }
+            }
+        }
+        
 		Map<Severity, Bag<String, TestError>> errorTree = new HashMap<Severity, Bag<String, TestError>>();
 		for(Severity s : Severity.values())
@@ -89,4 +110,5 @@
 		}
 		
+        List<TreePath> expandedPaths = new ArrayList<TreePath>();
 		for(Severity s : Severity.values())
 		{
@@ -98,5 +120,8 @@
 			DefaultMutableTreeNode severityNode = new DefaultMutableTreeNode(s);
 			rootNode.add(severityNode);
-			
+            
+			if( oldSelectedRows.contains(s))
+                expandedPaths.add( new TreePath( new Object[] {rootNode, severityNode} ) );
+            
 			for(Entry<String, List<TestError>> msgErrors : severityErrors.entrySet()  )
 			{
@@ -106,5 +131,8 @@
 				DefaultMutableTreeNode messageNode = new DefaultMutableTreeNode(msg);
 				severityNode.add(messageNode);
-				
+
+                if( oldSelectedRows.contains(msgErrors.getKey()))
+                    expandedPaths.add( new TreePath( new Object[] {rootNode, severityNode, messageNode} ) );
+                
 				for (TestError error : errors) 
 				{
@@ -116,6 +144,9 @@
 		}
 
-		treeModel.setRoot(rootNode);
-		this.scrollRowToVisible(treeModel.getChildCount(rootNode)-1);
+        treeModel.setRoot(rootNode);
+        for( TreePath path : expandedPaths)
+        {
+            this.expandPath(path);
+        }
 	}
 
@@ -135,5 +166,5 @@
     public void expandAll()
     {
-        DefaultMutableTreeNode root = (DefaultMutableTreeNode) treeModel.getRoot();
+        DefaultMutableTreeNode root = getRoot();
         
         int row = 0;
