diff --git a/pom.xml b/pom.xml
index 845b7005a..1fe15bdac 100644
--- a/pom.xml
+++ b/pom.xml
@@ -15,7 +15,7 @@
     <parent>
         <groupId>com.powsybl</groupId>
         <artifactId>powsybl-parent-ws</artifactId>
-        <version>19</version>
+        <version>20</version>
         <relativePath/>
     </parent>
 
@@ -44,7 +44,7 @@
     </developers>
 
     <properties>
-        <gridsuite-dependencies.version>31</gridsuite-dependencies.version>
+        <gridsuite-dependencies.version>33</gridsuite-dependencies.version>
         <db-util.version>1.0.5</db-util.version>
         <log4j2-mock-version>0.0.2</log4j2-mock-version>
         <testcontainers.version>1.16.2</testcontainers.version>
@@ -287,7 +287,7 @@
         </dependency>
         <dependency>
             <groupId>org.wiremock</groupId>
-            <artifactId>wiremock</artifactId>
+            <artifactId>wiremock-jetty12</artifactId>
             <scope>test</scope>
         </dependency>
     </dependencies>
diff --git a/src/main/java/org/gridsuite/modification/server/dto/BranchModificationInfos.java b/src/main/java/org/gridsuite/modification/server/dto/BranchModificationInfos.java
index 97605d817..50a4eae5c 100644
--- a/src/main/java/org/gridsuite/modification/server/dto/BranchModificationInfos.java
+++ b/src/main/java/org/gridsuite/modification/server/dto/BranchModificationInfos.java
@@ -5,6 +5,7 @@
  * file, You can obtain one at http://mozilla.org/MPL/2.0/.
  */
 package org.gridsuite.modification.server.dto;
+import com.powsybl.iidm.network.extensions.ConnectablePosition;
 import io.swagger.v3.oas.annotations.media.Schema;
 import lombok.Getter;
 import lombok.NoArgsConstructor;
@@ -35,9 +36,39 @@ public class BranchModificationInfos extends BasicEquipmentModificationInfos {
     @Schema(description = "Current limits Side 2")
     private CurrentLimitsModificationInfos currentLimits2;
 
+    @Schema(description = "Voltage level id modification 1")
+    private AttributeModification<String> voltageLevelId1;
+
+    @Schema(description = "Voltage level id modification 2")
+    private AttributeModification<String> voltageLevelId2;
+
+    @Schema(description = "Bus id modification 1")
+    private AttributeModification<String> busOrBusbarSectionId1;
+
+    @Schema(description = "Bus id modification 2")
+    private AttributeModification<String> busOrBusbarSectionId2;
+
+    @Schema(description = "Connection Name 1")
+    private AttributeModification<String> connectionName1;
+
+    @Schema(description = "Connection Name 2")
+    private AttributeModification<String> connectionName2;
+
+    @Schema(description = "Connection Direction 1")
+    private AttributeModification<ConnectablePosition.Direction> connectionDirection1;
+
+    @Schema(description = "Connection Direction 2")
+    private AttributeModification<ConnectablePosition.Direction> connectionDirection2;
+
+    @Schema(description = "Connection Position 1")
+    private AttributeModification<Integer> connectionPosition1;
+
+    @Schema(description = "Connection Position 2")
+    private AttributeModification<Integer> connectionPosition2;
+
     @Schema(description = "Connected 1")
-    private AttributeModification<Boolean> connected1;
+    private AttributeModification<Boolean> terminal1Connected;
 
     @Schema(description = "Connected 2")
-    private AttributeModification<Boolean> connected2;
+    private AttributeModification<Boolean> terminal2Connected;
 }
diff --git a/src/main/java/org/gridsuite/modification/server/entities/equipment/modification/BranchModificationEntity.java b/src/main/java/org/gridsuite/modification/server/entities/equipment/modification/BranchModificationEntity.java
index 672d4d433..128341b55 100644
--- a/src/main/java/org/gridsuite/modification/server/entities/equipment/modification/BranchModificationEntity.java
+++ b/src/main/java/org/gridsuite/modification/server/entities/equipment/modification/BranchModificationEntity.java
@@ -6,14 +6,13 @@
  */
 package org.gridsuite.modification.server.entities.equipment.modification;
 
+import com.powsybl.iidm.network.extensions.ConnectablePosition;
+import jakarta.persistence.*;
 import lombok.Getter;
 import lombok.NoArgsConstructor;
 import org.gridsuite.modification.server.dto.BranchModificationInfos;
 import org.gridsuite.modification.server.dto.ModificationInfos;
