Index: /trunk/src/org/openstreetmap/josm/data/validation/tests/CrossingWays.java
===================================================================
--- /trunk/src/org/openstreetmap/josm/data/validation/tests/CrossingWays.java	(revision 14467)
+++ /trunk/src/org/openstreetmap/josm/data/validation/tests/CrossingWays.java	(revision 14468)
@@ -38,4 +38,14 @@
     static final String LANDUSE = "landuse";
 
+    private static final class MessageHelper {
+        final String message;
+        final int code;
+
+        MessageHelper(String message, int code) {
+            this.message = message;
+            this.code = code;
+        }
+    }
+
     /**
      * Type of way. Entries have to be declared in alphabetical order, see sort below.
@@ -65,5 +75,5 @@
     private final Map<List<Way>, List<WaySegment>> seenWays = new HashMap<>(50);
 
-    private final int code;
+    protected final int code;
 
     /**
@@ -120,5 +130,5 @@
 
         @Override
-        String createMessage(Way w1, Way w2) {
+        MessageHelper createMessage(Way w1, Way w2) {
             WayType[] types = {WayType.of(w1), WayType.of(w2)};
             Arrays.sort(types);
@@ -127,16 +137,16 @@
                 switch(types[0]) {
                     case BUILDING:
-                        return tr("Crossing buildings");
+                        return new MessageHelper(tr("Crossing buildings"), 610);
                     case HIGHWAY:
-                        return tr("Crossing highways");
+                        return new MessageHelper(tr("Crossing highways"), 620);
                     case RAILWAY:
-                        return tr("Crossing railways");
+                        return new MessageHelper(tr("Crossing railways"), 630);
                     case RESIDENTIAL_AREA:
-                        return tr("Crossing residential areas");
+                        return new MessageHelper(tr("Crossing residential areas"), 640);
                     case WATERWAY:
-                        return tr("Crossing waterways");
+                        return new MessageHelper(tr("Crossing waterways"), 650);
                     case WAY:
                     default:
-                        return tr("Crossing ways");
+                        return new MessageHelper(tr("Crossing ways"), CROSSING_WAYS);
                 }
             } else {
@@ -145,32 +155,32 @@
                         switch (types[1]) {
                             case HIGHWAY:
-                                return tr("Crossing building/highway");
+                                return new MessageHelper(tr("Crossing building/highway"), 612);
                             case RAILWAY:
-                                return tr("Crossing building/railway");
+                                return new MessageHelper(tr("Crossing building/railway"), 613);
                             case RESIDENTIAL_AREA:
-                                return tr("Crossing building/residential area");
+                                return new MessageHelper(tr("Crossing building/residential area"), 614);
                             case WATERWAY:
-                                return tr("Crossing building/waterway");
+                                return new MessageHelper(tr("Crossing building/waterway"), 615);
                             case WAY:
                             default:
-                                return tr("Crossing building/way");
+                                return new MessageHelper(tr("Crossing building/way"), 611);
                         }
                     case HIGHWAY:
                         switch (types[1]) {
                             case RAILWAY:
-                                return tr("Crossing highway/railway");
+                                return new MessageHelper(tr("Crossing highway/railway"), 622);
                             case WATERWAY:
-                                return tr("Crossing highway/waterway");
+                                return new MessageHelper(tr("Crossing highway/waterway"), 623);
                             case WAY:
                             default:
-                                return tr("Crossing highway/way");
+                                return new MessageHelper(tr("Crossing highway/way"), 621);
                         }
                     case RAILWAY:
                         switch (types[1]) {
                             case WATERWAY:
-                                return tr("Crossing railway/waterway");
+                                return new MessageHelper(tr("Crossing railway/waterway"), 632);
                             case WAY:
                             default:
-                                return tr("Crossing railway/way");
+                                return new MessageHelper(tr("Crossing railway/way"), 631);
                         }
                     case RESIDENTIAL_AREA:
@@ -178,9 +188,9 @@
                             case WAY:
                             default:
-                                return tr("Crossing residential area/way");
+                                return new MessageHelper(tr("Crossing residential area/way"), 641);
                         }
                     case WATERWAY:
                     default:
-                        return tr("Crossing waterway/way");
+                        return new MessageHelper(tr("Crossing waterway/way"), 651);
                 }
             }
@@ -214,6 +224,6 @@
 
         @Override
-        String createMessage(Way w1, Way w2) {
-            return tr("Crossing boundaries");
+        MessageHelper createMessage(Way w1, Way w2) {
+            return new MessageHelper(tr("Crossing boundaries"), CROSSING_BOUNDARIES);
         }
 
@@ -251,6 +261,6 @@
 
         @Override
-        String createMessage(Way w1, Way w2) {
-            return tr("Crossing barriers");
+        MessageHelper createMessage(Way w1, Way w2) {
+            return new MessageHelper(tr("Crossing barriers"), CROSSING_BARRIERS);
         }
     }
@@ -286,6 +296,6 @@
 
         @Override
-        String createMessage(Way w1, Way w2) {
-            return tr("Self-crossing ways");
+        MessageHelper createMessage(Way w1, Way w2) {
+            return new MessageHelper(tr("Self-crossing ways"), CROSSING_SELF);
         }
     }
@@ -341,5 +351,5 @@
     abstract boolean ignoreWaySegmentCombination(Way w1, Way w2);
 
-    abstract String createMessage(Way w1, Way w2);
+    abstract MessageHelper createMessage(Way w1, Way w2);
 
     @Override
@@ -357,5 +367,5 @@
             final EastNorth en2 = es1.getSecondNode().getEastNorth();
             if (en1 == null || en2 == null) {
-                Logging.warn("Crossing ways test skipped "+es1);
+                Logging.warn("Crossing ways test skipped " + es1);
                 continue;
             }
@@ -378,7 +388,7 @@
                         highlight.add(es2);
 
-                        final String message = createMessage(es1.way, es2.way);
-                        errors.add(TestError.builder(this, Severity.WARNING, code)
-                                .message(message)
+                        final MessageHelper message = createMessage(es1.way, es2.way);
+                        errors.add(TestError.builder(this, Severity.WARNING, message.code)
+                                .message(message.message)
                                 .primitives(prims)
                                 .highlightWaySegments(highlight)
Index: /trunk/src/org/openstreetmap/josm/data/validation/tests/UnconnectedWays.java
===================================================================
--- /trunk/src/org/openstreetmap/josm/data/validation/tests/UnconnectedWays.java	(revision 14467)
+++ /trunk/src/org/openstreetmap/josm/data/validation/tests/UnconnectedWays.java	(revision 14468)
@@ -46,4 +46,5 @@
  */
 public abstract class UnconnectedWays extends Test {
+    private final int code;
 
     /**
@@ -51,4 +52,5 @@
      */
     public static class UnconnectedHighways extends UnconnectedWays {
+        static final int UNCONNECTED_HIGHWAYS = 1311;
 
         /**
@@ -56,5 +58,5 @@
          */
         public UnconnectedHighways() {
-            super(tr("Unconnected highways"));
+            super(tr("Unconnected highways"), UNCONNECTED_HIGHWAYS);
         }
 
@@ -69,10 +71,10 @@
      */
     public static class UnconnectedRailways extends UnconnectedWays {
-
+        static final int UNCONNECTED_RAILWAYS = 1321;
         /**
          * Constructs a new {@code UnconnectedRailways} test.
          */
         public UnconnectedRailways() {
-            super(tr("Unconnected railways"));
+            super(tr("Unconnected railways"), UNCONNECTED_RAILWAYS);
         }
 
@@ -87,10 +89,10 @@
      */
     public static class UnconnectedWaterways extends UnconnectedWays {
-
+        static final int UNCONNECTED_WATERWAYS = 1331;
         /**
          * Constructs a new {@code UnconnectedWaterways} test.
          */
         public UnconnectedWaterways() {
-            super(tr("Unconnected waterways"));
+            super(tr("Unconnected waterways"), UNCONNECTED_WATERWAYS);
         }
 
@@ -105,10 +107,10 @@
      */
     public static class UnconnectedNaturalOrLanduse extends UnconnectedWays {
-
+        static final int UNCONNECTED_NATURAL_OR_LANDUSE = 1341;
         /**
          * Constructs a new {@code UnconnectedNaturalOrLanduse} test.
          */
         public UnconnectedNaturalOrLanduse() {
-            super(tr("Unconnected natural lands and landuses"));
+            super(tr("Unconnected natural lands and landuses"), UNCONNECTED_NATURAL_OR_LANDUSE);
         }
 
@@ -123,10 +125,10 @@
      */
     public static class UnconnectedPower extends UnconnectedWays {
-
+        static final int UNCONNECTED_POWER = 1351;
         /**
          * Constructs a new {@code UnconnectedPower} test.
          */
         public UnconnectedPower() {
-            super(tr("Unconnected power ways"));
+            super(tr("Unconnected power ways"), UNCONNECTED_POWER);
         }
 
@@ -156,5 +158,17 @@
      */
     public UnconnectedWays(String title) {
+        this(title, UNCONNECTED_WAYS);
+
+    }
+
+    /**
+     * Constructs a new {@code UnconnectedWays} test with the given code.
+     * @param title The test title
+     * @param code The test code
+     * @since 14468
+     */
+    public UnconnectedWays(String title, int code) {
         super(title, tr("This test checks if a way has an endpoint very near to another way."));
+        this.code = code;
     }
 
@@ -268,5 +282,5 @@
     protected final void addErrors(Severity severity, Map<Node, Way> errorMap, String message) {
         for (Map.Entry<Node, Way> error : errorMap.entrySet()) {
-            errors.add(TestError.builder(this, severity, UNCONNECTED_WAYS)
+            errors.add(TestError.builder(this, severity, code)
                     .message(message)
                     .primitives(error.getKey(), error.getValue())
