Index: resources/data/defaultpresets.xml
===================================================================
--- resources/data/defaultpresets.xml   (révision 19439)
+++ resources/data/defaultpresets.xml   (copie de travail)
@@ -499,6 +499,9 @@
             <combo key="windings:configuration" text="Windings configuration" values="star,delta,open-delta,zigzag,open,scott,leblanc" values_context="power_windings" />
         </optional>
     </chunk>
+    <chunk id="power_topology">
+        <combo key="topology" text="Circuit topology" values="linear,branched" />
+    </chunk>
     <chunk id="telecom_medium">
         <combo key="telecom:medium" text="Local loop type" values="copper,fibre,coaxial" />
     </chunk>
@@ -10115,17 +10118,6 @@
                     <role key="guidepost" text="guidepost" requisite="optional" type="node" member_expression="information=guidepost"/>
                 </roles>
             </item> <!-- Detour Route -->
-            <item name="Power Route" icon="presets/misc/route.svg" type="relation" preset_name_label="true">
-                <link wiki="Tag:route=power" />
-                <space/>
-                <key key="type" value="route"/>
-                <key key="route" value="power"/>
-                <reference ref="name_ref_operator"/>
-                <roles>
-                    <role key="line" text="route segment" requisite="required" type="way" member_expression="power=line|power=cable"/>
-                    <role key="substation" text="Power Substation" requisite="optional" type="way,closedway,multipolygon" member_expression="power"/>
-                </roles>
-            </item> <!-- Power Route -->
             <item name="Railway Route" icon="presets/misc/route.svg" type="relation" preset_name_label="true">
                 <link wiki="Tag:route=railway" />
                 <space/>
@@ -10158,7 +10150,7 @@
                 <link wiki="Relation:superroute" />
                 <space/>
                 <key key="type" value="superroute"/>
-                <combo key="route" text="Type" values="bicycle,detour,foot,hiking,horse,mtb,piste,power,railway,road,ski" display_values="Bicycle Route,Detour Route,Walking Route,Hiking Route,Riding Route,Mountain Biking Route,Piste Route,Power Route,Railway Route,Road Route,Ski Route" />
+                <combo key="route" text="Type" values="bicycle,detour,foot,hiking,horse,mtb,piste,railway,road,ski" display_values="Bicycle Route,Detour Route,Walking Route,Hiking Route,Riding Route,Mountain Biking Route,Piste Route,Railway Route,Road Route,Ski Route" />
                 <reference ref="name_ref_operator"/>
                 <roles>
                     <role key="" text="route segment" requisite="required" type="relation" member_expression="type=route"/> <!-- fixme: at least 2 members are required -->
@@ -10297,5 +10289,41 @@
                 <role key="edge" text="edge ways parallel to 'through'" requisite="optional" type="way" />
             </roles>
         </item> <!-- Tunnel -->
+        <group name="Power" icon="presets/power/power.svg">
+            <item name="Power circuit" icon="presets/misc/route.svg" type="relation" preset_name_label="true">
+                <link wiki="Tag:power=circuit" />
+                <space/>
+                <key key="type" value="power"/>
+                <key key="power" value="circuit"/>
+                <space/>
+                <reference ref="cables"/>
+                <reference ref="voltage"/>
+                <reference ref="frequency"/>
+                <reference ref="power_topology"/>
+                <optional>
+                    <reference ref="name_ref_operator"/>
+                </optional>
+                <roles>
+                    <role key="substation" text="Power Substation" requisite="required" type="way,closedway,multipolygon" member_expression="power|substation"/>
+                    <role key="section" text="Circuit section" requisite="required" type="way,relation" member_expression="power=line|power=cable|power=minor_line|power=line_section"/>
+                    <role key="tap" text="Tap point" requisite="optional" type="node" member_expression="power=pole|power=tower|power=connection"/>
+                </roles>
+            </item> <!-- Power circuit -->
+            <item name="Power line section" icon="presets/misc/route.svg" type="relation" preset_name_label="true">
+                <link wiki="Tag:power=line_section" />
+                <space/>
+                <key key="type" value="power"/>
+                <key key="power" value="line_section"/>
+                <space/>
+                <reference ref="cables"/>
+                <reference ref="voltage"/>
+                <optional>
+                    <reference ref="name_ref_operator"/>
+                </optional>
+                <roles>
+                    <role key="line" text="Section segment" requisite="required" type="way" member_expression="power=line|power=cable|power=minor_line"/>
+                </roles>
+            </item> <!-- Power circuit -->
+        </group>
     </group> <!-- Relations -->
 </presets>
Index: resources/data/validator/combinations.mapcss
===================================================================
--- resources/data/validator/combinations.mapcss        (révision 19439)
+++ resources/data/validator/combinations.mapcss        (copie de travail)
@@ -306,6 +306,8 @@
 *[internet_access=no][internet_access:fee],
 node[power=transformer][voltage],
 node[transformer=distribution][voltage][power=pole],
+relation[power=circuit][wires],
+relation[power=line_section][wires],
 *[amenity=vending_machine][shop],
 *[noname?][name],
 *[noref?][ref],
@@ -1137,3 +1139,21 @@
   assertNoMatch: "way highway=path segregated=yes cycleway:surface=needles footway:surface=paving_stones";
   assertNoMatch: "way highway=primary oneway=yes bicycle:lanes=no|designated|yes cycleway:lanes=|lane|no";
 }
