Index: trunk/src/org/openstreetmap/josm/data/validation/OsmValidator.java
===================================================================
--- trunk/src/org/openstreetmap/josm/data/validation/OsmValidator.java	(revision 15702)
+++ trunk/src/org/openstreetmap/josm/data/validation/OsmValidator.java	(revision 15704)
@@ -118,5 +118,4 @@
         CrossingWays.Ways.class, // ID  601 ..  699
         CrossingWays.Boundaries.class, // ID  601 ..  699
-        CrossingWays.Barrier.class, // ID  601 ..  699
         CrossingWays.SelfCrossing.class, // ID  601 ..  699
         SimilarNamedWays.class, // ID  701 ..  799
Index: trunk/src/org/openstreetmap/josm/data/validation/tests/CrossingWays.java
===================================================================
--- trunk/src/org/openstreetmap/josm/data/validation/tests/CrossingWays.java	(revision 15702)
+++ trunk/src/org/openstreetmap/josm/data/validation/tests/CrossingWays.java	(revision 15704)
@@ -35,4 +35,5 @@
 public abstract class CrossingWays extends Test {
 
+    static final String BARRIER = "barrier";
     static final String HIGHWAY = "highway";
     static final String RAILWAY = "railway";
@@ -54,7 +55,9 @@
      */
     private enum WayType {
-        BUILDING, HIGHWAY, RAILWAY, RESIDENTIAL_AREA, WATERWAY, WAY;
+        BARRIER, BUILDING, HIGHWAY, RAILWAY, RESIDENTIAL_AREA, WATERWAY, WAY;
 
         static WayType of(Way w) {
+            if (w.hasKey(CrossingWays.BARRIER))
+                return BARRIER;
             if (isBuilding(w))
                 return BUILDING;
@@ -102,4 +105,5 @@
                     || isCoastline(w)
                     || isBuilding(w)
+                    || w.hasKey(BARRIER)
                     || isResidentialArea(w));
         }
@@ -115,6 +119,6 @@
                 return true;
             }
