Index: src/org/openstreetmap/josm/data/validation/tests/PowerLines.java
===================================================================
--- src/org/openstreetmap/josm/data/validation/tests/PowerLines.java	(revision 19618)
+++ src/org/openstreetmap/josm/data/validation/tests/PowerLines.java	(working copy)
@@ -11,8 +11,10 @@
 import java.util.EnumSet;
 import java.util.HashMap;
 import java.util.HashSet;
+import java.util.LinkedHashSet;
 import java.util.List;
 import java.util.Map;
+import java.util.Map.Entry;
 import java.util.Set;
 
 import org.openstreetmap.josm.data.coor.ILatLon;
@@ -75,8 +77,8 @@
 
     private double hillyCompensation;
     private double hillyThreshold;
-    private final Set<Node> badConnections = new HashSet<>();
-    private final Set<Node> missingTags = new HashSet<>();
+    private final Map<Node, Set<OsmPrimitive>> badConnections = new HashMap<>();
+    private final Map<Node, Set<OsmPrimitive>> missingTags = new HashMap<>();
     private final Set<Way> wrongLineType = new HashSet<>();
     private final Set<WaySegment> missingNodes = new HashSet<>();
     private final Set<OsmPrimitive> refDiscontinuities = new HashSet<>();
@@ -99,15 +101,21 @@
     @Override
     public void visit(Node n) {
         boolean nodeInLineOrCable = false;
-        boolean connectedToUnrelated = false;
+        List<Way> unrelatedParents = new ArrayList<>();
         for (Way parent : n.getParentWays()) {
             if (parent.hasTag(POWER, "line", MINOR_LINE, "cable"))
                 nodeInLineOrCable = true;
             else if (!isRelatedToPower(parent))
-                connectedToUnrelated = true;
+                unrelatedParents.add(parent);
         }
-        if (nodeInLineOrCable && connectedToUnrelated)
-            badConnections.add(n);
+        if (nodeInLineOrCable && !unrelatedParents.isEmpty()) {
+            Set<OsmPrimitive> old = badConnections.get(n);
+            if (old == null) {
+                old = new HashSet<>();
+                badConnections.put(n, old);
+            }
+            old.addAll(unrelatedParents);
+        }
     }
 
     @Override
@@ -162,21 +170,24 @@
             powerlineChecks(w);
         }
         // Then return the errors
-        for (Node n : missingTags) {
+        for (Entry<Node, Set<OsmPrimitive>> entry : missingTags.entrySet()) {
+            Node n = entry.getKey();
             if (!isInPowerStation(n)) {
                 errors.add(TestError.builder(this, Severity.WARNING, POWER_SUPPORT)
                         // the "missing tag" grouping can become broken if the MapCSS message get reworded
                         .message(tr("missing tag"), tr("node without power=*"))
-                        .primitives(n)
+                        .primitives(getAllPrimitives(entry))
+                        .highlight(n)
                         .build());
             }
         }
 
-        for (Node n : badConnections) {
+        for (Entry<Node, Set<OsmPrimitive>> entry : badConnections.entrySet()) {
             errors.add(TestError.builder(this, Severity.WARNING, POWER_CONNECTION)
                     .message(tr("Node connects a power line or cable with an object "
                             + "which is not related to the power infrastructure"))
-                    .primitives(n)
+                    .primitives(getAllPrimitives(entry))
+                    .highlight(entry.getKey())
                     .build());
         }
 
@@ -224,6 +235,18 @@
     }
 
     /**
+     * Combine the node and the related objects.
+     * @param entry a map entry with a node and related objects
+     * @return set containing the node and the related objects
+     */
+    private Collection<? extends OsmPrimitive> getAllPrimitives(Entry<Node, Set<OsmPrimitive>> entry) {
+        Set<OsmPrimitive> primitives = new LinkedHashSet<>();
+        primitives.add(entry.getKey());
+        primitives.addAll(entry.getValue());
+        return primitives;
+    }
+
+    /**
      * The base powerline checks
      * @param w The powerline to check
      */
@@ -253,8 +276,14 @@
 
             /// handle missing power line support tags (e.g. tower)
             if (!isPowerTower(n) && !isPowerInfrastructure(n) && IN_DOWNLOADED_AREA.test(n)
-                    && (!w.isFirstLastNode(n) || !isPowerStation(n)))
-                missingTags.add(n);
+                    && (!w.isFirstLastNode(n) || !isPowerStation(n))) {
+                Set<OsmPrimitive> old = missingTags.get(n);
+                if (old == null) {
+                    old = new HashSet<>();
+                    missingTags.put(n, old);
+                }
+                old.add(w);
+            }
 
             /// handle missing nodes
             double segmentLen = n.greatCircleDistance(prevNode);
