Index: src/org/openstreetmap/josm/data/validation/OsmValidator.java
===================================================================
--- src/org/openstreetmap/josm/data/validation/OsmValidator.java	(revision 6384)
+++ src/org/openstreetmap/josm/data/validation/OsmValidator.java	(working copy)
@@ -53,6 +53,7 @@
 import org.openstreetmap.josm.data.validation.tests.UntaggedWay;
 import org.openstreetmap.josm.data.validation.tests.WayConnectedToArea;
 import org.openstreetmap.josm.data.validation.tests.WronglyOrderedWays;
+import org.openstreetmap.josm.data.validation.tests.ParkingNodeInParkingWay;
 import org.openstreetmap.josm.gui.MapView.LayerChangeListener;
 import org.openstreetmap.josm.gui.layer.Layer;
 import org.openstreetmap.josm.gui.layer.OsmDataLayer;
@@ -114,7 +115,8 @@
         Addresses.class, // ID 2601 .. 2699
         Highways.class, // ID 2701 .. 2799
         BarriersEntrances.class, // ID 2801 .. 2899
-        OpeningHourTest.class // 2901 .. 2999
+        OpeningHourTest.class, // 2901 .. 2999
+        ParkingNodeInParkingWay.class // 3000 .. 3999
     };
 
     /**
Index: src/org/openstreetmap/josm/data/validation/tests/ParkingNodeInParkingWay.java
===================================================================
--- src/org/openstreetmap/josm/data/validation/tests/ParkingNodeInParkingWay.java	(revision 0)
+++ src/org/openstreetmap/josm/data/validation/tests/ParkingNodeInParkingWay.java	(working copy)
@@ -0,0 +1,74 @@
+package org.openstreetmap.josm.data.validation.tests;
+
+import org.openstreetmap.josm.data.osm.Node;
+import org.openstreetmap.josm.data.osm.OsmPrimitive;
+import org.openstreetmap.josm.data.osm.Way;
+import org.openstreetmap.josm.data.validation.Severity;
+import org.openstreetmap.josm.data.validation.Test;
+import org.openstreetmap.josm.data.validation.TestError;
+import org.openstreetmap.josm.tools.Geometry;
+
+import java.util.*;
+
+import static org.openstreetmap.josm.tools.I18n.tr;
+
+/**
+ * Finds nodes tagged with amenity=parking located inside of ways also tagged with amenity=parking.
+ *
+ * @author kalle
+ * @since 2013-11-14 05:14
+ */
+public class ParkingNodeInParkingWay extends Test {
+
+  public ParkingNodeInParkingWay() {
+    super(tr("Parking ways"),
+        tr("This test checks that a no enclosed way tagged as amenity=parking "
+            + "contains a node tagged as amenity=parking."));
+
+  }
+
+  private static final int ERROR_CODE = 3001;
+
+  private Set<Node> nodes = new HashSet<Node>();
+  private Set<Way> ways = new HashSet<Way>();
+
+  /**
+   * @param way Way to be inspected
+   * @return True if parameter way is a polygon, i.e. that it begin and end at the same geographical position.
+   */
+  private boolean isEnclosed(Way way) {
+    return way.getNodes() != null
+        && way.getNodes().size() > 2
+        && (way.getNodes().get(0).equals(way.getNodes().get(way.getNodes().size() -1))
+        || way.getNodes().get(0).getEastNorth().equals(way.getNodes().get(way.getNodes().size() -1).getEastNorth()));
+  }
+
+  private boolean isParking(OsmPrimitive osmPrimitive) {
+    return ("parking".equals(osmPrimitive.get("amenity")));
+  }
+
+  @Override
+  public void visit(Way way) {
+    if (isParking(way) && isEnclosed(way)) {
+      ways.add(way);
+    }
+  }
+
+  @Override
+  public void visit(Node node) {
+    if (isParking(node)) {
+      nodes.add(node);
+    }
+  }
+
+  @Override
+  public void endTest() {
+    for (Way way : ways) {
+      for (Node node : nodes) {
+        if (Geometry.nodeInsidePolygon(node, way.getNodes())) {
+          errors.add(new TestError(this, Severity.WARNING, tr("Node with amenity=parking found inside of way with amenity=parking"), ERROR_CODE, Arrays.asList(way, node), Arrays.asList(node)));
+        }
+      }
+    }
+  }
+}