-            if ((w1.hasKey(HIGHWAY, RAILWAY, WATERWAY) && isResidentialArea(w2))
-             || (w2.hasKey(HIGHWAY, RAILWAY, WATERWAY) && isResidentialArea(w1)))
+            if ((w1.hasKey(BARRIER, HIGHWAY, RAILWAY, WATERWAY) && isResidentialArea(w2))
+             || (w2.hasKey(BARRIER, HIGHWAY, RAILWAY, WATERWAY) && isResidentialArea(w1)))
                 return true;
             if (isSubwayOrTramOrRazed(w2)) {
@@ -137,62 +141,78 @@
 
             if (types[0] == types[1]) {
-                switch(types[0]) {
-                    case BUILDING:
-                        return new MessageHelper(tr("Crossing buildings"), 610);
-                    case HIGHWAY:
-                        return new MessageHelper(tr("Crossing highways"), 620);
-                    case RAILWAY:
-                        return new MessageHelper(tr("Crossing railways"), 630);
-                    case RESIDENTIAL_AREA:
-                        return new MessageHelper(tr("Crossing residential areas"), 640);
-                    case WATERWAY:
-                        return new MessageHelper(tr("Crossing waterways"), 650);
-                    case WAY:
-                    default:
-                        return new MessageHelper(tr("Crossing ways"), CROSSING_WAYS);
+                switch (types[0]) {
+                case BARRIER:
+                    return new MessageHelper(tr("Crossing barriers"), 603);
+                case BUILDING:
+                    return new MessageHelper(tr("Crossing buildings"), 610);
+                case HIGHWAY:
+                    return new MessageHelper(tr("Crossing highways"), 620);
+                case RAILWAY:
+                    return new MessageHelper(tr("Crossing railways"), 630);
+                case RESIDENTIAL_AREA:
+                    return new MessageHelper(tr("Crossing residential areas"), 640);
+                case WATERWAY:
+                    return new MessageHelper(tr("Crossing waterways"), 650);
+                case WAY:
+                default:
+                    return new MessageHelper(tr("Crossing ways"), CROSSING_WAYS);
                 }
             } else {
                 switch (types[0]) {
+                case BARRIER:
+                    switch (types[1]) {
                     case BUILDING:
-                        switch (types[1]) {
-                            case HIGHWAY:
-                                return new MessageHelper(tr("Crossing building/highway"), 612);
-                            case RAILWAY:
-                                return new MessageHelper(tr("Crossing building/railway"), 613);
-                            case RESIDENTIAL_AREA:
-                                return new MessageHelper(tr("Crossing building/residential area"), 614);
-                            case WATERWAY:
-                                return new MessageHelper(tr("Crossing building/waterway"), 615);
-                            case WAY:
-                            default:
-                                return new MessageHelper(tr("Crossing building/way"), 611);
-                        }
+                        return new MessageHelper(tr("Crossing barrier/building"), 661);
                     case HIGHWAY:
-                        switch (types[1]) {
-                            case RAILWAY:
-                                return new MessageHelper(tr("Crossing highway/railway"), 622);
-                            case WATERWAY:
-                                return new MessageHelper(tr("Crossing highway/waterway"), 623);
-                            case WAY:
-                            default:
-                                return new MessageHelper(tr("Crossing highway/way"), 621);
-                        }
+                        return new MessageHelper(tr("Crossing barrier/highway"), 662);
                     case RAILWAY:
-                        switch (types[1]) {
-                            case WATERWAY:
-                                return new MessageHelper(tr("Crossing railway/waterway"), 632);
-                            case WAY:
-                            default:
-                                return new MessageHelper(tr("Crossing railway/way"), 631);
-                        }
+                        return new MessageHelper(tr("Crossing barrier/railway"), 663);
+                    case WATERWAY:
+                        return new MessageHelper(tr("Crossing barrier/waterway"), 664);
+                    case WAY:
+                    default:
+                        return new MessageHelper(tr("Crossing barrier/way"), 665);
+                    }
+                case BUILDING:
+                    switch (types[1]) {
+                    case HIGHWAY:
+                        return new MessageHelper(tr("Crossing building/highway"), 612);
+                    case RAILWAY:
+                        return new MessageHelper(tr("Crossing building/railway"), 613);
                     case RESIDENTIAL_AREA:
-                        switch (types[1]) {
-                            case WAY:
-                            default:
-                                return new MessageHelper(tr("Crossing residential area/way"), 641);
-                        }
+                        return new MessageHelper(tr("Crossing building/residential area"), 614);
                     case WATERWAY:
+                        return new MessageHelper(tr("Crossing building/waterway"), 615);
+                    case WAY:
                     default:
-                        return new MessageHelper(tr("Crossing waterway/way"), 651);
+                        return new MessageHelper(tr("Crossing building/way"), 611);
+                    }
+                case HIGHWAY:
+                    switch (types[1]) {
+                    case RAILWAY:
+                        return new MessageHelper(tr("Crossing highway/railway"), 622);
+                    case WATERWAY:
+                        return new MessageHelper(tr("Crossing highway/waterway"), 623);
+                    case WAY:
+                    default:
+                        return new MessageHelper(tr("Crossing highway/way"), 621);
+                    }
+                case RAILWAY:
+                    switch (types[1]) {
+                    case WATERWAY:
+                        return new MessageHelper(tr("Crossing railway/waterway"), 632);
+                    case WAY:
+                    default:
+                        return new MessageHelper(tr("Crossing railway/way"), 631);
+                    }
+                case RESIDENTIAL_AREA:
+                    switch (types[1]) {
+                    case WAY:
+                    default:
+                        return new MessageHelper(tr("Crossing residential area/way"), 641);
+                    }
+                case WATERWAY:
+                default:
+                    return new MessageHelper(tr("Crossing waterway/way"), 651);
                 }
             }
@@ -258,29 +278,4 @@
 
     /**
-     * Crossing barriers ways test.
-     */
-    public static class Barrier extends CrossingWays {
-
-        protected static final int CROSSING_BARRIERS = 603;
-
-        /**
-         * Constructs a new crossing {@code Barrier} test.
-         */
-        public Barrier() {
-            super(tr("Crossing barriers"), CROSSING_BARRIERS);
-        }
-
-        @Override
-        public boolean isPrimitiveUsable(OsmPrimitive p) {
-            return super.isPrimitiveUsable(p) && p.hasKey("barrier");
-        }
-
-        @Override
-        boolean ignoreWaySegmentCombination(Way w1, Way w2) {
-            return areLayerOrLevelDifferent(w1, w2);
-        }
-    }
-
-    /**
      * Self crossing ways test (for all the rest)
      */
@@ -290,5 +285,4 @@
 
         CrossingWays.Ways normalTest = new Ways();
-        CrossingWays.Barrier barrierTest = new Barrier();
         CrossingWays.Boundaries boundariesTest = new Boundaries();
 
@@ -302,5 +296,5 @@
         @Override
         public boolean isPrimitiveUsable(OsmPrimitive p) {
-            return super.isPrimitiveUsable(p) && !(normalTest.isPrimitiveUsable(p) || barrierTest.isPrimitiveUsable(p)
+            return super.isPrimitiveUsable(p) && !(normalTest.isPrimitiveUsable(p)
                     || boundariesTest.isPrimitiveUsable(p));
         }