+
+/* Prevent redundancy between relation and members, see #24456, #24457 */
+relation[power=circuit] > way[power=~/line|minor_line|cable/][frequency] {  
+  throwWarning: tr("Frequency tag should be on the circuit relation only, not on the power segment");
+  group: tr("redundant tagging");
+}
+relation[power=circuit] > relation[power=line_section][frequency] {  
+  throwWarning: tr("Frequency tag should be on the circuit relation only, not on the power section");
+  group: tr("redundant tagging");
+}
+
+/* Invalid topology with power circuit relation, see #24456 */
+relation[power=circuit][topology][topology!~/linear|branched/] {
+       throwError: tr("power=circuit relations should have a topology tag with value linear or branched");
+       assertMatch: "relation type=power power=circuit topology=branch";
+       assertNoMatch: "relation type=power power=circuit topology=branched";
+       assertNoMatch: "relation type=power power=circuit";
+}
\ No newline at end of file
Index: resources/data/validator/deprecated.mapcss
===================================================================
--- resources/data/validator/deprecated.mapcss  (révision 19439)
+++ resources/data/validator/deprecated.mapcss  (copie de travail)
@@ -2583,4 +2583,16 @@
   suggestAlternative: "residential=apartments + condo=*"
 }
 
+/* route=power is deprecrated, see #24456 */
+relation[route=power] {
+  throwWarning: tr("{0} is deprecated", "{0.tag}");
+  group: tr("deprecated tagging");
+  suggestAlternative: "type=power + power=circuit";
+}
+relation[power=branch] {
+  throwWarning: tr("{0} is deprecated", "{0.tag}");
+  group: tr("deprecated tagging");
+  suggestAlternative: "type=power + power=line_section";
+}
+
 /* When tags are deprecated they should be added to ignoretags.cfg too. */
Index: resources/data/validator/geometry.mapcss
===================================================================
--- resources/data/validator/geometry.mapcss    (révision 19439)
+++ resources/data/validator/geometry.mapcss    (copie de travail)
@@ -90,7 +90,9 @@
 node[type=multipolygon],
 node[interval],
 node[route],
-node[restriction] {
+node[restriction],
+node[power=circuit],
+node[power=line_section] {
   throwError: tr("{0} on a node. Should be used in a relation", "{0.tag}"); 
 }
 
@@ -139,12 +141,16 @@
 way[restriction][restriction =~ /^(no_right_turn|no_left_turn|no_u_turn|no_straight_on|only_right_turn|only_left_turn|only_straight_on|no_entry|no_exit)$/],
 way[type=multipolygon],
 way[interval][route!=ferry],
-way[route=bus] {
+way[route=bus],
+way[power=circuit],
+way[power=line_section] {
   throwError: tr("{0} on a way. Should be used in a relation", "{0.tag}"); 
 }
 
 /* {0} on a closed way, should be a unclosed way; #19981 */
-way:closed[power=line] {
+way:closed[power=line],
+way:closed[power=cable],
+way:closed[power=minor_line] {
   throwWarning: tr("{0} on a closed way. Should be used on an unclosed way.", "{1.tag}"); 
 }
 
Index: resources/data/validator/ignoretags.cfg
===================================================================
--- resources/data/validator/ignoretags.cfg     (révision 19439)
+++ resources/data/validator/ignoretags.cfg     (copie de travail)
@@ -825,6 +825,8 @@
 K:landform=tundra_polygon
 ; This seems to be a region specific tag.
 K:valley=balka
+K:route=power
+K:power=branch
 
 ; These tags should probably have better software support, but maybe they can be in the appropriate section in this file.
 ; Examples: oneway:moped and cycleway:right:oneway.
Index: resources/data/validator/relation.mapcss
===================================================================
--- resources/data/validator/relation.mapcss    (révision 19439)
+++ resources/data/validator/relation.mapcss    (copie de travail)
@@ -71,3 +71,12 @@
   throwWarning: tr("{0} of {1} member and {0} relation differ", "{0.key}", "outline");
   group: tr("suspicious tag combination");
 }
+
+/* Power relations, #24456 */
+relation[type=power][!power],
+relation[type=power][power][power!~/circuit|line_section/] {
+       throwError: tr("Power relation misses or combined to wrong power=* value");
+       assertMatch: "relation type=power";
+  assertMatch: "relation type=power power=line";
+       assertNoMatch: "relation type=power power=circuit";
+}
Index: test/unit/org/openstreetmap/josm/data/validation/tests/RelationCheckerTest.java
===================================================================
--- test/unit/org/openstreetmap/josm/data/validation/tests/RelationCheckerTest.java     (révision 19439)
+++ test/unit/org/openstreetmap/josm/data/validation/tests/RelationCheckerTest.java     (copie de travail)
@@ -125,14 +125,14 @@
     }
 
     @Test
-    void testPowerMemberExpression() {
-        Relation r = createRelation("type=route route=power");
+    void testPowerCircuitMemberExpression() {
+        Relation r = createRelation("type=power power=circuit");
         r.addMember(new RelationMember("", new Way()));
 
         List<TestError> errors = testRelation(r);
         assertEquals(2, errors.size());
-        assertEquals("Role 'line' missing", errors.get(0).getDescription());
-        assertEquals("Empty role found when expecting one of 'line/substation'", errors.get(1).getDescription());
+        assertEquals("Role 'substation' missing", errors.get(0).getDescription());
+        assertEquals("Empty role found when expecting one of 'substation/section/tap'", errors.get(1).getDescription());
     }
 
     @Test
