Index: trunk/src/org/openstreetmap/josm/io/ValidatorErrorWriter.java
===================================================================
--- trunk/src/org/openstreetmap/josm/io/ValidatorErrorWriter.java	(revision 17988)
+++ trunk/src/org/openstreetmap/josm/io/ValidatorErrorWriter.java	(revision 17989)
@@ -11,10 +11,11 @@
 import java.util.ArrayList;
 import java.util.Collection;
+import java.util.Comparator;
 import java.util.HashMap;
+import java.util.LinkedHashSet;
 import java.util.List;
 import java.util.Map;
 import java.util.Map.Entry;
 import java.util.Set;
-import java.util.TreeSet;
 import java.util.stream.Collectors;
 
@@ -63,5 +64,6 @@
      */
     public void write(Collection<TestError> validationErrors) throws IOException {
-        Set<Test> analysers = validationErrors.stream().map(TestError::getTester).collect(Collectors.toCollection(TreeSet::new));
+        Set<Test> analysers = validationErrors.stream().map(TestError::getTester)
+                .sorted(Comparator.comparing(t -> t.getSource().toString())).collect(Collectors.toCollection(LinkedHashSet::new));
         String timestamp = Instant.now().toString();
 
@@ -100,4 +102,5 @@
                         out.println("/>");
                         for (OsmPrimitive p : error.getPrimitives()) {
+                            out.print("    ");
                             p.accept(osmWriter);
                         }
@@ -126,8 +129,8 @@
                 out.println("  </analyser>");
             }
+
+            out.println("</analysers>");
+            out.flush();
         }
-
-        out.println("</analysers>");
-        out.flush();
     }
 