-import org.gridsuite.modification.server.entities.equipment.modification.attribute.BooleanModificationEmbedded;
-import org.gridsuite.modification.server.entities.equipment.modification.attribute.DoubleModificationEmbedded;
-
-import jakarta.persistence.*;
+import org.gridsuite.modification.server.entities.equipment.modification.attribute.*;
 
 /**
  * @author Ayoub LABIDI <ayoub.labidi at rte-france.com>
@@ -53,19 +52,89 @@ public class BranchModificationEntity extends BasicEquipmentModificationEntity {
         ), nullable = true)
     private CurrentLimitsModificationEntity currentLimits2;
 
+    @Embedded
+    @AttributeOverrides(value = {
+        @AttributeOverride(name = "value", column = @Column(name = "voltageLevelId1")),
+        @AttributeOverride(name = "opType", column = @Column(name = "voltageLevelId1Op"))
+    })
+    private StringModificationEmbedded voltageLevelId1;
+
+    @Embedded
+    @AttributeOverrides(value = {
+        @AttributeOverride(name = "value", column = @Column(name = "voltageLevelId2")),
+        @AttributeOverride(name = "opType", column = @Column(name = "voltageLevelId2Op"))
+    })
+    private StringModificationEmbedded voltageLevelId2;
+
+    @Embedded
+    @AttributeOverrides(value = {
+        @AttributeOverride(name = "value", column = @Column(name = "busOrBusbarSectionId1")),
+        @AttributeOverride(name = "opType", column = @Column(name = "busOrBusbarSectionId1Op"))
+    })
+    private StringModificationEmbedded busOrBusbarSectionId1;
+
+    @Embedded
+    @AttributeOverrides(value = {
+        @AttributeOverride(name = "value", column = @Column(name = "busOrBusbarSectionId2")),
+        @AttributeOverride(name = "opType", column = @Column(name = "busOrBusbarSectionId2Op"))
+    })
+    private StringModificationEmbedded busOrBusbarSectionId2;
+
+    @Embedded
+    @AttributeOverrides(value = {
+        @AttributeOverride(name = "value", column = @Column(name = "connectionName1")),
+        @AttributeOverride(name = "opType", column = @Column(name = "connectionName1Op"))
+    })
+    private StringModificationEmbedded connectionName1;
+
+    @Embedded
+    @AttributeOverrides(value = {
+        @AttributeOverride(name = "value", column = @Column(name = "connectionName2")),
+        @AttributeOverride(name = "opType", column = @Column(name = "connectionName2Op"))
+    })
+    private StringModificationEmbedded connectionName2;
+
+    @Embedded
+    @AttributeOverrides(value = {
+        @AttributeOverride(name = "value", column = @Column(name = "connectionPosition1")),
+        @AttributeOverride(name = "opType", column = @Column(name = "connectionPosition1Op"))
+    })
+    private IntegerModificationEmbedded connectionPosition1;
+
+    @Embedded
+    @AttributeOverrides(value = {
+        @AttributeOverride(name = "value", column = @Column(name = "connectionPosition2")),
+        @AttributeOverride(name = "opType", column = @Column(name = "connectionPosition2Op"))
+    })
+    private IntegerModificationEmbedded connectionPosition2;
+
+    @Embedded
+    @AttributeOverrides(value = {
+        @AttributeOverride(name = "value", column = @Column(name = "connectionDirection1")),
+        @AttributeOverride(name = "opType", column = @Column(name = "connectionDirection1Op"))
+    })
+    private EnumModificationEmbedded<ConnectablePosition.Direction> connectionDirection1;
+
+    @Embedded
+    @AttributeOverrides(value = {
+        @AttributeOverride(name = "value", column = @Column(name = "connectionDirection2")),
+        @AttributeOverride(name = "opType", column = @Column(name = "connectionDirection2Op"))
+    })
+    private EnumModificationEmbedded<ConnectablePosition.Direction> connectionDirection2;
+
     @Embedded
     @AttributeOverrides(value = {
         @AttributeOverride(name = "value", column = @Column(name = "connected1")),
         @AttributeOverride(name = "opType", column = @Column(name = "connected1Op"))
     })
-    private BooleanModificationEmbedded connected1;
+    private BooleanModificationEmbedded terminal1Connected;
 
     @Embedded
     @AttributeOverrides(value = {
         @AttributeOverride(name = "value", column = @Column(name = "connected2")),
         @AttributeOverride(name = "opType", column = @Column(name = "connected2Op"))
     })
-    private BooleanModificationEmbedded connected2;
+    private BooleanModificationEmbedded terminal2Connected;
 
     protected BranchModificationEntity(BranchModificationInfos branchModificationInfos) {
         super(branchModificationInfos);
@@ -92,7 +161,17 @@ private void assignAttributes(BranchModificationInfos branchModificationInfos) {
         } else {
             currentLimits2 = branchModificationInfos.getCurrentLimits2().toEntity();
         }
-        this.connected1 = branchModificationInfos.getConnected1() != null ? new BooleanModificationEmbedded(branchModificationInfos.getConnected1()) : null;
-        this.connected2 = branchModificationInfos.getConnected2() != null ? new BooleanModificationEmbedded(branchModificationInfos.getConnected2()) : null;
+        this.voltageLevelId1 = branchModificationInfos.getVoltageLevelId1() != null ? new StringModificationEmbedded(branchModificationInfos.getVoltageLevelId1()) : null;
+        this.voltageLevelId2 = branchModificationInfos.getVoltageLevelId2() != null ? new StringModificationEmbedded(branchModificationInfos.getVoltageLevelId2()) : null;
+        this.busOrBusbarSectionId1 = branchModificationInfos.getBusOrBusbarSectionId1() != null ? new StringModificationEmbedded(branchModificationInfos.getBusOrBusbarSectionId1()) : null;
+        this.busOrBusbarSectionId2 = branchModificationInfos.getBusOrBusbarSectionId2() != null ? new StringModificationEmbedded(branchModificationInfos.getBusOrBusbarSectionId2()) : null;
+        this.connectionName1 = branchModificationInfos.getConnectionName1() != null ? new StringModificationEmbedded(branchModificationInfos.getConnectionName1()) : null;
+        this.connectionName2 = branchModificationInfos.getConnectionName2() != null ? new StringModificationEmbedded(branchModificationInfos.getConnectionName2()) : null;
+        this.connectionDirection1 = branchModificationInfos.getConnectionDirection1() != null ? new EnumModificationEmbedded<>(branchModificationInfos.getConnectionDirection1()) : null;
+        this.connectionDirection2 = branchModificationInfos.getConnectionDirection2() != null ? new EnumModificationEmbedded<>(branchModificationInfos.getConnectionDirection2()) : null;
+        this.connectionPosition1 = branchModificationInfos.getConnectionPosition1() != null ? new IntegerModificationEmbedded(branchModificationInfos.getConnectionPosition1()) : null;
+        this.connectionPosition2 = branchModificationInfos.getConnectionPosition2() != null ? new IntegerModificationEmbedded(branchModificationInfos.getConnectionPosition2()) : null;
+        this.terminal1Connected = branchModificationInfos.getTerminal1Connected() != null ? new BooleanModificationEmbedded(branchModificationInfos.getTerminal1Connected()) : null;
+        this.terminal2Connected = branchModificationInfos.getTerminal2Connected() != null ? new BooleanModificationEmbedded(branchModificationInfos.getTerminal2Connected()) : null;
     }
 }
diff --git a/src/main/java/org/gridsuite/modification/server/entities/equipment/modification/LineModificationEntity.java b/src/main/java/org/gridsuite/modification/server/entities/equipment/modification/LineModificationEntity.java
index a7f79a584..da4d92024 100644
--- a/src/main/java/org/gridsuite/modification/server/entities/equipment/modification/LineModificationEntity.java
+++ b/src/main/java/org/gridsuite/modification/server/entities/equipment/modification/LineModificationEntity.java
@@ -88,8 +88,18 @@ public LineModificationInfos toModificationInfos() {
             .activated(getActivated())
             .equipmentId(getEquipmentId())
             .equipmentName(AttributeModification.toAttributeModification(getEquipmentNameValue(), getEquipmentNameOp()))
-            .connected1(toAttributeModification(getConnected1()))
-            .connected2(toAttributeModification(getConnected2()))
+            .voltageLevelId1(toAttributeModification(getVoltageLevelId1()))
+            .voltageLevelId2(toAttributeModification(getVoltageLevelId2()))
+            .busOrBusbarSectionId1(toAttributeModification(getBusOrBusbarSectionId1()))
+            .busOrBusbarSectionId2(toAttributeModification(getBusOrBusbarSectionId2()))
+            .connectionName1(toAttributeModification(getConnectionName1()))
+            .connectionName2(toAttributeModification(getConnectionName2()))
+            .connectionDirection1(toAttributeModification(getConnectionDirection1()))
+            .connectionDirection2(toAttributeModification(getConnectionDirection2()))
+            .connectionPosition1(toAttributeModification(getConnectionPosition1()))
+            .connectionPosition2(toAttributeModification(getConnectionPosition2()))
+            .terminal1Connected(toAttributeModification(getTerminal1Connected()))
+            .terminal2Connected(toAttributeModification(getTerminal2Connected()))
             .r(toAttributeModification(getR()))
             .x(toAttributeModification(getX()))
             .g1(toAttributeModification(getG1()))
diff --git a/src/main/java/org/gridsuite/modification/server/entities/equipment/modification/TwoWindingsTransformerModificationEntity.java b/src/main/java/org/gridsuite/modification/server/entities/equipment/modification/TwoWindingsTransformerModificationEntity.java
index 8a96f8b51..95e106e2f 100644
--- a/src/main/java/org/gridsuite/modification/server/entities/equipment/modification/TwoWindingsTransformerModificationEntity.java
+++ b/src/main/java/org/gridsuite/modification/server/entities/equipment/modification/TwoWindingsTransformerModificationEntity.java
@@ -355,8 +355,18 @@ public TwoWindingsTransformerModificationInfos toModificationInfos() {
                 .activated(getActivated())
                 .equipmentId(getEquipmentId())
                 .equipmentName(AttributeModification.toAttributeModification(getEquipmentNameValue(), getEquipmentNameOp()))
-                .connected1(toAttributeModification(getConnected1()))
-                .connected2(toAttributeModification(getConnected2()))
+                .voltageLevelId1(toAttributeModification(getVoltageLevelId1()))
+                .voltageLevelId2(toAttributeModification(getVoltageLevelId2()))
+                .busOrBusbarSectionId1(toAttributeModification(getBusOrBusbarSectionId1()))
+                .busOrBusbarSectionId2(toAttributeModification(getBusOrBusbarSectionId2()))
+                .connectionName1(toAttributeModification(getConnectionName1()))
+                .connectionName2(toAttributeModification(getConnectionName2()))
+                .connectionDirection1(toAttributeModification(getConnectionDirection1()))
+                .connectionDirection2(toAttributeModification(getConnectionDirection2()))
+                .connectionPosition1(toAttributeModification(getConnectionPosition1()))
+                .connectionPosition2(toAttributeModification(getConnectionPosition2()))
+                .terminal1Connected(toAttributeModification(getTerminal1Connected()))
+                .terminal2Connected(toAttributeModification(getTerminal2Connected()))
                 .r(AttributeModification.toAttributeModification(getR()))
                 .x(AttributeModification.toAttributeModification(getX()))
                 .g(AttributeModification.toAttributeModification(getG()))
diff --git a/src/main/java/org/gridsuite/modification/server/modifications/AbstractBranchModification.java b/src/main/java/org/gridsuite/modification/server/modifications/AbstractBranchModification.java
index 1b69f73ed..a3305ef26 100644
--- a/src/main/java/org/gridsuite/modification/server/modifications/AbstractBranchModification.java
+++ b/src/main/java/org/gridsuite/modification/server/modifications/AbstractBranchModification.java
@@ -10,6 +10,8 @@
 import com.powsybl.commons.report.ReportNode;
 import com.powsybl.commons.report.TypedValue;
 import com.powsybl.iidm.network.*;
+import com.powsybl.iidm.network.extensions.ConnectablePosition;
+import com.powsybl.iidm.network.extensions.ConnectablePositionAdder;
 import org.gridsuite.modification.server.NetworkModificationException;
 import org.gridsuite.modification.server.dto.BranchModificationInfos;
 import org.gridsuite.modification.server.dto.CurrentLimitsModificationInfos;
@@ -48,6 +50,8 @@ protected void modifyBranch(Branch<?> branch, BranchModificationInfos branchModi
             branch.setName(branchModificationInfos.getEquipmentName().getValue());
         }
 
+        modifyBranchConnectivityAttributes(branchModificationInfos, branch, subReportNode);
+
         if (characteristicsModified(branchModificationInfos)) {
             modifyCharacteristics(branch, branchModificationInfos, subReportNode);
         }
@@ -78,13 +82,13 @@ protected void modifyBranch(Branch<?> branch, BranchModificationInfos branchModi
     private void updateConnections(Branch<?> branch, BranchModificationInfos branchModificationInfos) {
         List<TwoSides> errorSides = new ArrayList<>();
         List<String> errorTypes = new ArrayList<>();
-        if (branchModificationInfos.getConnected1() != null && !updateConnection(branch, TwoSides.ONE, modificationInfos.getConnected1().getValue())) {
+        if (branchModificationInfos.getTerminal1Connected() != null && !updateConnection(branch, TwoSides.ONE, modificationInfos.getTerminal1Connected().getValue())) {
             errorSides.add(TwoSides.ONE);
-            errorTypes.add(Boolean.TRUE.equals(modificationInfos.getConnected1().getValue()) ? "connect" : "disconnect");
+            errorTypes.add(Boolean.TRUE.equals(modificationInfos.getTerminal1Connected().getValue()) ? "connect" : "disconnect");
         }
-        if (branchModificationInfos.getConnected2() != null && !updateConnection(branch, TwoSides.TWO, modificationInfos.getConnected2().getValue())) {
+        if (branchModificationInfos.getTerminal2Connected() != null && !updateConnection(branch, TwoSides.TWO, modificationInfos.getTerminal2Connected().getValue())) {
             errorSides.add(TwoSides.TWO);
-            errorTypes.add(Boolean.TRUE.equals(modificationInfos.getConnected2().getValue()) ? "connect" : "disconnect");
+            errorTypes.add(Boolean.TRUE.equals(modificationInfos.getTerminal2Connected().getValue()) ? "connect" : "disconnect");
         }
         if (!errorSides.isEmpty()) {
             throw new NetworkModificationException(BRANCH_MODIFICATION_ERROR,
@@ -219,4 +223,11 @@ protected boolean characteristicsModified(BranchModificationInfos branchModifica
 
     protected abstract void modifyCharacteristics(Branch<?> branch, BranchModificationInfos branchModificationInfos,
             ReportNode subReportNode);
+
+    private ReportNode modifyBranchConnectivityAttributes(BranchModificationInfos branchModificationInfos,
+                                                          Branch<?> branch, ReportNode subReportNode) {
+        ConnectablePosition<?> connectablePosition = (ConnectablePosition<?>) branch.getExtension(ConnectablePosition.class);
+        ConnectablePositionAdder<?> connectablePositionAdder = branch.newExtension(ConnectablePositionAdder.class);
+        return ModificationUtils.getInstance().modifyBranchConnectivityAttributes(connectablePosition, connectablePositionAdder, branch, branchModificationInfos, subReportNode);
+    }
 }
diff --git a/src/main/java/org/gridsuite/modification/server/modifications/ModificationUtils.java b/src/main/java/org/gridsuite/modification/server/modifications/ModificationUtils.java
index 02a6b04b5..92d4e588a 100644
--- a/src/main/java/org/gridsuite/modification/server/modifications/ModificationUtils.java
+++ b/src/main/java/org/gridsuite/modification/server/modifications/ModificationUtils.java
@@ -54,6 +54,7 @@ public final class ModificationUtils {
     public static final String CONNECTION_NAME_FIELD_NAME = "Connection name";
     public static final String CONNECTION_DIRECTION_FIELD_NAME = "Connection direction";
     public static final String CONNECTION_POSITION_FIELD_NAME = "Connection position";
+    public static final String NOT_EXIST_IN_NETWORK = " does not exist in network";
 
     private ModificationUtils() {
     }
@@ -89,7 +90,7 @@ Line getLine(Network network, String lineId) {
     Battery getBattery(Network network, String batteryId) {
         Battery battery = network.getBattery(batteryId);
         if (battery == null) {
-            throw new NetworkModificationException(BATTERY_NOT_FOUND, "Battery " + batteryId + " does not exist in network");
+            throw new NetworkModificationException(BATTERY_NOT_FOUND, "Battery " + batteryId + NOT_EXIST_IN_NETWORK);
         }
         return battery;
     }
@@ -97,7 +98,7 @@ Battery getBattery(Network network, String batteryId) {
     Generator getGenerator(Network network, String generatorId) {
         Generator generator = network.getGenerator(generatorId);
         if (generator == null) {
-            throw new NetworkModificationException(GENERATOR_NOT_FOUND, "Generator " + generatorId + " does not exist in network");
+            throw new NetworkModificationException(GENERATOR_NOT_FOUND, "Generator " + generatorId + NOT_EXIST_IN_NETWORK);
         }
         return generator;
     }
@@ -105,7 +106,7 @@ Generator getGenerator(Network network, String generatorId) {
     VscConverterStation getVscConverterStation(Network network, String converterStationId) {
         VscConverterStation vscConverterStation = network.getVscConverterStation(converterStationId);
         if (vscConverterStation == null) {
-            throw new NetworkModificationException(VSC_CONVERTER_STATION_NOT_FOUND, "Vsc converter station  " + converterStationId + " does not exist in network");
+            throw new NetworkModificationException(VSC_CONVERTER_STATION_NOT_FOUND, "Vsc converter station  " + converterStationId + NOT_EXIST_IN_NETWORK);
         }
         return vscConverterStation;
     }
@@ -114,7 +115,7 @@ VscConverterStation getVscConverterStation(Network network, String converterStat
     HvdcLine getHvdcLine(Network network, String hvdcLineId) {
         HvdcLine hvdcLine = network.getHvdcLine(hvdcLineId);
         if (hvdcLine == null) {
-            throw new NetworkModificationException(HVDC_LINE_NOT_FOUND, "Hvdc line  " + hvdcLineId + " does not exist in network");
+            throw new NetworkModificationException(HVDC_LINE_NOT_FOUND, "Hvdc line  " + hvdcLineId + NOT_EXIST_IN_NETWORK);
         }
         return hvdcLine;
     }
@@ -493,10 +494,7 @@ public ReportNode reportModifications(ReportNode reportNode, List<ReportNode> re
                 for (Map.Entry<String, TypedValue> valueEntry : report.getValues().entrySet()) {
                     reportNodeAdder.withUntypedValue(valueEntry.getKey(), valueEntry.getValue().toString());
                 }
-                TypedValue severity = report.getValue(ReportConstants.SEVERITY_KEY).orElse(null);
-                if (severity != null) {
-                    reportNodeAdder.withSeverity(severity);
-                }
+                report.getValue(ReportConstants.SEVERITY_KEY).ifPresent(reportNodeAdder::withSeverity);
                 reportNodeAdder.add();
             }
         }
@@ -601,120 +599,235 @@ public void disconnectCreatedInjection(InjectionCreationInfos modificationInfos,
     }
 
     public ReportNode modifyInjectionConnectivityAttributes(ConnectablePosition<?> connectablePosition,
-                                                      ConnectablePositionAdder<?> connectablePositionAdder,
-                                                      Injection<?> injection,
-                                                      InjectionModificationInfos modificationInfos,
-                                                      ReportNode connectivityReports) {
+                                                            ConnectablePositionAdder<?> connectablePositionAdder,
+                                                            Injection<?> injection,
+                                                            InjectionModificationInfos modificationInfos,
+                                                            ReportNode connectivityReports) {
         List<ReportNode> reports = new ArrayList<>();
-        if (modificationInfos.getVoltageLevelId() == null || modificationInfos.getBusOrBusbarSectionId() == null) {
-            return ReportNode.newRootReportNode()
+        if (isVoltageOrBusbarIdMissing(modificationInfos.getVoltageLevelId(), modificationInfos.getBusOrBusbarSectionId(), modificationInfos.getEquipmentId(), reports)) {
+            return reports.get(0);
+        }
+        processConnectivityPosition(connectablePosition, connectablePositionAdder, modificationInfos, reports, false);
+        modifyConnection(modificationInfos.getTerminalConnected(), injection, injection.getTerminal(), reports);
+
+        return reportModifications(connectivityReports, reports, "ConnectivityModified", CONNECTIVITY);
+    }
+
+    public ReportNode modifyBranchConnectivityAttributes(ConnectablePosition<?> connectablePosition,
+                                                         ConnectablePositionAdder<?> connectablePositionAdder,
+                                                         Branch<?> branch,
+                                                         BranchModificationInfos modificationInfos,
+                                                         ReportNode connectivityReports) {
+        List<ReportNode> reports = new ArrayList<>();
+        if (isVoltageOrBusbarIdMissing(modificationInfos.getVoltageLevelId1(), modificationInfos.getBusOrBusbarSectionId1(), modificationInfos.getEquipmentId(), reports) ||
+            isVoltageOrBusbarIdMissing(modificationInfos.getVoltageLevelId2(), modificationInfos.getBusOrBusbarSectionId2(), modificationInfos.getEquipmentId(), reports)) {
+            return reports.get(0);
+        }
+
+        processConnectivityPosition(connectablePosition, connectablePositionAdder, modificationInfos, reports, true);
+        modifyConnection(modificationInfos.getTerminal1Connected(), branch, branch.getTerminal1(), reports);
+        modifyConnection(modificationInfos.getTerminal2Connected(), branch, branch.getTerminal2(), reports);
+
+        return reportModifications(connectivityReports, reports, "ConnectivityModified", CONNECTIVITY);
+    }
+
+    private boolean isVoltageOrBusbarIdMissing(AttributeModification<String> voltageLevelId, AttributeModification<String> busbarSectionId, String equipmentId, List<ReportNode> reports) {
+        if (voltageLevelId == null || busbarSectionId == null) {
+            reports.add(ReportNode.newRootReportNode()
                     .withMessageTemplate("VoltageLevelOrBusbarSectionNotFound",
                             "Voltage level id or Bus bar section id of equipment id=${id} not found")
-                    .withUntypedValue("id", modificationInfos.getEquipmentId())
+                    .withUntypedValue("id", equipmentId)
                     .withSeverity(TypedValue.WARN_SEVERITY)
-                    .build();
+                    .build());
+            return true;
         }
+        return false;
+    }
+
+    private void processConnectivityPosition(ConnectablePosition<?> connectablePosition,
+                                             ConnectablePositionAdder<?> connectablePositionAdder,
+                                             Object modificationInfos,
+                                             List<ReportNode> reports,
+                                             boolean isBranch) {
         if (connectablePosition != null) {
-            modifyExistingConnectivityPosition(connectablePosition, modificationInfos, reports);
+            modifyExistingConnectivityPosition(connectablePosition, modificationInfos, reports, isBranch);
         } else {
-            createNewConnectivityPosition(connectablePositionAdder, modificationInfos, reports);
+            createNewConnectivityPosition(connectablePositionAdder, modificationInfos, reports, isBranch);
         }
-        modifyInjectionConnection(modificationInfos, injection, reports);
-        return reportModifications(connectivityReports, reports, "ConnectivityModified", CONNECTIVITY);
     }
 
     private void modifyExistingConnectivityPosition(ConnectablePosition<?> connectablePosition,
-                                                  InjectionModificationInfos modificationInfos,
-                                                  List<ReportNode> reports) {
-        ConnectablePosition.Feeder feeder = connectablePosition.getFeeder();
-        ReportNode connectionNameReport = applyElementaryModificationsAndReturnReport(
-                feeder::setName,
+                                                    Object modificationInfos,
+                                                    List<ReportNode> reports,
+                                                    boolean isBranch) {
+        if (isBranch) {
+            modifyFeeder(connectablePosition.getFeeder1(), modificationInfos, reports, 1);
+            modifyFeeder(connectablePosition.getFeeder2(), modificationInfos, reports, 2);
+        } else {
+            modifyFeeder(connectablePosition.getFeeder(), modificationInfos, reports, 0);
+        }
+    }
+
+    private void createNewConnectivityPosition(ConnectablePositionAdder<?> adder,
+                                               Object modificationInfos,
+                                               List<ReportNode> reports,
+                                               boolean isBranch) {
+        if (isBranch) {
+            ConnectablePositionAdder.FeederAdder<?> feeder1 = adder.newFeeder1();
+            ConnectablePositionAdder.FeederAdder<?> feeder2 = adder.newFeeder2();
+            modifyFeederAdder(feeder1, modificationInfos, reports, 1);
+            modifyFeederAdder(feeder2, modificationInfos, reports, 2);
+        } else {
+            ConnectablePositionAdder.FeederAdder<?> feeder = adder.newFeeder();
+            modifyFeederAdder(feeder, modificationInfos, reports, 0);
+        }
+        adder.add();
+    }
+
+    private void modifyFeeder(ConnectablePosition.Feeder feeder,
+                              Object modificationInfos,
+                              List<ReportNode> reports,
+                              int feederNumber) {
+        applyModifications(feeder, modificationInfos, reports, feederNumber);
+    }
+
+    private void applyModifications(ConnectablePosition.Feeder feeder,
+                                    Object modificationInfos,
+                                    List<ReportNode> reports,
+                                    int feederNumber) {
+        ReportNode connectionNameReport = applyElementaryModificationsAndReturnReport(feeder::setName,
                 feeder.getName()::get,
-                modificationInfos.getConnectionName(),
-                CONNECTION_NAME_FIELD_NAME);
+                getConnectionName(modificationInfos, feederNumber),
+                getConnectionNameField(feederNumber));
         if (connectionNameReport != null) {
             reports.add(connectionNameReport);
         }
-        ReportNode connectionDirectionReport = applyElementaryModificationsAndReturnReport(
-                feeder::setDirection,
+        ReportNode connectionDirectionReport = applyElementaryModificationsAndReturnReport(feeder::setDirection,
                 feeder::getDirection,
-                modificationInfos.getConnectionDirection(),
-                CONNECTION_DIRECTION_FIELD_NAME);
+                getConnectionDirection(modificationInfos, feederNumber),
+                getConnectionDirectionField(feederNumber));
         if (connectionDirectionReport != null) {
             reports.add(connectionDirectionReport);
         }
-        ReportNode connectionPositionReport = applyElementaryModificationsAndReturnReport(
-                feeder::setOrder,
+        ReportNode connectionPositionReport = applyElementaryModificationsAndReturnReport(feeder::setOrder,
                 feeder.getOrder()::get,
-                modificationInfos.getConnectionPosition(),
-                CONNECTION_POSITION_FIELD_NAME);
+                getConnectionPosition(modificationInfos, feederNumber),
+                getConnectionPositionField(feederNumber));
         if (connectionPositionReport != null) {
             reports.add(connectionPositionReport);
         }
     }
 
-    private void createNewConnectivityPosition(ConnectablePositionAdder<?> adder,
-                                             InjectionModificationInfos modificationInfos,
-                                             List<ReportNode> reports) {
-        ConnectablePositionAdder.FeederAdder<?> feeder = adder.newFeeder();
-        ReportNode connectionNameReport = applyElementaryModificationsAndReturnReport(
-                feeder::withName,
+    private void modifyFeederAdder(ConnectablePositionAdder.FeederAdder<?> feeder,
+                                   Object modificationInfos,
+                                   List<ReportNode> reports,
+                                   int feederNumber) {
+        ReportNode connectionNameReport = applyElementaryModificationsAndReturnReport(feeder::withName,
                 () -> null,
-                modificationInfos.getConnectionName(),
-                CONNECTION_NAME_FIELD_NAME);
+                getConnectionName(modificationInfos, feederNumber),
+                getConnectionNameField(feederNumber));
         if (connectionNameReport != null) {
             reports.add(connectionNameReport);
         }
-
-        ReportNode connectionDirectionReport = applyElementaryModificationsAndReturnReport(
-                feeder::withDirection,
+        ReportNode connectionDirectionReport = applyElementaryModificationsAndReturnReport(feeder::withDirection,
                 () -> null,
-                modificationInfos.getConnectionDirection(),
-                CONNECTION_DIRECTION_FIELD_NAME);
+                getConnectionDirection(modificationInfos, feederNumber),
+                getConnectionDirectionField(feederNumber));
         if (connectionDirectionReport != null) {
             reports.add(connectionDirectionReport);
         }
-
-        ReportNode connectionPositionReport = applyElementaryModificationsAndReturnReport(
-                feeder::withOrder,
+        ReportNode connectionPositionReport = applyElementaryModificationsAndReturnReport(feeder::withOrder,
                 () -> null,
-                modificationInfos.getConnectionPosition(),
-                CONNECTION_POSITION_FIELD_NAME);
+                getConnectionPosition(modificationInfos, feederNumber),
+                getConnectionPositionField(feederNumber));
         if (connectionPositionReport != null) {
             reports.add(connectionPositionReport);
         }
-
         if (connectionNameReport != null || connectionDirectionReport != null || connectionPositionReport != null) {
-            adder.add();
+            feeder.add();
         }
     }
 
-    public void modifyInjectionConnection(InjectionModificationInfos modificationInfos, Injection<?> injection, List<ReportNode> subReportNode) {
-        if (modificationInfos.getTerminalConnected() != null && injection != null) {
-            if (isInjectionConnected(injection) && Boolean.FALSE.equals(modificationInfos.getTerminalConnected().getValue())) {
-                injection.getTerminal().disconnect();
-                if (isInjectionConnected(injection)) {
-                    throw new NetworkModificationException(INJECTION_MODIFICATION_ERROR,
-                        String.format("Could not disconnect equipment '%s'", injection.getId()));
-                }
-                subReportNode.add(ReportNode.newRootReportNode()
-                        .withMessageTemplate("equipmentDisconnected", "    Equipment with id=${id} disconnected")
-                        .withUntypedValue("id", modificationInfos.getEquipmentId())
-                        .withSeverity(TypedValue.INFO_SEVERITY)
-                        .build());
-            } else if (!isInjectionConnected(injection) && Boolean.TRUE.equals(modificationInfos.getTerminalConnected().getValue())) {
-                injection.getTerminal().connect();
-                if (!isInjectionConnected(injection)) {
-                    throw new NetworkModificationException(INJECTION_MODIFICATION_ERROR,
-                        String.format("Could not connect equipment '%s'", injection.getId()));
-                }
-                subReportNode.add(ReportNode.newRootReportNode()
-                        .withMessageTemplate("equipmentConnected", "    Equipment with id=${id} connected")
-                        .withUntypedValue("id", modificationInfos.getEquipmentId())
-                        .withSeverity(TypedValue.INFO_SEVERITY)
-                        .build());
-            }
+    private <T> T getConnectionDetail(Object modificationInfos, int feederNumber,
+                                      Function<BranchModificationInfos, T> branchFunc1,
+                                      Function<BranchModificationInfos, T> branchFunc2,
+                                      Function<InjectionModificationInfos, T> injectionFunc) {
+        if (modificationInfos instanceof BranchModificationInfos branchInfo) {
+            return feederNumber == 1 ? branchFunc1.apply(branchInfo) : branchFunc2.apply(branchInfo);
+        } else if (modificationInfos instanceof InjectionModificationInfos injectionInfo) {
+            return injectionFunc.apply(injectionInfo);
         }
+        return null;
+    }
+
+    private String getConnectionFieldName(int feederNumber, String baseFieldName) {
+        return switch (feederNumber) {
+            case 0 -> baseFieldName;
+            case 1 -> baseFieldName + " 1";
+            case 2 -> baseFieldName + " 2";
+            default -> "";
+        };
+    }
+
+    private AttributeModification<String> getConnectionName(Object modificationInfos, int feederNumber) {
+        return getConnectionDetail(modificationInfos, feederNumber,
+                BranchModificationInfos::getConnectionName1, BranchModificationInfos::getConnectionName2,
+                InjectionModificationInfos::getConnectionName);
+    }
+
+    private String getConnectionNameField(int feederNumber) {
+        return getConnectionFieldName(feederNumber, CONNECTION_NAME_FIELD_NAME);
+    }
+
+    private String getConnectionDirectionField(int feederNumber) {
+        return getConnectionFieldName(feederNumber, CONNECTION_DIRECTION_FIELD_NAME);
+    }
+
+    private String getConnectionPositionField(int feederNumber) {
+        return getConnectionFieldName(feederNumber, CONNECTION_POSITION_FIELD_NAME);
+    }
+
+    private AttributeModification<ConnectablePosition.Direction> getConnectionDirection(Object modificationInfos, int feederNumber) {
+        return getConnectionDetail(modificationInfos, feederNumber,
+                BranchModificationInfos::getConnectionDirection1, BranchModificationInfos::getConnectionDirection2,
+                InjectionModificationInfos::getConnectionDirection);
+    }
+
+    private AttributeModification<Integer> getConnectionPosition(Object modificationInfos, int feederNumber) {
+        return getConnectionDetail(modificationInfos, feederNumber,
+                BranchModificationInfos::getConnectionPosition1, BranchModificationInfos::getConnectionPosition2,
+                InjectionModificationInfos::getConnectionPosition);
+    }
+
+    private void modifyConnection(AttributeModification<Boolean> terminalConnected, Identifiable<?> equipment, Terminal terminal, List<ReportNode> reports) {
+        if (terminalConnected == null || equipment == null) {
+            return;
+        }
+
+        boolean isConnected = terminal.isConnected();
+        if (isConnected && Boolean.FALSE.equals(terminalConnected.getValue())) {
+            terminal.disconnect();
+            validateConnectionChange(!terminal.isConnected(), equipment, "disconnect", reports);
+        } else if (!isConnected && Boolean.TRUE.equals(terminalConnected.getValue())) {
+            terminal.connect();
+            validateConnectionChange(terminal.isConnected(), equipment, "connect", reports);
+        }
+    }
+
+    private void validateConnectionChange(boolean success, Identifiable<?> equipment, String action, List<ReportNode> reports) {
+        if (!success) {
+            throw new NetworkModificationException(equipment instanceof Branch<?> ? BRANCH_MODIFICATION_ERROR : INJECTION_MODIFICATION_ERROR,
+                    String.format("Could not %s equipment '%s'", action, equipment.getId()));
+        }
+        reports.add(ReportNode.newRootReportNode()
+                .withMessageTemplate("equipment" + capitalize(action), String.format("Equipment with id=${id} %sed", action))
+                .withUntypedValue("id", equipment.getId())
+                .withSeverity(TypedValue.INFO_SEVERITY)
+                .build());
+    }
+
+    private String capitalize(String input) {
+        return input.substring(0, 1).toUpperCase() + input.substring(1);
     }
 
     public void disconnectBranch(BranchCreationInfos modificationInfos, Branch<?> branch, ReportNode subReportNode) {
@@ -742,38 +855,23 @@ public Identifiable<?> getEquipmentByIdentifiableType(Network network, Identifia
             return null;
         }
 
-        switch (type) {
-            case HVDC_LINE:
-                return network.getHvdcLine(equipmentId);
-            case LINE:
-                return network.getLine(equipmentId);
-            case TWO_WINDINGS_TRANSFORMER:
-                return network.getTwoWindingsTransformer(equipmentId);
-            case THREE_WINDINGS_TRANSFORMER:
-                return network.getThreeWindingsTransformer(equipmentId);
-            case GENERATOR:
-                return network.getGenerator(equipmentId);
-            case LOAD:
-                return network.getLoad(equipmentId);
-            case BATTERY:
-                return network.getBattery(equipmentId);
-            case SHUNT_COMPENSATOR:
-                return network.getShuntCompensator(equipmentId);
-            case STATIC_VAR_COMPENSATOR:
-                return network.getStaticVarCompensator(equipmentId);
-            case DANGLING_LINE:
-                return network.getDanglingLine(equipmentId);
-            case HVDC_CONVERTER_STATION:
-                return network.getHvdcConverterStation(equipmentId);
-            case SUBSTATION:
-                return network.getSubstation(equipmentId);
-            case VOLTAGE_LEVEL:
-                return network.getVoltageLevel(equipmentId);
-            case BUSBAR_SECTION:
-                return network.getBusbarSection(equipmentId);
-            default:
-                return null;
-        }
+        return switch (type) {
+            case HVDC_LINE -> network.getHvdcLine(equipmentId);
+            case LINE -> network.getLine(equipmentId);
+            case TWO_WINDINGS_TRANSFORMER -> network.getTwoWindingsTransformer(equipmentId);
+            case THREE_WINDINGS_TRANSFORMER -> network.getThreeWindingsTransformer(equipmentId);
+            case GENERATOR -> network.getGenerator(equipmentId);
+            case LOAD -> network.getLoad(equipmentId);
+            case BATTERY -> network.getBattery(equipmentId);
+            case SHUNT_COMPENSATOR -> network.getShuntCompensator(equipmentId);
+            case STATIC_VAR_COMPENSATOR -> network.getStaticVarCompensator(equipmentId);
+            case DANGLING_LINE -> network.getDanglingLine(equipmentId);
+            case HVDC_CONVERTER_STATION -> network.getHvdcConverterStation(equipmentId);
+            case SUBSTATION -> network.getSubstation(equipmentId);
+            case VOLTAGE_LEVEL -> network.getVoltageLevel(equipmentId);
+            case BUSBAR_SECTION -> network.getBusbarSection(equipmentId);
+            default -> null;
+        };
     }
 
     public void setCurrentLimits(CurrentLimitsInfos currentLimitsInfos, CurrentLimitsAdder limitsAdder) {
@@ -1266,10 +1364,7 @@ public static void insertReportNode(ReportNode parent, ReportNode child) {
         for (Map.Entry<String, TypedValue> valueEntry : child.getValues().entrySet()) {
             adder.withUntypedValue(valueEntry.getKey(), valueEntry.getValue().toString());
         }
-        TypedValue severity = child.getValue(ReportConstants.SEVERITY_KEY).orElse(null);
-        if (severity != null) {
-            adder.withSeverity(severity);
-        }
+        child.getValue(ReportConstants.SEVERITY_KEY).ifPresent(adder::withSeverity);
         ReportNode insertedChild = adder.add();
         if (child.getChildren() != null) {
             child.getChildren().forEach(grandChild -> insertReportNode(insertedChild, grandChild));
diff --git a/src/main/java/org/gridsuite/modification/server/repositories/GeneratorCreationRepository.java b/src/main/java/org/gridsuite/modification/server/repositories/GeneratorCreationRepository.java
new file mode 100644
index 000000000..4f71b6c46
--- /dev/null
+++ b/src/main/java/org/gridsuite/modification/server/repositories/GeneratorCreationRepository.java
@@ -0,0 +1,27 @@
+/*
+ * Copyright (c) 2024, RTE (http://www.rte-france.com)
+ * This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/.
+ */
+
+package org.gridsuite.modification.server.repositories;
+
+import org.gridsuite.modification.server.entities.equipment.creation.GeneratorCreationEntity;
+import org.springframework.data.jpa.repository.EntityGraph;
+import org.springframework.data.jpa.repository.JpaRepository;
+
+import java.util.List;
+import java.util.UUID;
+
+/**
+ * @author Seddik Yengui <seddik.yengui_externe at rte-france.com>
+ */
+
+public interface GeneratorCreationRepository extends JpaRepository<GeneratorCreationEntity, UUID> {
+    @EntityGraph(attributePaths = {"reactiveCapabilityCurvePoints"}, type = EntityGraph.EntityGraphType.LOAD)
+    List<GeneratorCreationEntity> findAllReactiveCapabilityCurvePointsByIdIn(List<UUID> ids);
+
+    @EntityGraph(attributePaths = {"properties"}, type = EntityGraph.EntityGraphType.LOAD)
+    List<GeneratorCreationEntity> findAllPropertiesByIdIn(List<UUID> ids);
+}
diff --git a/src/main/java/org/gridsuite/modification/server/repositories/ModificationRepository.java b/src/main/java/org/gridsuite/modification/server/repositories/ModificationRepository.java
index bc3c9e95a..82025f4ec 100644
--- a/src/main/java/org/gridsuite/modification/server/repositories/ModificationRepository.java
+++ b/src/main/java/org/gridsuite/modification/server/repositories/ModificationRepository.java
@@ -7,17 +7,12 @@
 package org.gridsuite.modification.server.repositories;
 
 import org.gridsuite.modification.server.entities.ModificationEntity;
-import org.gridsuite.modification.server.entities.TabularCreationEntity;
-import org.gridsuite.modification.server.entities.equipment.creation.GeneratorCreationEntity;
-import org.springframework.data.jpa.repository.EntityGraph;
 import org.springframework.data.jpa.repository.JpaRepository;
 import org.springframework.data.jpa.repository.Query;
 import org.springframework.data.repository.query.Param;
 import org.springframework.stereotype.Repository;
 
 import java.util.List;
-import java.util.Optional;
-import java.util.Set;
 import java.util.UUID;
 
 /**
@@ -45,17 +40,14 @@ public interface ModificationRepository extends JpaRepository<ModificationEntity
     @Query(value = "SELECT cast(modifications_id AS VARCHAR) FROM tabular_modification_modifications WHERE tabular_modification_entity_id = :uuid ORDER BY modifications_order", nativeQuery = true)
     List<UUID> findSubModificationIdsByTabularModificationIdOrderByModificationsOrder(UUID uuid);
 
+    @Query(value = "SELECT cast(creations_id AS VARCHAR) FROM tabular_creation_creations WHERE tabular_creation_entity_id = :uuid ORDER BY creations_order", nativeQuery = true)
+    List<UUID> findSubModificationIdsByTabularCreationIdOrderByModificationsOrder(UUID uuid);
+
     @Query(value = "SELECT cast(modifications_id AS VARCHAR) FROM tabular_modification_modifications WHERE tabular_modification_entity_id = :uuid", nativeQuery = true)
     List<UUID> findSubModificationIdsByTabularModificationId(UUID uuid);
 
     @Query(value = "SELECT cast(modification_id AS VARCHAR) FROM composite_modification_sub_modifications WHERE id = :uuid ORDER BY modifications_order", nativeQuery = true)
     List<UUID> findModificationIdsByCompositeModificationId(UUID uuid);
 
-    @EntityGraph(attributePaths = {"creations", "creations.reactiveCapabilityCurvePoints"}, type = EntityGraph.EntityGraphType.LOAD)
-    Optional<TabularCreationEntity> findTabularCreationWithReactiveCapabilityCurvePointsById(UUID id);
-
-    @EntityGraph(attributePaths = {"reactiveCapabilityCurvePoints"}, type = EntityGraph.EntityGraphType.LOAD)
-    Set<GeneratorCreationEntity> findAllCreationsWithReactiveCapabilityCurvePointsByIdIn(List<UUID> ids);
-
     Integer countByGroupIdAndStashed(UUID groupId, boolean stashed);
 }
diff --git a/src/main/java/org/gridsuite/modification/server/repositories/NetworkModificationRepository.java b/src/main/java/org/gridsuite/modification/server/repositories/NetworkModificationRepository.java
index 7b59ce607..35844281c 100644
--- a/src/main/java/org/gridsuite/modification/server/repositories/NetworkModificationRepository.java
+++ b/src/main/java/org/gridsuite/modification/server/repositories/NetworkModificationRepository.java
@@ -9,11 +9,9 @@
 import lombok.NonNull;
 import org.gridsuite.modification.server.ModificationType;
 import org.gridsuite.modification.server.NetworkModificationException;
-import org.gridsuite.modification.server.dto.CompositeModificationInfos;
-import org.gridsuite.modification.server.dto.ModificationInfos;
-import org.gridsuite.modification.server.dto.ModificationMetadata;
-import org.gridsuite.modification.server.dto.TabularModificationInfos;
+import org.gridsuite.modification.server.dto.*;
 import org.gridsuite.modification.server.entities.*;
+import org.gridsuite.modification.server.entities.equipment.creation.GeneratorCreationEntity;
 import org.gridsuite.modification.server.entities.equipment.modification.GeneratorModificationEntity;
 import org.springframework.stereotype.Repository;
 import org.springframework.transaction.annotation.Transactional;
@@ -38,12 +36,18 @@ public class NetworkModificationRepository {
 
     private final GeneratorModificationRepository generatorModificationRepository;
 
+    private final GeneratorCreationRepository generatorCreationRepository;
+
     private static final String MODIFICATION_NOT_FOUND_MESSAGE = "Modification (%s) not found";
 
-    public NetworkModificationRepository(ModificationGroupRepository modificationGroupRepository, ModificationRepository modificationRepository, GeneratorModificationRepository generatorModificationRepository) {
+    public NetworkModificationRepository(ModificationGroupRepository modificationGroupRepository,
+                                         ModificationRepository modificationRepository,
+                                         GeneratorModificationRepository generatorModificationRepository,
+                                         GeneratorCreationRepository generatorCreationRepository) {
         this.modificationGroupRepository = modificationGroupRepository;
         this.modificationRepository = modificationRepository;
         this.generatorModificationRepository = generatorModificationRepository;
+        this.generatorCreationRepository = generatorCreationRepository;
     }
 
     @Transactional // To have the 2 delete in the same transaction (atomic)
@@ -257,26 +261,41 @@ public TabularModificationInfos loadTabularModificationSubEntities(ModificationE
         return tabularModificationEntity.toModificationInfos();
     }
 
-    public TabularCreationEntity loadTabularCreationSubEntities(ModificationEntity modificationEntity) {
+    public TabularCreationInfos loadTabularCreationSubEntities(ModificationEntity modificationEntity) {
         TabularCreationEntity tabularCreationEntity = (TabularCreationEntity) modificationEntity;
         switch (tabularCreationEntity.getCreationType()) {
             case GENERATOR_CREATION:
-                tabularCreationEntity = modificationRepository.findTabularCreationWithReactiveCapabilityCurvePointsById(modificationEntity.getId()).orElseThrow(() ->
-                    new NetworkModificationException(MODIFICATION_NOT_FOUND, String.format(MODIFICATION_NOT_FOUND_MESSAGE, modificationEntity.getId()))
-                );
-                modificationRepository.findAllCreationsWithReactiveCapabilityCurvePointsByIdIn(tabularCreationEntity.getCreations().stream().map(ModificationEntity::getId).toList());
-                break;
+                List<UUID> subModificationsUuids = modificationRepository.findSubModificationIdsByTabularCreationIdOrderByModificationsOrder(modificationEntity.getId());
+                Map<UUID, GeneratorCreationEntity> generatorCreations = generatorCreationRepository.findAllReactiveCapabilityCurvePointsByIdIn(subModificationsUuids)
+                        .stream()
+                        .collect(Collectors.toMap(
+                                ModificationEntity::getId,
+                                Function.identity()
+                        ));
+                generatorCreationRepository.findAllPropertiesByIdIn(subModificationsUuids);
+                List<GeneratorCreationEntity> orderedGeneratorCreation = subModificationsUuids
+                        .stream()
+                        .map(generatorCreations::get)
+                        .toList();
+                return TabularCreationInfos.builder()
+                        .uuid(tabularCreationEntity.getId())
+                        .date(tabularCreationEntity.getDate())
+                        .stashed(tabularCreationEntity.getStashed())
+                        .activated(tabularCreationEntity.getActivated())
+                        .creationType(tabularCreationEntity.getCreationType())
+                        .creations(orderedGeneratorCreation.stream().map(GeneratorCreationEntity::toModificationInfos).map(m -> (ModificationInfos) m).toList())
+                        .build();
             default:
                 break;
         }
-        return tabularCreationEntity;
+        return tabularCreationEntity.toModificationInfos();
     }
 
     public ModificationInfos getModificationInfos(ModificationEntity modificationEntity) {
         if (modificationEntity instanceof TabularModificationEntity) {
             return loadTabularModificationSubEntities(modificationEntity);
         } else if (modificationEntity instanceof TabularCreationEntity) {
-            return loadTabularCreationSubEntities(modificationEntity).toModificationInfos();
+            return loadTabularCreationSubEntities(modificationEntity);
         }
         return modificationEntity.toModificationInfos();
     }
diff --git a/src/main/resources/db/changelog/changesets/changelog_20240904T211456Z.xml b/src/main/resources/db/changelog/changesets/changelog_20240904T211456Z.xml
new file mode 100644
index 000000000..5d6cf56f0
--- /dev/null
+++ b/src/main/resources/db/changelog/changesets/changelog_20240904T211456Z.xml
@@ -0,0 +1,127 @@
+<?xml version="1.1" encoding="UTF-8" standalone="no"?>
+<databaseChangeLog xmlns="http://www.liquibase.org/xml/ns/dbchangelog" xmlns:ext="http://www.liquibase.org/xml/ns/dbchangelog-ext" xmlns:pro="http://www.liquibase.org/xml/ns/pro" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.liquibase.org/xml/ns/dbchangelog-ext http://www.liquibase.org/xml/ns/dbchangelog/dbchangelog-ext.xsd http://www.liquibase.org/xml/ns/pro http://www.liquibase.org/xml/ns/pro/liquibase-pro-latest.xsd http://www.liquibase.org/xml/ns/dbchangelog http://www.liquibase.org/xml/ns/dbchangelog/dbchangelog-latest.xsd">
+    <changeSet author="rehiligha (generated)" id="1725484515185-29">
+        <addColumn tableName="line_modification">
+            <column name="bus_or_busbar_section_id1" type="varchar(255)"/>
+        </addColumn>
+        <addColumn tableName="line_modification">
+            <column name="bus_or_busbar_section_id1op" type="varchar(255)"/>
+        </addColumn>
+        <addColumn tableName="line_modification">
+            <column name="bus_or_busbar_section_id2" type="varchar(255)"/>
+        </addColumn>
+        <addColumn tableName="line_modification">
+            <column name="bus_or_busbar_section_id2op" type="varchar(255)"/>
+        </addColumn>
+        <addColumn tableName="line_modification">
+            <column name="connection_direction1" type="varchar(255)"/>
+        </addColumn>
+        <addColumn tableName="line_modification">
+            <column name="connection_direction1op" type="varchar(255)"/>
+        </addColumn>
+        <addColumn tableName="line_modification">
+            <column name="connection_direction2" type="varchar(255)"/>
+        </addColumn>
+        <addColumn tableName="line_modification">
+            <column name="connection_direction2op" type="varchar(255)"/>
+        </addColumn>
+        <addColumn tableName="line_modification">
+            <column name="connection_name1" type="varchar(255)"/>
+        </addColumn>
+        <addColumn tableName="line_modification">
+            <column name="connection_name1op" type="varchar(255)"/>
+        </addColumn>
+        <addColumn tableName="line_modification">
+            <column name="connection_name2" type="varchar(255)"/>
+        </addColumn>
+        <addColumn tableName="line_modification">
+            <column name="connection_name2op" type="varchar(255)"/>
+        </addColumn>
+        <addColumn tableName="line_modification">
+            <column name="connection_position1" type="integer"/>
+        </addColumn>
+        <addColumn tableName="line_modification">
+            <column name="connection_position1op" type="varchar(255)"/>
+        </addColumn>
+        <addColumn tableName="line_modification">
+            <column name="connection_position2" type="integer"/>
+        </addColumn>
+        <addColumn tableName="line_modification">
+            <column name="connection_position2op" type="varchar(255)"/>
+        </addColumn>
+        <addColumn tableName="line_modification">
+            <column name="voltage_level_id1" type="varchar(255)"/>
+        </addColumn>
+        <addColumn tableName="line_modification">
+            <column name="voltage_level_id1op" type="varchar(255)"/>
+        </addColumn>
+        <addColumn tableName="line_modification">
+            <column name="voltage_level_id2" type="varchar(255)"/>
+        </addColumn>
+        <addColumn tableName="line_modification">
+            <column name="voltage_level_id2op" type="varchar(255)"/>
+        </addColumn>
+    </changeSet>
+    <changeSet author="rehiligha (generated)" id="1725484515185-30">
+        <addColumn tableName="two_windings_transformer_modification">
+            <column name="bus_or_busbar_section_id1" type="varchar(255)"/>
+        </addColumn>
+        <addColumn tableName="two_windings_transformer_modification">
+            <column name="bus_or_busbar_section_id1op" type="varchar(255)"/>
+        </addColumn>
+        <addColumn tableName="two_windings_transformer_modification">
+            <column name="bus_or_busbar_section_id2" type="varchar(255)"/>
+        </addColumn>
+        <addColumn tableName="two_windings_transformer_modification">
+            <column name="bus_or_busbar_section_id2op" type="varchar(255)"/>
+        </addColumn>
+        <addColumn tableName="two_windings_transformer_modification">
+            <column name="connection_direction1" type="varchar(255)"/>
+        </addColumn>
+        <addColumn tableName="two_windings_transformer_modification">
+            <column name="connection_direction1op" type="varchar(255)"/>
+        </addColumn>
+        <addColumn tableName="two_windings_transformer_modification">
+            <column name="connection_direction2" type="varchar(255)"/>
+        </addColumn>
+        <addColumn tableName="two_windings_transformer_modification">
+            <column name="connection_direction2op" type="varchar(255)"/>
+        </addColumn>
+        <addColumn tableName="two_windings_transformer_modification">
+            <column name="connection_name1" type="varchar(255)"/>
+        </addColumn>
+        <addColumn tableName="two_windings_transformer_modification">
+            <column name="connection_name1op" type="varchar(255)"/>
+        </addColumn>
+        <addColumn tableName="two_windings_transformer_modification">
+            <column name="connection_name2" type="varchar(255)"/>
+        </addColumn>
+        <addColumn tableName="two_windings_transformer_modification">
+            <column name="connection_name2op" type="varchar(255)"/>
+        </addColumn>
+        <addColumn tableName="two_windings_transformer_modification">
+            <column name="connection_position1" type="integer"/>
+        </addColumn>
+        <addColumn tableName="two_windings_transformer_modification">
+            <column name="connection_position1op" type="varchar(255)"/>
+        </addColumn>
+        <addColumn tableName="two_windings_transformer_modification">
+            <column name="connection_position2" type="integer"/>
+        </addColumn>
+        <addColumn tableName="two_windings_transformer_modification">
+            <column name="connection_position2op" type="varchar(255)"/>
+        </addColumn>
+        <addColumn tableName="two_windings_transformer_modification">
+            <column name="voltage_level_id1" type="varchar(255)"/>
+        </addColumn>
+        <addColumn tableName="two_windings_transformer_modification">
+            <column name="voltage_level_id1op" type="varchar(255)"/>
+        </addColumn>
+        <addColumn tableName="two_windings_transformer_modification">
+            <column name="voltage_level_id2" type="varchar(255)"/>
+        </addColumn>
+        <addColumn tableName="two_windings_transformer_modification">
+            <column name="voltage_level_id2op" type="varchar(255)"/>
+        </addColumn>
+    </changeSet>
+</databaseChangeLog>
diff --git a/src/main/resources/db/changelog/db.changelog-master.yaml b/src/main/resources/db/changelog/db.changelog-master.yaml
index 6f9f44d4e..32b8d57e2 100644
--- a/src/main/resources/db/changelog/db.changelog-master.yaml
+++ b/src/main/resources/db/changelog/db.changelog-master.yaml
@@ -305,4 +305,7 @@ databaseChangeLog:
       relativeToChangelogFile: true
   - include:
       file: changesets/changelog_20240829T071248Z.xml
+      relativeToChangelogFile: true
+  - include:
+      file: changesets/changelog_20240904T211456Z.xml
       relativeToChangelogFile: true
\ No newline at end of file
diff --git a/src/test/java/org/gridsuite/modification/server/modifications/LineModificationTest.java b/src/test/java/org/gridsuite/modification/server/modifications/LineModificationTest.java
index 165d082e4..69af786b8 100644
--- a/src/test/java/org/gridsuite/modification/server/modifications/LineModificationTest.java
+++ b/src/test/java/org/gridsuite/modification/server/modifications/LineModificationTest.java
@@ -11,6 +11,7 @@
 import com.powsybl.iidm.network.Line;
 import com.powsybl.iidm.network.LoadingLimits.TemporaryLimit;
 import com.powsybl.iidm.network.Network;
+import com.powsybl.iidm.network.extensions.ConnectablePosition;
 import lombok.SneakyThrows;
 import org.gridsuite.modification.server.NetworkModificationException;
 import org.gridsuite.modification.server.dto.*;
@@ -51,6 +52,16 @@ protected ModificationInfos buildModification() {
                 .stashed(false)
                 .equipmentId("line1")
                 .equipmentName(new AttributeModification<>("LineModified", OperationType.SET))
+                .voltageLevelId1(new AttributeModification<>("v1", OperationType.SET))
+                .voltageLevelId2(new AttributeModification<>("v4", OperationType.SET))
+                .busOrBusbarSectionId1(new AttributeModification<>("1B", OperationType.SET))
+                .busOrBusbarSectionId2(new AttributeModification<>("2B", OperationType.SET))
+                .connectionName1(new AttributeModification<>("cn1Line1", OperationType.SET))
+                .connectionName2(new AttributeModification<>("cn2Line1", OperationType.SET))
+                .connectionDirection1(new AttributeModification<>(ConnectablePosition.Direction.TOP, OperationType.SET))
+                .connectionDirection2(new AttributeModification<>(ConnectablePosition.Direction.TOP, OperationType.SET))
+                .connectionPosition1(new AttributeModification<>(1, OperationType.SET))
+                .connectionPosition2(new AttributeModification<>(1, OperationType.SET))
                 .currentLimits1(CurrentLimitsModificationInfos.builder()
                         .permanentLimit(12.0)
                         .temporaryLimits(List.of(CurrentTemporaryLimitModificationInfos.builder()
@@ -378,8 +389,8 @@ public void testConnection() throws Exception {
 
     private void changeLineConnectionState(Line existingEquipment, boolean expectedState) throws Exception {
         LineModificationInfos modificationInfos = (LineModificationInfos) buildModification();
-        modificationInfos.setConnected1(new AttributeModification<>(expectedState, OperationType.SET));
-        modificationInfos.setConnected2(new AttributeModification<>(expectedState, OperationType.SET));
+        modificationInfos.setTerminal1Connected(new AttributeModification<>(expectedState, OperationType.SET));
+        modificationInfos.setTerminal2Connected(new AttributeModification<>(expectedState, OperationType.SET));
 
         if (expectedState) {
             if (existingEquipment.getTerminal1().isConnected()) {
diff --git a/src/test/java/org/gridsuite/modification/server/modifications/TwoWindingsTransformerModificationTest.java b/src/test/java/org/gridsuite/modification/server/modifications/TwoWindingsTransformerModificationTest.java
index 7ec3a0df4..efd3a20a0 100644
--- a/src/test/java/org/gridsuite/modification/server/modifications/TwoWindingsTransformerModificationTest.java
+++ b/src/test/java/org/gridsuite/modification/server/modifications/TwoWindingsTransformerModificationTest.java
@@ -15,6 +15,7 @@
 import com.powsybl.iidm.network.TwoSides;
 import com.powsybl.iidm.network.TwoWindingsTransformer;
 
+import com.powsybl.iidm.network.extensions.ConnectablePosition;
 import lombok.SneakyThrows;
 import org.gridsuite.modification.server.NetworkModificationException;
 import org.gridsuite.modification.server.dto.*;
@@ -79,6 +80,16 @@ protected ModificationInfos buildModification() {
                                 .modificationType(TemporaryLimitModificationType.ADDED)
                                 .build()))
                         .build())
+                .voltageLevelId1(new AttributeModification<>("v1", OperationType.SET))
+                .voltageLevelId2(new AttributeModification<>("v2", OperationType.SET))
+                .busOrBusbarSectionId1(new AttributeModification<>("1B", OperationType.SET))
+                .busOrBusbarSectionId2(new AttributeModification<>("2B", OperationType.SET))
+                .connectionName1(new AttributeModification<>("trf1", OperationType.SET))
+                .connectionName2(new AttributeModification<>("trf1", OperationType.SET))
+                .connectionDirection1(new AttributeModification<>(ConnectablePosition.Direction.TOP, OperationType.SET))
+                .connectionDirection2(new AttributeModification<>(ConnectablePosition.Direction.TOP, OperationType.SET))
+                .connectionPosition1(new AttributeModification<>(1, OperationType.SET))
+                .connectionPosition2(new AttributeModification<>(2, OperationType.SET))
                 .ratioTapChanger(RatioTapChangerModificationInfos.builder()
                         .enabled(new AttributeModification<>(true, OperationType.SET))
                         .loadTapChangingCapabilities(new AttributeModification<>(true, OperationType.SET))
@@ -603,8 +614,8 @@ private void changeConnectionState(TwoWindingsTransformer existingEquipment, Two
                 TwoWindingsTransformerModificationInfos.builder()
                         .stashed(false)
                         .equipmentId(existingEquipment.getId())
-                        .connected1(side == TwoSides.ONE ? new AttributeModification<>(expectedState, OperationType.SET) : null)
-                        .connected2(side == TwoSides.TWO ? new AttributeModification<>(expectedState, OperationType.SET) : null)
+                        .terminal1Connected(side == TwoSides.ONE ? new AttributeModification<>(expectedState, OperationType.SET) : null)
+                        .terminal2Connected(side == TwoSides.TWO ? new AttributeModification<>(expectedState, OperationType.SET) : null)
                         .build();
         String modificationInfosJson = mapper.writeValueAsString(modificationInfos);
         MvcResult mvcResult = mockMvc.perform(post(getNetworkModificationUri()).content(modificationInfosJson).contentType(MediaType.APPLICATION_JSON))
diff --git a/src/test/java/org/gridsuite/modification/server/modifications/tabularcreations/TabularGeneratorCreationsTest.java b/src/test/java/org/gridsuite/modification/server/modifications/tabularcreations/TabularGeneratorCreationsTest.java
index a2b408e08..3eb6548b8 100644
--- a/src/test/java/org/gridsuite/modification/server/modifications/tabularcreations/TabularGeneratorCreationsTest.java
+++ b/src/test/java/org/gridsuite/modification/server/modifications/tabularcreations/TabularGeneratorCreationsTest.java
@@ -183,7 +183,7 @@ public void testCheckSqlRequestsCount() throws Exception {
                         status().isOk(), content().contentType(MediaType.APPLICATION_JSON))
                 .andReturn();
         // We check that the request count is not dependent on the number of sub creations of the tabular creation (the JPA N+1 problem is correctly solved)
-        assertSelectCount(9);
+        assertSelectCount(4);
 
         List<ModificationInfos> creations = List.of(
             GeneratorCreationInfos.builder()
@@ -216,7 +216,7 @@ public void testCheckSqlRequestsCount() throws Exception {
         mockMvc.perform(get("/v1/groups/{groupUuid}/network-modifications", getGroupId()))
                 .andExpect(status().isOk());
         // We check that the request count is not dependent on the number of sub creations of the tabular creation (the JPA N+1 problem is correctly solved)
-        assertSelectCount(13);
+        assertSelectCount(8);
     }
 
     @Test