From a3e5657407d8a76a5e7e5e0045e56da5377a4a95 Mon Sep 17 00:00:00 2001
From: Robert Varga <robert.varga@pantheon.tech>
Date: Mon, 20 May 2024 10:50:31 +0200
Subject: [PATCH 1/4] Fixup checkstyle

Upgraded checkstyle is finding a number of declaration/use distance
violations. Fix them up.

Change-Id: I8a206318b5d7588cb7d6dc655711db1c9b758fe9
Signed-off-by: Robert Varga <robert.varga@pantheon.tech>
(cherry picked from commit 5362b9cb5c67b4f83a665b7d42a04e28c3aa53a1)
---
 .../GlobalConfigOperationalChangeGetter.java             | 4 ++--
 .../transact/LogicalRouterUpdateCommand.java             | 2 +-
 .../transact/PhysicalPortRemoveCommand.java              | 4 ++--
 .../transact/PhysicalPortUpdateCommand.java              | 5 ++---
 .../md/HwvtepPhysicalLocatorUpdateCommand.java           | 2 +-
 .../transactions/md/HwvtepPhysicalPortUpdateCommand.java | 2 +-
 .../md/HwvtepUcastMacsLocalUpdateCommand.java            | 2 +-
 .../md/HwvtepUcastMacsRemoteUpdateCommand.java           | 2 +-
 .../integrationtest/ovsdbclient/OvsdbClientTestIT.java   | 2 +-
 .../ovsdb/integrationtest/schema/OpenVSwitchIT.java      | 9 +++------
 .../opendaylight/ovsdb/southbound/SouthboundUtil.java    | 5 ++---
 .../TerminationPointConfigReconciliationTask.java        | 2 +-
 .../transactions/md/OvsdbPortUpdateCommand.java          | 2 +-
 .../opendaylight/ovsdb/southbound/it/SouthboundIT.java   | 2 +-
 14 files changed, 20 insertions(+), 25 deletions(-)

diff --git a/hwvtepsouthbound/hwvtepsouthbound-impl/src/main/java/org/opendaylight/ovsdb/hwvtepsouthbound/reconciliation/configuration/GlobalConfigOperationalChangeGetter.java b/hwvtepsouthbound/hwvtepsouthbound-impl/src/main/java/org/opendaylight/ovsdb/hwvtepsouthbound/reconciliation/configuration/GlobalConfigOperationalChangeGetter.java
index 9e6928cfa..339fe18c6 100644
--- a/hwvtepsouthbound/hwvtepsouthbound-impl/src/main/java/org/opendaylight/ovsdb/hwvtepsouthbound/reconciliation/configuration/GlobalConfigOperationalChangeGetter.java
+++ b/hwvtepsouthbound/hwvtepsouthbound-impl/src/main/java/org/opendaylight/ovsdb/hwvtepsouthbound/reconciliation/configuration/GlobalConfigOperationalChangeGetter.java
@@ -93,8 +93,6 @@ public final class GlobalConfigOperationalChangeGetter {
     }
 
     static  Set<String> getLogicalSwitchesToBeRemoved(final Node configNode, final Node opNode) {
-        Set<String> opSwitchNames = new HashSet<>();
-        Set<String> cfgSwitchNames = new HashSet<>();
         Map<LogicalSwitchesKey, LogicalSwitches> cfgLogicalSwitches = null;
         Map<LogicalSwitchesKey, LogicalSwitches> opLogicalSwitches = null;
 
@@ -104,11 +102,13 @@ public final class GlobalConfigOperationalChangeGetter {
         if (configNode != null && configNode.augmentation(HwvtepGlobalAugmentation.class) != null) {
             cfgLogicalSwitches = configNode.augmentation(HwvtepGlobalAugmentation.class).getLogicalSwitches();
         }
+        Set<String> opSwitchNames = new HashSet<>();
         if (opLogicalSwitches != null) {
             for (LogicalSwitches ls : opLogicalSwitches.values()) {
                 opSwitchNames.add(ls.getHwvtepNodeName().getValue());
             }
         }
+        Set<String> cfgSwitchNames = new HashSet<>();
         if (cfgLogicalSwitches != null) {
             for (LogicalSwitches ls : cfgLogicalSwitches.values()) {
                 cfgSwitchNames.add(ls.getHwvtepNodeName().getValue());
diff --git a/hwvtepsouthbound/hwvtepsouthbound-impl/src/main/java/org/opendaylight/ovsdb/hwvtepsouthbound/transact/LogicalRouterUpdateCommand.java b/hwvtepsouthbound/hwvtepsouthbound-impl/src/main/java/org/opendaylight/ovsdb/hwvtepsouthbound/transact/LogicalRouterUpdateCommand.java
index 194ced57c..060f587b6 100644
--- a/hwvtepsouthbound/hwvtepsouthbound-impl/src/main/java/org/opendaylight/ovsdb/hwvtepsouthbound/transact/LogicalRouterUpdateCommand.java
+++ b/hwvtepsouthbound/hwvtepsouthbound-impl/src/main/java/org/opendaylight/ovsdb/hwvtepsouthbound/transact/LogicalRouterUpdateCommand.java
@@ -58,7 +58,7 @@ public class LogicalRouterUpdateCommand
     private void updateLogicalRouter(final TransactionBuilder transaction,
             final InstanceIdentifier<Node> instanceIdentifier, final List<LogicalRouters> routerList) {
         for (LogicalRouters lrouter: routerList) {
-            InstanceIdentifier<LogicalRouters> routerKey = instanceIdentifier
+            final InstanceIdentifier<LogicalRouters> routerKey = instanceIdentifier
                     .augmentation(HwvtepGlobalAugmentation.class).child(LogicalRouters.class, lrouter.key());
             LOG.debug("Creating logical router named: {}", lrouter.getHwvtepNodeName());
 
diff --git a/hwvtepsouthbound/hwvtepsouthbound-impl/src/main/java/org/opendaylight/ovsdb/hwvtepsouthbound/transact/PhysicalPortRemoveCommand.java b/hwvtepsouthbound/hwvtepsouthbound-impl/src/main/java/org/opendaylight/ovsdb/hwvtepsouthbound/transact/PhysicalPortRemoveCommand.java
index 7764e4d15..af31c6011 100644
--- a/hwvtepsouthbound/hwvtepsouthbound-impl/src/main/java/org/opendaylight/ovsdb/hwvtepsouthbound/transact/PhysicalPortRemoveCommand.java
+++ b/hwvtepsouthbound/hwvtepsouthbound-impl/src/main/java/org/opendaylight/ovsdb/hwvtepsouthbound/transact/PhysicalPortRemoveCommand.java
@@ -104,8 +104,6 @@ public class PhysicalPortRemoveCommand extends AbstractTransactCommand {
                 Node before = mod.getDataBefore();
                 if (updated != null && before != null) {
                     List<HwvtepPhysicalPortAugmentation> portListUpdated = new ArrayList<>();
-                    List<HwvtepPhysicalPortAugmentation> portListBefore = new ArrayList<>();
-                    List<HwvtepPhysicalPortAugmentation> portListRemoved = new ArrayList<>();
                     for (TerminationPoint tp : updated.nonnullTerminationPoint().values()) {
                         HwvtepPhysicalPortAugmentation hppAugmentation =
                                 tp.augmentation(HwvtepPhysicalPortAugmentation.class);
@@ -113,6 +111,7 @@ public class PhysicalPortRemoveCommand extends AbstractTransactCommand {
                             portListUpdated.add(hppAugmentation);
                         }
                     }
+                    List<HwvtepPhysicalPortAugmentation> portListBefore = new ArrayList<>();
                     for (TerminationPoint tp : before.nonnullTerminationPoint().values()) {
                         HwvtepPhysicalPortAugmentation hppAugmentation =
                                 tp.augmentation(HwvtepPhysicalPortAugmentation.class);
@@ -122,6 +121,7 @@ public class PhysicalPortRemoveCommand extends AbstractTransactCommand {
                     }
                     portListBefore.removeAll(portListUpdated);
                     //then exclude updated physical ports
+                    List<HwvtepPhysicalPortAugmentation> portListRemoved = new ArrayList<>();
                     for (HwvtepPhysicalPortAugmentation portBefore: portListBefore) {
                         int index = 0;
                         for (; index < portListUpdated.size(); index++) {
diff --git a/hwvtepsouthbound/hwvtepsouthbound-impl/src/main/java/org/opendaylight/ovsdb/hwvtepsouthbound/transact/PhysicalPortUpdateCommand.java b/hwvtepsouthbound/hwvtepsouthbound-impl/src/main/java/org/opendaylight/ovsdb/hwvtepsouthbound/transact/PhysicalPortUpdateCommand.java
index a5c1bc598..733695420 100644
--- a/hwvtepsouthbound/hwvtepsouthbound-impl/src/main/java/org/opendaylight/ovsdb/hwvtepsouthbound/transact/PhysicalPortUpdateCommand.java
+++ b/hwvtepsouthbound/hwvtepsouthbound-impl/src/main/java/org/opendaylight/ovsdb/hwvtepsouthbound/transact/PhysicalPortUpdateCommand.java
@@ -94,9 +94,8 @@ public class PhysicalPortUpdateCommand
                                     final TerminationPoint data, final InstanceIdentifier key,
                                     final Object... extraData) {
         LOG.debug("Processing port doDeviceTransaction {}", data);
-        InstanceIdentifier<Node> psNodeiid = nodeIid;
-        HwvtepPhysicalPortAugmentation port = data.augmentation(
-                HwvtepPhysicalPortAugmentation.class);
+        final InstanceIdentifier<Node> psNodeiid = nodeIid;
+        HwvtepPhysicalPortAugmentation port = data.augmentation(HwvtepPhysicalPortAugmentation.class);
         if (port == null) {
             LOG.info("No port augmentation found for port {}", data);
             return;
diff --git a/hwvtepsouthbound/hwvtepsouthbound-impl/src/main/java/org/opendaylight/ovsdb/hwvtepsouthbound/transactions/md/HwvtepPhysicalLocatorUpdateCommand.java b/hwvtepsouthbound/hwvtepsouthbound-impl/src/main/java/org/opendaylight/ovsdb/hwvtepsouthbound/transactions/md/HwvtepPhysicalLocatorUpdateCommand.java
index 48d92dd8d..88b6c58ed 100644
--- a/hwvtepsouthbound/hwvtepsouthbound-impl/src/main/java/org/opendaylight/ovsdb/hwvtepsouthbound/transactions/md/HwvtepPhysicalLocatorUpdateCommand.java
+++ b/hwvtepsouthbound/hwvtepsouthbound-impl/src/main/java/org/opendaylight/ovsdb/hwvtepsouthbound/transactions/md/HwvtepPhysicalLocatorUpdateCommand.java
@@ -61,7 +61,7 @@ public final class HwvtepPhysicalLocatorUpdateCommand extends AbstractTransactio
                 TerminationPointBuilder tpBuilder = new TerminationPointBuilder();
                 tpBuilder.withKey(tpKey);
                 tpBuilder.setTpId(tpKey.getTpId());
-                InstanceIdentifier<TerminationPoint> tpPath =
+                final InstanceIdentifier<TerminationPoint> tpPath =
                         HwvtepSouthboundMapper.createInstanceIdentifier(nodeIid, locator);
                 HwvtepPhysicalLocatorAugmentationBuilder tpAugmentationBuilder =
                         new HwvtepPhysicalLocatorAugmentationBuilder();
diff --git a/hwvtepsouthbound/hwvtepsouthbound-impl/src/main/java/org/opendaylight/ovsdb/hwvtepsouthbound/transactions/md/HwvtepPhysicalPortUpdateCommand.java b/hwvtepsouthbound/hwvtepsouthbound-impl/src/main/java/org/opendaylight/ovsdb/hwvtepsouthbound/transactions/md/HwvtepPhysicalPortUpdateCommand.java
index 505a8a91c..0f359814c 100644
--- a/hwvtepsouthbound/hwvtepsouthbound-impl/src/main/java/org/opendaylight/ovsdb/hwvtepsouthbound/transactions/md/HwvtepPhysicalPortUpdateCommand.java
+++ b/hwvtepsouthbound/hwvtepsouthbound-impl/src/main/java/org/opendaylight/ovsdb/hwvtepsouthbound/transactions/md/HwvtepPhysicalPortUpdateCommand.java
@@ -128,7 +128,7 @@ public final class HwvtepPhysicalPortUpdateCommand extends AbstractTransactionCo
                 TerminationPointBuilder tpBuilder = new TerminationPointBuilder();
                 tpBuilder.withKey(tpKey);
                 tpBuilder.setTpId(tpKey.getTpId());
-                InstanceIdentifier<TerminationPoint> tpPath =
+                final InstanceIdentifier<TerminationPoint> tpPath =
                     getInstanceIdentifier(switchIid.orElseThrow(), portUpdate);
                 HwvtepPhysicalPortAugmentationBuilder tpAugmentationBuilder =
                         new HwvtepPhysicalPortAugmentationBuilder();
diff --git a/hwvtepsouthbound/hwvtepsouthbound-impl/src/main/java/org/opendaylight/ovsdb/hwvtepsouthbound/transactions/md/HwvtepUcastMacsLocalUpdateCommand.java b/hwvtepsouthbound/hwvtepsouthbound-impl/src/main/java/org/opendaylight/ovsdb/hwvtepsouthbound/transactions/md/HwvtepUcastMacsLocalUpdateCommand.java
index d068c38fd..f0c7478d1 100644
--- a/hwvtepsouthbound/hwvtepsouthbound-impl/src/main/java/org/opendaylight/ovsdb/hwvtepsouthbound/transactions/md/HwvtepUcastMacsLocalUpdateCommand.java
+++ b/hwvtepsouthbound/hwvtepsouthbound-impl/src/main/java/org/opendaylight/ovsdb/hwvtepsouthbound/transactions/md/HwvtepUcastMacsLocalUpdateCommand.java
@@ -77,7 +77,6 @@ public final class HwvtepUcastMacsLocalUpdateCommand extends AbstractTransaction
     }
 
     private LocalUcastMacs buildLocalUcastMac(final UcastMacsLocal ucml) {
-        InstanceIdentifier<Node> nodeIid = getOvsdbConnectionInstance().getInstanceIdentifier();
         LocalUcastMacsBuilder ucmlBuilder = new LocalUcastMacsBuilder();
         if (ucml.getIpAddr() != null && !ucml.getIpAddr().isEmpty()) {
             ucmlBuilder.setIpaddr(TransactUtils.parseIpAddress(ucml.getIpAddr()));
@@ -92,6 +91,7 @@ public final class HwvtepUcastMacsLocalUpdateCommand extends AbstractTransaction
                         .getDeviceInfo().getPhysicalLocator(plocUUID);
             }
             if (physicalLocator != null) {
+                InstanceIdentifier<Node> nodeIid = getOvsdbConnectionInstance().getInstanceIdentifier();
                 InstanceIdentifier<TerminationPoint> plIid =
                         HwvtepSouthboundMapper.createInstanceIdentifier(nodeIid, physicalLocator);
                 ucmlBuilder.setLocatorRef(new HwvtepPhysicalLocatorRef(plIid));
diff --git a/hwvtepsouthbound/hwvtepsouthbound-impl/src/main/java/org/opendaylight/ovsdb/hwvtepsouthbound/transactions/md/HwvtepUcastMacsRemoteUpdateCommand.java b/hwvtepsouthbound/hwvtepsouthbound-impl/src/main/java/org/opendaylight/ovsdb/hwvtepsouthbound/transactions/md/HwvtepUcastMacsRemoteUpdateCommand.java
index 198ea7274..c41afaa27 100644
--- a/hwvtepsouthbound/hwvtepsouthbound-impl/src/main/java/org/opendaylight/ovsdb/hwvtepsouthbound/transactions/md/HwvtepUcastMacsRemoteUpdateCommand.java
+++ b/hwvtepsouthbound/hwvtepsouthbound-impl/src/main/java/org/opendaylight/ovsdb/hwvtepsouthbound/transactions/md/HwvtepUcastMacsRemoteUpdateCommand.java
@@ -71,7 +71,6 @@ public final class HwvtepUcastMacsRemoteUpdateCommand extends AbstractTransactio
     }
 
     private RemoteUcastMacs buildRemoteUcast(final UcastMacsRemote macRemote) {
-        InstanceIdentifier<Node> nodeIid = getOvsdbConnectionInstance().getInstanceIdentifier();
         RemoteUcastMacsBuilder rumBuilder = new RemoteUcastMacsBuilder();
         rumBuilder.setMacEntryKey(new MacAddress(macRemote.getMac()));
         rumBuilder.setMacEntryUuid(new Uuid(macRemote.getUuid().toString()));
@@ -86,6 +85,7 @@ public final class HwvtepUcastMacsRemoteUpdateCommand extends AbstractTransactio
                 physicalLocator = getOvsdbConnectionInstance().getDeviceInfo().getPhysicalLocator(locUUID);
             }
             if (physicalLocator != null) {
+                InstanceIdentifier<Node> nodeIid = getOvsdbConnectionInstance().getInstanceIdentifier();
                 InstanceIdentifier<TerminationPoint> plIid = HwvtepSouthboundMapper.createInstanceIdentifier(nodeIid,
                         physicalLocator);
                 rumBuilder.setLocatorRef(new HwvtepPhysicalLocatorRef(plIid));
diff --git a/library/it/src/test/java/org/opendaylight/ovsdb/integrationtest/ovsdbclient/OvsdbClientTestIT.java b/library/it/src/test/java/org/opendaylight/ovsdb/integrationtest/ovsdbclient/OvsdbClientTestIT.java
index 09c18e1d7..c3627bdb7 100644
--- a/library/it/src/test/java/org/opendaylight/ovsdb/integrationtest/ovsdbclient/OvsdbClientTestIT.java
+++ b/library/it/src/test/java/org/opendaylight/ovsdb/integrationtest/ovsdbclient/OvsdbClientTestIT.java
@@ -102,7 +102,7 @@ public class OvsdbClientTestIT extends LibraryIntegrationTestBase {
                 bridge.multiValuedColumn("flood_vlans", Integer.class);
         ColumnSchema<GenericTableSchema, Map<String, String>> externalIds =
                 bridge.multiValuedColumn("external_ids", String.class, String.class);
-        ColumnSchema<GenericTableSchema, String> name = bridge.column("name", String.class);
+        final ColumnSchema<GenericTableSchema, String> name = bridge.column("name", String.class);
         MonitorRequestBuilder<GenericTableSchema> builder = new MonitorRequestBuilder<>(bridge);
         if (filter) {
             builder.addColumn(bridge.column("name"))
diff --git a/library/it/src/test/java/org/opendaylight/ovsdb/integrationtest/schema/OpenVSwitchIT.java b/library/it/src/test/java/org/opendaylight/ovsdb/integrationtest/schema/OpenVSwitchIT.java
index 6aef9b620..da1c237b8 100644
--- a/library/it/src/test/java/org/opendaylight/ovsdb/integrationtest/schema/OpenVSwitchIT.java
+++ b/library/it/src/test/java/org/opendaylight/ovsdb/integrationtest/schema/OpenVSwitchIT.java
@@ -359,7 +359,6 @@ public class OpenVSwitchIT extends LibraryIntegrationTestBase {
         String flowTableUuidStr = "testFlowTable";
         String tableName = "flow_table_row_name";
         String overflowPolicy = "evict";
-        String prefixes = "wildcarding prefixes";
         Map<Long, UUID> flowTableBrRef = new HashMap<>();
         flowTableBrRef.put(1L, new UUID(flowTableUuidStr));
         FlowTable flowTable = getClient().createTypedRowWrapper(FlowTable.class);
@@ -367,7 +366,7 @@ public class OpenVSwitchIT extends LibraryIntegrationTestBase {
         flowTable.setOverflowPolicy(ImmutableSet.of(overflowPolicy));
         flowTable.setGroups(ImmutableSet.of("group name"));
         if (schemaVersion.compareTo(prefixesAddedVersion) >= 0) {
-            flowTable.setPrefixes(ImmutableSet.of(prefixes));
+            flowTable.setPrefixes(ImmutableSet.of("wildcarding prefixes"));
         }
         if (schemaVersion.compareTo(externalIdAddedVerson) >= 0) {
             flowTable.setExternalIds(ImmutableMap.of("I <3", "OVS"));
@@ -445,8 +444,6 @@ public class OpenVSwitchIT extends LibraryIntegrationTestBase {
         String ipfixTarget = "172.16.20.1:4739";
         Long obsDomainId = 112L;
         Long obsPointId = 358L;
-        Long cacheMax = 132L;
-        Long cacheTimeout = 134L;
 
         IPFIX ipfix = getClient().createTypedRowWrapper(IPFIX.class);
         ipfix.setTargets(ImmutableSet.of(ipfixTarget));
@@ -454,8 +451,8 @@ public class OpenVSwitchIT extends LibraryIntegrationTestBase {
         ipfix.setObsPointId(ImmutableSet.of(obsPointId));
         // Only set these rows if the schema version supports it
         if (schemaVersion.compareTo(ipfixCacheFromVersion) >= 0) {
-            ipfix.setCacheMaxFlows(ImmutableSet.of(cacheMax));
-            ipfix.setCacheActiveTimeout(ImmutableSet.of(cacheTimeout));
+            ipfix.setCacheMaxFlows(ImmutableSet.of(132L));
+            ipfix.setCacheActiveTimeout(ImmutableSet.of(134L));
         }
 
         Long sampling = 558L;
diff --git a/southbound/southbound-impl/src/main/java/org/opendaylight/ovsdb/southbound/SouthboundUtil.java b/southbound/southbound-impl/src/main/java/org/opendaylight/ovsdb/southbound/SouthboundUtil.java
index 5a2641cd6..abf676207 100644
--- a/southbound/southbound-impl/src/main/java/org/opendaylight/ovsdb/southbound/SouthboundUtil.java
+++ b/southbound/southbound-impl/src/main/java/org/opendaylight/ovsdb/southbound/SouthboundUtil.java
@@ -153,7 +153,6 @@ public final class SouthboundUtil {
     }
 
     public static String getControllerTarget(Node ovsdbNode) {
-        String target = null;
         String ipAddr = null;
         OvsdbNodeAugmentation ovsdbNodeAugmentation = ovsdbNode.augmentation(OvsdbNodeAugmentation.class);
         ConnectionInfo connectionInfo = ovsdbNodeAugmentation.getConnectionInfo();
@@ -166,11 +165,11 @@ public final class SouthboundUtil {
         }
 
         if (ipAddr != null) {
-            target = SouthboundConstants.OPENFLOW_CONNECTION_PROTOCOL + ":"
+            return SouthboundConstants.OPENFLOW_CONNECTION_PROTOCOL + ":"
                     + ipAddr + ":" + SouthboundConstants.DEFAULT_OPENFLOW_PORT;
         }
 
-        return target;
+        return null;
     }
 
     public static String connectionInfoToString(final ConnectionInfo connectionInfo) {
diff --git a/southbound/southbound-impl/src/main/java/org/opendaylight/ovsdb/southbound/reconciliation/configuration/TerminationPointConfigReconciliationTask.java b/southbound/southbound-impl/src/main/java/org/opendaylight/ovsdb/southbound/reconciliation/configuration/TerminationPointConfigReconciliationTask.java
index 28e1a0393..2fc3c8c82 100644
--- a/southbound/southbound-impl/src/main/java/org/opendaylight/ovsdb/southbound/reconciliation/configuration/TerminationPointConfigReconciliationTask.java
+++ b/southbound/southbound-impl/src/main/java/org/opendaylight/ovsdb/southbound/reconciliation/configuration/TerminationPointConfigReconciliationTask.java
@@ -102,7 +102,7 @@ public class TerminationPointConfigReconciliationTask extends ReconciliationTask
             });
         }
 
-        Set<InstanceIdentifier<?>> removeTerminationPoints = new HashSet<>();
+        final Set<InstanceIdentifier<?>> removeTerminationPoints = new HashSet<>();
         final Map<InstanceIdentifier<?>, DataObject> original = new HashMap<>();
         final InstanceIdentifier<Node> bridgeNodeIid =
                 SouthboundMapper.createInstanceIdentifier(configNodeData.getNodeId());
diff --git a/southbound/southbound-impl/src/main/java/org/opendaylight/ovsdb/southbound/transactions/md/OvsdbPortUpdateCommand.java b/southbound/southbound-impl/src/main/java/org/opendaylight/ovsdb/southbound/transactions/md/OvsdbPortUpdateCommand.java
index da833983f..4e2028a75 100644
--- a/southbound/southbound-impl/src/main/java/org/opendaylight/ovsdb/southbound/transactions/md/OvsdbPortUpdateCommand.java
+++ b/southbound/southbound-impl/src/main/java/org/opendaylight/ovsdb/southbound/transactions/md/OvsdbPortUpdateCommand.java
@@ -143,7 +143,7 @@ public class OvsdbPortUpdateCommand extends AbstractTransactionCommand {
             }
             if (optBridgeIid.isPresent()) {
                 InstanceIdentifier<Node> bridgeIid = optBridgeIid.orElseThrow();
-                NodeId bridgeId = SouthboundMapper.createManagedNodeId(bridgeIid);
+                final NodeId bridgeId = SouthboundMapper.createManagedNodeId(bridgeIid);
                 TerminationPointKey tpKey = new TerminationPointKey(new TpId(portName));
                 getOvsdbConnectionInstance().updatePortInterface(portName, bridgeIid);
                 TerminationPointBuilder tpBuilder = new TerminationPointBuilder();
diff --git a/southbound/southbound-it/src/test/java/org/opendaylight/ovsdb/southbound/it/SouthboundIT.java b/southbound/southbound-it/src/test/java/org/opendaylight/ovsdb/southbound/it/SouthboundIT.java
index 0d8543b0d..9dc4e7a9d 100644
--- a/southbound/southbound-it/src/test/java/org/opendaylight/ovsdb/southbound/it/SouthboundIT.java
+++ b/southbound/southbound-it/src/test/java/org/opendaylight/ovsdb/southbound/it/SouthboundIT.java
@@ -1993,10 +1993,10 @@ public class SouthboundIT extends AbstractMdsalTestBase {
         Topology topology = mdsalUtils.read(LogicalDatastoreType.OPERATIONAL, topologyPath);
         InstanceIdentifier<Node> expectedNodeIid = SouthboundUtils.createInstanceIdentifier(connectionInfo);
         NodeId expectedNodeId = expectedNodeIid.firstKeyOf(Node.class).getNodeId();
-        Node foundNode = null;
         assertNotNull("Expected to find topology: " + topologyPath, topology);
         assertNotNull("Expected to find some nodes" + topology.getNode());
         LOG.info("expectedNodeId: {}, getNode: {}", expectedNodeId, topology.getNode());
+        Node foundNode = null;
         for (Node node : topology.nonnullNode().values()) {
             if (node.getNodeId().getValue().equals(expectedNodeId.getValue())) {
                 foundNode = node;
-- 
2.43.0


From 93605bd5d14978d6b987ad6c053089dcfc42acb8 Mon Sep 17 00:00:00 2001
From: Robert Varga <robert.varga@pantheon.tech>
Date: Mon, 8 Jul 2024 23:43:22 +0200
Subject: [PATCH 2/4] WIP: Eliminate static Operations wiring

Operations.op is a static field, from whence everybody is getting their
operations. This is not exactly nice, as it makes library not really a
library and it means tests are relying on changing a static final field
-- which is a huge no-no with Java 21.

This patch turns Operations into an interface, provided by
DefaultOperations. Everybody is then taught to get Operations injected,
eliminating the need for statics.

// FIXME: deal with failing tests

Change-Id: Ied3fbfe062f081f2ea9d8640d09513fabeab9268
Signed-off-by: Robert Varga <robert.varga@pantheon.tech>
---
 .../HwvtepConnectionInstance.java             |  9 +-
 .../HwvtepConnectionManager.java              |  9 +-
 .../HwvtepSouthboundProvider.java             |  5 +-
 .../hwvtepsouthbound/HwvtepTableReader.java   | 11 +--
 .../transact/AbstractTransactCommand.java     |  5 +
 .../transact/LogicalRouterRemoveCommand.java  |  4 +-
 .../transact/LogicalRouterUpdateCommand.java  |  4 +-
 .../LogicalSwitchUcastsRemoveCommand.java     |  4 +-
 .../transact/LogicalSwitchUpdateCommand.java  |  3 +-
 .../transact/McastMacsLocalRemoveCommand.java |  4 +-
 .../transact/McastMacsLocalUpdateCommand.java |  5 +-
 .../McastMacsRemoteRemoveCommand.java         |  6 +-
 .../McastMacsRemoteUpdateCommand.java         |  6 +-
 .../transact/PhysicalPortRemoveCommand.java   |  4 +-
 .../transact/PhysicalPortUpdateCommand.java   |  4 +-
 .../transact/PhysicalSwitchRemoveCommand.java |  4 +-
 .../transact/PhysicalSwitchUpdateCommand.java |  8 +-
 .../transact/PlainLogicalSwitchRemoveCmd.java |  4 +-
 .../transact/TransactUtils.java               |  8 +-
 .../transact/UcastMacsLocalRemoveCommand.java |  4 +-
 .../transact/UcastMacsLocalUpdateCommand.java |  4 +-
 .../UcastMacsRemoteRemoveCommand.java         |  4 +-
 .../UcastMacsRemoteUpdateCommand.java         |  6 +-
 .../DataChangeListenerTestBase.java           | 22 ++---
 .../HwvtepDataChangeListenerTest.java         | 49 +++++----
 .../lib/operations/DefaultOperations.java     | 99 +++++++++++++++++++
 .../ovsdb/lib/operations/Operations.java      | 64 +++---------
 .../ovsdbclient/OvsdbClientTestIT.java        |  1 -
 .../ovsdbclient/OvsdbClientTestTypedIT.java   |  1 -
 .../schema/HardwareVTEPIT.java                |  1 -
 .../integrationtest/schema/OpenVSwitchIT.java |  1 -
 .../opendaylight/ovsdb/lib/it/LibraryIT.java  |  1 -
 .../lib/it/LibraryIntegrationTestBase.java    |  4 +
 .../southbound/OvsdbConnectionInstance.java   | 27 ++---
 .../southbound/OvsdbConnectionManager.java    | 14 +--
 .../OvsdbDataTreeChangeListener.java          |  2 +-
 .../ovsdb/southbound/SouthboundProvider.java  | 12 ++-
 .../transact/AbstractTransactCommand.java     | 20 ++++
 .../transact/AutoAttachRemovedCommand.java    | 20 ++--
 .../transact/AutoAttachUpdateCommand.java     | 20 ++--
 .../ovsdb/transact/BridgeRemovedCommand.java  | 12 ++-
 .../ovsdb/transact/BridgeUpdateCommand.java   | 29 +++---
 .../transact/ControllerRemovedCommand.java    | 16 +--
 .../transact/ControllerUpdateCommand.java     | 12 ++-
 .../transact/OpenVSwitchBridgeAddCommand.java | 10 +-
 .../transact/OvsdbNodeUpdateCommand.java      | 19 ++--
 .../transact/ProtocolRemovedCommand.java      | 15 +--
 .../ovsdb/transact/ProtocolUpdateCommand.java | 12 ++-
 .../ovsdb/transact/QosRemovedCommand.java     | 14 +--
 .../ovsdb/transact/QosUpdateCommand.java      | 10 +-
 .../ovsdb/transact/QueueRemovedCommand.java   | 15 +--
 .../ovsdb/transact/QueueUpdateCommand.java    | 10 +-
 .../TerminationPointCreateCommand.java        | 21 ++--
 .../TerminationPointDeleteCommand.java        | 11 ++-
 .../TerminationPointUpdateCommand.java        | 12 ++-
 .../transact/TransactCommandAggregator.java   | 15 ++-
 .../ovsdb/transact/TransactUtils.java         | 11 +--
 .../BridgeConfigReconciliationTask.java       |  2 +-
 ...minationPointConfigReconciliationTask.java |  6 +-
 .../OvsdbConnectionInstanceTest.java          |  4 +-
 .../OvsdbConnectionManagerTest.java           | 13 ++-
 .../OvsdbDataTreeChangeListenerTest.java      |  6 +-
 .../southbound/SouthboundProviderTest.java    |  7 +-
 .../OpenVSwitchBridgeAddCommandTest.java      |  7 +-
 .../transact/OvsdbNodeUpdateCommandTest.java  | 14 +--
 .../TerminationPointCreateCommandTest.java    | 10 +-
 .../TerminationPointUpdateCommandTest.java    |  9 +-
 .../TransactCommandAggregatorTest.java        |  3 +-
 .../ovsdb/transact/TransactUtilsTest.java     | 21 ++--
 69 files changed, 491 insertions(+), 338 deletions(-)
 create mode 100644 library/impl/src/main/java/org/opendaylight/ovsdb/lib/operations/DefaultOperations.java
 create mode 100644 southbound/southbound-impl/src/main/java/org/opendaylight/ovsdb/southbound/ovsdb/transact/AbstractTransactCommand.java

diff --git a/hwvtepsouthbound/hwvtepsouthbound-impl/src/main/java/org/opendaylight/ovsdb/hwvtepsouthbound/HwvtepConnectionInstance.java b/hwvtepsouthbound/hwvtepsouthbound-impl/src/main/java/org/opendaylight/ovsdb/hwvtepsouthbound/HwvtepConnectionInstance.java
index 6162ac520..c47907d54 100644
--- a/hwvtepsouthbound/hwvtepsouthbound-impl/src/main/java/org/opendaylight/ovsdb/hwvtepsouthbound/HwvtepConnectionInstance.java
+++ b/hwvtepsouthbound/hwvtepsouthbound-impl/src/main/java/org/opendaylight/ovsdb/hwvtepsouthbound/HwvtepConnectionInstance.java
@@ -45,6 +45,7 @@ import org.opendaylight.ovsdb.lib.message.TableUpdates;
 import org.opendaylight.ovsdb.lib.notation.Row;
 import org.opendaylight.ovsdb.lib.operations.Operation;
 import org.opendaylight.ovsdb.lib.operations.OperationResult;
+import org.opendaylight.ovsdb.lib.operations.Operations;
 import org.opendaylight.ovsdb.lib.operations.TransactionBuilder;
 import org.opendaylight.ovsdb.lib.schema.DatabaseSchema;
 import org.opendaylight.ovsdb.lib.schema.GenericTableSchema;
@@ -77,6 +78,7 @@ public class HwvtepConnectionInstance {
     private HwvtepGlobalAugmentation initialCreatedData = null;
     private final HwvtepDeviceInfo deviceInfo;
     private final DataBroker dataBroker;
+    private final Operations ops;
     private final HwvtepConnectionManager hwvtepConnectionManager;
     private static final ScheduledExecutorService SCHEDULED_EXECUTOR_SERVICE = Executors
         .newSingleThreadScheduledExecutor(new ThreadFactoryBuilder()
@@ -90,7 +92,7 @@ public class HwvtepConnectionInstance {
 
     HwvtepConnectionInstance(final HwvtepConnectionManager hwvtepConnectionManager, final ConnectionInfo key,
             final OvsdbClient client, final InstanceIdentifier<Node> iid, final TransactionInvoker txInvoker,
-            final DataBroker dataBroker) {
+            final DataBroker dataBroker, final Operations ops) {
         this.hwvtepConnectionManager = hwvtepConnectionManager;
         this.connectionInfo = key;
         this.client = client;
@@ -98,6 +100,7 @@ public class HwvtepConnectionInstance {
         this.txInvoker = txInvoker;
         this.deviceInfo = new HwvtepDeviceInfo(this);
         this.dataBroker = dataBroker;
+        this.ops = ops;
         this.hwvtepTableReader = new HwvtepTableReader(this);
     }
 
@@ -410,4 +413,8 @@ public class HwvtepConnectionInstance {
     public TransactionInvoker getTxInvoker() {
         return txInvoker;
     }
+
+    public Operations ops() {
+        return ops;
+    }
 }
diff --git a/hwvtepsouthbound/hwvtepsouthbound-impl/src/main/java/org/opendaylight/ovsdb/hwvtepsouthbound/HwvtepConnectionManager.java b/hwvtepsouthbound/hwvtepsouthbound-impl/src/main/java/org/opendaylight/ovsdb/hwvtepsouthbound/HwvtepConnectionManager.java
index 58bd11daa..8bd0b4446 100644
--- a/hwvtepsouthbound/hwvtepsouthbound-impl/src/main/java/org/opendaylight/ovsdb/hwvtepsouthbound/HwvtepConnectionManager.java
+++ b/hwvtepsouthbound/hwvtepsouthbound-impl/src/main/java/org/opendaylight/ovsdb/hwvtepsouthbound/HwvtepConnectionManager.java
@@ -8,7 +8,6 @@
 package org.opendaylight.ovsdb.hwvtepsouthbound;
 
 import static java.util.Objects.requireNonNull;
-import static org.opendaylight.ovsdb.lib.operations.Operations.op;
 
 import com.google.common.collect.Maps;
 import com.google.common.util.concurrent.FluentFuture;
@@ -50,6 +49,7 @@ import org.opendaylight.ovsdb.lib.OvsdbConnection;
 import org.opendaylight.ovsdb.lib.OvsdbConnectionListener;
 import org.opendaylight.ovsdb.lib.operations.Operation;
 import org.opendaylight.ovsdb.lib.operations.OperationResult;
+import org.opendaylight.ovsdb.lib.operations.Operations;
 import org.opendaylight.ovsdb.lib.operations.Select;
 import org.opendaylight.ovsdb.lib.schema.GenericTableSchema;
 import org.opendaylight.ovsdb.lib.schema.typed.TypedDatabaseSchema;
@@ -77,6 +77,7 @@ public class HwvtepConnectionManager implements OvsdbConnectionListener, AutoClo
 
     private final DataBroker db;
     private final TransactionInvoker txInvoker;
+    private final Operations ops;
     private final Map<ConnectionInfo,InstanceIdentifier<Node>> instanceIdentifiers = new ConcurrentHashMap<>();
     private final Map<Entity, HwvtepConnectionInstance> entityConnectionMap = new ConcurrentHashMap<>();
     private final EntityOwnershipService entityOwnershipService;
@@ -90,10 +91,11 @@ public class HwvtepConnectionManager implements OvsdbConnectionListener, AutoClo
     private final OvsdbConnection ovsdbConnectionService;
     private final Map<OvsdbClient, OvsdbClient> alreadyProcessedClients = new ConcurrentHashMap<>();
 
-    public HwvtepConnectionManager(final DataBroker db, final TransactionInvoker txInvoker,
+    public HwvtepConnectionManager(final DataBroker db, final TransactionInvoker txInvoker, final Operations ops,
                     final EntityOwnershipService entityOwnershipService, final OvsdbConnection ovsdbConnectionService) {
         this.db = db;
         this.txInvoker = txInvoker;
+        this.ops = ops;
         this.entityOwnershipService = entityOwnershipService;
         hwvtepDeviceEntityOwnershipListener = new HwvtepDeviceEntityOwnershipListener(this,entityOwnershipService);
         reconciliationManager = new ReconciliationManager(db);
@@ -266,7 +268,7 @@ public class HwvtepConnectionManager implements OvsdbConnectionListener, AutoClo
         }
 
         hwvtepConnectionInstance = new HwvtepConnectionInstance(this, key,
-                externalClient, getInstanceIdentifier(key), txInvoker, db);
+                externalClient, getInstanceIdentifier(key), txInvoker, db, ops);
         hwvtepConnectionInstance.createTransactInvokers();
         return hwvtepConnectionInstance;
     }
@@ -454,6 +456,7 @@ public class HwvtepConnectionManager implements OvsdbConnectionListener, AutoClo
         }
 
         GenericTableSchema hwvtepSchema = dbSchema.getTableSchema(Global.class);
+        final var op = connectionInstance.ops();
         Select<GenericTableSchema> selectOperation = op.select(hwvtepSchema);
         selectOperation.setColumns(hwvtepSchema.getColumnList());
 
diff --git a/hwvtepsouthbound/hwvtepsouthbound-impl/src/main/java/org/opendaylight/ovsdb/hwvtepsouthbound/HwvtepSouthboundProvider.java b/hwvtepsouthbound/hwvtepsouthbound-impl/src/main/java/org/opendaylight/ovsdb/hwvtepsouthbound/HwvtepSouthboundProvider.java
index 14497292e..1ce0fcc08 100644
--- a/hwvtepsouthbound/hwvtepsouthbound-impl/src/main/java/org/opendaylight/ovsdb/hwvtepsouthbound/HwvtepSouthboundProvider.java
+++ b/hwvtepsouthbound/hwvtepsouthbound-impl/src/main/java/org/opendaylight/ovsdb/hwvtepsouthbound/HwvtepSouthboundProvider.java
@@ -32,6 +32,7 @@ import org.opendaylight.mdsal.eos.common.api.EntityOwnershipStateChange;
 import org.opendaylight.ovsdb.hwvtepsouthbound.reconciliation.configuration.HwvtepReconciliationManager;
 import org.opendaylight.ovsdb.hwvtepsouthbound.transactions.md.TransactionInvoker;
 import org.opendaylight.ovsdb.lib.OvsdbConnection;
+import org.opendaylight.ovsdb.lib.operations.Operations;
 import org.opendaylight.ovsdb.utils.mdsal.utils.Scheduler;
 import org.opendaylight.ovsdb.utils.mdsal.utils.TransactionHistory;
 import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.NetworkTopology;
@@ -74,7 +75,7 @@ public final class HwvtepSouthboundProvider
             @Reference final EntityOwnershipService entityOwnership,
             @Reference final OvsdbConnection ovsdbConnection, @Reference final DOMSchemaService schemaService,
             @Reference final BindingNormalizedNodeSerializer serializer,
-            @Reference final TransactionInvoker txInvoker) {
+            @Reference final TransactionInvoker txInvoker, @Reference final Operations ops) {
         this.dataBroker = dataBroker;
         entityOwnershipService = entityOwnership;
         registration = null;
@@ -82,7 +83,7 @@ public final class HwvtepSouthboundProvider
         // FIXME: eliminate this static wiring
         HwvtepSouthboundUtil.setInstanceIdentifierCodec(new InstanceIdentifierCodec(schemaService, serializer));
         LOG.info("HwvtepSouthboundProvider ovsdbConnectionService: {}", ovsdbConnection);
-        cm = new HwvtepConnectionManager(dataBroker, txInvoker, entityOwnershipService, ovsdbConnection);
+        cm = new HwvtepConnectionManager(dataBroker, txInvoker, ops, entityOwnershipService, ovsdbConnection);
         hwvtepDTListener = new HwvtepDataChangeListener(dataBroker, cm);
         hwvtepReconciliationManager = new HwvtepReconciliationManager(dataBroker, cm);
         //Register listener for entityOnwership changes
diff --git a/hwvtepsouthbound/hwvtepsouthbound-impl/src/main/java/org/opendaylight/ovsdb/hwvtepsouthbound/HwvtepTableReader.java b/hwvtepsouthbound/hwvtepsouthbound-impl/src/main/java/org/opendaylight/ovsdb/hwvtepsouthbound/HwvtepTableReader.java
index 24ca4b90b..df7a650e3 100644
--- a/hwvtepsouthbound/hwvtepsouthbound-impl/src/main/java/org/opendaylight/ovsdb/hwvtepsouthbound/HwvtepTableReader.java
+++ b/hwvtepsouthbound/hwvtepsouthbound-impl/src/main/java/org/opendaylight/ovsdb/hwvtepsouthbound/HwvtepTableReader.java
@@ -8,7 +8,6 @@
 package org.opendaylight.ovsdb.hwvtepsouthbound;
 
 import static java.util.Objects.requireNonNull;
-import static org.opendaylight.ovsdb.lib.operations.Operations.op;
 
 import com.google.common.collect.ImmutableClassToInstanceMap;
 import com.google.common.collect.ImmutableClassToInstanceMap.Builder;
@@ -268,7 +267,7 @@ public class HwvtepTableReader {
         final Class<? extends TypedBaseTable<?>> tableClass = TABLE_MAP.get(cls);
         final GenericTableSchema hwvtepSchema = dbSchema.getTableSchema(tableClass);
 
-        final Select<GenericTableSchema> selectOperation = op.select(hwvtepSchema);
+        final Select<GenericTableSchema> selectOperation = connectionInstance.ops().select(hwvtepSchema);
         selectOperation.setColumns(hwvtepSchema.getColumnList());
 
         if (existingUUID == null) {
@@ -329,7 +328,7 @@ public class HwvtepTableReader {
 
         final Class<? extends TypedBaseTable<?>> tableClass = TABLE_MAP.get(cls);
         final GenericTableSchema hwvtepSchema = dbSchema.getTableSchema(tableClass);
-        final Select<GenericTableSchema> selectOperation = op.select(hwvtepSchema);
+        final Select<GenericTableSchema> selectOperation = connectionInstance.ops().select(hwvtepSchema);
         selectOperation.setColumns(hwvtepSchema.getColumnList());
 
         final List<OperationResult> results;
@@ -364,7 +363,7 @@ public class HwvtepTableReader {
         TypedDatabaseSchema dbSchema = connectionInstance.getSchema(HwvtepSchemaConstants.HARDWARE_VTEP).get();
         List<Operation> operations = Arrays.stream(ALL_TABLES)
                 .map(tableClass -> dbSchema.getTableSchema(tableClass))
-                .map(HwvtepTableReader::buildSelectOperationFor)
+                .map(this::buildSelectOperationFor)
                 .collect(Collectors.toList());
         List<OperationResult> results = connectionInstance.transact(dbSchema, operations).get();
 
@@ -409,8 +408,8 @@ public class HwvtepTableReader {
         }
     }
 
-    private static Select<GenericTableSchema> buildSelectOperationFor(final GenericTableSchema tableSchema) {
-        Select<GenericTableSchema> selectOperation = op.select(tableSchema);
+    private Select<GenericTableSchema> buildSelectOperationFor(final GenericTableSchema tableSchema) {
+        Select<GenericTableSchema> selectOperation = connectionInstance.ops().select(tableSchema);
         selectOperation.setColumns(tableSchema.getColumnList());
         return selectOperation;
     }
diff --git a/hwvtepsouthbound/hwvtepsouthbound-impl/src/main/java/org/opendaylight/ovsdb/hwvtepsouthbound/transact/AbstractTransactCommand.java b/hwvtepsouthbound/hwvtepsouthbound-impl/src/main/java/org/opendaylight/ovsdb/hwvtepsouthbound/transact/AbstractTransactCommand.java
index 428cd351b..83aa920d6 100644
--- a/hwvtepsouthbound/hwvtepsouthbound-impl/src/main/java/org/opendaylight/ovsdb/hwvtepsouthbound/transact/AbstractTransactCommand.java
+++ b/hwvtepsouthbound/hwvtepsouthbound-impl/src/main/java/org/opendaylight/ovsdb/hwvtepsouthbound/transact/AbstractTransactCommand.java
@@ -30,6 +30,7 @@ import org.opendaylight.ovsdb.hwvtepsouthbound.HwvtepDeviceInfo;
 import org.opendaylight.ovsdb.hwvtepsouthbound.HwvtepSouthboundUtil;
 import org.opendaylight.ovsdb.hwvtepsouthbound.HwvtepTableReader;
 import org.opendaylight.ovsdb.lib.notation.UUID;
+import org.opendaylight.ovsdb.lib.operations.Operations;
 import org.opendaylight.ovsdb.lib.operations.TransactionBuilder;
 import org.opendaylight.ovsdb.lib.schema.typed.TypedBaseTable;
 import org.opendaylight.ovsdb.utils.mdsal.utils.TransactionType;
@@ -76,6 +77,10 @@ public abstract class AbstractTransactCommand<T extends KeyAware<I> & DataObject
         return changes;
     }
 
+    public Operations ops() {
+        return getOperationalState().getConnectionInstance().ops();
+    }
+
     void updateCurrentTxDeleteData(final Class<? extends KeyAware> cls, final InstanceIdentifier key,
             final T data) {
         hwvtepOperationalState.updateCurrentTxDeleteData(cls, key);
diff --git a/hwvtepsouthbound/hwvtepsouthbound-impl/src/main/java/org/opendaylight/ovsdb/hwvtepsouthbound/transact/LogicalRouterRemoveCommand.java b/hwvtepsouthbound/hwvtepsouthbound-impl/src/main/java/org/opendaylight/ovsdb/hwvtepsouthbound/transact/LogicalRouterRemoveCommand.java
index abd99c9e3..18fb2af77 100644
--- a/hwvtepsouthbound/hwvtepsouthbound-impl/src/main/java/org/opendaylight/ovsdb/hwvtepsouthbound/transact/LogicalRouterRemoveCommand.java
+++ b/hwvtepsouthbound/hwvtepsouthbound-impl/src/main/java/org/opendaylight/ovsdb/hwvtepsouthbound/transact/LogicalRouterRemoveCommand.java
@@ -7,8 +7,6 @@
  */
 package org.opendaylight.ovsdb.hwvtepsouthbound.transact;
 
-import static org.opendaylight.ovsdb.lib.operations.Operations.op;
-
 import java.util.Collection;
 import java.util.Collections;
 import java.util.List;
@@ -75,6 +73,8 @@ public class LogicalRouterRemoveCommand
 
     private void removeLogicalRouter(final TransactionBuilder transaction,
             final InstanceIdentifier<Node> instanceIdentifier, final List<LogicalRouters> routerList) {
+        final var op = ops();
+
         for (LogicalRouters lrouter: routerList) {
             LOG.debug("Removing logical router named: {}", lrouter.getHwvtepNodeName().getValue());
             Optional<LogicalRouters> operationalRouterOptional =
diff --git a/hwvtepsouthbound/hwvtepsouthbound-impl/src/main/java/org/opendaylight/ovsdb/hwvtepsouthbound/transact/LogicalRouterUpdateCommand.java b/hwvtepsouthbound/hwvtepsouthbound-impl/src/main/java/org/opendaylight/ovsdb/hwvtepsouthbound/transact/LogicalRouterUpdateCommand.java
index 060f587b6..3240cebb8 100644
--- a/hwvtepsouthbound/hwvtepsouthbound-impl/src/main/java/org/opendaylight/ovsdb/hwvtepsouthbound/transact/LogicalRouterUpdateCommand.java
+++ b/hwvtepsouthbound/hwvtepsouthbound-impl/src/main/java/org/opendaylight/ovsdb/hwvtepsouthbound/transact/LogicalRouterUpdateCommand.java
@@ -7,8 +7,6 @@
  */
 package org.opendaylight.ovsdb.hwvtepsouthbound.transact;
 
-import static org.opendaylight.ovsdb.lib.operations.Operations.op;
-
 import java.util.Collection;
 import java.util.HashMap;
 import java.util.List;
@@ -57,6 +55,8 @@ public class LogicalRouterUpdateCommand
 
     private void updateLogicalRouter(final TransactionBuilder transaction,
             final InstanceIdentifier<Node> instanceIdentifier, final List<LogicalRouters> routerList) {
+        final var op = ops();
+
         for (LogicalRouters lrouter: routerList) {
             final InstanceIdentifier<LogicalRouters> routerKey = instanceIdentifier
                     .augmentation(HwvtepGlobalAugmentation.class).child(LogicalRouters.class, lrouter.key());
diff --git a/hwvtepsouthbound/hwvtepsouthbound-impl/src/main/java/org/opendaylight/ovsdb/hwvtepsouthbound/transact/LogicalSwitchUcastsRemoveCommand.java b/hwvtepsouthbound/hwvtepsouthbound-impl/src/main/java/org/opendaylight/ovsdb/hwvtepsouthbound/transact/LogicalSwitchUcastsRemoveCommand.java
index 63cb5ad8f..fdaa0fb48 100644
--- a/hwvtepsouthbound/hwvtepsouthbound-impl/src/main/java/org/opendaylight/ovsdb/hwvtepsouthbound/transact/LogicalSwitchUcastsRemoveCommand.java
+++ b/hwvtepsouthbound/hwvtepsouthbound-impl/src/main/java/org/opendaylight/ovsdb/hwvtepsouthbound/transact/LogicalSwitchUcastsRemoveCommand.java
@@ -7,8 +7,6 @@
  */
 package org.opendaylight.ovsdb.hwvtepsouthbound.transact;
 
-import static org.opendaylight.ovsdb.lib.operations.Operations.op;
-
 import java.util.Collection;
 import java.util.HashMap;
 import java.util.HashSet;
@@ -70,7 +68,9 @@ public final class LogicalSwitchUcastsRemoveCommand
         InstanceIdentifier<LogicalSwitches> lsKey = nodeIid.augmentation(HwvtepGlobalAugmentation.class)
                 .child(LogicalSwitches.class, logicalSwitches.key());
         HwvtepDeviceInfo.DeviceData deviceData  = super.<LogicalSwitch>fetchDeviceData(LogicalSwitches.class, lsKey);
+
         if (deviceData != null && deviceData.getUuid() != null) {
+            final var op = ops();
 
             UUID logicalSwitchUuid = deviceData.getUuid();
 
diff --git a/hwvtepsouthbound/hwvtepsouthbound-impl/src/main/java/org/opendaylight/ovsdb/hwvtepsouthbound/transact/LogicalSwitchUpdateCommand.java b/hwvtepsouthbound/hwvtepsouthbound-impl/src/main/java/org/opendaylight/ovsdb/hwvtepsouthbound/transact/LogicalSwitchUpdateCommand.java
index 2538c0716..d5c50db61 100644
--- a/hwvtepsouthbound/hwvtepsouthbound-impl/src/main/java/org/opendaylight/ovsdb/hwvtepsouthbound/transact/LogicalSwitchUpdateCommand.java
+++ b/hwvtepsouthbound/hwvtepsouthbound-impl/src/main/java/org/opendaylight/ovsdb/hwvtepsouthbound/transact/LogicalSwitchUpdateCommand.java
@@ -8,7 +8,6 @@
 package org.opendaylight.ovsdb.hwvtepsouthbound.transact;
 
 import static org.opendaylight.ovsdb.hwvtepsouthbound.HwvtepSouthboundUtil.schemaMismatchLog;
-import static org.opendaylight.ovsdb.lib.operations.Operations.op;
 
 import java.util.Collection;
 import java.util.HashSet;
@@ -84,6 +83,8 @@ public class LogicalSwitchUpdateCommand
         setDescription(logicalSwitch, lswitch);
         setTunnelKey(logicalSwitch, lswitch);
         setReplicationMode(logicalSwitch, lswitch);
+        final var op = ops();
+
         if (operationalSwitchOptional == null) {
             setName(logicalSwitch, lswitch);
             LOG.trace("execute: creating LogicalSwitch entry: {}", logicalSwitch);
diff --git a/hwvtepsouthbound/hwvtepsouthbound-impl/src/main/java/org/opendaylight/ovsdb/hwvtepsouthbound/transact/McastMacsLocalRemoveCommand.java b/hwvtepsouthbound/hwvtepsouthbound-impl/src/main/java/org/opendaylight/ovsdb/hwvtepsouthbound/transact/McastMacsLocalRemoveCommand.java
index 5e65c7754..30abe59ee 100644
--- a/hwvtepsouthbound/hwvtepsouthbound-impl/src/main/java/org/opendaylight/ovsdb/hwvtepsouthbound/transact/McastMacsLocalRemoveCommand.java
+++ b/hwvtepsouthbound/hwvtepsouthbound-impl/src/main/java/org/opendaylight/ovsdb/hwvtepsouthbound/transact/McastMacsLocalRemoveCommand.java
@@ -7,8 +7,6 @@
  */
 package org.opendaylight.ovsdb.hwvtepsouthbound.transact;
 
-import static org.opendaylight.ovsdb.lib.operations.Operations.op;
-
 import java.util.Collection;
 import java.util.List;
 import java.util.Map;
@@ -49,6 +47,8 @@ public class McastMacsLocalRemoveCommand
 
     private void removeMcastMacLocal(final TransactionBuilder transaction,
             final InstanceIdentifier<Node> instanceIdentifier, final List<LocalMcastMacs> macList) {
+        final var op = ops();
+
         for (LocalMcastMacs mac: macList) {
             LOG.debug("Removing localMcastMacs, mac address: {}", mac.getMacEntryKey().getValue());
             Optional<LocalMcastMacs> operationalMacOptional =
diff --git a/hwvtepsouthbound/hwvtepsouthbound-impl/src/main/java/org/opendaylight/ovsdb/hwvtepsouthbound/transact/McastMacsLocalUpdateCommand.java b/hwvtepsouthbound/hwvtepsouthbound-impl/src/main/java/org/opendaylight/ovsdb/hwvtepsouthbound/transact/McastMacsLocalUpdateCommand.java
index 862fce0c2..c6a80d43d 100644
--- a/hwvtepsouthbound/hwvtepsouthbound-impl/src/main/java/org/opendaylight/ovsdb/hwvtepsouthbound/transact/McastMacsLocalUpdateCommand.java
+++ b/hwvtepsouthbound/hwvtepsouthbound-impl/src/main/java/org/opendaylight/ovsdb/hwvtepsouthbound/transact/McastMacsLocalUpdateCommand.java
@@ -5,11 +5,8 @@
  * terms of the Eclipse Public License v1.0 which accompanies this distribution,
  * and is available at http://www.eclipse.org/legal/epl-v10.html
  */
-
 package org.opendaylight.ovsdb.hwvtepsouthbound.transact;
 
-import static org.opendaylight.ovsdb.lib.operations.Operations.op;
-
 import java.util.Collection;
 import java.util.List;
 import java.util.Map;
@@ -53,6 +50,8 @@ public class McastMacsLocalUpdateCommand
 
     private void updateMcastMacsLocal(final TransactionBuilder transaction,
             final InstanceIdentifier<Node> instanceIdentifier, final List<LocalMcastMacs> localMcastMacs) {
+        final var op = ops();
+
         for (LocalMcastMacs localMcastMac: localMcastMacs) {
             LOG.debug("Creating localMcastMac, mac address: {}", localMcastMac.getMacEntryKey().getValue());
             final Optional<LocalMcastMacs> operationalMacOptional =
diff --git a/hwvtepsouthbound/hwvtepsouthbound-impl/src/main/java/org/opendaylight/ovsdb/hwvtepsouthbound/transact/McastMacsRemoteRemoveCommand.java b/hwvtepsouthbound/hwvtepsouthbound-impl/src/main/java/org/opendaylight/ovsdb/hwvtepsouthbound/transact/McastMacsRemoteRemoveCommand.java
index 12db813a3..6cb08faf8 100644
--- a/hwvtepsouthbound/hwvtepsouthbound-impl/src/main/java/org/opendaylight/ovsdb/hwvtepsouthbound/transact/McastMacsRemoteRemoveCommand.java
+++ b/hwvtepsouthbound/hwvtepsouthbound-impl/src/main/java/org/opendaylight/ovsdb/hwvtepsouthbound/transact/McastMacsRemoteRemoveCommand.java
@@ -7,8 +7,6 @@
  */
 package org.opendaylight.ovsdb.hwvtepsouthbound.transact;
 
-import static org.opendaylight.ovsdb.lib.operations.Operations.op;
-
 import java.util.ArrayList;
 import java.util.Collection;
 import java.util.List;
@@ -104,7 +102,7 @@ public class McastMacsRemoteRemoveCommand
                 && ((McastMacsRemote)deviceData.getData()).getLogicalSwitchColumn() != null) {
             UUID logicalSwitchUid = ((McastMacsRemote)deviceData.getData()).getLogicalSwitchColumn().getData();
             if (logicalSwitchUid != null) {
-                transaction.add(op.delete(mcastMacsRemote.getSchema())
+                transaction.add(ops().delete(mcastMacsRemote.getSchema())
                         .where(mcastMacsRemote.getLogicalSwitchColumn().getSchema().opEqual(logicalSwitchUid)).build());
                 deleted = true;
                 updateCurrentTxDeleteData(RemoteMcastMacs.class, macIid, mac);
@@ -120,7 +118,7 @@ public class McastMacsRemoteRemoveCommand
             if (macEntryUUID != null) {
                 mcastMacsRemote.getUuidColumn().setData(macEntryUUID);
                 updateCurrentTxDeleteData(RemoteMcastMacs.class, macIid, mac);
-                transaction.add(op.delete(mcastMacsRemote.getSchema())
+                transaction.add(ops().delete(mcastMacsRemote.getSchema())
                         .where(mcastMacsRemote.getUuidColumn().getSchema().opEqual(macEntryUUID)).build());
                 updateControllerTxHistory(TransactionType.DELETE, new StringBuilder(mcastMacsRemote.toString())
                         .append(":  Mac : ").append(macEntryUUID));
diff --git a/hwvtepsouthbound/hwvtepsouthbound-impl/src/main/java/org/opendaylight/ovsdb/hwvtepsouthbound/transact/McastMacsRemoteUpdateCommand.java b/hwvtepsouthbound/hwvtepsouthbound-impl/src/main/java/org/opendaylight/ovsdb/hwvtepsouthbound/transact/McastMacsRemoteUpdateCommand.java
index bc8a5f966..0ce24d612 100644
--- a/hwvtepsouthbound/hwvtepsouthbound-impl/src/main/java/org/opendaylight/ovsdb/hwvtepsouthbound/transact/McastMacsRemoteUpdateCommand.java
+++ b/hwvtepsouthbound/hwvtepsouthbound-impl/src/main/java/org/opendaylight/ovsdb/hwvtepsouthbound/transact/McastMacsRemoteUpdateCommand.java
@@ -7,8 +7,6 @@
  */
 package org.opendaylight.ovsdb.hwvtepsouthbound.transact;
 
-import static org.opendaylight.ovsdb.lib.operations.Operations.op;
-
 import com.google.common.annotations.VisibleForTesting;
 import com.google.common.collect.Lists;
 import com.google.common.collect.Sets;
@@ -107,7 +105,7 @@ public class McastMacsRemoteUpdateCommand
         HwvtepDeviceInfo.DeviceData deviceData = super.fetchDeviceData(RemoteMcastMacs.class, macIid);
         if (deviceData == null) {
             setLocatorSet(transaction, mcastMacsRemote, mac);
-            transaction.add(op.insert(mcastMacsRemote));
+            transaction.add(ops().insert(mcastMacsRemote));
             updateCurrentTxData(RemoteMcastMacs.class, macIid, new UUID("uuid"), mac);
             updateControllerTxHistory(TransactionType.ADD, mcastMacsRemote);
             LOG.info("CONTROLLER - {} {}", TransactionType.ADD, mcastMacsRemote);
@@ -116,7 +114,7 @@ public class McastMacsRemoteUpdateCommand
             UUID macEntryUUID = deviceData.getUuid();
             McastMacsRemote extraMac = transaction.getTypedRowSchema(McastMacsRemote.class);
             extraMac.getUuidColumn().setData(macEntryUUID);
-            transaction.add(op.update(mcastMacsRemote)
+            transaction.add(ops().update(mcastMacsRemote)
                     .where(extraMac.getUuidColumn().getSchema().opEqual(macEntryUUID))
                     .build());
             updateControllerTxHistory(TransactionType.UPDATE, mcastMacsRemote);
diff --git a/hwvtepsouthbound/hwvtepsouthbound-impl/src/main/java/org/opendaylight/ovsdb/hwvtepsouthbound/transact/PhysicalPortRemoveCommand.java b/hwvtepsouthbound/hwvtepsouthbound-impl/src/main/java/org/opendaylight/ovsdb/hwvtepsouthbound/transact/PhysicalPortRemoveCommand.java
index af31c6011..8037c085a 100644
--- a/hwvtepsouthbound/hwvtepsouthbound-impl/src/main/java/org/opendaylight/ovsdb/hwvtepsouthbound/transact/PhysicalPortRemoveCommand.java
+++ b/hwvtepsouthbound/hwvtepsouthbound-impl/src/main/java/org/opendaylight/ovsdb/hwvtepsouthbound/transact/PhysicalPortRemoveCommand.java
@@ -7,8 +7,6 @@
  */
 package org.opendaylight.ovsdb.hwvtepsouthbound.transact;
 
-import static org.opendaylight.ovsdb.lib.operations.Operations.op;
-
 import java.util.ArrayList;
 import java.util.Collection;
 import java.util.HashMap;
@@ -52,6 +50,8 @@ public class PhysicalPortRemoveCommand extends AbstractTransactCommand {
     private void updatePhysicalPort(final TransactionBuilder transaction,
                                     final InstanceIdentifier<Node> psNodeiid,
                                     final List<HwvtepPhysicalPortAugmentation> listPort) {
+        final var op = ops();
+
         for (HwvtepPhysicalPortAugmentation port : listPort) {
             LOG.debug("Updating a physical port named: {}", port.getHwvtepNodeName().getValue());
             Optional<HwvtepPhysicalPortAugmentation> operationalPhysicalPortOptional =
diff --git a/hwvtepsouthbound/hwvtepsouthbound-impl/src/main/java/org/opendaylight/ovsdb/hwvtepsouthbound/transact/PhysicalPortUpdateCommand.java b/hwvtepsouthbound/hwvtepsouthbound-impl/src/main/java/org/opendaylight/ovsdb/hwvtepsouthbound/transact/PhysicalPortUpdateCommand.java
index 733695420..b903917c0 100644
--- a/hwvtepsouthbound/hwvtepsouthbound-impl/src/main/java/org/opendaylight/ovsdb/hwvtepsouthbound/transact/PhysicalPortUpdateCommand.java
+++ b/hwvtepsouthbound/hwvtepsouthbound-impl/src/main/java/org/opendaylight/ovsdb/hwvtepsouthbound/transact/PhysicalPortUpdateCommand.java
@@ -7,8 +7,6 @@
  */
 package org.opendaylight.ovsdb.hwvtepsouthbound.transact;
 
-import static org.opendaylight.ovsdb.lib.operations.Operations.op;
-
 import java.util.ArrayList;
 import java.util.Collection;
 import java.util.Collections;
@@ -148,6 +146,8 @@ public class PhysicalPortUpdateCommand
                     TyperUtils.getTypedRowWrapper(transaction.getDatabaseSchema(), PhysicalPort.class);
             extraPhyscialPort.setName("");
             LOG.trace("execute: updating physical port: {} {}", nodeId, physicalPort);
+            final var op = ops();
+
             transaction.add(op.update(physicalPort)
                     .where(extraPhyscialPort.getNameColumn().getSchema().opEqual(existingPhysicalPortName))
                     .build());
diff --git a/hwvtepsouthbound/hwvtepsouthbound-impl/src/main/java/org/opendaylight/ovsdb/hwvtepsouthbound/transact/PhysicalSwitchRemoveCommand.java b/hwvtepsouthbound/hwvtepsouthbound-impl/src/main/java/org/opendaylight/ovsdb/hwvtepsouthbound/transact/PhysicalSwitchRemoveCommand.java
index 45ddde080..8c84fb231 100644
--- a/hwvtepsouthbound/hwvtepsouthbound-impl/src/main/java/org/opendaylight/ovsdb/hwvtepsouthbound/transact/PhysicalSwitchRemoveCommand.java
+++ b/hwvtepsouthbound/hwvtepsouthbound-impl/src/main/java/org/opendaylight/ovsdb/hwvtepsouthbound/transact/PhysicalSwitchRemoveCommand.java
@@ -7,8 +7,6 @@
  */
 package org.opendaylight.ovsdb.hwvtepsouthbound.transact;
 
-import static org.opendaylight.ovsdb.lib.operations.Operations.op;
-
 import java.util.Collection;
 import java.util.Collections;
 import java.util.HashMap;
@@ -59,6 +57,8 @@ public class PhysicalSwitchRemoveCommand extends AbstractTransactCommand {
             UUID physicalSwitchUuid = new UUID(operationalPhysicalSwitchOptional.orElseThrow()
                     .getPhysicalSwitchUuid().getValue());
             Global global = transaction.getTypedRowSchema(Global.class);
+            final var op = ops();
+
             transaction.add(op.delete(physicalSwitch.getSchema())
                     .where(physicalSwitch.getUuidColumn().getSchema().opEqual(physicalSwitchUuid)).build());
             transaction.add(op.comment("Physical Switch: Deleting "
diff --git a/hwvtepsouthbound/hwvtepsouthbound-impl/src/main/java/org/opendaylight/ovsdb/hwvtepsouthbound/transact/PhysicalSwitchUpdateCommand.java b/hwvtepsouthbound/hwvtepsouthbound-impl/src/main/java/org/opendaylight/ovsdb/hwvtepsouthbound/transact/PhysicalSwitchUpdateCommand.java
index 2b22dd078..74887ae8f 100644
--- a/hwvtepsouthbound/hwvtepsouthbound-impl/src/main/java/org/opendaylight/ovsdb/hwvtepsouthbound/transact/PhysicalSwitchUpdateCommand.java
+++ b/hwvtepsouthbound/hwvtepsouthbound-impl/src/main/java/org/opendaylight/ovsdb/hwvtepsouthbound/transact/PhysicalSwitchUpdateCommand.java
@@ -5,11 +5,9 @@
  * terms of the Eclipse Public License v1.0 which accompanies this distribution,
  * and is available at http://www.eclipse.org/legal/epl-v10.html
  */
-
 package org.opendaylight.ovsdb.hwvtepsouthbound.transact;
 
 import static org.opendaylight.ovsdb.hwvtepsouthbound.HwvtepSouthboundUtil.schemaMismatchLog;
-import static org.opendaylight.ovsdb.lib.operations.Operations.op;
 
 import com.google.common.collect.ImmutableMap;
 import java.util.Collection;
@@ -96,6 +94,8 @@ public final class PhysicalSwitchUpdateCommand extends AbstractTransactCommand {
             schemaMismatchLog("tunnels", "Physical_Switch", e);
         }
         if (!operationalPhysicalSwitchOptional.isPresent()) {
+            final var op = ops();
+
             //create a physical switch
             setName(physicalSwitch, physicalSwitchAugmentation, operationalPhysicalSwitchOptional);
             String pswitchUuid = "PhysicalSwitch_" + HwvtepSouthboundMapper.getRandomUUID();
@@ -128,6 +128,8 @@ public final class PhysicalSwitchUpdateCommand extends AbstractTransactCommand {
             PhysicalSwitch extraPhysicalSwitch = transaction.getTypedRowWrapper(PhysicalSwitch.class);
             extraPhysicalSwitch.setName("");
             LOG.trace("execute: updating physical switch: {}", physicalSwitch);
+            final var op = ops();
+
             transaction.add(op.update(physicalSwitch)
                     .where(extraPhysicalSwitch.getNameColumn().getSchema().opEqual(existingPhysicalSwitchName))
                     .build());
@@ -181,6 +183,8 @@ public final class PhysicalSwitchUpdateCommand extends AbstractTransactCommand {
     private void setTunnels(final TransactionBuilder transaction, final InstanceIdentifier<Node> iid,
             final PhysicalSwitch physicalSwitch, final PhysicalSwitchAugmentation physicalSwitchAugmentation,
             final boolean switchExists) {
+        final var op = ops();
+
         //TODO: revisit this code for optimizations
         //TODO: needs more testing
         for (Tunnels tunnel : physicalSwitchAugmentation.nonnullTunnels().values()) {
diff --git a/hwvtepsouthbound/hwvtepsouthbound-impl/src/main/java/org/opendaylight/ovsdb/hwvtepsouthbound/transact/PlainLogicalSwitchRemoveCmd.java b/hwvtepsouthbound/hwvtepsouthbound-impl/src/main/java/org/opendaylight/ovsdb/hwvtepsouthbound/transact/PlainLogicalSwitchRemoveCmd.java
index bd4a180da..10c32a5b3 100644
--- a/hwvtepsouthbound/hwvtepsouthbound-impl/src/main/java/org/opendaylight/ovsdb/hwvtepsouthbound/transact/PlainLogicalSwitchRemoveCmd.java
+++ b/hwvtepsouthbound/hwvtepsouthbound-impl/src/main/java/org/opendaylight/ovsdb/hwvtepsouthbound/transact/PlainLogicalSwitchRemoveCmd.java
@@ -7,8 +7,6 @@
  */
 package org.opendaylight.ovsdb.hwvtepsouthbound.transact;
 
-import static org.opendaylight.ovsdb.lib.operations.Operations.op;
-
 import java.util.Collection;
 import java.util.Map;
 import java.util.Objects;
@@ -50,7 +48,7 @@ public final class PlainLogicalSwitchRemoveCmd
     public void execute(final TransactionBuilder transaction) {
         LogicalSwitch logicalSwitch = TyperUtils.getTypedRowWrapper(
                 transaction.getDatabaseSchema(), LogicalSwitch.class, null);
-        transaction.add(op.delete(logicalSwitch.getSchema())
+        transaction.add(ops().delete(logicalSwitch.getSchema())
                 .where(logicalSwitch.getNameColumn().getSchema().opEqual(
                         logicalSwitches.getHwvtepNodeName().getValue())).build());
     }
diff --git a/hwvtepsouthbound/hwvtepsouthbound-impl/src/main/java/org/opendaylight/ovsdb/hwvtepsouthbound/transact/TransactUtils.java b/hwvtepsouthbound/hwvtepsouthbound-impl/src/main/java/org/opendaylight/ovsdb/hwvtepsouthbound/transact/TransactUtils.java
index 02e76b5e7..bc6550afe 100644
--- a/hwvtepsouthbound/hwvtepsouthbound-impl/src/main/java/org/opendaylight/ovsdb/hwvtepsouthbound/transact/TransactUtils.java
+++ b/hwvtepsouthbound/hwvtepsouthbound-impl/src/main/java/org/opendaylight/ovsdb/hwvtepsouthbound/transact/TransactUtils.java
@@ -7,8 +7,6 @@
  */
 package org.opendaylight.ovsdb.hwvtepsouthbound.transact;
 
-import static org.opendaylight.ovsdb.lib.operations.Operations.op;
-
 import java.util.Collection;
 import java.util.HashMap;
 import java.util.HashSet;
@@ -141,7 +139,8 @@ public final class TransactUtils {
         PhysicalLocatorSet physicalLocatorSet = transaction.getTypedRowWrapper(PhysicalLocatorSet.class);
         physicalLocatorSet.setLocators(locators);
         String locatorSetUuid = "PhysicalLocatorSet_" + HwvtepSouthboundMapper.getRandomUUID();
-        transaction.add(op.insert(physicalLocatorSet).withId(locatorSetUuid));
+        transaction.add(hwvtepOperationalState.getConnectionInstance().ops()
+            .insert(physicalLocatorSet).withId(locatorSetUuid));
         hwvtepOperationalState.getDeviceInfo().addToControllerTx(TransactionType.ADD,
                 new StringBuilder(physicalLocatorSet.toString()).append(" Uuid ").append(locatorSetUuid)
                         .append(" ").append(locatorsInfo.toString()));
@@ -183,7 +182,8 @@ public final class TransactUtils {
         setEncapsulationType(physicalLocator, inputLocator);
         setDstIp(physicalLocator, inputLocator);
         String locatorUuid = "PhysicalLocator_" + HwvtepSouthboundMapper.getRandomUUID();
-        transaction.add(op.insert(physicalLocator).withId(locatorUuid));
+        transaction.add(hwvtepOperationalState.getConnectionInstance().ops()
+            .insert(physicalLocator).withId(locatorUuid));
         hwvtepOperationalState.getDeviceInfo().addToControllerTx(TransactionType.ADD,
                 new StringBuilder(physicalLocator.toString()).append(" Uuid ").append(locatorUuid));
         LOG.info("CONTROLLER - {} {}", TransactionType.ADD,
diff --git a/hwvtepsouthbound/hwvtepsouthbound-impl/src/main/java/org/opendaylight/ovsdb/hwvtepsouthbound/transact/UcastMacsLocalRemoveCommand.java b/hwvtepsouthbound/hwvtepsouthbound-impl/src/main/java/org/opendaylight/ovsdb/hwvtepsouthbound/transact/UcastMacsLocalRemoveCommand.java
index b5b69ea12..30bae44c2 100644
--- a/hwvtepsouthbound/hwvtepsouthbound-impl/src/main/java/org/opendaylight/ovsdb/hwvtepsouthbound/transact/UcastMacsLocalRemoveCommand.java
+++ b/hwvtepsouthbound/hwvtepsouthbound-impl/src/main/java/org/opendaylight/ovsdb/hwvtepsouthbound/transact/UcastMacsLocalRemoveCommand.java
@@ -7,8 +7,6 @@
  */
 package org.opendaylight.ovsdb.hwvtepsouthbound.transact;
 
-import static org.opendaylight.ovsdb.lib.operations.Operations.op;
-
 import java.util.Collection;
 import java.util.List;
 import java.util.Map;
@@ -49,6 +47,8 @@ public class UcastMacsLocalRemoveCommand
 
     private void removeUcastMacLocal(final TransactionBuilder transaction,
             final InstanceIdentifier<Node> instanceIdentifier, final List<LocalUcastMacs> macList) {
+        final var op = ops();
+
         for (LocalUcastMacs mac: macList) {
             LOG.debug("Removing remoteUcastMacs, mac address: {}", mac.getMacEntryKey().getValue());
             Optional<LocalUcastMacs> operationalMacOptional =
diff --git a/hwvtepsouthbound/hwvtepsouthbound-impl/src/main/java/org/opendaylight/ovsdb/hwvtepsouthbound/transact/UcastMacsLocalUpdateCommand.java b/hwvtepsouthbound/hwvtepsouthbound-impl/src/main/java/org/opendaylight/ovsdb/hwvtepsouthbound/transact/UcastMacsLocalUpdateCommand.java
index b3417df7b..967c1af15 100644
--- a/hwvtepsouthbound/hwvtepsouthbound-impl/src/main/java/org/opendaylight/ovsdb/hwvtepsouthbound/transact/UcastMacsLocalUpdateCommand.java
+++ b/hwvtepsouthbound/hwvtepsouthbound-impl/src/main/java/org/opendaylight/ovsdb/hwvtepsouthbound/transact/UcastMacsLocalUpdateCommand.java
@@ -7,8 +7,6 @@
  */
 package org.opendaylight.ovsdb.hwvtepsouthbound.transact;
 
-import static org.opendaylight.ovsdb.lib.operations.Operations.op;
-
 import java.util.Collection;
 import java.util.List;
 import java.util.Map;
@@ -55,6 +53,8 @@ public class UcastMacsLocalUpdateCommand
 
     private void updateUcastMacsLocal(final TransactionBuilder transaction,
             final InstanceIdentifier<Node> instanceIdentifier, final List<LocalUcastMacs> localUcastMacs) {
+        final var op = ops();
+
         for (LocalUcastMacs localUcastMac: localUcastMacs) {
             LOG.debug("Creating localUcastMacs, mac address: {}", localUcastMac.getMacEntryKey().getValue());
             final Optional<LocalUcastMacs> operationalMacOptional =
diff --git a/hwvtepsouthbound/hwvtepsouthbound-impl/src/main/java/org/opendaylight/ovsdb/hwvtepsouthbound/transact/UcastMacsRemoteRemoveCommand.java b/hwvtepsouthbound/hwvtepsouthbound-impl/src/main/java/org/opendaylight/ovsdb/hwvtepsouthbound/transact/UcastMacsRemoteRemoveCommand.java
index 8be5952fe..b5ac30713 100644
--- a/hwvtepsouthbound/hwvtepsouthbound-impl/src/main/java/org/opendaylight/ovsdb/hwvtepsouthbound/transact/UcastMacsRemoteRemoveCommand.java
+++ b/hwvtepsouthbound/hwvtepsouthbound-impl/src/main/java/org/opendaylight/ovsdb/hwvtepsouthbound/transact/UcastMacsRemoteRemoveCommand.java
@@ -7,8 +7,6 @@
  */
 package org.opendaylight.ovsdb.hwvtepsouthbound.transact;
 
-import static org.opendaylight.ovsdb.lib.operations.Operations.op;
-
 import com.google.common.collect.Lists;
 import java.util.Collection;
 import java.util.List;
@@ -85,6 +83,8 @@ public class UcastMacsRemoteRemoveCommand
                                       final InstanceIdentifier<Node> instanceIdentifier,
                                       final List<RemoteUcastMacs> macList) {
         String nodeId = instanceIdentifier.firstKeyOf(Node.class).getNodeId().getValue();
+        final var op = ops();
+
         for (RemoteUcastMacs mac: macList) {
             final InstanceIdentifier<RemoteUcastMacs> macIid =
                     instanceIdentifier.augmentation(HwvtepGlobalAugmentation.class)
diff --git a/hwvtepsouthbound/hwvtepsouthbound-impl/src/main/java/org/opendaylight/ovsdb/hwvtepsouthbound/transact/UcastMacsRemoteUpdateCommand.java b/hwvtepsouthbound/hwvtepsouthbound-impl/src/main/java/org/opendaylight/ovsdb/hwvtepsouthbound/transact/UcastMacsRemoteUpdateCommand.java
index be27d9909..1973807f8 100644
--- a/hwvtepsouthbound/hwvtepsouthbound-impl/src/main/java/org/opendaylight/ovsdb/hwvtepsouthbound/transact/UcastMacsRemoteUpdateCommand.java
+++ b/hwvtepsouthbound/hwvtepsouthbound-impl/src/main/java/org/opendaylight/ovsdb/hwvtepsouthbound/transact/UcastMacsRemoteUpdateCommand.java
@@ -7,8 +7,6 @@
  */
 package org.opendaylight.ovsdb.hwvtepsouthbound.transact;
 
-import static org.opendaylight.ovsdb.lib.operations.Operations.op;
-
 import com.google.common.collect.Lists;
 import java.util.Collection;
 import java.util.Collections;
@@ -99,7 +97,7 @@ public class UcastMacsRemoteUpdateCommand
             setMac(ucastMacsRemote, remoteUcastMac);
             LOG.trace("DoDeviceTransaction: creating RemotUcastMac entry: {} txId: {}", macKey,
                     getOperationalState().getTransactionId());
-            transaction.add(op.insert(ucastMacsRemote));
+            transaction.add(ops().insert(ucastMacsRemote));
             updateCurrentTxData(RemoteUcastMacs.class, macKey, new UUID("uuid"), remoteUcastMac);
             LOG.info("CONTROLLER - {} {}", TransactionType.ADD, ucastMacsRemote);
             return;
@@ -121,7 +119,7 @@ public class UcastMacsRemoteUpdateCommand
             extraMac.getUuidColumn().setData(macEntryUUID);
             LOG.trace("doDeviceTransaction: updating RemotUcastMac entry: {} txId: {}", macKey,
                     getOperationalState().getTransactionId());
-            transaction.add(op.update(ucastMacsRemote)
+            transaction.add(ops().update(ucastMacsRemote)
                     .where(extraMac.getUuidColumn().getSchema().opEqual(macEntryUUID))
                     .build());
             LOG.info("CONTROLLER - {} {}", TransactionType.UPDATE, ucastMacsRemote);
diff --git a/hwvtepsouthbound/hwvtepsouthbound-impl/src/test/java/org/opendaylight/ovsdb/hwvtepsouthbound/DataChangeListenerTestBase.java b/hwvtepsouthbound/hwvtepsouthbound-impl/src/test/java/org/opendaylight/ovsdb/hwvtepsouthbound/DataChangeListenerTestBase.java
index 8ab8a2939..80245108f 100644
--- a/hwvtepsouthbound/hwvtepsouthbound-impl/src/test/java/org/opendaylight/ovsdb/hwvtepsouthbound/DataChangeListenerTestBase.java
+++ b/hwvtepsouthbound/hwvtepsouthbound-impl/src/test/java/org/opendaylight/ovsdb/hwvtepsouthbound/DataChangeListenerTestBase.java
@@ -11,6 +11,7 @@ import static org.mockito.ArgumentMatchers.any;
 import static org.mockito.ArgumentMatchers.anyString;
 import static org.mockito.Mockito.doReturn;
 import static org.mockito.Mockito.mock;
+import static org.mockito.Mockito.reset;
 import static org.mockito.Mockito.spy;
 
 import com.fasterxml.jackson.databind.JsonNode;
@@ -109,6 +110,8 @@ public class DataChangeListenerTestBase extends AbstractDataBrokerTest {
     InstanceIdentifier<LogicalSwitches> ls0Iid;
     InstanceIdentifier<LogicalSwitches> ls1Iid;
 
+    Operations mockOp;
+
     @Before
     public void setupTest() throws Exception {
         entityOwnershipService = mock(EntityOwnershipService.class);
@@ -167,8 +170,9 @@ public class DataChangeListenerTestBase extends AbstractDataBrokerTest {
         }
     }
 
-    private void mockConnectionManager() throws IllegalAccessException {
-        hwvtepConnectionManager = spy(new HwvtepConnectionManager(getDataBroker(), transactionInvoker,
+    private void mockConnectionManager() {
+        mockOp = mock(Operations.class);
+        hwvtepConnectionManager = spy(new HwvtepConnectionManager(getDataBroker(), transactionInvoker, mockOp,
             entityOwnershipService, mock(OvsdbConnection.class)));
         doReturn(connectionInstance).when(hwvtepConnectionManager).getConnectionInstance(
             any(HwvtepPhysicalSwitchAttributes.class));
@@ -189,7 +193,7 @@ public class DataChangeListenerTestBase extends AbstractDataBrokerTest {
         transactionInvoker = new TransactionInvokerImpl(getDataBroker());
 
         connectionInstance = new HwvtepConnectionInstance(null, null, ovsdbClient, nodeIid, transactionInvoker,
-            getDataBroker());
+            getDataBroker(), mockOp);
         connectionInstance.reconciliationFt.set(Boolean.TRUE);
         connectionInstance.firstUpdateTriggered.set(true);
         connectionInstance.setControllerTxHistory(new TransactionHistory(10000, 7500));
@@ -205,13 +209,15 @@ public class DataChangeListenerTestBase extends AbstractDataBrokerTest {
      * Resets the captures so that we can validate the captors of the immediate next execution.
      */
     void resetOperations() {
+        reset(mockOp);
+
         insertOpCapture = ArgumentCaptor.forClass(TypedBaseTable.class);
         Delete delete = mock(Delete.class);
         Where where = mock(Where.class);
         doReturn(where).when(delete).where(any());
         Insert insert = mock(Insert.class);
         doReturn(insert).when(insert).withId(any(String.class));
-        Operations mockOp = mock(Operations.class);
+
         doReturn(insert).when(mockOp).insert(insertOpCapture.capture());
         Update update = mock(Update.class);
         doReturn(update).when(mockOp).update(insertOpCapture.capture());
@@ -220,14 +226,6 @@ public class DataChangeListenerTestBase extends AbstractDataBrokerTest {
         doReturn(where).when(update).where(any());
         doReturn(delete).when(mockOp).delete(any());
 
-
-
-        try {
-            setFinalStatic(Operations.class, "op", mockOp);
-        } catch (SecurityException | ReflectiveOperationException e) {
-            throw new AssertionError("Set of Operations.op field failed", e);
-        }
-
         ListenableFuture<List<OperationResult>> ft = mock(ListenableFuture.class);
         transactCaptor = ArgumentCaptor.forClass(List.class);
         doReturn(ft).when(ovsdbClient).transact(any(DatabaseSchema.class), transactCaptor.capture());
diff --git a/hwvtepsouthbound/hwvtepsouthbound-impl/src/test/java/org/opendaylight/ovsdb/hwvtepsouthbound/HwvtepDataChangeListenerTest.java b/hwvtepsouthbound/hwvtepsouthbound-impl/src/test/java/org/opendaylight/ovsdb/hwvtepsouthbound/HwvtepDataChangeListenerTest.java
index 8557b0f1d..3d42ed240 100644
--- a/hwvtepsouthbound/hwvtepsouthbound-impl/src/test/java/org/opendaylight/ovsdb/hwvtepsouthbound/HwvtepDataChangeListenerTest.java
+++ b/hwvtepsouthbound/hwvtepsouthbound-impl/src/test/java/org/opendaylight/ovsdb/hwvtepsouthbound/HwvtepDataChangeListenerTest.java
@@ -27,7 +27,6 @@ import org.mockito.Mockito;
 import org.mockito.junit.MockitoJUnitRunner;
 import org.opendaylight.mdsal.common.api.LogicalDatastoreType;
 import org.opendaylight.ovsdb.hwvtepsouthbound.transact.DependencyQueue;
-import org.opendaylight.ovsdb.lib.operations.Operations;
 import org.opendaylight.ovsdb.lib.schema.typed.TypedBaseTable;
 import org.opendaylight.ovsdb.schema.hardwarevtep.LogicalSwitch;
 import org.opendaylight.ovsdb.schema.hardwarevtep.McastMacsRemote;
@@ -114,7 +113,7 @@ public class HwvtepDataChangeListenerTest extends DataChangeListenerTestBase {
         addData(LogicalDatastoreType.OPERATIONAL, LogicalSwitches.class, logicalSwitches);
         resetOperations();
         deleteData(LogicalDatastoreType.CONFIGURATION, LogicalSwitches.class, logicalSwitches);
-        verify(Operations.op,  times(10)).delete(any());
+        verify(mockOp, times(10)).delete(any());
     }
 
     @Test
@@ -125,7 +124,7 @@ public class HwvtepDataChangeListenerTest extends DataChangeListenerTestBase {
         addData(LogicalDatastoreType.CONFIGURATION, TerminationPoint.class, terminationPoints);
         addData(LogicalDatastoreType.CONFIGURATION, RemoteUcastMacs.class, ucastMacs);
         //4 ucast macs + 2 termination points
-        verify(Operations.op,  times(4)).insert(any(UcastMacsRemote.class));
+        verify(mockOp, times(4)).insert(any(UcastMacsRemote.class));
         //TODO add finer grained validation
     }
 
@@ -136,7 +135,7 @@ public class HwvtepDataChangeListenerTest extends DataChangeListenerTestBase {
         resetOperations();
         addData(LogicalDatastoreType.CONFIGURATION, RemoteUcastMacs.class, ucastMacs);
         //4 ucast macs + 2 termination points
-        verify(Operations.op,  times(4)).insert(any(UcastMacsRemote.class));
+        verify(mockOp, times(4)).insert(any(UcastMacsRemote.class));
         //TODO add finer grained validation
     }
 
@@ -151,7 +150,7 @@ public class HwvtepDataChangeListenerTest extends DataChangeListenerTestBase {
 
         resetOperations();
         deleteData(LogicalDatastoreType.CONFIGURATION, RemoteUcastMacs.class, ucastMacs);
-        verify(Operations.op,  times(4)).delete(any());
+        verify(mockOp, times(4)).delete(any());
         //TODO add finer grained validation
     }
 
@@ -163,7 +162,7 @@ public class HwvtepDataChangeListenerTest extends DataChangeListenerTestBase {
         addData(LogicalDatastoreType.CONFIGURATION, TerminationPoint.class, terminationPoints);
         addData(LogicalDatastoreType.CONFIGURATION, RemoteMcastMacs.class, mcastMacs);
         //2 mcast macs + 2 locator sets + 3 termination points
-        verify(Operations.op,  times(7)).insert(ArgumentMatchers.<McastMacsRemote>any());
+        verify(mockOp, times(7)).insert(ArgumentMatchers.<McastMacsRemote>any());
     }
 
     @Test
@@ -173,7 +172,7 @@ public class HwvtepDataChangeListenerTest extends DataChangeListenerTestBase {
         resetOperations();
         addData(LogicalDatastoreType.CONFIGURATION, RemoteMcastMacs.class, mcastMacs);
         //2 mcast macs + 2 locator sets + 3 termination points
-        verify(Operations.op,  times(7)).insert(ArgumentMatchers.<McastMacsRemote>any());
+        verify(mockOp, times(7)).insert(ArgumentMatchers.<McastMacsRemote>any());
     }
 
     @Test
@@ -187,7 +186,7 @@ public class HwvtepDataChangeListenerTest extends DataChangeListenerTestBase {
 
         resetOperations();
         deleteData(LogicalDatastoreType.CONFIGURATION, RemoteMcastMacs.class, mcastMacs);
-        verify(Operations.op,  times(2)).delete(ArgumentMatchers.any());
+        verify(mockOp, times(2)).delete(ArgumentMatchers.any());
     }
 
     @Test
@@ -197,14 +196,14 @@ public class HwvtepDataChangeListenerTest extends DataChangeListenerTestBase {
         resetOperations();
         addData(LogicalDatastoreType.CONFIGURATION, TerminationPoint.class, terminationPoints);
         addData(LogicalDatastoreType.CONFIGURATION, RemoteUcastMacs.class, ucastMacs);
-        verify(Operations.op,  times(4)).insert(any(UcastMacsRemote.class));
+        verify(mockOp, times(4)).insert(any(UcastMacsRemote.class));
 
         addData(LogicalDatastoreType.OPERATIONAL, TerminationPoint.class, terminationPoints);
         addData(LogicalDatastoreType.OPERATIONAL, RemoteUcastMacs.class, ucastMacs);
         resetOperations();
         addData(LogicalDatastoreType.CONFIGURATION, RemoteMcastMacs.class, mcastMacs);
         //2 mcast mac + 2 locator sets ( termination point already added )
-        verify(Operations.op,  times(4)).insert(ArgumentMatchers.<McastMacsRemote>any());
+        verify(mockOp, times(4)).insert(ArgumentMatchers.<McastMacsRemote>any());
     }
 
     @Test
@@ -214,20 +213,20 @@ public class HwvtepDataChangeListenerTest extends DataChangeListenerTestBase {
         resetOperations();
         addData(LogicalDatastoreType.CONFIGURATION, TerminationPoint.class, terminationPoints);
         addData(LogicalDatastoreType.CONFIGURATION, RemoteUcastMacs.class, ucastMacs);
-        verify(Operations.op,  times(4)).insert(any(UcastMacsRemote.class));
+        verify(mockOp, times(4)).insert(any(UcastMacsRemote.class));
 
         addData(LogicalDatastoreType.OPERATIONAL, TerminationPoint.class, terminationPoints);
         addData(LogicalDatastoreType.OPERATIONAL, RemoteUcastMacs.class, ucastMacs);
         resetOperations();
         addData(LogicalDatastoreType.CONFIGURATION, RemoteMcastMacs.class, mcastMacs);
-        verify(Operations.op,  times(4)).insert(ArgumentMatchers.<McastMacsRemote>any());
+        verify(mockOp, times(4)).insert(ArgumentMatchers.<McastMacsRemote>any());
         addData(LogicalDatastoreType.OPERATIONAL, RemoteMcastMacs.class, mcastMacs);
 
         resetOperations();
         addData(LogicalDatastoreType.CONFIGURATION, RemoteMcastMacs.class, mcastMac2);
-        verify(Operations.op,  times(2)).insert(ArgumentMatchers.<McastMacsRemote>any());
-        verify(Operations.op,  times(2)).update(ArgumentMatchers.<McastMacsRemote>any());
-        verify(Operations.op,  times(0)).delete(ArgumentMatchers.any());
+        verify(mockOp, times(2)).insert(ArgumentMatchers.<McastMacsRemote>any());
+        verify(mockOp, times(2)).update(ArgumentMatchers.<McastMacsRemote>any());
+        verify(mockOp, times(0)).delete(ArgumentMatchers.any());
     }
 
     @Test
@@ -237,13 +236,13 @@ public class HwvtepDataChangeListenerTest extends DataChangeListenerTestBase {
         resetOperations();
         addData(LogicalDatastoreType.CONFIGURATION, TerminationPoint.class, terminationPoints);
         addData(LogicalDatastoreType.CONFIGURATION, RemoteUcastMacs.class, ucastMacs);
-        verify(Operations.op,  times(4)).insert(any(UcastMacsRemote.class));
+        verify(mockOp, times(4)).insert(any(UcastMacsRemote.class));
 
         addData(LogicalDatastoreType.OPERATIONAL, TerminationPoint.class, terminationPoints);
         addData(LogicalDatastoreType.OPERATIONAL, RemoteUcastMacs.class, ucastMacs);
         resetOperations();
         addData(LogicalDatastoreType.CONFIGURATION, RemoteMcastMacs.class, mcastMacs);
-        verify(Operations.op,  times(4)).insert(ArgumentMatchers.<McastMacsRemote>any());
+        verify(mockOp, times(4)).insert(ArgumentMatchers.<McastMacsRemote>any());
         addData(LogicalDatastoreType.OPERATIONAL, RemoteMcastMacs.class, mcastMacs);
 
         resetOperations();
@@ -257,7 +256,7 @@ public class HwvtepDataChangeListenerTest extends DataChangeListenerTestBase {
             augIid.child(RemoteMcastMacs.class,
                 new RemoteMcastMacsKey(TestBuilders.buildLogicalSwitchesRef(nodeIid, "ls1"), macAddr))
             .child(LocatorSet.class));
-        verify(Operations.op,  times(2)).delete(ArgumentMatchers.any());
+        verify(mockOp, times(2)).delete(ArgumentMatchers.any());
     }
 
     @Test
@@ -267,32 +266,32 @@ public class HwvtepDataChangeListenerTest extends DataChangeListenerTestBase {
         resetOperations();
         addData(LogicalDatastoreType.CONFIGURATION, TerminationPoint.class, terminationPoints);
         addData(LogicalDatastoreType.CONFIGURATION, RemoteUcastMacs.class, ucastMacs);
-        verify(Operations.op,  times(4)).insert(any(UcastMacsRemote.class));
+        verify(mockOp, times(4)).insert(any(UcastMacsRemote.class));
 
         resetOperations();
         addData(LogicalDatastoreType.CONFIGURATION, RemoteMcastMacs.class, mcastMacs);
         //2 mcast mac + 2 locator sets ( termination point already added )
-        verify(Operations.op,  times(0)).insert(ArgumentMatchers.<McastMacsRemote>any());
+        verify(mockOp, times(0)).insert(ArgumentMatchers.<McastMacsRemote>any());
         resetOperations();
         addData(LogicalDatastoreType.OPERATIONAL, TerminationPoint.class, terminationPoints);
         addData(LogicalDatastoreType.OPERATIONAL, RemoteUcastMacs.class, ucastMacs);
         connectionInstance.getDeviceInfo().onOperDataAvailable();
         //2 mcast mac + 2 locator sets ( termination point already added )
-        verify(Operations.op,  times(4)).insert(ArgumentMatchers.<McastMacsRemote>any());
+        verify(mockOp, times(4)).insert(ArgumentMatchers.<McastMacsRemote>any());
 
         resetOperations();
         addData(LogicalDatastoreType.CONFIGURATION, RemoteMcastMacs.class, mcastMac2);
-        verify(Operations.op,  times(0)).insert(ArgumentMatchers.<McastMacsRemote>any());
+        verify(mockOp, times(0)).insert(ArgumentMatchers.<McastMacsRemote>any());
         addData(LogicalDatastoreType.OPERATIONAL, RemoteMcastMacs.class, mcastMacs);
         connectionInstance.getDeviceInfo().onOperDataAvailable();
-        verify(Operations.op,  times(2)).insert(ArgumentMatchers.<McastMacsRemote>any());
-        verify(Operations.op,  times(2)).update(ArgumentMatchers.<McastMacsRemote>any());
+        verify(mockOp, times(2)).insert(ArgumentMatchers.<McastMacsRemote>any());
+        verify(mockOp, times(2)).update(ArgumentMatchers.<McastMacsRemote>any());
     }
 
     private void verifyThatLogicalSwitchCreated() {
         //The transactions could be firing in two different mdsal updates intermittently
         //verify(ovsdbClient, times(1)).transact(any(DatabaseSchema.class), any(List.class));
-        verify(Operations.op, times(2)).insert(any(LogicalSwitch.class));
+        verify(mockOp, times(2)).insert(any(LogicalSwitch.class));
 
         assertNotNull(insertOpCapture.getAllValues());
         assertTrue(insertOpCapture.getAllValues().size() == 2);
diff --git a/library/impl/src/main/java/org/opendaylight/ovsdb/lib/operations/DefaultOperations.java b/library/impl/src/main/java/org/opendaylight/ovsdb/lib/operations/DefaultOperations.java
new file mode 100644
index 000000000..aeee02e07
--- /dev/null
+++ b/library/impl/src/main/java/org/opendaylight/ovsdb/lib/operations/DefaultOperations.java
@@ -0,0 +1,99 @@
+/*
+ * Copyright (c) 2024 PANTHEON.tech, s.r.o. and others. All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v1.0 which accompanies this distribution,
+ * and is available at http://www.eclipse.org/legal/epl-v10.html
+ */
+package org.opendaylight.ovsdb.lib.operations;
+
+import javax.inject.Inject;
+import javax.inject.Singleton;
+import org.opendaylight.ovsdb.lib.notation.Row;
+import org.opendaylight.ovsdb.lib.schema.TableSchema;
+import org.opendaylight.ovsdb.lib.schema.typed.TypedBaseTable;
+import org.osgi.service.component.annotations.Activate;
+import org.osgi.service.component.annotations.Component;
+
+/**
+ * Default implementation of {@link Operations}.
+ */
+@Singleton
+@Component
+public final class DefaultOperations implements Operations {
+    @Inject
+    @Activate
+    public DefaultOperations() {
+        // Nothing else
+    }
+
+    @Override
+    public <E extends TableSchema<E>> Insert<E> insert(final TableSchema<E> schema) {
+        return new Insert<>(schema);
+    }
+
+    @Override
+    public <E extends TableSchema<E>> Insert<E> insert(final TypedBaseTable<E> typedTable) {
+        return new Insert<>(typedTable);
+    }
+
+    @Override
+    public <E extends TableSchema<E>> Insert<E> insert(final TableSchema<E> schema, final Row<E> row) {
+        return new Insert<>(schema, row);
+    }
+
+    @Override
+    public <E extends TableSchema<E>> Update<E> update(final TableSchema<E> schema) {
+        return new Update<>(schema);
+    }
+
+    @Override
+    public <E extends TableSchema<E>> Update<E> update(final TypedBaseTable<E> typedTable) {
+        return new Update<>(typedTable);
+    }
+
+    @Override
+    public <E extends TableSchema<E>> Update<E> update(final TableSchema<E> schema, final Row<E> row) {
+        return new Update<>(schema, row);
+    }
+
+    @Override
+    public <E extends TableSchema<E>> Delete<E> delete(final TableSchema<E> schema) {
+        return new Delete<>(schema);
+    }
+
+    @Override
+    public <E extends TableSchema<E>> Mutate<E> mutate(final TableSchema<E> schema) {
+        return new Mutate<>(schema);
+    }
+
+    @Override
+    public <E extends TableSchema<E>> Mutate<E> mutate(final TypedBaseTable<E> typedTable) {
+        return new Mutate<>(typedTable.getSchema());
+    }
+
+    @Override
+    public Commit commit(final Boolean durable) {
+        return new Commit(durable);
+    }
+
+    @Override
+    public Abort abort() {
+        return new Abort();
+    }
+
+    @Override
+    public <E extends TableSchema<E>> Select<E> select(final TableSchema<E> schema) {
+        return new Select<>(schema);
+    }
+
+    @Override
+    public Comment comment(final String comment) {
+        return new Comment(comment);
+    }
+
+    @Override
+    public Assert assertion(final String lock) {
+        return new Assert(lock);
+    }
+}
diff --git a/library/impl/src/main/java/org/opendaylight/ovsdb/lib/operations/Operations.java b/library/impl/src/main/java/org/opendaylight/ovsdb/lib/operations/Operations.java
index 99056cb62..685db4c43 100644
--- a/library/impl/src/main/java/org/opendaylight/ovsdb/lib/operations/Operations.java
+++ b/library/impl/src/main/java/org/opendaylight/ovsdb/lib/operations/Operations.java
@@ -5,74 +5,42 @@
  * terms of the Eclipse Public License v1.0 which accompanies this distribution,
  * and is available at http://www.eclipse.org/legal/epl-v10.html
  */
-
 package org.opendaylight.ovsdb.lib.operations;
 
 import org.opendaylight.ovsdb.lib.notation.Row;
 import org.opendaylight.ovsdb.lib.schema.TableSchema;
 import org.opendaylight.ovsdb.lib.schema.typed.TypedBaseTable;
 
-public class Operations {
-    @SuppressWarnings("checkstyle:ConstantName")
-    public static final Operations op = new Operations();
+public interface Operations {
 
-    public <E extends TableSchema<E>> Insert<E> insert(TableSchema<E> schema) {
-        return new Insert<>(schema);
-    }
+    <E extends TableSchema<E>> Insert<E> insert(TableSchema<E> schema);
 
-    public <E extends TableSchema<E>> Insert<E> insert(TypedBaseTable<E> typedTable) {
-        return new Insert<>(typedTable);
-    }
+    <E extends TableSchema<E>> Insert<E> insert(TypedBaseTable<E> typedTable);
 
-    public <E extends TableSchema<E>> Insert<E> insert(TableSchema<E> schema, Row<E> row) {
-        return new Insert<>(schema, row);
-    }
+    <E extends TableSchema<E>> Insert<E> insert(TableSchema<E> schema, Row<E> row);
 
-    public <E extends TableSchema<E>> Update<E> update(TableSchema<E> schema) {
-        return new Update<>(schema);
-    }
+    <E extends TableSchema<E>> Update<E> update(TableSchema<E> schema);
 
-    public <E extends TableSchema<E>> Update<E> update(TypedBaseTable<E> typedTable) {
-        return new Update<>(typedTable);
-    }
+    <E extends TableSchema<E>> Update<E> update(TypedBaseTable<E> typedTable);
 
-    public <E extends TableSchema<E>> Update<E> update(TableSchema<E> schema, Row<E> row) {
-        return new Update<>(schema, row);
-    }
+    <E extends TableSchema<E>> Update<E> update(TableSchema<E> schema, Row<E> row);
 
-    public <E extends TableSchema<E>> Delete<E> delete(TableSchema<E> schema) {
-        return new Delete<>(schema);
-    }
+    <E extends TableSchema<E>> Delete<E> delete(TableSchema<E> schema);
 
-    public <E extends TableSchema<E>> Mutate<E> mutate(TableSchema<E> schema) {
-        return new Mutate<>(schema);
-    }
+    <E extends TableSchema<E>> Mutate<E> mutate(TableSchema<E> schema);
 
-    public <E extends TableSchema<E>> Mutate<E> mutate(TypedBaseTable<E> typedTable) {
-        return new Mutate<>(typedTable.getSchema());
-    }
+    <E extends TableSchema<E>> Mutate<E> mutate(TypedBaseTable<E> typedTable);
 
-    public Commit commit(Boolean durable) {
-        return new Commit(durable);
-    }
+    Commit commit(Boolean durable);
 
-    public Abort abort() {
-        return new Abort();
-    }
+    Abort abort();
 
-    public <E extends TableSchema<E>> Select<E> select(TableSchema<E> schema) {
-        return new Select<>(schema);
-    }
+    <E extends TableSchema<E>> Select<E> select(TableSchema<E> schema);
 
-    public Comment comment(String comment) {
-        return new Comment(comment);
-    }
+    Comment comment(String comment);
 
     /*
-     * Could not use Java keyword "assert" which clashes with the ovsdb json-rpc method.
-     * using assertion instead.
+     * Could not use Java keyword "assert" which clashes with the ovsdb json-rpc method. using assertion instead.
      */
-    public Assert assertion(String lock) {
-        return new Assert(lock);
-    }
+    Assert assertion(String lock);
 }
diff --git a/library/it/src/test/java/org/opendaylight/ovsdb/integrationtest/ovsdbclient/OvsdbClientTestIT.java b/library/it/src/test/java/org/opendaylight/ovsdb/integrationtest/ovsdbclient/OvsdbClientTestIT.java
index c3627bdb7..ac84e4d89 100644
--- a/library/it/src/test/java/org/opendaylight/ovsdb/integrationtest/ovsdbclient/OvsdbClientTestIT.java
+++ b/library/it/src/test/java/org/opendaylight/ovsdb/integrationtest/ovsdbclient/OvsdbClientTestIT.java
@@ -13,7 +13,6 @@ import static org.junit.Assert.assertNotNull;
 import static org.junit.Assert.assertNull;
 import static org.junit.Assert.assertTrue;
 import static org.junit.Assert.fail;
-import static org.opendaylight.ovsdb.lib.operations.Operations.op;
 
 import com.google.common.collect.ImmutableMap;
 import com.google.common.collect.Sets;
diff --git a/library/it/src/test/java/org/opendaylight/ovsdb/integrationtest/ovsdbclient/OvsdbClientTestTypedIT.java b/library/it/src/test/java/org/opendaylight/ovsdb/integrationtest/ovsdbclient/OvsdbClientTestTypedIT.java
index af1cdc01f..350443b9a 100644
--- a/library/it/src/test/java/org/opendaylight/ovsdb/integrationtest/ovsdbclient/OvsdbClientTestTypedIT.java
+++ b/library/it/src/test/java/org/opendaylight/ovsdb/integrationtest/ovsdbclient/OvsdbClientTestTypedIT.java
@@ -11,7 +11,6 @@ import static org.junit.Assert.assertEquals;
 import static org.junit.Assert.assertFalse;
 import static org.junit.Assert.assertNotNull;
 import static org.junit.Assert.assertTrue;
-import static org.opendaylight.ovsdb.lib.operations.Operations.op;
 
 import com.google.common.collect.ImmutableMap;
 import com.google.common.util.concurrent.ListenableFuture;
diff --git a/library/it/src/test/java/org/opendaylight/ovsdb/integrationtest/schema/HardwareVTEPIT.java b/library/it/src/test/java/org/opendaylight/ovsdb/integrationtest/schema/HardwareVTEPIT.java
index 8e96c2948..4c7f3fe2e 100644
--- a/library/it/src/test/java/org/opendaylight/ovsdb/integrationtest/schema/HardwareVTEPIT.java
+++ b/library/it/src/test/java/org/opendaylight/ovsdb/integrationtest/schema/HardwareVTEPIT.java
@@ -10,7 +10,6 @@ package org.opendaylight.ovsdb.integrationtest.schema;
 import static org.junit.Assert.assertEquals;
 import static org.junit.Assert.assertNotNull;
 import static org.junit.Assume.assumeTrue;
-import static org.opendaylight.ovsdb.lib.operations.Operations.op;
 
 import java.util.Collections;
 import java.util.List;
diff --git a/library/it/src/test/java/org/opendaylight/ovsdb/integrationtest/schema/OpenVSwitchIT.java b/library/it/src/test/java/org/opendaylight/ovsdb/integrationtest/schema/OpenVSwitchIT.java
index da1c237b8..5846073eb 100644
--- a/library/it/src/test/java/org/opendaylight/ovsdb/integrationtest/schema/OpenVSwitchIT.java
+++ b/library/it/src/test/java/org/opendaylight/ovsdb/integrationtest/schema/OpenVSwitchIT.java
@@ -15,7 +15,6 @@ import static org.junit.Assert.assertNull;
 import static org.junit.Assert.assertSame;
 import static org.junit.Assert.assertTrue;
 import static org.junit.Assume.assumeTrue;
-import static org.opendaylight.ovsdb.lib.operations.Operations.op;
 
 import com.google.common.collect.ImmutableMap;
 import com.google.common.collect.ImmutableSet;
diff --git a/library/it/src/test/java/org/opendaylight/ovsdb/lib/it/LibraryIT.java b/library/it/src/test/java/org/opendaylight/ovsdb/lib/it/LibraryIT.java
index 41022ff5b..8919c98e2 100644
--- a/library/it/src/test/java/org/opendaylight/ovsdb/lib/it/LibraryIT.java
+++ b/library/it/src/test/java/org/opendaylight/ovsdb/lib/it/LibraryIT.java
@@ -11,7 +11,6 @@ import static org.junit.Assert.assertEquals;
 import static org.junit.Assert.assertFalse;
 import static org.junit.Assert.assertNotNull;
 import static org.junit.Assert.assertNull;
-import static org.opendaylight.ovsdb.lib.operations.Operations.op;
 
 import com.google.common.collect.ImmutableMap;
 import com.google.common.util.concurrent.ListenableFuture;
diff --git a/library/it/src/test/java/org/opendaylight/ovsdb/lib/it/LibraryIntegrationTestBase.java b/library/it/src/test/java/org/opendaylight/ovsdb/lib/it/LibraryIntegrationTestBase.java
index e72fee3da..99ee19662 100644
--- a/library/it/src/test/java/org/opendaylight/ovsdb/lib/it/LibraryIntegrationTestBase.java
+++ b/library/it/src/test/java/org/opendaylight/ovsdb/lib/it/LibraryIntegrationTestBase.java
@@ -41,7 +41,9 @@ import org.opendaylight.ovsdb.lib.message.TableUpdates;
 import org.opendaylight.ovsdb.lib.notation.Row;
 import org.opendaylight.ovsdb.lib.notation.UUID;
 import org.opendaylight.ovsdb.lib.notation.Version;
+import org.opendaylight.ovsdb.lib.operations.DefaultOperations;
 import org.opendaylight.ovsdb.lib.operations.OperationResult;
+import org.opendaylight.ovsdb.lib.operations.Operations;
 import org.opendaylight.ovsdb.lib.operations.TransactionBuilder;
 import org.opendaylight.ovsdb.lib.schema.DatabaseSchema;
 import org.opendaylight.ovsdb.lib.schema.GenericTableSchema;
@@ -72,6 +74,8 @@ public abstract class LibraryIntegrationTestBase extends AbstractMdsalTestBase {
     private static boolean monitorReady = false;
     public String schema;
 
+    protected final Operations op = new DefaultOperations();
+
     protected static Map<String, Map<UUID, Row>> getTableCache() {
         return tableCache;
     }
diff --git a/southbound/southbound-impl/src/main/java/org/opendaylight/ovsdb/southbound/OvsdbConnectionInstance.java b/southbound/southbound-impl/src/main/java/org/opendaylight/ovsdb/southbound/OvsdbConnectionInstance.java
index b0c5e0dc2..9942f9905 100644
--- a/southbound/southbound-impl/src/main/java/org/opendaylight/ovsdb/southbound/OvsdbConnectionInstance.java
+++ b/southbound/southbound-impl/src/main/java/org/opendaylight/ovsdb/southbound/OvsdbConnectionInstance.java
@@ -7,8 +7,6 @@
  */
 package org.opendaylight.ovsdb.southbound;
 
-import static org.opendaylight.ovsdb.lib.operations.Operations.op;
-
 import com.google.common.annotations.VisibleForTesting;
 import com.google.common.collect.ImmutableSet;
 import com.google.common.util.concurrent.ListenableFuture;
@@ -41,6 +39,7 @@ import org.opendaylight.ovsdb.lib.notation.UUID;
 import org.opendaylight.ovsdb.lib.operations.Mutate;
 import org.opendaylight.ovsdb.lib.operations.Operation;
 import org.opendaylight.ovsdb.lib.operations.OperationResult;
+import org.opendaylight.ovsdb.lib.operations.Operations;
 import org.opendaylight.ovsdb.lib.operations.TransactionBuilder;
 import org.opendaylight.ovsdb.lib.schema.DatabaseSchema;
 import org.opendaylight.ovsdb.lib.schema.GenericTableSchema;
@@ -83,6 +82,7 @@ public class OvsdbConnectionInstance {
 
     private final OvsdbClient client;
     private ConnectionInfo connectionInfo;
+    private final Operations ops;
     private final TransactionInvoker txInvoker;
     private Map<TypedDatabaseSchema, TransactInvoker> transactInvokers = null;
     private MonitorCallBack callback = null;
@@ -94,12 +94,12 @@ public class OvsdbConnectionInstance {
     private final Map<UUID, InstanceIdentifier<Node>> ports = new ConcurrentHashMap<>();
     private final Map<String, InstanceIdentifier<Node>> portInterfaces = new ConcurrentHashMap<>();
 
-    OvsdbConnectionInstance(final ConnectionInfo key, final OvsdbClient client, final TransactionInvoker txInvoker,
-                            final InstanceIdentifier<Node> iid) {
-        connectionInfo = key;
+    OvsdbConnectionInstance(final ConnectionInfo connectionInfo, final OvsdbClient client, final Operations ops,
+            final TransactionInvoker txInvoker, final InstanceIdentifier<Node> iid) {
+        this.connectionInfo = connectionInfo;
         this.client = client;
+        this.ops = ops;
         this.txInvoker = txInvoker;
-        // this.key = key;
         instanceIdentifier = iid;
     }
 
@@ -166,7 +166,7 @@ public class OvsdbConnectionInstance {
     public void registerCallbacks(final InstanceIdentifierCodec instanceIdentifierCodec) {
         if (callback == null) {
             if (initialCreateData != null) {
-                this.updateConnectionAttributes(instanceIdentifierCodec);
+                updateConnectionAttributes(instanceIdentifierCodec);
             }
 
             try {
@@ -246,7 +246,7 @@ public class OvsdbConnectionInstance {
             ovs.setExternalIds(
                 YangUtils.convertYangKeyValueListToMap(externalIds, OpenvswitchExternalIds::requireExternalIdKey,
                     OpenvswitchExternalIds::requireExternalIdValue));
-            Mutate<GenericTableSchema> mutate = op.mutate(ovs)
+            Mutate<GenericTableSchema> mutate = ops.mutate(ovs)
                 .addMutation(ovs.getExternalIdsColumn().getSchema(),
                     Mutator.INSERT, ovs.getExternalIdsColumn().getData());
             transaction.add(mutate);
@@ -256,7 +256,7 @@ public class OvsdbConnectionInstance {
             if (otherConfigs != null) {
                 ovs.setOtherConfig(YangUtils.convertYangKeyValueListToMap(otherConfigs,
                     OpenvswitchOtherConfigs::requireOtherConfigKey, OpenvswitchOtherConfigs::requireOtherConfigValue));
-                transaction.add(op.mutate(ovs).addMutation(ovs.getOtherConfigColumn().getSchema(),
+                transaction.add(ops.mutate(ovs).addMutation(ovs.getOtherConfigColumn().getSchema(),
                     Mutator.INSERT, ovs.getOtherConfigColumn().getData()));
             }
 
@@ -264,12 +264,12 @@ public class OvsdbConnectionInstance {
         }
     }
 
-    private static void stampInstanceIdentifier(final TransactionBuilder transaction,final InstanceIdentifier<Node> iid,
+    private void stampInstanceIdentifier(final TransactionBuilder transaction,final InstanceIdentifier<Node> iid,
             final InstanceIdentifierCodec instanceIdentifierCodec) {
         OpenVSwitch ovs = transaction.getTypedRowWrapper(OpenVSwitch.class);
         ovs.setExternalIds(Collections.emptyMap());
-        TransactUtils.stampInstanceIdentifier(transaction, iid, ovs.getSchema(), ovs.getExternalIdsColumn().getSchema(),
-                instanceIdentifierCodec);
+        TransactUtils.stampInstanceIdentifier(ops, transaction, iid, ovs.getSchema(),
+            ovs.getExternalIdsColumn().getSchema(), instanceIdentifierCodec);
     }
 
     private static void invoke(final TransactionBuilder txBuilder) {
@@ -428,4 +428,7 @@ public class OvsdbConnectionInstance {
         return client;
     }
 
+    public Operations ops() {
+        return ops;
+    }
 }
diff --git a/southbound/southbound-impl/src/main/java/org/opendaylight/ovsdb/southbound/OvsdbConnectionManager.java b/southbound/southbound-impl/src/main/java/org/opendaylight/ovsdb/southbound/OvsdbConnectionManager.java
index 7cbd5b2e7..a85d63ff3 100644
--- a/southbound/southbound-impl/src/main/java/org/opendaylight/ovsdb/southbound/OvsdbConnectionManager.java
+++ b/southbound/southbound-impl/src/main/java/org/opendaylight/ovsdb/southbound/OvsdbConnectionManager.java
@@ -8,7 +8,6 @@
 package org.opendaylight.ovsdb.southbound;
 
 import static java.util.Objects.requireNonNull;
-import static org.opendaylight.ovsdb.lib.operations.Operations.op;
 
 import com.google.common.annotations.VisibleForTesting;
 import com.google.common.util.concurrent.FluentFuture;
@@ -41,6 +40,7 @@ import org.opendaylight.ovsdb.lib.OvsdbConnection;
 import org.opendaylight.ovsdb.lib.OvsdbConnectionListener;
 import org.opendaylight.ovsdb.lib.operations.Operation;
 import org.opendaylight.ovsdb.lib.operations.OperationResult;
+import org.opendaylight.ovsdb.lib.operations.Operations;
 import org.opendaylight.ovsdb.lib.operations.Select;
 import org.opendaylight.ovsdb.lib.schema.GenericTableSchema;
 import org.opendaylight.ovsdb.lib.schema.typed.TypedDatabaseSchema;
@@ -76,6 +76,7 @@ public class OvsdbConnectionManager implements OvsdbConnectionListener, AutoClos
             new ConcurrentHashMap<>();
     private final ConcurrentMap<Entity, OvsdbConnectionInstance> entityConnectionMap = new ConcurrentHashMap<>();
     private final DataBroker db;
+    private final Operations ops;
     private final TransactionInvoker txInvoker;
     private final EntityOwnershipService entityOwnershipService;
     private final OvsdbDeviceEntityOwnershipListener ovsdbDeviceEntityOwnershipListener;
@@ -83,13 +84,14 @@ public class OvsdbConnectionManager implements OvsdbConnectionListener, AutoClos
     private final ReconciliationManager reconciliationManager;
     private final InstanceIdentifierCodec instanceIdentifierCodec;
 
-    public OvsdbConnectionManager(final DataBroker db,final TransactionInvoker txInvoker,
+    public OvsdbConnectionManager(final DataBroker db, final Operations ops, final TransactionInvoker txInvoker,
                                   final EntityOwnershipService entityOwnershipService,
                                   final OvsdbConnection ovsdbConnection,
                                   final InstanceIdentifierCodec instanceIdentifierCodec,
                                   final List<String> reconcileBridgeInclusionList,
                                   final List<String> reconcileBridgeExclusionList) {
         this.db = db;
+        this.ops = ops;
         this.txInvoker = txInvoker;
         this.entityOwnershipService = entityOwnershipService;
         ovsdbDeviceEntityOwnershipListener = new OvsdbDeviceEntityOwnershipListener(this, entityOwnershipService);
@@ -164,7 +166,7 @@ public class OvsdbConnectionManager implements OvsdbConnectionListener, AutoClos
             stopBridgeConfigReconciliationIfActive(ovsdbConnectionInstance.getInstanceIdentifier());
         }
 
-        ovsdbConnectionInstance = new OvsdbConnectionInstance(key, externalClient, txInvoker,
+        ovsdbConnectionInstance = new OvsdbConnectionInstance(key, externalClient, ops, txInvoker,
                 getInstanceIdentifier(key));
         ovsdbConnectionInstance.createTransactInvokers();
         return ovsdbConnectionInstance;
@@ -520,7 +522,7 @@ public class OvsdbConnectionManager implements OvsdbConnectionListener, AutoClos
 
     }
 
-    private static OpenVSwitch getOpenVswitchTableEntry(final OvsdbConnectionInstance connectionInstance) {
+    private OpenVSwitch getOpenVswitchTableEntry(final OvsdbConnectionInstance connectionInstance) {
         final TypedDatabaseSchema dbSchema;
         try {
             dbSchema = connectionInstance.getSchema(OvsdbSchemaContants.DATABASE_NAME).get();
@@ -531,12 +533,12 @@ public class OvsdbConnectionManager implements OvsdbConnectionListener, AutoClos
         }
 
         final GenericTableSchema openVSwitchSchema = dbSchema.getTableSchema(OpenVSwitch.class);
-        final Select<GenericTableSchema> selectOperation = op.select(openVSwitchSchema);
+        final Select<GenericTableSchema> selectOperation = ops.select(openVSwitchSchema);
         selectOperation.setColumns(openVSwitchSchema.getColumnList());
 
         List<Operation> operations = new ArrayList<>();
         operations.add(selectOperation);
-        operations.add(op.comment("Fetching Open_VSwitch table rows"));
+        operations.add(ops.comment("Fetching Open_VSwitch table rows"));
         final List<OperationResult> results;
         try {
             results = connectionInstance.transact(dbSchema, operations).get();
diff --git a/southbound/southbound-impl/src/main/java/org/opendaylight/ovsdb/southbound/OvsdbDataTreeChangeListener.java b/southbound/southbound-impl/src/main/java/org/opendaylight/ovsdb/southbound/OvsdbDataTreeChangeListener.java
index d25e27e9f..b93fde241 100644
--- a/southbound/southbound-impl/src/main/java/org/opendaylight/ovsdb/southbound/OvsdbDataTreeChangeListener.java
+++ b/southbound/southbound-impl/src/main/java/org/opendaylight/ovsdb/southbound/OvsdbDataTreeChangeListener.java
@@ -227,7 +227,7 @@ public final class OvsdbDataTreeChangeListener implements DataTreeChangeListener
                 changesPerConnectionInstance(changes).entrySet()) {
             OvsdbConnectionInstance connectionInstance = connectionInstanceEntry.getKey();
             Collection<DataTreeModification<Node>> clientChanges = connectionInstanceEntry.getValue();
-            connectionInstance.transact(new TransactCommandAggregator(),
+            connectionInstance.transact(new TransactCommandAggregator(connectionInstance.ops()),
                     new BridgeOperationalState(db, clientChanges), clientChanges, instanceIdentifierCodec);
         }
     }
diff --git a/southbound/southbound-impl/src/main/java/org/opendaylight/ovsdb/southbound/SouthboundProvider.java b/southbound/southbound-impl/src/main/java/org/opendaylight/ovsdb/southbound/SouthboundProvider.java
index d62cde5dc..f0cb1a006 100644
--- a/southbound/southbound-impl/src/main/java/org/opendaylight/ovsdb/southbound/SouthboundProvider.java
+++ b/southbound/southbound-impl/src/main/java/org/opendaylight/ovsdb/southbound/SouthboundProvider.java
@@ -38,6 +38,7 @@ import org.opendaylight.mdsal.eos.binding.api.EntityOwnershipService;
 import org.opendaylight.mdsal.eos.common.api.CandidateAlreadyRegisteredException;
 import org.opendaylight.mdsal.eos.common.api.EntityOwnershipStateChange;
 import org.opendaylight.ovsdb.lib.OvsdbConnection;
+import org.opendaylight.ovsdb.lib.operations.Operations;
 import org.opendaylight.ovsdb.southbound.transactions.md.TransactionInvoker;
 import org.opendaylight.ovsdb.southbound.transactions.md.TransactionInvokerImpl;
 import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.NetworkTopology;
@@ -97,9 +98,10 @@ public class SouthboundProvider implements DataTreeChangeListener<Topology>, Aut
                               final DOMSchemaService schemaService,
                               final BindingNormalizedNodeSerializer bindingNormalizedNodeSerializer,
                               final SystemReadyMonitor systemReadyMonitor,
-                              final DiagStatusService diagStatusService) {
+                              final DiagStatusService diagStatusService,
+                              final Operations ops) {
         this(dataBroker, entityOwnershipServiceDependency, ovsdbConnection, schemaService,
-            bindingNormalizedNodeSerializer, systemReadyMonitor, diagStatusService, false, List.of(), List.of());
+            bindingNormalizedNodeSerializer, systemReadyMonitor, diagStatusService, ops, false, List.of(), List.of());
     }
 
     @Activate
@@ -110,9 +112,10 @@ public class SouthboundProvider implements DataTreeChangeListener<Topology>, Aut
                               @Reference final BindingNormalizedNodeSerializer bindingNormalizedNodeSerializer,
                               @Reference final SystemReadyMonitor systemReadyMonitor,
                               @Reference final DiagStatusService diagStatusService,
+                              @Reference final Operations ops,
                               final Configuration configuration) {
         this(dataBroker, entityOwnershipServiceDependency, ovsdbConnection, schemaService,
-            bindingNormalizedNodeSerializer, systemReadyMonitor, diagStatusService,
+            bindingNormalizedNodeSerializer, systemReadyMonitor, diagStatusService, ops,
             configuration.skip$_$monitoring$_$manager$_$status(),
             getBridgesList(configuration.bridge$_$reconciliation$_$inclusion$_$list()),
             getBridgesList(configuration.bridge$_$reconciliation$_$exclusion$_$list()));
@@ -127,6 +130,7 @@ public class SouthboundProvider implements DataTreeChangeListener<Topology>, Aut
                               final BindingNormalizedNodeSerializer bindingNormalizedNodeSerializer,
                               final SystemReadyMonitor systemReadyMonitor,
                               final DiagStatusService diagStatusService,
+                              final Operations ops,
                               final boolean skipMonitoringManagerStatus,
                               final List<String> bridgeReconciliationInclusionList,
                               final List<String> bridgeReconciliationExclusionList) {
@@ -148,7 +152,7 @@ public class SouthboundProvider implements DataTreeChangeListener<Topology>, Aut
 
         ovsdbStatusProvider.reportStatus(ServiceState.STARTING, "OVSDB initialization in progress");
         txInvoker = new TransactionInvokerImpl(dataBroker);
-        cm = new OvsdbConnectionManager(dataBroker, txInvoker, entityOwnershipService, ovsdbConnection,
+        cm = new OvsdbConnectionManager(dataBroker, ops, txInvoker, entityOwnershipService, ovsdbConnection,
                 instanceIdentifierCodec, bridgeReconciliationInclusionList, bridgeReconciliationExclusionList);
         ovsdbDataTreeChangeListener = new OvsdbDataTreeChangeListener(dataBroker, cm, instanceIdentifierCodec);
         ovsdbOperGlobalListener = new OvsdbOperGlobalListener(dataBroker, cm, txInvoker);
diff --git a/southbound/southbound-impl/src/main/java/org/opendaylight/ovsdb/southbound/ovsdb/transact/AbstractTransactCommand.java b/southbound/southbound-impl/src/main/java/org/opendaylight/ovsdb/southbound/ovsdb/transact/AbstractTransactCommand.java
new file mode 100644
index 000000000..fcabaec11
--- /dev/null
+++ b/southbound/southbound-impl/src/main/java/org/opendaylight/ovsdb/southbound/ovsdb/transact/AbstractTransactCommand.java
@@ -0,0 +1,20 @@
+/*
+ * Copyright (c) 2024 PANTHEON.tech, s.r.o. and others.  All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v1.0 which accompanies this distribution,
+ * and is available at http://www.eclipse.org/legal/epl-v10.html
+ */
+package org.opendaylight.ovsdb.southbound.ovsdb.transact;
+
+import static java.util.Objects.requireNonNull;
+
+import org.opendaylight.ovsdb.lib.operations.Operations;
+
+abstract class AbstractTransactCommand implements TransactCommand {
+    final Operations op;
+
+    AbstractTransactCommand(final Operations op) {
+        this.op = requireNonNull(op);
+    }
+}
diff --git a/southbound/southbound-impl/src/main/java/org/opendaylight/ovsdb/southbound/ovsdb/transact/AutoAttachRemovedCommand.java b/southbound/southbound-impl/src/main/java/org/opendaylight/ovsdb/southbound/ovsdb/transact/AutoAttachRemovedCommand.java
index 8037fa63d..8c92101a5 100644
--- a/southbound/southbound-impl/src/main/java/org/opendaylight/ovsdb/southbound/ovsdb/transact/AutoAttachRemovedCommand.java
+++ b/southbound/southbound-impl/src/main/java/org/opendaylight/ovsdb/southbound/ovsdb/transact/AutoAttachRemovedCommand.java
@@ -7,8 +7,6 @@
  */
 package org.opendaylight.ovsdb.southbound.ovsdb.transact;
 
-import static org.opendaylight.ovsdb.lib.operations.Operations.op;
-
 import edu.umd.cs.findbugs.annotations.SuppressFBWarnings;
 import java.util.Collection;
 import java.util.Collections;
@@ -20,6 +18,7 @@ import org.opendaylight.mdsal.binding.api.ReadTransaction;
 import org.opendaylight.mdsal.common.api.LogicalDatastoreType;
 import org.opendaylight.ovsdb.lib.notation.Mutator;
 import org.opendaylight.ovsdb.lib.notation.UUID;
+import org.opendaylight.ovsdb.lib.operations.Operations;
 import org.opendaylight.ovsdb.lib.operations.TransactionBuilder;
 import org.opendaylight.ovsdb.schema.openvswitch.AutoAttach;
 import org.opendaylight.ovsdb.schema.openvswitch.Bridge;
@@ -38,9 +37,13 @@ import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
 @SuppressFBWarnings("UPM_UNCALLED_PRIVATE_METHOD")
-public class AutoAttachRemovedCommand implements TransactCommand {
+public class AutoAttachRemovedCommand extends AbstractTransactCommand {
     private static final Logger LOG = LoggerFactory.getLogger(AutoAttachRemovedCommand.class);
 
+    public AutoAttachRemovedCommand(final Operations op) {
+        super(op);
+    }
+
     @Override
     public void execute(final TransactionBuilder transaction, final BridgeOperationalState state,
             final Collection<DataTreeModification<Node>> modifications,
@@ -56,9 +59,9 @@ public class AutoAttachRemovedCommand implements TransactCommand {
                 TransactUtils.extractUpdated(events, OvsdbNodeAugmentation.class));
     }
 
-    private static void execute(final TransactionBuilder transaction, final BridgeOperationalState state,
-                                final Map<InstanceIdentifier<OvsdbNodeAugmentation>, OvsdbNodeAugmentation> original,
-                                final Map<InstanceIdentifier<OvsdbNodeAugmentation>, OvsdbNodeAugmentation> updated) {
+    private void execute(final TransactionBuilder transaction, final BridgeOperationalState state,
+            final Map<InstanceIdentifier<OvsdbNodeAugmentation>, OvsdbNodeAugmentation> original,
+            final Map<InstanceIdentifier<OvsdbNodeAugmentation>, OvsdbNodeAugmentation> updated) {
         for (var originalEntry : original.entrySet()) {
             final InstanceIdentifier<OvsdbNodeAugmentation> ovsdbNodeIid = originalEntry.getKey();
             final OvsdbNodeAugmentation ovsdbNodeAugmentation = originalEntry.getValue();
@@ -89,9 +92,8 @@ public class AutoAttachRemovedCommand implements TransactCommand {
         }
     }
 
-    private static void deleteAutoAttach(final BridgeOperationalState state, final TransactionBuilder transaction,
-            final InstanceIdentifier<OvsdbNodeAugmentation> ovsdbNodeIid,
-            final Uuid autoattachUuid) {
+    private void deleteAutoAttach(final BridgeOperationalState state, final TransactionBuilder transaction,
+            final InstanceIdentifier<OvsdbNodeAugmentation> ovsdbNodeIid, final Uuid autoattachUuid) {
 
         LOG.debug("Received request to delete Autoattach entry {}", autoattachUuid);
         final OvsdbBridgeAugmentation bridgeAugmentation = getBridge(state, ovsdbNodeIid, autoattachUuid);
diff --git a/southbound/southbound-impl/src/main/java/org/opendaylight/ovsdb/southbound/ovsdb/transact/AutoAttachUpdateCommand.java b/southbound/southbound-impl/src/main/java/org/opendaylight/ovsdb/southbound/ovsdb/transact/AutoAttachUpdateCommand.java
index 8c6833a87..cd57ae568 100644
--- a/southbound/southbound-impl/src/main/java/org/opendaylight/ovsdb/southbound/ovsdb/transact/AutoAttachUpdateCommand.java
+++ b/southbound/southbound-impl/src/main/java/org/opendaylight/ovsdb/southbound/ovsdb/transact/AutoAttachUpdateCommand.java
@@ -7,8 +7,6 @@
  */
 package org.opendaylight.ovsdb.southbound.ovsdb.transact;
 
-import static org.opendaylight.ovsdb.lib.operations.Operations.op;
-
 import edu.umd.cs.findbugs.annotations.SuppressFBWarnings;
 import java.util.Collection;
 import java.util.HashMap;
@@ -20,6 +18,7 @@ import org.opendaylight.mdsal.binding.api.ReadTransaction;
 import org.opendaylight.mdsal.common.api.LogicalDatastoreType;
 import org.opendaylight.ovsdb.lib.notation.Mutator;
 import org.opendaylight.ovsdb.lib.notation.UUID;
+import org.opendaylight.ovsdb.lib.operations.Operations;
 import org.opendaylight.ovsdb.lib.operations.TransactionBuilder;
 import org.opendaylight.ovsdb.schema.openvswitch.AutoAttach;
 import org.opendaylight.ovsdb.schema.openvswitch.Bridge;
@@ -47,9 +46,13 @@ import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
 @SuppressFBWarnings("UPM_UNCALLED_PRIVATE_METHOD")
-public class AutoAttachUpdateCommand implements TransactCommand {
+public class AutoAttachUpdateCommand extends AbstractTransactCommand {
     private static final Logger LOG = LoggerFactory.getLogger(AutoAttachUpdateCommand.class);
 
+    public AutoAttachUpdateCommand(final Operations op) {
+        super(op);
+    }
+
     @Override
     public void execute(final TransactionBuilder transaction, final BridgeOperationalState state,
             final DataChangeEvent events, final InstanceIdentifierCodec instanceIdentifierCodec) {
@@ -60,19 +63,20 @@ public class AutoAttachUpdateCommand implements TransactCommand {
     public void execute(final TransactionBuilder transaction, final BridgeOperationalState state,
             final Collection<DataTreeModification<Node>> modifications,
             final InstanceIdentifierCodec instanceIdentifierCodec) {
-        execute(transaction, state, TransactUtils.extractCreatedOrUpdated(modifications, OvsdbNodeAugmentation.class));
+        execute(transaction, state,
+            TransactUtils.extractCreatedOrUpdated(modifications, OvsdbNodeAugmentation.class));
     }
 
-    private static void execute(final TransactionBuilder transaction, final BridgeOperationalState state,
+    private void execute(final TransactionBuilder transaction,
+            final BridgeOperationalState state,
             final Map<InstanceIdentifier<OvsdbNodeAugmentation>, OvsdbNodeAugmentation> createdOrUpdated) {
         for (var ovsdbNodeEntry : createdOrUpdated.entrySet()) {
             updateAutoAttach(transaction, state, ovsdbNodeEntry.getKey(), ovsdbNodeEntry.getValue());
         }
     }
 
-    private static void updateAutoAttach(final TransactionBuilder transaction, final BridgeOperationalState state,
-            final InstanceIdentifier<OvsdbNodeAugmentation> iid,
-            final OvsdbNodeAugmentation ovsdbNode) {
+    private void updateAutoAttach(final TransactionBuilder transaction, final BridgeOperationalState state,
+            final InstanceIdentifier<OvsdbNodeAugmentation> iid, final OvsdbNodeAugmentation ovsdbNode) {
 
         if (!state.getBridgeNode(iid).isPresent()) {
             return;
diff --git a/southbound/southbound-impl/src/main/java/org/opendaylight/ovsdb/southbound/ovsdb/transact/BridgeRemovedCommand.java b/southbound/southbound-impl/src/main/java/org/opendaylight/ovsdb/southbound/ovsdb/transact/BridgeRemovedCommand.java
index 77c215e61..415d94f82 100644
--- a/southbound/southbound-impl/src/main/java/org/opendaylight/ovsdb/southbound/ovsdb/transact/BridgeRemovedCommand.java
+++ b/southbound/southbound-impl/src/main/java/org/opendaylight/ovsdb/southbound/ovsdb/transact/BridgeRemovedCommand.java
@@ -7,8 +7,6 @@
  */
 package org.opendaylight.ovsdb.southbound.ovsdb.transact;
 
-import static org.opendaylight.ovsdb.lib.operations.Operations.op;
-
 import java.util.Collection;
 import java.util.Collections;
 import java.util.Map;
@@ -17,6 +15,7 @@ import java.util.Set;
 import org.opendaylight.mdsal.binding.api.DataTreeModification;
 import org.opendaylight.ovsdb.lib.notation.Mutator;
 import org.opendaylight.ovsdb.lib.notation.UUID;
+import org.opendaylight.ovsdb.lib.operations.Operations;
 import org.opendaylight.ovsdb.lib.operations.TransactionBuilder;
 import org.opendaylight.ovsdb.schema.openvswitch.Bridge;
 import org.opendaylight.ovsdb.schema.openvswitch.OpenVSwitch;
@@ -27,9 +26,13 @@ import org.opendaylight.yangtools.yang.binding.InstanceIdentifier;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
-public class BridgeRemovedCommand implements TransactCommand {
+public class BridgeRemovedCommand extends AbstractTransactCommand {
     private static final Logger LOG = LoggerFactory.getLogger(BridgeRemovedCommand.class);
 
+    public BridgeRemovedCommand(final Operations op) {
+        super(op);
+    }
+
     @Override
     public void execute(final TransactionBuilder transaction, final BridgeOperationalState state,
             final DataChangeEvent events, final InstanceIdentifierCodec instanceIdentifierCodec) {
@@ -45,7 +48,7 @@ public class BridgeRemovedCommand implements TransactCommand {
                 TransactUtils.extractOriginal(modifications, OvsdbBridgeAugmentation.class));
     }
 
-    private static void execute(final TransactionBuilder transaction, final BridgeOperationalState state,
+    private void execute(final TransactionBuilder transaction, final BridgeOperationalState state,
             final Set<InstanceIdentifier<OvsdbBridgeAugmentation>> removed,
             final Map<InstanceIdentifier<OvsdbBridgeAugmentation>, OvsdbBridgeAugmentation> originals) {
         for (InstanceIdentifier<OvsdbBridgeAugmentation> ovsdbManagedNodeIid: removed) {
@@ -71,7 +74,6 @@ public class BridgeRemovedCommand implements TransactCommand {
                 LOG.warn("Unable to delete bridge {} because it was not found in the operational store, "
                         + "and thus we cannot retrieve its UUID", ovsdbManagedNodeIid);
             }
-
         }
     }
 }
diff --git a/southbound/southbound-impl/src/main/java/org/opendaylight/ovsdb/southbound/ovsdb/transact/BridgeUpdateCommand.java b/southbound/southbound-impl/src/main/java/org/opendaylight/ovsdb/southbound/ovsdb/transact/BridgeUpdateCommand.java
index 478c0e15b..4de708787 100644
--- a/southbound/southbound-impl/src/main/java/org/opendaylight/ovsdb/southbound/ovsdb/transact/BridgeUpdateCommand.java
+++ b/southbound/southbound-impl/src/main/java/org/opendaylight/ovsdb/southbound/ovsdb/transact/BridgeUpdateCommand.java
@@ -7,8 +7,6 @@
  */
 package org.opendaylight.ovsdb.southbound.ovsdb.transact;
 
-import static org.opendaylight.ovsdb.lib.operations.Operations.op;
-
 import edu.umd.cs.findbugs.annotations.SuppressFBWarnings;
 import java.util.Collection;
 import java.util.Collections;
@@ -22,6 +20,7 @@ import org.opendaylight.mdsal.binding.api.DataTreeModification;
 import org.opendaylight.ovsdb.lib.notation.UUID;
 import org.opendaylight.ovsdb.lib.operations.Insert;
 import org.opendaylight.ovsdb.lib.operations.Mutate;
+import org.opendaylight.ovsdb.lib.operations.Operations;
 import org.opendaylight.ovsdb.lib.operations.TransactionBuilder;
 import org.opendaylight.ovsdb.lib.schema.GenericTableSchema;
 import org.opendaylight.ovsdb.schema.openvswitch.Bridge;
@@ -40,9 +39,13 @@ import org.opendaylight.yangtools.yang.binding.InstanceIdentifier;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
-public class BridgeUpdateCommand implements TransactCommand {
+public class BridgeUpdateCommand extends AbstractTransactCommand {
     private static final Logger LOG = LoggerFactory.getLogger(BridgeUpdateCommand.class);
 
+    public BridgeUpdateCommand(final Operations op) {
+        super(op);
+    }
+
     @Override
     public void execute(final TransactionBuilder transaction, final BridgeOperationalState state,
             final DataChangeEvent events, final InstanceIdentifierCodec instanceIdentifierCodec) {
@@ -54,12 +57,11 @@ public class BridgeUpdateCommand implements TransactCommand {
     public void execute(final TransactionBuilder transaction, final BridgeOperationalState state,
             final Collection<DataTreeModification<Node>> modifications,
             final InstanceIdentifierCodec instanceIdentifierCodec) {
-        execute(transaction, state,
-                TransactUtils.extractCreatedOrUpdated(modifications, OvsdbBridgeAugmentation.class),
+        execute(transaction, state, TransactUtils.extractCreatedOrUpdated(modifications, OvsdbBridgeAugmentation.class),
                 instanceIdentifierCodec);
     }
 
-    private static void execute(final TransactionBuilder transaction, final BridgeOperationalState state,
+    private void execute(final TransactionBuilder transaction, final BridgeOperationalState state,
             final Map<InstanceIdentifier<OvsdbBridgeAugmentation>, OvsdbBridgeAugmentation> createdOrUpdated,
             final InstanceIdentifierCodec instanceIdentifierCodec) {
         for (Entry<InstanceIdentifier<OvsdbBridgeAugmentation>, OvsdbBridgeAugmentation> ovsdbManagedNodeEntry :
@@ -69,7 +71,7 @@ public class BridgeUpdateCommand implements TransactCommand {
         }
     }
 
-    private static void updateBridge(final TransactionBuilder transaction, final BridgeOperationalState state,
+    private void updateBridge(final TransactionBuilder transaction, final BridgeOperationalState state,
             final InstanceIdentifier<OvsdbBridgeAugmentation> iid, final OvsdbBridgeAugmentation ovsdbManagedNode,
             final InstanceIdentifierCodec instanceIdentifierCodec) {
         LOG.debug("Received request to create ovsdb bridge name: {} uuid: {}",
@@ -154,10 +156,10 @@ public class BridgeUpdateCommand implements TransactCommand {
         }
     }
 
-    private static void setPort(final TransactionBuilder transaction, final Bridge bridge,
+    private void setPort(final TransactionBuilder transaction, final Bridge bridge,
             final OvsdbBridgeAugmentation ovsdbManagedNode) {
 
-        Insert<GenericTableSchema> interfaceInsert = setInterface(transaction,ovsdbManagedNode);
+        Insert<GenericTableSchema> interfaceInsert = setInterface(transaction, ovsdbManagedNode);
         // Port part
         String portNamedUuid = "Port_" + SouthboundMapper.getRandomUuid();
         Port port = transaction.getTypedRowWrapper(Port.class);
@@ -167,7 +169,7 @@ public class BridgeUpdateCommand implements TransactCommand {
         bridge.setPorts(Set.of(new UUID(portNamedUuid)));
     }
 
-    private static Insert<GenericTableSchema> setInterface(final TransactionBuilder transaction,
+    private Insert<GenericTableSchema> setInterface(final TransactionBuilder transaction,
             final OvsdbBridgeAugmentation ovsdbManagedNode) {
         // Interface part
         String interfaceNamedUuid = "Interface_" + SouthboundMapper.getRandomUuid();
@@ -179,8 +181,7 @@ public class BridgeUpdateCommand implements TransactCommand {
         return result;
     }
 
-    private static void setFailMode(final Bridge bridge,
-            final OvsdbBridgeAugmentation ovsdbManagedNode) {
+    private static void setFailMode(final Bridge bridge, final OvsdbBridgeAugmentation ovsdbManagedNode) {
         if (ovsdbManagedNode.getFailMode() != null
                 && SouthboundConstants.OVSDB_FAIL_MODE_MAP.get(ovsdbManagedNode.getFailMode()) != null) {
             bridge.setFailMode(Set.of(
@@ -188,13 +189,13 @@ public class BridgeUpdateCommand implements TransactCommand {
         }
     }
 
-    private static void stampInstanceIdentifier(final TransactionBuilder transaction,
+    private void stampInstanceIdentifier(final TransactionBuilder transaction,
             final InstanceIdentifier<Node> iid, final String bridgeName,
             final InstanceIdentifierCodec instanceIdentifierCodec) {
         Bridge bridge = transaction.getTypedRowWrapper(Bridge.class);
         bridge.setName(bridgeName);
         bridge.setExternalIds(Collections.emptyMap());
-        Mutate mutate = TransactUtils.stampInstanceIdentifierMutation(transaction, iid, bridge.getSchema(),
+        Mutate mutate = TransactUtils.stampInstanceIdentifierMutation(op, transaction, iid, bridge.getSchema(),
                 bridge.getExternalIdsColumn().getSchema(), instanceIdentifierCodec);
         transaction.add(mutate
                 .where(bridge.getNameColumn().getSchema().opEqual(bridgeName))
diff --git a/southbound/southbound-impl/src/main/java/org/opendaylight/ovsdb/southbound/ovsdb/transact/ControllerRemovedCommand.java b/southbound/southbound-impl/src/main/java/org/opendaylight/ovsdb/southbound/ovsdb/transact/ControllerRemovedCommand.java
index 8347f91c7..d01987435 100644
--- a/southbound/southbound-impl/src/main/java/org/opendaylight/ovsdb/southbound/ovsdb/transact/ControllerRemovedCommand.java
+++ b/southbound/southbound-impl/src/main/java/org/opendaylight/ovsdb/southbound/ovsdb/transact/ControllerRemovedCommand.java
@@ -7,8 +7,6 @@
  */
 package org.opendaylight.ovsdb.southbound.ovsdb.transact;
 
-import static org.opendaylight.ovsdb.lib.operations.Operations.op;
-
 import java.util.Collection;
 import java.util.Collections;
 import java.util.Map;
@@ -17,6 +15,7 @@ import java.util.Set;
 import org.opendaylight.mdsal.binding.api.DataTreeModification;
 import org.opendaylight.ovsdb.lib.notation.Mutator;
 import org.opendaylight.ovsdb.lib.notation.UUID;
+import org.opendaylight.ovsdb.lib.operations.Operations;
 import org.opendaylight.ovsdb.lib.operations.TransactionBuilder;
 import org.opendaylight.ovsdb.schema.openvswitch.Bridge;
 import org.opendaylight.ovsdb.southbound.InstanceIdentifierCodec;
@@ -27,9 +26,13 @@ import org.opendaylight.yangtools.yang.binding.InstanceIdentifier;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
-public class ControllerRemovedCommand implements TransactCommand {
+public class ControllerRemovedCommand extends AbstractTransactCommand {
     private static final Logger LOG = LoggerFactory.getLogger(ControllerRemovedCommand.class);
 
+    public ControllerRemovedCommand(final Operations op) {
+        super(op);
+    }
+
     @Override
     public void execute(final TransactionBuilder transaction, final BridgeOperationalState state,
             final DataChangeEvent events, final InstanceIdentifierCodec instanceIdentifierCodec) {
@@ -45,10 +48,9 @@ public class ControllerRemovedCommand implements TransactCommand {
                 TransactUtils.extractCreatedOrUpdatedOrRemoved(modifications, OvsdbBridgeAugmentation.class));
     }
 
-    private static void execute(final TransactionBuilder transaction, final BridgeOperationalState state,
-                         final Set<InstanceIdentifier<ControllerEntry>> removedControllers,
-                         final Map<InstanceIdentifier<OvsdbBridgeAugmentation>, OvsdbBridgeAugmentation>
-                                 modifiedBridges) {
+    private void execute(final TransactionBuilder transaction, final BridgeOperationalState state,
+            final Set<InstanceIdentifier<ControllerEntry>> removedControllers,
+            final Map<InstanceIdentifier<OvsdbBridgeAugmentation>, OvsdbBridgeAugmentation> modifiedBridges) {
         for (InstanceIdentifier<ControllerEntry> controllerIid : removedControllers) {
             LOG.debug("Removing Registered...ODL controller : {} ", controllerIid);
             InstanceIdentifier<OvsdbBridgeAugmentation> bridgeIid =
diff --git a/southbound/southbound-impl/src/main/java/org/opendaylight/ovsdb/southbound/ovsdb/transact/ControllerUpdateCommand.java b/southbound/southbound-impl/src/main/java/org/opendaylight/ovsdb/southbound/ovsdb/transact/ControllerUpdateCommand.java
index 98e62de3c..17bff0ccd 100644
--- a/southbound/southbound-impl/src/main/java/org/opendaylight/ovsdb/southbound/ovsdb/transact/ControllerUpdateCommand.java
+++ b/southbound/southbound-impl/src/main/java/org/opendaylight/ovsdb/southbound/ovsdb/transact/ControllerUpdateCommand.java
@@ -7,8 +7,6 @@
  */
 package org.opendaylight.ovsdb.southbound.ovsdb.transact;
 
-import static org.opendaylight.ovsdb.lib.operations.Operations.op;
-
 import java.util.Collection;
 import java.util.Collections;
 import java.util.Map;
@@ -17,6 +15,7 @@ import java.util.Optional;
 import org.opendaylight.mdsal.binding.api.DataTreeModification;
 import org.opendaylight.ovsdb.lib.notation.Mutator;
 import org.opendaylight.ovsdb.lib.notation.UUID;
+import org.opendaylight.ovsdb.lib.operations.Operations;
 import org.opendaylight.ovsdb.lib.operations.TransactionBuilder;
 import org.opendaylight.ovsdb.schema.openvswitch.Bridge;
 import org.opendaylight.ovsdb.schema.openvswitch.Controller;
@@ -29,9 +28,13 @@ import org.opendaylight.yangtools.yang.binding.InstanceIdentifier;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
-public class ControllerUpdateCommand implements TransactCommand {
+public class ControllerUpdateCommand extends AbstractTransactCommand {
     private static final Logger LOG = LoggerFactory.getLogger(ControllerUpdateCommand.class);
 
+    public ControllerUpdateCommand(final Operations op) {
+        super(op);
+    }
+
     @Override
     public void execute(final TransactionBuilder transaction, final BridgeOperationalState state,
             final DataChangeEvent events, final InstanceIdentifierCodec instanceIdentifierCodec) {
@@ -47,7 +50,7 @@ public class ControllerUpdateCommand implements TransactCommand {
                 TransactUtils.extractCreatedOrUpdated(modifications, OvsdbBridgeAugmentation.class));
     }
 
-    private static void execute(final TransactionBuilder transaction, final BridgeOperationalState state,
+    private void execute(final TransactionBuilder transaction, final BridgeOperationalState state,
             final Map<InstanceIdentifier<ControllerEntry>, ControllerEntry> controllers,
             final Map<InstanceIdentifier<OvsdbBridgeAugmentation>, OvsdbBridgeAugmentation> bridges) {
         LOG.info("Register ODL controllers : {}  bridges detail : {}",
@@ -94,6 +97,5 @@ public class ControllerUpdateCommand implements TransactCommand {
             }
         }
         LOG.trace("Executed transaction: {}", transaction.build());
-
     }
 }
diff --git a/southbound/southbound-impl/src/main/java/org/opendaylight/ovsdb/southbound/ovsdb/transact/OpenVSwitchBridgeAddCommand.java b/southbound/southbound-impl/src/main/java/org/opendaylight/ovsdb/southbound/ovsdb/transact/OpenVSwitchBridgeAddCommand.java
index 1c22c33d6..996b936d2 100644
--- a/southbound/southbound-impl/src/main/java/org/opendaylight/ovsdb/southbound/ovsdb/transact/OpenVSwitchBridgeAddCommand.java
+++ b/southbound/southbound-impl/src/main/java/org/opendaylight/ovsdb/southbound/ovsdb/transact/OpenVSwitchBridgeAddCommand.java
@@ -7,21 +7,23 @@
  */
 package org.opendaylight.ovsdb.southbound.ovsdb.transact;
 
-import static org.opendaylight.ovsdb.lib.operations.Operations.op;
-
 import java.util.Collection;
 import java.util.Collections;
 import java.util.List;
 import org.opendaylight.mdsal.binding.api.DataTreeModification;
 import org.opendaylight.ovsdb.lib.notation.Mutator;
 import org.opendaylight.ovsdb.lib.operations.Insert;
+import org.opendaylight.ovsdb.lib.operations.Operations;
 import org.opendaylight.ovsdb.lib.operations.TransactionBuilder;
 import org.opendaylight.ovsdb.schema.openvswitch.Bridge;
 import org.opendaylight.ovsdb.schema.openvswitch.OpenVSwitch;
 import org.opendaylight.ovsdb.southbound.InstanceIdentifierCodec;
 import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.network.topology.topology.Node;
 
-public class OpenVSwitchBridgeAddCommand implements TransactCommand {
+public class OpenVSwitchBridgeAddCommand extends AbstractTransactCommand {
+    public OpenVSwitchBridgeAddCommand(final Operations op) {
+        super(op);
+    }
 
     @Override
     public void execute(final TransactionBuilder transaction, final BridgeOperationalState state,
@@ -36,7 +38,7 @@ public class OpenVSwitchBridgeAddCommand implements TransactCommand {
         execute(transaction);
     }
 
-    private static void execute(final TransactionBuilder transaction) {
+    private void execute(final TransactionBuilder transaction) {
         Bridge bridge = transaction.getTypedRowWrapper(Bridge.class);
         List<Insert> inserts = TransactUtils.extractInsert(transaction, bridge.getSchema());
         for (Insert insert : inserts) {
diff --git a/southbound/southbound-impl/src/main/java/org/opendaylight/ovsdb/southbound/ovsdb/transact/OvsdbNodeUpdateCommand.java b/southbound/southbound-impl/src/main/java/org/opendaylight/ovsdb/southbound/ovsdb/transact/OvsdbNodeUpdateCommand.java
index e47c3e715..10985ce5a 100644
--- a/southbound/southbound-impl/src/main/java/org/opendaylight/ovsdb/southbound/ovsdb/transact/OvsdbNodeUpdateCommand.java
+++ b/southbound/southbound-impl/src/main/java/org/opendaylight/ovsdb/southbound/ovsdb/transact/OvsdbNodeUpdateCommand.java
@@ -7,8 +7,6 @@
  */
 package org.opendaylight.ovsdb.southbound.ovsdb.transact;
 
-import static org.opendaylight.ovsdb.lib.operations.Operations.op;
-
 import edu.umd.cs.findbugs.annotations.SuppressFBWarnings;
 import java.util.Collection;
 import java.util.Collections;
@@ -17,6 +15,7 @@ import java.util.Map.Entry;
 import org.opendaylight.mdsal.binding.api.DataTreeModification;
 import org.opendaylight.ovsdb.lib.notation.Mutator;
 import org.opendaylight.ovsdb.lib.operations.Mutate;
+import org.opendaylight.ovsdb.lib.operations.Operations;
 import org.opendaylight.ovsdb.lib.operations.TransactionBuilder;
 import org.opendaylight.ovsdb.lib.schema.GenericTableSchema;
 import org.opendaylight.ovsdb.schema.openvswitch.OpenVSwitch;
@@ -31,9 +30,13 @@ import org.opendaylight.yangtools.yang.binding.InstanceIdentifier;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
-public class OvsdbNodeUpdateCommand implements TransactCommand {
+public class OvsdbNodeUpdateCommand extends AbstractTransactCommand {
     private static final Logger LOG = LoggerFactory.getLogger(OvsdbNodeUpdateCommand.class);
 
+    public OvsdbNodeUpdateCommand(final Operations op) {
+        super(op);
+    }
+
     @Override
     public void execute(final TransactionBuilder transaction, final BridgeOperationalState state,
             final DataChangeEvent events, final InstanceIdentifierCodec instanceIdentifierCodec) {
@@ -50,7 +53,7 @@ public class OvsdbNodeUpdateCommand implements TransactCommand {
     }
 
     @SuppressFBWarnings("DCN_NULLPOINTER_EXCEPTION")
-    private static void execute(final TransactionBuilder transaction,
+    private void execute(final TransactionBuilder transaction,
             final Map<InstanceIdentifier<OvsdbNodeAugmentation>, OvsdbNodeAugmentation> updated,
             final InstanceIdentifierCodec instanceIdentifierCodec) {
         for (Entry<InstanceIdentifier<OvsdbNodeAugmentation>, OvsdbNodeAugmentation> ovsdbNodeEntry:
@@ -82,8 +85,6 @@ public class OvsdbNodeUpdateCommand implements TransactCommand {
                 LOG.warn("Incomplete OVSDB Node external IDs", e);
             }
 
-
-
             Map<OpenvswitchOtherConfigsKey, OpenvswitchOtherConfigs> otherConfigs =
                     ovsdbNode.getOpenvswitchOtherConfigs();
             if (otherConfigs != null) {
@@ -100,11 +101,11 @@ public class OvsdbNodeUpdateCommand implements TransactCommand {
         }
     }
 
-    private static void stampInstanceIdentifier(final TransactionBuilder transaction,
-            final InstanceIdentifier<Node> iid, final InstanceIdentifierCodec instanceIdentifierCodec) {
+    private void stampInstanceIdentifier(final TransactionBuilder transaction, final InstanceIdentifier<Node> iid,
+            final InstanceIdentifierCodec instanceIdentifierCodec) {
         OpenVSwitch ovs = transaction.getTypedRowWrapper(OpenVSwitch.class);
         ovs.setExternalIds(Collections.emptyMap());
-        TransactUtils.stampInstanceIdentifier(transaction, iid, ovs.getSchema(),
+        TransactUtils.stampInstanceIdentifier(op, transaction, iid, ovs.getSchema(),
                 ovs.getExternalIdsColumn().getSchema(), instanceIdentifierCodec);
     }
 }
diff --git a/southbound/southbound-impl/src/main/java/org/opendaylight/ovsdb/southbound/ovsdb/transact/ProtocolRemovedCommand.java b/southbound/southbound-impl/src/main/java/org/opendaylight/ovsdb/southbound/ovsdb/transact/ProtocolRemovedCommand.java
index 946af1b45..90c6c56d0 100644
--- a/southbound/southbound-impl/src/main/java/org/opendaylight/ovsdb/southbound/ovsdb/transact/ProtocolRemovedCommand.java
+++ b/southbound/southbound-impl/src/main/java/org/opendaylight/ovsdb/southbound/ovsdb/transact/ProtocolRemovedCommand.java
@@ -7,7 +7,6 @@
  */
 package org.opendaylight.ovsdb.southbound.ovsdb.transact;
 
-import static org.opendaylight.ovsdb.lib.operations.Operations.op;
 import static org.opendaylight.ovsdb.southbound.SouthboundUtil.schemaMismatchLog;
 
 import java.util.Collection;
@@ -18,6 +17,7 @@ import java.util.Set;
 import org.opendaylight.mdsal.binding.api.DataTreeModification;
 import org.opendaylight.ovsdb.lib.error.SchemaVersionMismatchException;
 import org.opendaylight.ovsdb.lib.notation.Mutator;
+import org.opendaylight.ovsdb.lib.operations.Operations;
 import org.opendaylight.ovsdb.lib.operations.TransactionBuilder;
 import org.opendaylight.ovsdb.schema.openvswitch.Bridge;
 import org.opendaylight.ovsdb.southbound.InstanceIdentifierCodec;
@@ -29,10 +29,13 @@ import org.opendaylight.yangtools.yang.binding.InstanceIdentifier;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
-public class ProtocolRemovedCommand implements TransactCommand {
-
+public class ProtocolRemovedCommand extends AbstractTransactCommand {
     private static final Logger LOG = LoggerFactory.getLogger(ProtocolRemovedCommand.class);
 
+    public ProtocolRemovedCommand(final Operations op) {
+        super(op);
+    }
+
     @Override
     public void execute(final TransactionBuilder transaction, final BridgeOperationalState state,
             final DataChangeEvent events, final InstanceIdentifierCodec instanceIdentifierCodec) {
@@ -48,8 +51,8 @@ public class ProtocolRemovedCommand implements TransactCommand {
                 TransactUtils.extractCreatedOrUpdatedOrRemoved(modifications, OvsdbBridgeAugmentation.class));
     }
 
-    private static void execute(final TransactionBuilder transaction, final BridgeOperationalState state,
-            final Set<InstanceIdentifier<ProtocolEntry>> removed,
+    private void execute(final TransactionBuilder transaction,
+            final BridgeOperationalState state, final Set<InstanceIdentifier<ProtocolEntry>> removed,
             final Map<InstanceIdentifier<OvsdbBridgeAugmentation>, OvsdbBridgeAugmentation> updatedBridges) {
         for (InstanceIdentifier<ProtocolEntry> protocolIid : removed) {
             InstanceIdentifier<OvsdbBridgeAugmentation> bridgeIid =
@@ -76,7 +79,5 @@ public class ProtocolRemovedCommand implements TransactCommand {
                 }
             }
         }
-
     }
-
 }
diff --git a/southbound/southbound-impl/src/main/java/org/opendaylight/ovsdb/southbound/ovsdb/transact/ProtocolUpdateCommand.java b/southbound/southbound-impl/src/main/java/org/opendaylight/ovsdb/southbound/ovsdb/transact/ProtocolUpdateCommand.java
index 16451e954..b0bf511d7 100644
--- a/southbound/southbound-impl/src/main/java/org/opendaylight/ovsdb/southbound/ovsdb/transact/ProtocolUpdateCommand.java
+++ b/southbound/southbound-impl/src/main/java/org/opendaylight/ovsdb/southbound/ovsdb/transact/ProtocolUpdateCommand.java
@@ -5,10 +5,8 @@
  * terms of the Eclipse Public License v1.0 which accompanies this distribution,
  * and is available at http://www.eclipse.org/legal/epl-v10.html
  */
-
 package org.opendaylight.ovsdb.southbound.ovsdb.transact;
 
-import static org.opendaylight.ovsdb.lib.operations.Operations.op;
 import static org.opendaylight.ovsdb.southbound.SouthboundUtil.schemaMismatchLog;
 
 import java.util.Collection;
@@ -19,6 +17,7 @@ import java.util.Optional;
 import org.opendaylight.mdsal.binding.api.DataTreeModification;
 import org.opendaylight.ovsdb.lib.error.SchemaVersionMismatchException;
 import org.opendaylight.ovsdb.lib.notation.Mutator;
+import org.opendaylight.ovsdb.lib.operations.Operations;
 import org.opendaylight.ovsdb.lib.operations.TransactionBuilder;
 import org.opendaylight.ovsdb.schema.openvswitch.Bridge;
 import org.opendaylight.ovsdb.southbound.InstanceIdentifierCodec;
@@ -30,10 +29,13 @@ import org.opendaylight.yangtools.yang.binding.InstanceIdentifier;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
-public class ProtocolUpdateCommand implements TransactCommand {
-
+public class ProtocolUpdateCommand extends AbstractTransactCommand {
     private static final Logger LOG = LoggerFactory.getLogger(ProtocolUpdateCommand.class);
 
+    public ProtocolUpdateCommand(final Operations op) {
+        super(op);
+    }
+
     @Override
     public void execute(final TransactionBuilder transaction, final BridgeOperationalState state,
             final DataChangeEvent events, final InstanceIdentifierCodec instanceIdentifierCodec) {
@@ -49,7 +51,7 @@ public class ProtocolUpdateCommand implements TransactCommand {
                 TransactUtils.extractCreatedOrUpdated(modifications, OvsdbBridgeAugmentation.class));
     }
 
-    private static void execute(final TransactionBuilder transaction, final BridgeOperationalState state,
+    private void execute(final TransactionBuilder transaction, final BridgeOperationalState state,
             final Map<InstanceIdentifier<ProtocolEntry>, ProtocolEntry> protocols,
             final Map<InstanceIdentifier<OvsdbBridgeAugmentation>, OvsdbBridgeAugmentation> bridges) {
         for (Entry<InstanceIdentifier<ProtocolEntry>, ProtocolEntry> entry: protocols.entrySet()) {
diff --git a/southbound/southbound-impl/src/main/java/org/opendaylight/ovsdb/southbound/ovsdb/transact/QosRemovedCommand.java b/southbound/southbound-impl/src/main/java/org/opendaylight/ovsdb/southbound/ovsdb/transact/QosRemovedCommand.java
index 1191ee90b..3c9c02d3a 100644
--- a/southbound/southbound-impl/src/main/java/org/opendaylight/ovsdb/southbound/ovsdb/transact/QosRemovedCommand.java
+++ b/southbound/southbound-impl/src/main/java/org/opendaylight/ovsdb/southbound/ovsdb/transact/QosRemovedCommand.java
@@ -7,13 +7,12 @@
  */
 package org.opendaylight.ovsdb.southbound.ovsdb.transact;
 
-import static org.opendaylight.ovsdb.lib.operations.Operations.op;
-
 import java.util.Collection;
 import java.util.Map;
 import java.util.NoSuchElementException;
 import org.opendaylight.mdsal.binding.api.DataTreeModification;
 import org.opendaylight.ovsdb.lib.notation.UUID;
+import org.opendaylight.ovsdb.lib.operations.Operations;
 import org.opendaylight.ovsdb.lib.operations.TransactionBuilder;
 import org.opendaylight.ovsdb.schema.openvswitch.Qos;
 import org.opendaylight.ovsdb.southbound.InstanceIdentifierCodec;
@@ -26,9 +25,13 @@ import org.opendaylight.yangtools.yang.binding.InstanceIdentifier;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
-public class QosRemovedCommand implements TransactCommand {
+public class QosRemovedCommand extends AbstractTransactCommand {
     private static final Logger LOG = LoggerFactory.getLogger(QosRemovedCommand.class);
 
+    public QosRemovedCommand(final Operations op) {
+        super(op);
+    }
+
     @Override
     public void execute(final TransactionBuilder transaction, final BridgeOperationalState state,
             final DataChangeEvent events, final InstanceIdentifierCodec instanceIdentifierCodec) {
@@ -46,11 +49,10 @@ public class QosRemovedCommand implements TransactCommand {
                 TransactUtils.extractUpdated(modifications, OvsdbNodeAugmentation.class));
     }
 
-    private static void execute(final TransactionBuilder transaction, final BridgeOperationalState state,
+    private void execute(final TransactionBuilder transaction, final BridgeOperationalState state,
             final Map<InstanceIdentifier<OvsdbNodeAugmentation>, OvsdbNodeAugmentation> originals,
             final Map<InstanceIdentifier<OvsdbNodeAugmentation>, OvsdbNodeAugmentation> updated) {
-        for (Map.Entry<InstanceIdentifier<OvsdbNodeAugmentation>, OvsdbNodeAugmentation> originalEntry : originals
-                .entrySet()) {
+        for (var originalEntry : originals.entrySet()) {
             InstanceIdentifier<OvsdbNodeAugmentation> ovsdbNodeIid = originalEntry.getKey();
             OvsdbNodeAugmentation original = originalEntry.getValue();
             OvsdbNodeAugmentation update = updated.get(ovsdbNodeIid);
diff --git a/southbound/southbound-impl/src/main/java/org/opendaylight/ovsdb/southbound/ovsdb/transact/QosUpdateCommand.java b/southbound/southbound-impl/src/main/java/org/opendaylight/ovsdb/southbound/ovsdb/transact/QosUpdateCommand.java
index bd4ffadbf..a9b4bda13 100644
--- a/southbound/southbound-impl/src/main/java/org/opendaylight/ovsdb/southbound/ovsdb/transact/QosUpdateCommand.java
+++ b/southbound/southbound-impl/src/main/java/org/opendaylight/ovsdb/southbound/ovsdb/transact/QosUpdateCommand.java
@@ -8,7 +8,6 @@
 package org.opendaylight.ovsdb.southbound.ovsdb.transact;
 
 import static java.nio.charset.StandardCharsets.UTF_8;
-import static org.opendaylight.ovsdb.lib.operations.Operations.op;
 
 import edu.umd.cs.findbugs.annotations.SuppressFBWarnings;
 import java.util.Collection;
@@ -17,6 +16,7 @@ import java.util.Map;
 import java.util.Map.Entry;
 import org.opendaylight.mdsal.binding.api.DataTreeModification;
 import org.opendaylight.ovsdb.lib.notation.UUID;
+import org.opendaylight.ovsdb.lib.operations.Operations;
 import org.opendaylight.ovsdb.lib.operations.TransactionBuilder;
 import org.opendaylight.ovsdb.schema.openvswitch.Qos;
 import org.opendaylight.ovsdb.southbound.InstanceIdentifierCodec;
@@ -39,9 +39,13 @@ import org.opendaylight.yangtools.yang.binding.InstanceIdentifier;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
-public class QosUpdateCommand implements TransactCommand {
+public class QosUpdateCommand extends AbstractTransactCommand {
     private static final Logger LOG = LoggerFactory.getLogger(QosUpdateCommand.class);
 
+    public QosUpdateCommand(final Operations op) {
+        super(op);
+    }
+
     @Override
     public void execute(final TransactionBuilder transaction, final BridgeOperationalState state,
             final DataChangeEvent events, final InstanceIdentifierCodec instanceIdentifierCodec) {
@@ -58,7 +62,7 @@ public class QosUpdateCommand implements TransactCommand {
     }
 
     @SuppressFBWarnings("DCN_NULLPOINTER_EXCEPTION")
-    private static void execute(final TransactionBuilder transaction, final BridgeOperationalState state,
+    private void execute(final TransactionBuilder transaction, final BridgeOperationalState state,
             final Map<InstanceIdentifier<QosEntries>, QosEntries> createdOrUpdated,
             final InstanceIdentifierCodec instanceIdentifierCodec) {
         for (Entry<InstanceIdentifier<QosEntries>, QosEntries> qosMapEntry: createdOrUpdated.entrySet()) {
diff --git a/southbound/southbound-impl/src/main/java/org/opendaylight/ovsdb/southbound/ovsdb/transact/QueueRemovedCommand.java b/southbound/southbound-impl/src/main/java/org/opendaylight/ovsdb/southbound/ovsdb/transact/QueueRemovedCommand.java
index 2cee3c1d2..c80ae6702 100644
--- a/southbound/southbound-impl/src/main/java/org/opendaylight/ovsdb/southbound/ovsdb/transact/QueueRemovedCommand.java
+++ b/southbound/southbound-impl/src/main/java/org/opendaylight/ovsdb/southbound/ovsdb/transact/QueueRemovedCommand.java
@@ -7,12 +7,11 @@
  */
 package org.opendaylight.ovsdb.southbound.ovsdb.transact;
 
-import static org.opendaylight.ovsdb.lib.operations.Operations.op;
-
 import java.util.Collection;
 import java.util.Map;
 import org.opendaylight.mdsal.binding.api.DataTreeModification;
 import org.opendaylight.ovsdb.lib.notation.UUID;
+import org.opendaylight.ovsdb.lib.operations.Operations;
 import org.opendaylight.ovsdb.lib.operations.TransactionBuilder;
 import org.opendaylight.ovsdb.schema.openvswitch.Queue;
 import org.opendaylight.ovsdb.southbound.InstanceIdentifierCodec;
@@ -25,9 +24,13 @@ import org.opendaylight.yangtools.yang.binding.InstanceIdentifier;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
-public class QueueRemovedCommand implements TransactCommand {
+public class QueueRemovedCommand extends AbstractTransactCommand {
     private static final Logger LOG = LoggerFactory.getLogger(QueueRemovedCommand.class);
 
+    public QueueRemovedCommand(final Operations op) {
+        super(op);
+    }
+
     @Override
     public void execute(final TransactionBuilder transaction, final BridgeOperationalState state,
             final DataChangeEvent events, final InstanceIdentifierCodec instanceIdentifierCodec) {
@@ -43,9 +46,9 @@ public class QueueRemovedCommand implements TransactCommand {
                 TransactUtils.extractUpdated(modifications, OvsdbNodeAugmentation.class));
     }
 
-    private static void execute(final TransactionBuilder transaction, final BridgeOperationalState state,
-                                final Map<InstanceIdentifier<OvsdbNodeAugmentation>, OvsdbNodeAugmentation> originals,
-                                final Map<InstanceIdentifier<OvsdbNodeAugmentation>, OvsdbNodeAugmentation> updated) {
+    private void execute(final TransactionBuilder transaction, final BridgeOperationalState state,
+            final Map<InstanceIdentifier<OvsdbNodeAugmentation>, OvsdbNodeAugmentation> originals,
+            final Map<InstanceIdentifier<OvsdbNodeAugmentation>, OvsdbNodeAugmentation> updated) {
         for (Map.Entry<InstanceIdentifier<OvsdbNodeAugmentation>, OvsdbNodeAugmentation> originalEntry : originals
                 .entrySet()) {
             InstanceIdentifier<OvsdbNodeAugmentation> ovsdbNodeIid = originalEntry.getKey();
diff --git a/southbound/southbound-impl/src/main/java/org/opendaylight/ovsdb/southbound/ovsdb/transact/QueueUpdateCommand.java b/southbound/southbound-impl/src/main/java/org/opendaylight/ovsdb/southbound/ovsdb/transact/QueueUpdateCommand.java
index 5f7218fb1..bb06206e9 100644
--- a/southbound/southbound-impl/src/main/java/org/opendaylight/ovsdb/southbound/ovsdb/transact/QueueUpdateCommand.java
+++ b/southbound/southbound-impl/src/main/java/org/opendaylight/ovsdb/southbound/ovsdb/transact/QueueUpdateCommand.java
@@ -8,7 +8,6 @@
 package org.opendaylight.ovsdb.southbound.ovsdb.transact;
 
 import static java.nio.charset.StandardCharsets.UTF_8;
-import static org.opendaylight.ovsdb.lib.operations.Operations.op;
 
 import edu.umd.cs.findbugs.annotations.SuppressFBWarnings;
 import java.util.Collection;
@@ -19,6 +18,7 @@ import java.util.Map.Entry;
 import java.util.Set;
 import org.opendaylight.mdsal.binding.api.DataTreeModification;
 import org.opendaylight.ovsdb.lib.notation.UUID;
+import org.opendaylight.ovsdb.lib.operations.Operations;
 import org.opendaylight.ovsdb.lib.operations.TransactionBuilder;
 import org.opendaylight.ovsdb.schema.openvswitch.Queue;
 import org.opendaylight.ovsdb.southbound.InstanceIdentifierCodec;
@@ -36,9 +36,13 @@ import org.opendaylight.yangtools.yang.binding.InstanceIdentifier;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
-public class QueueUpdateCommand implements TransactCommand {
+public class QueueUpdateCommand extends AbstractTransactCommand {
     private static final Logger LOG = LoggerFactory.getLogger(QueueUpdateCommand.class);
 
+    public QueueUpdateCommand(final Operations op) {
+        super(op);
+    }
+
     @Override
     public void execute(final TransactionBuilder transaction, final BridgeOperationalState state,
             final DataChangeEvent events, final InstanceIdentifierCodec instanceIdentifierCodec) {
@@ -55,7 +59,7 @@ public class QueueUpdateCommand implements TransactCommand {
     }
 
     @SuppressFBWarnings("DCN_NULLPOINTER_EXCEPTION")
-    private static void execute(final TransactionBuilder transaction, final BridgeOperationalState state,
+    private void execute(final TransactionBuilder transaction, final BridgeOperationalState state,
             final Map<InstanceIdentifier<Queues>, Queues> createdOrUpdated,
             final InstanceIdentifierCodec instanceIdentifierCodec) {
         for (Entry<InstanceIdentifier<Queues>, Queues> queueMapEntry : createdOrUpdated.entrySet()) {
diff --git a/southbound/southbound-impl/src/main/java/org/opendaylight/ovsdb/southbound/ovsdb/transact/TerminationPointCreateCommand.java b/southbound/southbound-impl/src/main/java/org/opendaylight/ovsdb/southbound/ovsdb/transact/TerminationPointCreateCommand.java
index 66d43b76c..061573e96 100644
--- a/southbound/southbound-impl/src/main/java/org/opendaylight/ovsdb/southbound/ovsdb/transact/TerminationPointCreateCommand.java
+++ b/southbound/southbound-impl/src/main/java/org/opendaylight/ovsdb/southbound/ovsdb/transact/TerminationPointCreateCommand.java
@@ -7,7 +7,6 @@
  */
 package org.opendaylight.ovsdb.southbound.ovsdb.transact;
 
-import static org.opendaylight.ovsdb.lib.operations.Operations.op;
 import static org.opendaylight.ovsdb.southbound.SouthboundUtil.schemaMismatchLog;
 
 import edu.umd.cs.findbugs.annotations.SuppressFBWarnings;
@@ -17,7 +16,6 @@ import java.util.HashMap;
 import java.util.HashSet;
 import java.util.List;
 import java.util.Map;
-import java.util.Map.Entry;
 import java.util.Optional;
 import java.util.Set;
 import org.opendaylight.mdsal.binding.api.DataTreeModification;
@@ -25,6 +23,7 @@ import org.opendaylight.ovsdb.lib.error.SchemaVersionMismatchException;
 import org.opendaylight.ovsdb.lib.notation.Mutator;
 import org.opendaylight.ovsdb.lib.notation.UUID;
 import org.opendaylight.ovsdb.lib.operations.Mutate;
+import org.opendaylight.ovsdb.lib.operations.Operations;
 import org.opendaylight.ovsdb.lib.operations.TransactionBuilder;
 import org.opendaylight.ovsdb.schema.openvswitch.Bridge;
 import org.opendaylight.ovsdb.schema.openvswitch.Interface;
@@ -59,9 +58,13 @@ import org.opendaylight.yangtools.yang.common.Uint32;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
-public class TerminationPointCreateCommand implements TransactCommand {
+public class TerminationPointCreateCommand extends AbstractTransactCommand {
     private static final Logger LOG = LoggerFactory.getLogger(TerminationPointCreateCommand.class);
 
+    public TerminationPointCreateCommand(final Operations op) {
+        super(op);
+    }
+
     @Override
     public void execute(final TransactionBuilder transaction, final BridgeOperationalState state,
             final DataChangeEvent events, final InstanceIdentifierCodec instanceIdentifierCodec) {
@@ -78,12 +81,11 @@ public class TerminationPointCreateCommand implements TransactCommand {
                 TransactUtils.extractCreatedOrUpdated(modifications, Node.class), instanceIdentifierCodec);
     }
 
-    private static void execute(final TransactionBuilder transaction, final BridgeOperationalState state,
+    private void execute(final TransactionBuilder transaction, final BridgeOperationalState state,
             final Map<InstanceIdentifier<OvsdbTerminationPointAugmentation>, OvsdbTerminationPointAugmentation>
                     createdTerminationPoints,
             final Map<InstanceIdentifier<Node>, Node> nodes, final InstanceIdentifierCodec instanceIdentifierCodec) {
-        for (Entry<InstanceIdentifier<OvsdbTerminationPointAugmentation>, OvsdbTerminationPointAugmentation> entry :
-                createdTerminationPoints.entrySet()) {
+        for (var entry : createdTerminationPoints.entrySet()) {
             OvsdbTerminationPointAugmentation terminationPoint = entry.getValue();
             LOG.debug("Received request to create termination point {}",
                     terminationPoint.getName());
@@ -97,7 +99,8 @@ public class TerminationPointCreateCommand implements TransactCommand {
                 createInterface(terminationPoint, ovsInterface);
                 transaction.add(op.insert(ovsInterface).withId(interfaceUuid));
 
-                stampInstanceIdentifier(transaction, entry.getKey(), ovsInterface.getName(), instanceIdentifierCodec);
+                stampInstanceIdentifier(op, transaction, entry.getKey(), ovsInterface.getName(),
+                    instanceIdentifierCodec);
 
                 // Configure port with the above interface details
                 String portUuid = "Port_" + SouthboundMapper.getRandomUuid();
@@ -365,13 +368,13 @@ public class TerminationPointCreateCommand implements TransactCommand {
         }
     }
 
-    public static void stampInstanceIdentifier(final TransactionBuilder transaction,
+    public static void stampInstanceIdentifier(final Operations op, final TransactionBuilder transaction,
             final InstanceIdentifier<OvsdbTerminationPointAugmentation> iid, final String interfaceName,
             final InstanceIdentifierCodec instanceIdentifierCodec) {
         Port port = transaction.getTypedRowWrapper(Port.class);
         port.setName(interfaceName);
         port.setExternalIds(Collections.emptyMap());
-        Mutate mutate = TransactUtils.stampInstanceIdentifierMutation(transaction, iid, port.getSchema(),
+        Mutate mutate = TransactUtils.stampInstanceIdentifierMutation(op, transaction, iid, port.getSchema(),
                 port.getExternalIdsColumn().getSchema(), instanceIdentifierCodec);
         transaction.add(mutate
                 .where(port.getNameColumn().getSchema().opEqual(interfaceName))
diff --git a/southbound/southbound-impl/src/main/java/org/opendaylight/ovsdb/southbound/ovsdb/transact/TerminationPointDeleteCommand.java b/southbound/southbound-impl/src/main/java/org/opendaylight/ovsdb/southbound/ovsdb/transact/TerminationPointDeleteCommand.java
index 71e84853b..3464e55c9 100644
--- a/southbound/southbound-impl/src/main/java/org/opendaylight/ovsdb/southbound/ovsdb/transact/TerminationPointDeleteCommand.java
+++ b/southbound/southbound-impl/src/main/java/org/opendaylight/ovsdb/southbound/ovsdb/transact/TerminationPointDeleteCommand.java
@@ -7,8 +7,6 @@
  */
 package org.opendaylight.ovsdb.southbound.ovsdb.transact;
 
-import static org.opendaylight.ovsdb.lib.operations.Operations.op;
-
 import java.util.Collection;
 import java.util.Collections;
 import java.util.Map;
@@ -17,6 +15,7 @@ import java.util.Set;
 import org.opendaylight.mdsal.binding.api.DataTreeModification;
 import org.opendaylight.ovsdb.lib.notation.Mutator;
 import org.opendaylight.ovsdb.lib.notation.UUID;
+import org.opendaylight.ovsdb.lib.operations.Operations;
 import org.opendaylight.ovsdb.lib.operations.TransactionBuilder;
 import org.opendaylight.ovsdb.schema.openvswitch.Bridge;
 import org.opendaylight.ovsdb.schema.openvswitch.Port;
@@ -33,9 +32,13 @@ import org.slf4j.LoggerFactory;
  *
  * @author avishnoi@brocade.com (Anil Vishnoi)
  */
-public class TerminationPointDeleteCommand implements TransactCommand {
+public class TerminationPointDeleteCommand extends AbstractTransactCommand {
     private static final Logger LOG = LoggerFactory.getLogger(TerminationPointDeleteCommand.class);
 
+    public TerminationPointDeleteCommand(final Operations op) {
+        super(op);
+    }
+
     @Override
     public void execute(final TransactionBuilder transaction, final BridgeOperationalState state,
             final DataChangeEvent events, final InstanceIdentifierCodec instanceIdentifierCodec) {
@@ -54,7 +57,7 @@ public class TerminationPointDeleteCommand implements TransactCommand {
                 TransactUtils.extractRemoved(modifications, OvsdbTerminationPointAugmentation.class));
     }
 
-    private static void execute(final TransactionBuilder transaction, final BridgeOperationalState state,
+    private void execute(final TransactionBuilder transaction, final BridgeOperationalState state,
             final Map<InstanceIdentifier<OvsdbTerminationPointAugmentation>,
                 OvsdbTerminationPointAugmentation> originals,
             final Map<InstanceIdentifier<Node>, Node> originalNodes,
diff --git a/southbound/southbound-impl/src/main/java/org/opendaylight/ovsdb/southbound/ovsdb/transact/TerminationPointUpdateCommand.java b/southbound/southbound-impl/src/main/java/org/opendaylight/ovsdb/southbound/ovsdb/transact/TerminationPointUpdateCommand.java
index a90c5cea6..1404ffcf0 100644
--- a/southbound/southbound-impl/src/main/java/org/opendaylight/ovsdb/southbound/ovsdb/transact/TerminationPointUpdateCommand.java
+++ b/southbound/southbound-impl/src/main/java/org/opendaylight/ovsdb/southbound/ovsdb/transact/TerminationPointUpdateCommand.java
@@ -8,9 +8,9 @@
 package org.opendaylight.ovsdb.southbound.ovsdb.transact;
 
 import static java.nio.charset.StandardCharsets.UTF_8;
-import static org.opendaylight.ovsdb.lib.operations.Operations.op;
 import static org.opendaylight.ovsdb.southbound.SouthboundUtil.schemaMismatchLog;
 
+import com.google.common.annotations.VisibleForTesting;
 import edu.umd.cs.findbugs.annotations.SuppressFBWarnings;
 import java.util.Collection;
 import java.util.Collections;
@@ -25,6 +25,7 @@ import org.opendaylight.mdsal.binding.api.DataTreeModification;
 import org.opendaylight.mdsal.binding.api.ReadTransaction;
 import org.opendaylight.ovsdb.lib.error.SchemaVersionMismatchException;
 import org.opendaylight.ovsdb.lib.notation.UUID;
+import org.opendaylight.ovsdb.lib.operations.Operations;
 import org.opendaylight.ovsdb.lib.operations.TransactionBuilder;
 import org.opendaylight.ovsdb.schema.openvswitch.Interface;
 import org.opendaylight.ovsdb.schema.openvswitch.Port;
@@ -60,9 +61,13 @@ import org.opendaylight.yangtools.yang.common.Uint32;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
-public class TerminationPointUpdateCommand implements TransactCommand {
+public class TerminationPointUpdateCommand extends AbstractTransactCommand {
     private static final Logger LOG = LoggerFactory.getLogger(TerminationPointUpdateCommand.class);
 
+    public TerminationPointUpdateCommand(final Operations op) {
+        super(op);
+    }
+
     @Override
     public void execute(final TransactionBuilder transaction, final BridgeOperationalState state,
             final DataChangeEvent events, final InstanceIdentifierCodec instanceIdentifierCodec) {
@@ -91,6 +96,7 @@ public class TerminationPointUpdateCommand implements TransactCommand {
         }
     }
 
+    @VisibleForTesting
     public void updateTerminationPoint(final TransactionBuilder transaction, final BridgeOperationalState state,
             final InstanceIdentifier<OvsdbTerminationPointAugmentation> iid,
             final OvsdbTerminationPointAugmentation terminationPoint,
@@ -109,7 +115,7 @@ public class TerminationPointUpdateCommand implements TransactCommand {
                     .where(extraInterface.getNameColumn().getSchema().opEqual(terminationPoint.getName()))
                     .build());
 
-            TerminationPointCreateCommand.stampInstanceIdentifier(transaction,
+            TerminationPointCreateCommand.stampInstanceIdentifier(op, transaction,
                     iid.firstIdentifierOf(OvsdbTerminationPointAugmentation.class), terminationPoint.getName(),
                     instanceIdentifierCodec);
             final String opendaylightIid = instanceIdentifierCodec.serialize(iid);
diff --git a/southbound/southbound-impl/src/main/java/org/opendaylight/ovsdb/southbound/ovsdb/transact/TransactCommandAggregator.java b/southbound/southbound-impl/src/main/java/org/opendaylight/ovsdb/southbound/ovsdb/transact/TransactCommandAggregator.java
index 5334e3054..11e572ddd 100644
--- a/southbound/southbound-impl/src/main/java/org/opendaylight/ovsdb/southbound/ovsdb/transact/TransactCommandAggregator.java
+++ b/southbound/southbound-impl/src/main/java/org/opendaylight/ovsdb/southbound/ovsdb/transact/TransactCommandAggregator.java
@@ -8,8 +8,9 @@
 package org.opendaylight.ovsdb.southbound.ovsdb.transact;
 
 import java.util.Collection;
-import java.util.function.Supplier;
+import java.util.function.Function;
 import org.opendaylight.mdsal.binding.api.DataTreeModification;
+import org.opendaylight.ovsdb.lib.operations.Operations;
 import org.opendaylight.ovsdb.lib.operations.TransactionBuilder;
 import org.opendaylight.ovsdb.southbound.InstanceIdentifierCodec;
 import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.network.topology.topology.Node;
@@ -17,9 +18,9 @@ import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.
 /**
  * This transactional command aggregates all the Southbound commands.
  */
-public class TransactCommandAggregator implements TransactCommand {
+public class TransactCommandAggregator extends AbstractTransactCommand {
     // Type capture to allow using an array
-    private interface CommandSupplier extends Supplier<TransactCommand> {
+    private interface CommandSupplier extends Function<Operations, TransactCommand> {
 
     }
 
@@ -43,11 +44,15 @@ public class TransactCommandAggregator implements TransactCommand {
         TerminationPointUpdateCommand::new
     };
 
+    public TransactCommandAggregator(final Operations op) {
+        super(op);
+    }
+
     @Override
     public void execute(final TransactionBuilder transaction, final BridgeOperationalState state,
             final DataChangeEvent events, final InstanceIdentifierCodec instanceIdentifierCodec) {
         for (CommandSupplier supplier : COMMAND_SUPPLIERS) {
-            supplier.get().execute(transaction, state, events, instanceIdentifierCodec);
+            supplier.apply(op).execute(transaction, state, events, instanceIdentifierCodec);
         }
     }
 
@@ -56,7 +61,7 @@ public class TransactCommandAggregator implements TransactCommand {
             final Collection<DataTreeModification<Node>> modifications,
             final InstanceIdentifierCodec instanceIdentifierCodec) {
         for (CommandSupplier supplier : COMMAND_SUPPLIERS) {
-            supplier.get().execute(transaction, state, modifications, instanceIdentifierCodec);
+            supplier.apply(op).execute(transaction, state, modifications, instanceIdentifierCodec);
         }
     }
 }
diff --git a/southbound/southbound-impl/src/main/java/org/opendaylight/ovsdb/southbound/ovsdb/transact/TransactUtils.java b/southbound/southbound-impl/src/main/java/org/opendaylight/ovsdb/southbound/ovsdb/transact/TransactUtils.java
index adbb9b4db..bcae24f22 100644
--- a/southbound/southbound-impl/src/main/java/org/opendaylight/ovsdb/southbound/ovsdb/transact/TransactUtils.java
+++ b/southbound/southbound-impl/src/main/java/org/opendaylight/ovsdb/southbound/ovsdb/transact/TransactUtils.java
@@ -7,8 +7,6 @@
  */
 package org.opendaylight.ovsdb.southbound.ovsdb.transact;
 
-import static org.opendaylight.ovsdb.lib.operations.Operations.op;
-
 import com.google.common.base.Predicates;
 import com.google.common.collect.ImmutableMap;
 import com.google.common.collect.Maps;
@@ -33,6 +31,7 @@ import org.opendaylight.ovsdb.lib.notation.UUID;
 import org.opendaylight.ovsdb.lib.operations.Insert;
 import org.opendaylight.ovsdb.lib.operations.Mutate;
 import org.opendaylight.ovsdb.lib.operations.Operation;
+import org.opendaylight.ovsdb.lib.operations.Operations;
 import org.opendaylight.ovsdb.lib.operations.TransactionBuilder;
 import org.opendaylight.ovsdb.lib.schema.ColumnSchema;
 import org.opendaylight.ovsdb.lib.schema.GenericTableSchema;
@@ -424,15 +423,15 @@ public class TransactUtils {
         return new UUID(uuidString);
     }
 
-    public static <T extends TableSchema<T>> void stampInstanceIdentifier(final TransactionBuilder transaction,
-            final InstanceIdentifier<?> iid, final TableSchema<T> tableSchema,
+    public static <T extends TableSchema<T>> void stampInstanceIdentifier(final Operations op,
+            final TransactionBuilder transaction, final InstanceIdentifier<?> iid, final TableSchema<T> tableSchema,
             final ColumnSchema<T, Map<String, String>> columnSchema,
             final InstanceIdentifierCodec instanceIdentifierCodec) {
         transaction.add(
-            stampInstanceIdentifierMutation(transaction, iid, tableSchema, columnSchema, instanceIdentifierCodec));
+            stampInstanceIdentifierMutation(op, transaction, iid, tableSchema, columnSchema, instanceIdentifierCodec));
     }
 
-    public static <T extends TableSchema<T>> Mutate<T> stampInstanceIdentifierMutation(
+    public static <T extends TableSchema<T>> Mutate<T> stampInstanceIdentifierMutation(final Operations op,
             final TransactionBuilder transaction, final InstanceIdentifier<?> iid, final TableSchema<T> tableSchema,
             final ColumnSchema<T, Map<String, String>> columnSchema,
             final InstanceIdentifierCodec instanceIdentifierCodec) {
diff --git a/southbound/southbound-impl/src/main/java/org/opendaylight/ovsdb/southbound/reconciliation/configuration/BridgeConfigReconciliationTask.java b/southbound/southbound-impl/src/main/java/org/opendaylight/ovsdb/southbound/reconciliation/configuration/BridgeConfigReconciliationTask.java
index 1499b2814..1fe801467 100644
--- a/southbound/southbound-impl/src/main/java/org/opendaylight/ovsdb/southbound/reconciliation/configuration/BridgeConfigReconciliationTask.java
+++ b/southbound/southbound-impl/src/main/java/org/opendaylight/ovsdb/southbound/reconciliation/configuration/BridgeConfigReconciliationTask.java
@@ -266,7 +266,7 @@ public class BridgeConfigReconciliationTask extends ReconciliationTask {
             }
         };
 
-        connectionInstance.transact(new TransactCommandAggregator(),
+        connectionInstance.transact(new TransactCommandAggregator(connectionInstance.ops()),
                 new BridgeOperationalState(reconciliationManager.getDb(), changeEvents),
                 new DataChangesManagedByOvsdbNodeEvent(
                         reconciliationManager.getDb(),
diff --git a/southbound/southbound-impl/src/main/java/org/opendaylight/ovsdb/southbound/reconciliation/configuration/TerminationPointConfigReconciliationTask.java b/southbound/southbound-impl/src/main/java/org/opendaylight/ovsdb/southbound/reconciliation/configuration/TerminationPointConfigReconciliationTask.java
index 2fc3c8c82..6596065e6 100644
--- a/southbound/southbound-impl/src/main/java/org/opendaylight/ovsdb/southbound/reconciliation/configuration/TerminationPointConfigReconciliationTask.java
+++ b/southbound/southbound-impl/src/main/java/org/opendaylight/ovsdb/southbound/reconciliation/configuration/TerminationPointConfigReconciliationTask.java
@@ -91,7 +91,7 @@ public class TerminationPointConfigReconciliationTask extends ReconciliationTask
             }
         };
 
-        connectionInstance.transact(new TerminationPointCreateCommand(),
+        connectionInstance.transact(new TerminationPointCreateCommand(connectionInstance.ops()),
                         new BridgeOperationalState(reconciliationManager.getDb(), changeEvents),
                         changeEvents, instanceIdentifierCodec);
 
@@ -158,7 +158,7 @@ public class TerminationPointConfigReconciliationTask extends ReconciliationTask
             }
         };
 
-        connectionInstance.transact(new TerminationPointDeleteCommand(),
+        connectionInstance.transact(new TerminationPointDeleteCommand(connectionInstance.ops()),
                 new BridgeOperationalState(reconciliationManager.getDb(), deleteChangeEvents),
                 deleteChangeEvents, instanceIdentifierCodec);
 
@@ -166,7 +166,7 @@ public class TerminationPointConfigReconciliationTask extends ReconciliationTask
     }
 
     @Override
-    public void doRetry(boolean wasPreviousAttemptSuccessful) {
+    public void doRetry(final boolean wasPreviousAttemptSuccessful) {
     }
 
     @Override
diff --git a/southbound/southbound-impl/src/test/java/org/opendaylight/ovsdb/southbound/OvsdbConnectionInstanceTest.java b/southbound/southbound-impl/src/test/java/org/opendaylight/ovsdb/southbound/OvsdbConnectionInstanceTest.java
index 4f6efe141..964c60d16 100644
--- a/southbound/southbound-impl/src/test/java/org/opendaylight/ovsdb/southbound/OvsdbConnectionInstanceTest.java
+++ b/southbound/southbound-impl/src/test/java/org/opendaylight/ovsdb/southbound/OvsdbConnectionInstanceTest.java
@@ -40,6 +40,7 @@ import org.opendaylight.ovsdb.lib.MonitorHandle;
 import org.opendaylight.ovsdb.lib.OvsdbClient;
 import org.opendaylight.ovsdb.lib.OvsdbConnectionInfo;
 import org.opendaylight.ovsdb.lib.message.TableUpdates;
+import org.opendaylight.ovsdb.lib.operations.DefaultOperations;
 import org.opendaylight.ovsdb.lib.operations.OperationResult;
 import org.opendaylight.ovsdb.lib.operations.TransactionBuilder;
 import org.opendaylight.ovsdb.lib.schema.DatabaseSchema;
@@ -77,7 +78,8 @@ public class OvsdbConnectionInstanceTest {
 
     @Before
     public void setUp() throws Exception {
-        ovsdbConnectionInstance = spy(new OvsdbConnectionInstance(key, client, txInvoker, instanceIdentifier));
+        ovsdbConnectionInstance = spy(new OvsdbConnectionInstance(key, client, new DefaultOperations(), txInvoker,
+            instanceIdentifier));
     }
 
     @Test
diff --git a/southbound/southbound-impl/src/test/java/org/opendaylight/ovsdb/southbound/OvsdbConnectionManagerTest.java b/southbound/southbound-impl/src/test/java/org/opendaylight/ovsdb/southbound/OvsdbConnectionManagerTest.java
index 13b419401..512ea34da 100644
--- a/southbound/southbound-impl/src/test/java/org/opendaylight/ovsdb/southbound/OvsdbConnectionManagerTest.java
+++ b/southbound/southbound-impl/src/test/java/org/opendaylight/ovsdb/southbound/OvsdbConnectionManagerTest.java
@@ -41,6 +41,8 @@ import org.opendaylight.ovsdb.lib.OvsdbClient;
 import org.opendaylight.ovsdb.lib.OvsdbConnection;
 import org.opendaylight.ovsdb.lib.OvsdbConnectionInfo;
 import org.opendaylight.ovsdb.lib.impl.OvsdbConnectionService;
+import org.opendaylight.ovsdb.lib.operations.DefaultOperations;
+import org.opendaylight.ovsdb.lib.operations.Operations;
 import org.opendaylight.ovsdb.southbound.reconciliation.ReconciliationManager;
 import org.opendaylight.ovsdb.southbound.transactions.md.TransactionCommand;
 import org.opendaylight.ovsdb.southbound.transactions.md.TransactionInvoker;
@@ -97,10 +99,12 @@ public class OvsdbConnectionManagerTest {
         field(OvsdbConnectionManager.class, "alreadyProcessedClients").set(ovsdbConnManager, new ConcurrentHashMap<>());
         entityConnectionMap = new ConcurrentHashMap<>();
 
+        InetAddress.getByAddress(new byte[] { 1, 2, 3, 4});
+
         OvsdbConnectionInfo info = mock(OvsdbConnectionInfo.class);
-        doReturn(mock(InetAddress.class)).when(info).getRemoteAddress();
+        doReturn(InetAddress.getByAddress(new byte[] { 1, 2, 3, 4})).when(info).getRemoteAddress();
         doReturn(8080).when(info).getRemotePort();
-        doReturn(mock(InetAddress.class)).when(info).getLocalAddress();
+        doReturn(InetAddress.getByAddress(new byte[] { 5, 6, 7, 8})).when(info).getLocalAddress();
         doReturn(8080).when(info).getLocalPort();
 
         externalClient = mock(OvsdbClient.class, Mockito.RETURNS_DEEP_STUBS);
@@ -162,7 +166,7 @@ public class OvsdbConnectionManagerTest {
                 OvsdbConnectionInstance.class));
         doNothing().when(client).createTransactInvokers();
         PowerMockito.whenNew(OvsdbConnectionInstance.class).withArguments(any(ConnectionInfo.class),
-                any(OvsdbClient.class), any(TransactionInvoker.class), any(InstanceIdentifier.class))
+            any(OvsdbClient.class), any(Operations.class), any(TransactionInvoker.class), any(InstanceIdentifier.class))
                 .thenReturn(client);
 
         assertEquals("Error, did not receive correct OvsdbConnectionInstance object", client,
@@ -394,7 +398,8 @@ public class OvsdbConnectionManagerTest {
         Entity entity = new Entity("entityType", "entityName");
         ConnectionInfo key = mock(ConnectionInfo.class);
 
-        OvsdbConnectionInstance ovsdbConnInstance = new OvsdbConnectionInstance(key, externalClient, txInvoker, iid);
+        OvsdbConnectionInstance ovsdbConnInstance = new OvsdbConnectionInstance(key, externalClient,
+            new DefaultOperations(), txInvoker, iid);
         entityConnectionMap.put(entity, ovsdbConnInstance);
 
         field(OvsdbConnectionManager.class, "entityConnectionMap").set(ovsdbConnManager, entityConnectionMap);
diff --git a/southbound/southbound-impl/src/test/java/org/opendaylight/ovsdb/southbound/OvsdbDataTreeChangeListenerTest.java b/southbound/southbound-impl/src/test/java/org/opendaylight/ovsdb/southbound/OvsdbDataTreeChangeListenerTest.java
index 4b9827679..4671edc43 100644
--- a/southbound/southbound-impl/src/test/java/org/opendaylight/ovsdb/southbound/OvsdbDataTreeChangeListenerTest.java
+++ b/southbound/southbound-impl/src/test/java/org/opendaylight/ovsdb/southbound/OvsdbDataTreeChangeListenerTest.java
@@ -22,6 +22,7 @@ import org.opendaylight.mdsal.binding.dom.adapter.test.AbstractConcurrentDataBro
 import org.opendaylight.mdsal.common.api.LogicalDatastoreType;
 import org.opendaylight.mdsal.eos.binding.api.EntityOwnershipService;
 import org.opendaylight.ovsdb.lib.OvsdbConnection;
+import org.opendaylight.ovsdb.lib.operations.DefaultOperations;
 import org.opendaylight.ovsdb.southbound.transactions.md.TransactionInvokerImpl;
 import org.opendaylight.ovsdb.utils.southbound.utils.SouthboundUtils;
 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev130715.IpAddress;
@@ -51,8 +52,9 @@ public class OvsdbDataTreeChangeListenerTest extends AbstractConcurrentDataBroke
         EntityOwnershipService entityOwnershipService = mock(EntityOwnershipService.class);
         InstanceIdentifierCodec instanceIdentifierCodec = mock(InstanceIdentifierCodec.class);
         listener = new OvsdbDataTreeChangeListener(dataBroker,
-                new OvsdbConnectionManager(dataBroker, new TransactionInvokerImpl(dataBroker), entityOwnershipService,
-                        ovsdbConnection, instanceIdentifierCodec, List.of(), List.of()), instanceIdentifierCodec);
+                new OvsdbConnectionManager(dataBroker, new DefaultOperations(), new TransactionInvokerImpl(dataBroker),
+                    entityOwnershipService, ovsdbConnection, instanceIdentifierCodec, List.of(), List.of()),
+                instanceIdentifierCodec);
     }
 
     @Test
diff --git a/southbound/southbound-impl/src/test/java/org/opendaylight/ovsdb/southbound/SouthboundProviderTest.java b/southbound/southbound-impl/src/test/java/org/opendaylight/ovsdb/southbound/SouthboundProviderTest.java
index db73da98b..5ec9ba117 100644
--- a/southbound/southbound-impl/src/test/java/org/opendaylight/ovsdb/southbound/SouthboundProviderTest.java
+++ b/southbound/southbound-impl/src/test/java/org/opendaylight/ovsdb/southbound/SouthboundProviderTest.java
@@ -39,6 +39,7 @@ import org.opendaylight.mdsal.eos.common.api.CandidateAlreadyRegisteredException
 import org.opendaylight.mdsal.eos.common.api.EntityOwnershipState;
 import org.opendaylight.mdsal.eos.common.api.EntityOwnershipStateChange;
 import org.opendaylight.ovsdb.lib.OvsdbConnection;
+import org.opendaylight.ovsdb.lib.operations.DefaultOperations;
 import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.NetworkTopology;
 import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.network.topology.Topology;
 import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.network.topology.TopologyKey;
@@ -78,7 +79,7 @@ public class SouthboundProviderTest extends AbstractConcurrentDataBrokerTest {
                 Mockito.mock(DOMSchemaService.class),
                 Mockito.mock(BindingNormalizedNodeSerializer.class),
                 new TestSystemReadyMonitor(IMMEDIATE),
-                diagStatusService)) {
+                diagStatusService, new DefaultOperations())) {
 
             // Verify that at least one listener was registered
             verify(entityOwnershipService, atLeastOnce()).registerListener(
@@ -102,7 +103,7 @@ public class SouthboundProviderTest extends AbstractConcurrentDataBrokerTest {
                 Mockito.mock(DOMSchemaService.class),
                 Mockito.mock(BindingNormalizedNodeSerializer.class),
                 new TestSystemReadyMonitor(IMMEDIATE),
-                diagStatusService)) {
+                diagStatusService, new DefaultOperations())) {
 
             // Verify that at least one listener was registered
             verify(entityOwnershipService, atLeastOnce()).registerListener(
@@ -132,7 +133,7 @@ public class SouthboundProviderTest extends AbstractConcurrentDataBrokerTest {
                 Mockito.mock(DOMSchemaService.class),
                 Mockito.mock(BindingNormalizedNodeSerializer.class),
                 new TestSystemReadyMonitor(IMMEDIATE),
-                diagStatusService)) {
+                diagStatusService, new DefaultOperations())) {
 
             // At this point the OVSDB topology must not be present in either tree
             assertFalse(getDataBroker().newReadOnlyTransaction().read(LogicalDatastoreType.CONFIGURATION,
diff --git a/southbound/southbound-impl/src/test/java/org/opendaylight/ovsdb/southbound/ovsdb/transact/OpenVSwitchBridgeAddCommandTest.java b/southbound/southbound-impl/src/test/java/org/opendaylight/ovsdb/southbound/ovsdb/transact/OpenVSwitchBridgeAddCommandTest.java
index f4691b670..df02bf986 100644
--- a/southbound/southbound-impl/src/test/java/org/opendaylight/ovsdb/southbound/ovsdb/transact/OpenVSwitchBridgeAddCommandTest.java
+++ b/southbound/southbound-impl/src/test/java/org/opendaylight/ovsdb/southbound/ovsdb/transact/OpenVSwitchBridgeAddCommandTest.java
@@ -11,6 +11,7 @@ import static org.mockito.ArgumentMatchers.any;
 import static org.mockito.ArgumentMatchers.eq;
 import static org.mockito.Mockito.doNothing;
 import static org.mockito.Mockito.mock;
+import static org.mockito.Mockito.spy;
 import static org.mockito.Mockito.verify;
 import static org.mockito.Mockito.when;
 
@@ -21,7 +22,6 @@ import java.util.Set;
 import org.junit.Before;
 import org.junit.Test;
 import org.junit.runner.RunWith;
-import org.mockito.Mockito;
 import org.opendaylight.ovsdb.lib.notation.Column;
 import org.opendaylight.ovsdb.lib.notation.Mutator;
 import org.opendaylight.ovsdb.lib.notation.UUID;
@@ -43,10 +43,12 @@ import org.powermock.modules.junit4.PowerMockRunner;
 @PrepareForTest({TransactUtils.class, Operations.class})
 public class OpenVSwitchBridgeAddCommandTest {
     private OpenVSwitchBridgeAddCommand ovsBridgeAddCommand;
+    private Operations op;
 
     @Before
     public void setUp() {
-        ovsBridgeAddCommand = mock(OpenVSwitchBridgeAddCommand.class, Mockito.CALLS_REAL_METHODS);
+        op = mock(Operations.class);
+        ovsBridgeAddCommand = spy(new OpenVSwitchBridgeAddCommand(op));
     }
 
     @SuppressWarnings({ "unchecked", "rawtypes" })
@@ -74,7 +76,6 @@ public class OpenVSwitchBridgeAddCommandTest {
         doNothing().when(ovs).setBridges(any(Set.class));
 
         Mutate<GenericTableSchema> mutate = mock(Mutate.class);
-        Operations op = OvsdbNodeUpdateCommandTest.setOpField();
         when(op.mutate(any(OpenVSwitch.class))).thenReturn(mutate);
         Column<GenericTableSchema, Set<UUID>> column = mock(Column.class);
         when(ovs.getBridgesColumn()).thenReturn(column);
diff --git a/southbound/southbound-impl/src/test/java/org/opendaylight/ovsdb/southbound/ovsdb/transact/OvsdbNodeUpdateCommandTest.java b/southbound/southbound-impl/src/test/java/org/opendaylight/ovsdb/southbound/ovsdb/transact/OvsdbNodeUpdateCommandTest.java
index e6989f10f..66309e316 100644
--- a/southbound/southbound-impl/src/test/java/org/opendaylight/ovsdb/southbound/ovsdb/transact/OvsdbNodeUpdateCommandTest.java
+++ b/southbound/southbound-impl/src/test/java/org/opendaylight/ovsdb/southbound/ovsdb/transact/OvsdbNodeUpdateCommandTest.java
@@ -11,19 +11,18 @@ import static org.mockito.ArgumentMatchers.any;
 import static org.mockito.ArgumentMatchers.eq;
 import static org.mockito.Mockito.doNothing;
 import static org.mockito.Mockito.mock;
+import static org.mockito.Mockito.spy;
 import static org.mockito.Mockito.times;
 import static org.mockito.Mockito.verify;
 import static org.mockito.Mockito.when;
 
 import com.google.common.collect.ImmutableMap;
-import java.lang.reflect.Field;
 import java.util.HashMap;
 import java.util.Map;
 import org.junit.Before;
 import org.junit.Test;
 import org.junit.runner.RunWith;
 import org.mockito.Mock;
-import org.mockito.Mockito;
 import org.opendaylight.ovsdb.lib.notation.Column;
 import org.opendaylight.ovsdb.lib.operations.Mutate;
 import org.opendaylight.ovsdb.lib.operations.Operation;
@@ -63,11 +62,12 @@ public class OvsdbNodeUpdateCommandTest {
     private static final String OTHER_CONFIG_VALUE = "other config value";
 
     @Mock private DataChangeEvent changes;
+    @Mock private Operations op;
     private OvsdbNodeUpdateCommand ovsdbNodeUpdateCommand;
 
     @Before
     public void setUp() {
-        ovsdbNodeUpdateCommand = mock(OvsdbNodeUpdateCommand.class, Mockito.CALLS_REAL_METHODS);
+        ovsdbNodeUpdateCommand = spy(new OvsdbNodeUpdateCommand(op));
     }
 
     @SuppressWarnings("unchecked")
@@ -106,7 +106,6 @@ public class OvsdbNodeUpdateCommandTest {
         doNothing().when(ovs).setExternalIds(any(ImmutableMap.class));
 
         Mutate<GenericTableSchema> mutate = mock(Mutate.class);
-        Operations op = setOpField();
         Column<GenericTableSchema, Map<String, String>> column = mock(Column.class);
         when(ovs.getExternalIdsColumn()).thenReturn(column);
         when(column.getSchema()).thenReturn(mock(ColumnSchema.class));
@@ -128,11 +127,4 @@ public class OvsdbNodeUpdateCommandTest {
         verify(ovs, times(2)).getExternalIdsColumn();
         verify(transaction, times(2)).add(eq(null));
     }
-
-    static Operations setOpField() throws Exception {
-        Field opField = PowerMockito.field(Operations.class, "op");
-        Operations mockOp = mock(Operations.class);
-        opField.set(Operations.class, mockOp);
-        return mockOp;
-    }
 }
diff --git a/southbound/southbound-impl/src/test/java/org/opendaylight/ovsdb/southbound/ovsdb/transact/TerminationPointCreateCommandTest.java b/southbound/southbound-impl/src/test/java/org/opendaylight/ovsdb/southbound/ovsdb/transact/TerminationPointCreateCommandTest.java
index aac1dc3f4..4d42d438e 100644
--- a/southbound/southbound-impl/src/test/java/org/opendaylight/ovsdb/southbound/ovsdb/transact/TerminationPointCreateCommandTest.java
+++ b/southbound/southbound-impl/src/test/java/org/opendaylight/ovsdb/southbound/ovsdb/transact/TerminationPointCreateCommandTest.java
@@ -28,6 +28,7 @@ import org.mockito.Mockito;
 import org.opendaylight.ovsdb.lib.notation.Column;
 import org.opendaylight.ovsdb.lib.notation.Condition;
 import org.opendaylight.ovsdb.lib.notation.UUID;
+import org.opendaylight.ovsdb.lib.operations.DefaultOperations;
 import org.opendaylight.ovsdb.lib.operations.Insert;
 import org.opendaylight.ovsdb.lib.operations.Mutate;
 import org.opendaylight.ovsdb.lib.operations.Operation;
@@ -132,10 +133,11 @@ public class TerminationPointCreateCommandTest {
         when(column.getSchema()).thenReturn(mock(ColumnSchema.class));
 
         Mutate mutate = mock(Mutate.class);
+        // FIXME: rather than static mocking, insert a mock Operations
         PowerMockito.mockStatic(TransactUtils.class);
-        when(TransactUtils.stampInstanceIdentifierMutation(any(TransactionBuilder.class), any(InstanceIdentifier.class),
-                any(GenericTableSchema.class), any(ColumnSchema.class), any(InstanceIdentifierCodec.class))).thenReturn(
-                mutate);
+        when(TransactUtils.stampInstanceIdentifierMutation(any(Operations.class), any(TransactionBuilder.class),
+            any(InstanceIdentifier.class),     any(GenericTableSchema.class), any(ColumnSchema.class),
+            any(InstanceIdentifierCodec.class))).thenReturn(mutate);
 
         Column<GenericTableSchema, String> nameColumn = mock(Column.class);
         when(port.getNameColumn()).thenReturn(nameColumn);
@@ -153,7 +155,7 @@ public class TerminationPointCreateCommandTest {
             .child(Node.class, new NodeKey(new NodeId("testNode")))
             .child(TerminationPoint.class, new TerminationPointKey(new TpId("testTp")))
             .augmentation(OvsdbTerminationPointAugmentation.class);
-        TerminationPointCreateCommand.stampInstanceIdentifier(transaction, iid, interfaceName,
+        TerminationPointCreateCommand.stampInstanceIdentifier(new DefaultOperations(), transaction, iid, interfaceName,
                 mock(InstanceIdentifierCodec.class));
         verify(port).setName(anyString());
         verify(port).getExternalIdsColumn();
diff --git a/southbound/southbound-impl/src/test/java/org/opendaylight/ovsdb/southbound/ovsdb/transact/TerminationPointUpdateCommandTest.java b/southbound/southbound-impl/src/test/java/org/opendaylight/ovsdb/southbound/ovsdb/transact/TerminationPointUpdateCommandTest.java
index de0918e51..687759404 100644
--- a/southbound/southbound-impl/src/test/java/org/opendaylight/ovsdb/southbound/ovsdb/transact/TerminationPointUpdateCommandTest.java
+++ b/southbound/southbound-impl/src/test/java/org/opendaylight/ovsdb/southbound/ovsdb/transact/TerminationPointUpdateCommandTest.java
@@ -12,6 +12,7 @@ import static org.mockito.ArgumentMatchers.anyString;
 import static org.mockito.ArgumentMatchers.eq;
 import static org.mockito.Mockito.doNothing;
 import static org.mockito.Mockito.mock;
+import static org.mockito.Mockito.spy;
 import static org.mockito.Mockito.times;
 import static org.mockito.Mockito.verify;
 import static org.mockito.Mockito.when;
@@ -22,7 +23,6 @@ import java.util.Optional;
 import org.junit.Before;
 import org.junit.Test;
 import org.junit.runner.RunWith;
-import org.mockito.Mockito;
 import org.opendaylight.ovsdb.lib.notation.Column;
 import org.opendaylight.ovsdb.lib.notation.Condition;
 import org.opendaylight.ovsdb.lib.operations.Operation;
@@ -61,13 +61,15 @@ import org.powermock.modules.junit4.PowerMockRunner;
     Operations.class
 })
 public class TerminationPointUpdateCommandTest {
-
     private static final String TERMINATION_POINT_NAME = "termination point name";
+
+    private Operations op;
     private TerminationPointUpdateCommand terminationPointUpdateCommand;
 
     @Before
     public void setUp() {
-        terminationPointUpdateCommand = mock(TerminationPointUpdateCommand.class, Mockito.CALLS_REAL_METHODS);
+        op = mock(Operations.class);
+        terminationPointUpdateCommand = spy(new TerminationPointUpdateCommand(op));
     }
 
     @SuppressWarnings("unchecked")
@@ -126,7 +128,6 @@ public class TerminationPointUpdateCommandTest {
         when(transaction.getTypedRowWrapper(eq(Interface.class))).thenReturn(extraInterface);
         doNothing().when(extraInterface).setName(anyString());
 
-        Operations op = OvsdbNodeUpdateCommandTest.setOpField();
         Update update = mock(Update.class);
         when(op.update(any(Interface.class))).thenReturn(update);
 
diff --git a/southbound/southbound-impl/src/test/java/org/opendaylight/ovsdb/southbound/ovsdb/transact/TransactCommandAggregatorTest.java b/southbound/southbound-impl/src/test/java/org/opendaylight/ovsdb/southbound/ovsdb/transact/TransactCommandAggregatorTest.java
index e6e1d37a2..6c3962b0a 100644
--- a/southbound/southbound-impl/src/test/java/org/opendaylight/ovsdb/southbound/ovsdb/transact/TransactCommandAggregatorTest.java
+++ b/southbound/southbound-impl/src/test/java/org/opendaylight/ovsdb/southbound/ovsdb/transact/TransactCommandAggregatorTest.java
@@ -20,6 +20,7 @@ import org.junit.Test;
 import org.junit.runner.RunWith;
 import org.mockito.Mock;
 import org.mockito.junit.MockitoJUnitRunner;
+import org.opendaylight.ovsdb.lib.operations.DefaultOperations;
 import org.opendaylight.ovsdb.lib.operations.TransactionBuilder;
 import org.opendaylight.ovsdb.southbound.InstanceIdentifierCodec;
 
@@ -33,7 +34,7 @@ public class TransactCommandAggregatorTest {
 
     @Before
     public void setUp() throws Exception {
-        transactCommandAggregator = new TransactCommandAggregator();
+        transactCommandAggregator = new TransactCommandAggregator(new DefaultOperations());
 
         //mock commands field
         commands.add(mock(BridgeUpdateCommand.class));
diff --git a/southbound/southbound-impl/src/test/java/org/opendaylight/ovsdb/southbound/ovsdb/transact/TransactUtilsTest.java b/southbound/southbound-impl/src/test/java/org/opendaylight/ovsdb/southbound/ovsdb/transact/TransactUtilsTest.java
index 6e9778cec..ef9fe638e 100644
--- a/southbound/southbound-impl/src/test/java/org/opendaylight/ovsdb/southbound/ovsdb/transact/TransactUtilsTest.java
+++ b/southbound/southbound-impl/src/test/java/org/opendaylight/ovsdb/southbound/ovsdb/transact/TransactUtilsTest.java
@@ -18,7 +18,6 @@ import static org.mockito.Mockito.when;
 
 import com.google.common.base.Predicates;
 import com.google.common.collect.Maps;
-import java.lang.reflect.Field;
 import java.util.ArrayList;
 import java.util.HashMap;
 import java.util.HashSet;
@@ -33,6 +32,7 @@ import org.opendaylight.ovsdb.lib.notation.Mutation;
 import org.opendaylight.ovsdb.lib.notation.Mutator;
 import org.opendaylight.ovsdb.lib.notation.OvsdbSet;
 import org.opendaylight.ovsdb.lib.notation.UUID;
+import org.opendaylight.ovsdb.lib.operations.DefaultOperations;
 import org.opendaylight.ovsdb.lib.operations.Insert;
 import org.opendaylight.ovsdb.lib.operations.Mutate;
 import org.opendaylight.ovsdb.lib.operations.Operation;
@@ -209,13 +209,15 @@ public class TransactUtilsTest {
         TableSchema<GenericTableSchema> tableSchema = mock(TableSchema.class);
         ColumnSchema<GenericTableSchema, Map<String, String>> columnSchema = mock(ColumnSchema.class);
         InstanceIdentifierCodec instanceIdentifierCodec = mock(InstanceIdentifierCodec.class);
+        Operations ops = new DefaultOperations();
 
         PowerMockito.doReturn(mock(Mutate.class)).when(TransactUtils.class);
-        TransactUtils.stampInstanceIdentifierMutation(transaction, iid, tableSchema, columnSchema,
+        TransactUtils.stampInstanceIdentifierMutation(ops, transaction, iid, tableSchema, columnSchema,
             instanceIdentifierCodec);
 
         when(transaction.add(any(Operation.class))).thenReturn(transaction);
-        TransactUtils.stampInstanceIdentifier(transaction, iid, tableSchema, columnSchema, instanceIdentifierCodec);
+        TransactUtils.stampInstanceIdentifier(ops, transaction, iid, tableSchema, columnSchema,
+            instanceIdentifierCodec);
         verify(transaction).add(any(Operation.class));
     }
 
@@ -226,7 +228,7 @@ public class TransactUtilsTest {
         when(instanceIdentifierCodec.serialize(any(InstanceIdentifier.class))).thenReturn(IID_STRING);
 
         Mutate<GenericTableSchema> mutate = mock(Mutate.class);
-        Operations op = (Operations) setField("op");
+        Operations op = mock(Operations.class);
         Mockito.<Mutate<GenericTableSchema>>when(op.mutate(any(TableSchema.class))).thenReturn(mutate);
         when(mutate.addMutation(any(ColumnSchema.class), any(Mutator.class), any(Map.class))).thenReturn(mutate);
 
@@ -244,14 +246,7 @@ public class TransactUtilsTest {
         InstanceIdentifier<?> iid = InstanceIdentifier.create(NetworkTopology.class);
         TransactionBuilder transaction = mock(TransactionBuilder.class);
         TableSchema<GenericTableSchema> tableSchema = mock(TableSchema.class);
-        assertEquals(mutate, TransactUtils.stampInstanceIdentifierMutation(transaction, iid, tableSchema, columnSchema,
-                instanceIdentifierCodec));
-    }
-
-    private static Object setField(final String fieldName) throws Exception {
-        Field field = Operations.class.getDeclaredField(fieldName);
-        field.setAccessible(true);
-        field.set(field.get(Operations.class), mock(Operations.class));
-        return field.get(Operations.class);
+        assertEquals(mutate, TransactUtils.stampInstanceIdentifierMutation(op, transaction, iid, tableSchema,
+            columnSchema, instanceIdentifierCodec));
     }
 }
-- 
2.43.0


From 658082ccd481d101b74ce4e7ad62aaaa684a34e4 Mon Sep 17 00:00:00 2001
From: Robert Varga <robert.varga@pantheon.tech>
Date: Tue, 30 Jul 2024 19:09:01 +0200
Subject: [PATCH 3/4] WIP: Bump upstreams for 2024.09 Scandium

Adopt:
- odlparent-14.0.2
- infrautils-7.0.2
- yangtools-14.0.2
- mdsal-14.0.1
- controller-10.0.1
- aaa-0.20.0-SNAPSHOT
- netconf-8.0.0-SNAPSHOT

Change-Id: If63249920574aebe41c9a3066a0b1100c8f4dc30
Signed-off-by: Robert Varga <robert.varga@pantheon.tech>
---
 commons/binding-parent/pom.xml                            | 6 +++---
 commons/it/pom.xml                                        | 4 ++--
 commons/pom.xml                                           | 2 +-
 hwvtepsouthbound/hwvtepsouthbound-artifacts/pom.xml       | 2 +-
 .../hwvtepsouthbound-features/features/pom.xml            | 2 +-
 .../odl-ovsdb-hwvtepsouthbound-api/pom.xml                | 4 ++--
 .../odl-ovsdb-hwvtepsouthbound-rest/pom.xml               | 4 ++--
 .../odl-ovsdb-hwvtepsouthbound-test/pom.xml               | 2 +-
 .../odl-ovsdb-hwvtepsouthbound-ui/pom.xml                 | 4 ++--
 .../odl-ovsdb-hwvtepsouthbound/pom.xml                    | 2 +-
 hwvtepsouthbound/hwvtepsouthbound-features/pom.xml        | 2 +-
 hwvtepsouthbound/hwvtepsouthbound-impl/pom.xml            | 8 ++++----
 hwvtepsouthbound/hwvtepsouthbound-karaf/pom.xml           | 2 +-
 hwvtepsouthbound/pom.xml                                  | 2 +-
 library/artifacts/pom.xml                                 | 2 +-
 library/features/features/pom.xml                         | 2 +-
 library/features/odl-ovsdb-library/pom.xml                | 4 ++--
 library/features/pom.xml                                  | 2 +-
 library/karaf/pom.xml                                     | 2 +-
 library/pom.xml                                           | 2 +-
 pom.xml                                                   | 2 +-
 schemas/pom.xml                                           | 2 +-
 southbound/pom.xml                                        | 2 +-
 southbound/southbound-artifacts/pom.xml                   | 2 +-
 southbound/southbound-features/features/pom.xml           | 2 +-
 .../southbound-features/odl-ovsdb-southbound-api/pom.xml  | 4 ++--
 .../odl-ovsdb-southbound-impl-rest/pom.xml                | 4 ++--
 .../odl-ovsdb-southbound-impl-ui/pom.xml                  | 4 ++--
 .../southbound-features/odl-ovsdb-southbound-impl/pom.xml | 4 ++--
 .../southbound-features/odl-ovsdb-southbound-test/pom.xml | 2 +-
 southbound/southbound-features/pom.xml                    | 2 +-
 southbound/southbound-impl/pom.xml                        | 8 ++++----
 southbound/southbound-karaf/pom.xml                       | 2 +-
 .../opendaylight/ovsdb/utils/mdsal/utils/MdsalObject.java | 3 +--
 .../opendaylight/ovsdb/utils/mdsal/utils/MdsalUtils.java  | 2 +-
 .../ovsdb/utils/mdsal/utils/MdsalUtilsAsync.java          | 5 ++---
 .../utils/mdsal/utils/NotifyingDataChangeListener.java    | 2 +-
 .../ovsdb/utils/mdsal/utils/TransactionHistory.java       | 3 +--
 utils/odl-ovsdb-utils/pom.xml                             | 4 ++--
 utils/pom.xml                                             | 2 +-
 utils/yang-utils/pom.xml                                  | 4 ++--
 41 files changed, 61 insertions(+), 64 deletions(-)

diff --git a/commons/binding-parent/pom.xml b/commons/binding-parent/pom.xml
index 81ad31b38..a1a3decc1 100644
--- a/commons/binding-parent/pom.xml
+++ b/commons/binding-parent/pom.xml
@@ -11,7 +11,7 @@
   <parent>
     <groupId>org.opendaylight.mdsal</groupId>
     <artifactId>binding-parent</artifactId>
-    <version>13.0.1</version>
+    <version>14.0.1</version>
     <relativePath/>
   </parent>
 
@@ -25,14 +25,14 @@
       <dependency>
         <groupId>org.opendaylight.aaa</groupId>
         <artifactId>aaa-artifacts</artifactId>
-        <version>0.19.3</version>
+        <version>0.20.0-SNAPSHOT</version>
         <type>pom</type>
         <scope>import</scope>
       </dependency>
       <dependency>
         <groupId>org.opendaylight.infrautils</groupId>
         <artifactId>infrautils-artifacts</artifactId>
-        <version>6.0.6</version>
+        <version>7.0.2</version>
         <type>pom</type>
         <scope>import</scope>
       </dependency>
diff --git a/commons/it/pom.xml b/commons/it/pom.xml
index 5b88c51a3..206402570 100644
--- a/commons/it/pom.xml
+++ b/commons/it/pom.xml
@@ -12,7 +12,7 @@ and is available at http://www.eclipse.org/legal/epl-v10.html
   <parent>
     <groupId>org.opendaylight.controller</groupId>
     <artifactId>mdsal-it-parent</artifactId>
-    <version>9.0.2</version>
+    <version>10.0.1</version>
     <relativePath/>
   </parent>
 
@@ -70,7 +70,7 @@ and is available at http://www.eclipse.org/legal/epl-v10.html
       <dependency>
         <groupId>org.opendaylight.mdsal</groupId>
         <artifactId>mdsal-artifacts</artifactId>
-        <version>13.0.1</version>
+        <version>14.0.1</version>
         <type>pom</type>
         <scope>import</scope>
       </dependency>
diff --git a/commons/pom.xml b/commons/pom.xml
index cefc5d9d4..992a54fef 100644
--- a/commons/pom.xml
+++ b/commons/pom.xml
@@ -12,7 +12,7 @@ and is available at http://www.eclipse.org/legal/epl-v10.html
   <parent>
     <groupId>org.opendaylight.odlparent</groupId>
     <artifactId>odlparent-lite</artifactId>
-    <version>13.0.11</version>
+    <version>14.0.2</version>
     <relativePath/>
   </parent>
 
diff --git a/hwvtepsouthbound/hwvtepsouthbound-artifacts/pom.xml b/hwvtepsouthbound/hwvtepsouthbound-artifacts/pom.xml
index bfa90c062..8705fff79 100644
--- a/hwvtepsouthbound/hwvtepsouthbound-artifacts/pom.xml
+++ b/hwvtepsouthbound/hwvtepsouthbound-artifacts/pom.xml
@@ -13,7 +13,7 @@ and is available at http://www.eclipse.org/legal/epl-v10.html
   <parent>
     <groupId>org.opendaylight.odlparent</groupId>
     <artifactId>odlparent-lite</artifactId>
-    <version>13.0.11</version>
+    <version>14.0.2</version>
     <relativePath/>
   </parent>
 
diff --git a/hwvtepsouthbound/hwvtepsouthbound-features/features/pom.xml b/hwvtepsouthbound/hwvtepsouthbound-features/features/pom.xml
index 6d6db3c71..09de4666a 100644
--- a/hwvtepsouthbound/hwvtepsouthbound-features/features/pom.xml
+++ b/hwvtepsouthbound/hwvtepsouthbound-features/features/pom.xml
@@ -12,7 +12,7 @@ and is available at http://www.eclipse.org/legal/epl-v10.html
     <parent>
         <groupId>org.opendaylight.odlparent</groupId>
         <artifactId>feature-repo-parent</artifactId>
-        <version>13.0.11</version>
+        <version>14.0.2</version>
         <relativePath/>
     </parent>
 
diff --git a/hwvtepsouthbound/hwvtepsouthbound-features/odl-ovsdb-hwvtepsouthbound-api/pom.xml b/hwvtepsouthbound/hwvtepsouthbound-features/odl-ovsdb-hwvtepsouthbound-api/pom.xml
index 548f0137c..3fc7ee5cd 100644
--- a/hwvtepsouthbound/hwvtepsouthbound-features/odl-ovsdb-hwvtepsouthbound-api/pom.xml
+++ b/hwvtepsouthbound/hwvtepsouthbound-features/odl-ovsdb-hwvtepsouthbound-api/pom.xml
@@ -5,7 +5,7 @@
     <parent>
         <groupId>org.opendaylight.odlparent</groupId>
         <artifactId>single-feature-parent</artifactId>
-        <version>13.0.11</version>
+        <version>14.0.2</version>
         <relativePath/>
     </parent>
 
@@ -22,7 +22,7 @@
             <dependency>
                 <groupId>org.opendaylight.mdsal</groupId>
                 <artifactId>mdsal-artifacts</artifactId>
-                <version>13.0.1</version>
+                <version>14.0.1</version>
                 <type>pom</type>
                 <scope>import</scope>
             </dependency>
diff --git a/hwvtepsouthbound/hwvtepsouthbound-features/odl-ovsdb-hwvtepsouthbound-rest/pom.xml b/hwvtepsouthbound/hwvtepsouthbound-features/odl-ovsdb-hwvtepsouthbound-rest/pom.xml
index f04bc08e8..f1397c740 100644
--- a/hwvtepsouthbound/hwvtepsouthbound-features/odl-ovsdb-hwvtepsouthbound-rest/pom.xml
+++ b/hwvtepsouthbound/hwvtepsouthbound-features/odl-ovsdb-hwvtepsouthbound-rest/pom.xml
@@ -12,7 +12,7 @@ and is available at http://www.eclipse.org/legal/epl-v10.html
     <parent>
         <groupId>org.opendaylight.odlparent</groupId>
         <artifactId>single-feature-parent</artifactId>
-        <version>13.0.11</version>
+        <version>14.0.2</version>
         <relativePath/>
     </parent>
 
@@ -30,7 +30,7 @@ and is available at http://www.eclipse.org/legal/epl-v10.html
             <dependency>
                 <groupId>org.opendaylight.netconf</groupId>
                 <artifactId>netconf-artifacts</artifactId>
-                <version>7.0.4</version>
+                <version>8.0.0-SNAPSHOT</version>
                 <scope>import</scope>
                 <type>pom</type>
             </dependency>
diff --git a/hwvtepsouthbound/hwvtepsouthbound-features/odl-ovsdb-hwvtepsouthbound-test/pom.xml b/hwvtepsouthbound/hwvtepsouthbound-features/odl-ovsdb-hwvtepsouthbound-test/pom.xml
index 65d1012e2..213f8b648 100644
--- a/hwvtepsouthbound/hwvtepsouthbound-features/odl-ovsdb-hwvtepsouthbound-test/pom.xml
+++ b/hwvtepsouthbound/hwvtepsouthbound-features/odl-ovsdb-hwvtepsouthbound-test/pom.xml
@@ -12,7 +12,7 @@ and is available at http://www.eclipse.org/legal/epl-v10.html
     <parent>
         <groupId>org.opendaylight.odlparent</groupId>
         <artifactId>single-feature-parent</artifactId>
-        <version>13.0.11</version>
+        <version>14.0.2</version>
         <relativePath/>
     </parent>
 
diff --git a/hwvtepsouthbound/hwvtepsouthbound-features/odl-ovsdb-hwvtepsouthbound-ui/pom.xml b/hwvtepsouthbound/hwvtepsouthbound-features/odl-ovsdb-hwvtepsouthbound-ui/pom.xml
index d8eed6a0d..aaa6ae6b2 100644
--- a/hwvtepsouthbound/hwvtepsouthbound-features/odl-ovsdb-hwvtepsouthbound-ui/pom.xml
+++ b/hwvtepsouthbound/hwvtepsouthbound-features/odl-ovsdb-hwvtepsouthbound-ui/pom.xml
@@ -12,7 +12,7 @@ and is available at http://www.eclipse.org/legal/epl-v10.html
     <parent>
         <groupId>org.opendaylight.odlparent</groupId>
         <artifactId>single-feature-parent</artifactId>
-        <version>13.0.11</version>
+        <version>14.0.2</version>
         <relativePath/>
     </parent>
 
@@ -30,7 +30,7 @@ and is available at http://www.eclipse.org/legal/epl-v10.html
             <dependency>
                 <groupId>org.opendaylight.netconf</groupId>
                 <artifactId>netconf-artifacts</artifactId>
-                <version>7.0.4</version>
+                <version>8.0.0-SNAPSHOT</version>
                 <scope>import</scope>
                 <type>pom</type>
             </dependency>
diff --git a/hwvtepsouthbound/hwvtepsouthbound-features/odl-ovsdb-hwvtepsouthbound/pom.xml b/hwvtepsouthbound/hwvtepsouthbound-features/odl-ovsdb-hwvtepsouthbound/pom.xml
index 9a6e65969..6d1ed8fe3 100644
--- a/hwvtepsouthbound/hwvtepsouthbound-features/odl-ovsdb-hwvtepsouthbound/pom.xml
+++ b/hwvtepsouthbound/hwvtepsouthbound-features/odl-ovsdb-hwvtepsouthbound/pom.xml
@@ -12,7 +12,7 @@ and is available at http://www.eclipse.org/legal/epl-v10.html
     <parent>
         <groupId>org.opendaylight.odlparent</groupId>
         <artifactId>single-feature-parent</artifactId>
-        <version>13.0.11</version>
+        <version>14.0.2</version>
         <relativePath/>
     </parent>
 
diff --git a/hwvtepsouthbound/hwvtepsouthbound-features/pom.xml b/hwvtepsouthbound/hwvtepsouthbound-features/pom.xml
index 2be2710bc..01ad5182d 100644
--- a/hwvtepsouthbound/hwvtepsouthbound-features/pom.xml
+++ b/hwvtepsouthbound/hwvtepsouthbound-features/pom.xml
@@ -11,7 +11,7 @@ and is available at http://www.eclipse.org/legal/epl-v10.html INTERNAL
   <parent>
     <groupId>org.opendaylight.odlparent</groupId>
     <artifactId>odlparent-lite</artifactId>
-    <version>13.0.11</version>
+    <version>14.0.2</version>
     <relativePath/>
   </parent>
   <groupId>org.opendaylight.ovsdb</groupId>
diff --git a/hwvtepsouthbound/hwvtepsouthbound-impl/pom.xml b/hwvtepsouthbound/hwvtepsouthbound-impl/pom.xml
index 725a05c8d..b8dd0f484 100644
--- a/hwvtepsouthbound/hwvtepsouthbound-impl/pom.xml
+++ b/hwvtepsouthbound/hwvtepsouthbound-impl/pom.xml
@@ -24,6 +24,10 @@ and is available at http://www.eclipse.org/legal/epl-v10.html
   <name>ODL :: ovsdb :: ${project.artifactId}</name>
 
   <dependencies>
+    <dependency>
+      <groupId>org.opendaylight.yangtools</groupId>
+      <artifactId>binding-data-codec-api</artifactId>
+    </dependency>
     <dependency>
       <groupId>org.opendaylight.yangtools</groupId>
       <artifactId>yang-data-util</artifactId>
@@ -36,10 +40,6 @@ and is available at http://www.eclipse.org/legal/epl-v10.html
       <groupId>org.opendaylight.mdsal</groupId>
       <artifactId>mdsal-dom-api</artifactId>
     </dependency>
-    <dependency>
-      <groupId>org.opendaylight.mdsal</groupId>
-      <artifactId>mdsal-binding-dom-codec-api</artifactId>
-    </dependency>
     <dependency>
       <groupId>org.opendaylight.mdsal</groupId>
       <artifactId>mdsal-eos-binding-api</artifactId>
diff --git a/hwvtepsouthbound/hwvtepsouthbound-karaf/pom.xml b/hwvtepsouthbound/hwvtepsouthbound-karaf/pom.xml
index 6da0c8b36..9dda89052 100644
--- a/hwvtepsouthbound/hwvtepsouthbound-karaf/pom.xml
+++ b/hwvtepsouthbound/hwvtepsouthbound-karaf/pom.xml
@@ -9,7 +9,7 @@ and is available at http://www.eclipse.org/legal/epl-v10.html INTERNAL
   <parent>
     <groupId>org.opendaylight.odlparent</groupId>
     <artifactId>karaf4-parent</artifactId>
-    <version>13.0.11</version>
+    <version>14.0.2</version>
     <relativePath/>
   </parent>
   <modelVersion>4.0.0</modelVersion>
diff --git a/hwvtepsouthbound/pom.xml b/hwvtepsouthbound/pom.xml
index 1409433d3..12c19f4b5 100644
--- a/hwvtepsouthbound/pom.xml
+++ b/hwvtepsouthbound/pom.xml
@@ -11,7 +11,7 @@ and is available at http://www.eclipse.org/legal/epl-v10.html INTERNAL
   <parent>
     <groupId>org.opendaylight.odlparent</groupId>
     <artifactId>odlparent-lite</artifactId>
-    <version>13.0.11</version>
+    <version>14.0.2</version>
     <relativePath/>
   </parent>
 
diff --git a/library/artifacts/pom.xml b/library/artifacts/pom.xml
index 265a86277..c654e1158 100644
--- a/library/artifacts/pom.xml
+++ b/library/artifacts/pom.xml
@@ -13,7 +13,7 @@ and is available at http://www.eclipse.org/legal/epl-v10.html
   <parent>
     <groupId>org.opendaylight.odlparent</groupId>
     <artifactId>odlparent-lite</artifactId>
-    <version>13.0.11</version>
+    <version>14.0.2</version>
     <relativePath/>
   </parent>
 
diff --git a/library/features/features/pom.xml b/library/features/features/pom.xml
index af9a810a9..1dd804a54 100644
--- a/library/features/features/pom.xml
+++ b/library/features/features/pom.xml
@@ -12,7 +12,7 @@ and is available at http://www.eclipse.org/legal/epl-v10.html
     <parent>
         <groupId>org.opendaylight.odlparent</groupId>
         <artifactId>feature-repo-parent</artifactId>
-        <version>13.0.11</version>
+        <version>14.0.2</version>
         <relativePath/>
     </parent>
 
diff --git a/library/features/odl-ovsdb-library/pom.xml b/library/features/odl-ovsdb-library/pom.xml
index fd145e786..095815392 100644
--- a/library/features/odl-ovsdb-library/pom.xml
+++ b/library/features/odl-ovsdb-library/pom.xml
@@ -12,7 +12,7 @@ and is available at http://www.eclipse.org/legal/epl-v10.html
     <parent>
         <groupId>org.opendaylight.odlparent</groupId>
         <artifactId>single-feature-parent</artifactId>
-        <version>13.0.11</version>
+        <version>14.0.2</version>
         <relativePath/>
     </parent>
 
@@ -41,7 +41,7 @@ and is available at http://www.eclipse.org/legal/epl-v10.html
         <dependency>
             <groupId>org.opendaylight.aaa</groupId>
             <artifactId>odl-aaa-cert</artifactId>
-            <version>0.19.3</version>
+            <version>0.20.0-SNAPSHOT</version>
             <type>xml</type>
             <classifier>features</classifier>
         </dependency>
diff --git a/library/features/pom.xml b/library/features/pom.xml
index d3bd51b0c..9e0cd597b 100644
--- a/library/features/pom.xml
+++ b/library/features/pom.xml
@@ -11,7 +11,7 @@ and is available at http://www.eclipse.org/legal/epl-v10.html INTERNAL
   <parent>
     <groupId>org.opendaylight.odlparent</groupId>
     <artifactId>odlparent-lite</artifactId>
-    <version>13.0.11</version>
+    <version>14.0.2</version>
     <relativePath/>
   </parent>
   <groupId>org.opendaylight.ovsdb</groupId>
diff --git a/library/karaf/pom.xml b/library/karaf/pom.xml
index 2ad83d158..2aaeb58fd 100644
--- a/library/karaf/pom.xml
+++ b/library/karaf/pom.xml
@@ -9,7 +9,7 @@ and is available at http://www.eclipse.org/legal/epl-v10.html INTERNAL
   <parent>
     <groupId>org.opendaylight.odlparent</groupId>
     <artifactId>karaf4-parent</artifactId>
-    <version>13.0.11</version>
+    <version>14.0.2</version>
     <relativePath/>
   </parent>
   <modelVersion>4.0.0</modelVersion>
diff --git a/library/pom.xml b/library/pom.xml
index 8a3b6533b..0ea825461 100644
--- a/library/pom.xml
+++ b/library/pom.xml
@@ -11,7 +11,7 @@ and is available at http://www.eclipse.org/legal/epl-v10.html
   <parent>
     <groupId>org.opendaylight.odlparent</groupId>
     <artifactId>odlparent-lite</artifactId>
-    <version>13.0.11</version>
+    <version>14.0.2</version>
     <relativePath/>
   </parent>
 
diff --git a/pom.xml b/pom.xml
index 792d64795..889a6c774 100644
--- a/pom.xml
+++ b/pom.xml
@@ -12,7 +12,7 @@ and is available at http://www.eclipse.org/legal/epl-v10.html
   <parent>
     <groupId>org.opendaylight.odlparent</groupId>
     <artifactId>odlparent-lite</artifactId>
-    <version>13.0.11</version>
+    <version>14.0.2</version>
     <relativePath/>
   </parent>
 
diff --git a/schemas/pom.xml b/schemas/pom.xml
index 1ef50b9b3..41bfa899b 100644
--- a/schemas/pom.xml
+++ b/schemas/pom.xml
@@ -12,7 +12,7 @@ and is available at http://www.eclipse.org/legal/epl-v10.html
   <parent>
     <groupId>org.opendaylight.odlparent</groupId>
     <artifactId>odlparent-lite</artifactId>
-    <version>13.0.11</version>
+    <version>14.0.2</version>
     <relativePath/>
   </parent>
 
diff --git a/southbound/pom.xml b/southbound/pom.xml
index 89cb69d32..73b0e4560 100644
--- a/southbound/pom.xml
+++ b/southbound/pom.xml
@@ -10,7 +10,7 @@ and is available at http://www.eclipse.org/legal/epl-v10.html INTERNAL
   <parent>
     <groupId>org.opendaylight.odlparent</groupId>
     <artifactId>odlparent-lite</artifactId>
-    <version>13.0.11</version>
+    <version>14.0.2</version>
     <relativePath/>
   </parent>
 
diff --git a/southbound/southbound-artifacts/pom.xml b/southbound/southbound-artifacts/pom.xml
index c7c054129..67110daaa 100644
--- a/southbound/southbound-artifacts/pom.xml
+++ b/southbound/southbound-artifacts/pom.xml
@@ -13,7 +13,7 @@ and is available at http://www.eclipse.org/legal/epl-v10.html
   <parent>
     <groupId>org.opendaylight.odlparent</groupId>
     <artifactId>odlparent-lite</artifactId>
-    <version>13.0.11</version>
+    <version>14.0.2</version>
     <relativePath/>
   </parent>
 
diff --git a/southbound/southbound-features/features/pom.xml b/southbound/southbound-features/features/pom.xml
index 7af66361a..a495de2f4 100644
--- a/southbound/southbound-features/features/pom.xml
+++ b/southbound/southbound-features/features/pom.xml
@@ -12,7 +12,7 @@ and is available at http://www.eclipse.org/legal/epl-v10.html
     <parent>
         <groupId>org.opendaylight.odlparent</groupId>
         <artifactId>feature-repo-parent</artifactId>
-        <version>13.0.11</version>
+        <version>14.0.2</version>
         <relativePath/>
     </parent>
 
diff --git a/southbound/southbound-features/odl-ovsdb-southbound-api/pom.xml b/southbound/southbound-features/odl-ovsdb-southbound-api/pom.xml
index 0ccfc5a9d..52258d22f 100644
--- a/southbound/southbound-features/odl-ovsdb-southbound-api/pom.xml
+++ b/southbound/southbound-features/odl-ovsdb-southbound-api/pom.xml
@@ -12,7 +12,7 @@ and is available at http://www.eclipse.org/legal/epl-v10.html
     <parent>
         <groupId>org.opendaylight.odlparent</groupId>
         <artifactId>single-feature-parent</artifactId>
-        <version>13.0.11</version>
+        <version>14.0.2</version>
         <relativePath/>
     </parent>
 
@@ -29,7 +29,7 @@ and is available at http://www.eclipse.org/legal/epl-v10.html
             <dependency>
                 <groupId>org.opendaylight.mdsal</groupId>
                 <artifactId>mdsal-artifacts</artifactId>
-                <version>13.0.1</version>
+                <version>14.0.1</version>
                 <type>pom</type>
                 <scope>import</scope>
             </dependency>
diff --git a/southbound/southbound-features/odl-ovsdb-southbound-impl-rest/pom.xml b/southbound/southbound-features/odl-ovsdb-southbound-impl-rest/pom.xml
index 10c5f257e..d1ba82d83 100644
--- a/southbound/southbound-features/odl-ovsdb-southbound-impl-rest/pom.xml
+++ b/southbound/southbound-features/odl-ovsdb-southbound-impl-rest/pom.xml
@@ -12,7 +12,7 @@ and is available at http://www.eclipse.org/legal/epl-v10.html
     <parent>
         <groupId>org.opendaylight.odlparent</groupId>
         <artifactId>single-feature-parent</artifactId>
-        <version>13.0.11</version>
+        <version>14.0.2</version>
         <relativePath/>
     </parent>
 
@@ -30,7 +30,7 @@ and is available at http://www.eclipse.org/legal/epl-v10.html
             <dependency>
                 <groupId>org.opendaylight.netconf</groupId>
                 <artifactId>netconf-artifacts</artifactId>
-                <version>7.0.4</version>
+                <version>8.0.0-SNAPSHOT</version>
                 <scope>import</scope>
                 <type>pom</type>
             </dependency>
diff --git a/southbound/southbound-features/odl-ovsdb-southbound-impl-ui/pom.xml b/southbound/southbound-features/odl-ovsdb-southbound-impl-ui/pom.xml
index deb486bdf..86193332a 100644
--- a/southbound/southbound-features/odl-ovsdb-southbound-impl-ui/pom.xml
+++ b/southbound/southbound-features/odl-ovsdb-southbound-impl-ui/pom.xml
@@ -12,7 +12,7 @@ and is available at http://www.eclipse.org/legal/epl-v10.html
     <parent>
         <groupId>org.opendaylight.odlparent</groupId>
         <artifactId>single-feature-parent</artifactId>
-        <version>13.0.11</version>
+        <version>14.0.2</version>
         <relativePath/>
     </parent>
 
@@ -30,7 +30,7 @@ and is available at http://www.eclipse.org/legal/epl-v10.html
             <dependency>
                 <groupId>org.opendaylight.netconf</groupId>
                 <artifactId>netconf-artifacts</artifactId>
-                <version>7.0.4</version>
+                <version>8.0.0-SNAPSHOT</version>
                 <scope>import</scope>
                 <type>pom</type>
             </dependency>
diff --git a/southbound/southbound-features/odl-ovsdb-southbound-impl/pom.xml b/southbound/southbound-features/odl-ovsdb-southbound-impl/pom.xml
index 203b250b2..af5c5eee4 100644
--- a/southbound/southbound-features/odl-ovsdb-southbound-impl/pom.xml
+++ b/southbound/southbound-features/odl-ovsdb-southbound-impl/pom.xml
@@ -12,7 +12,7 @@ and is available at http://www.eclipse.org/legal/epl-v10.html
     <parent>
         <groupId>org.opendaylight.odlparent</groupId>
         <artifactId>single-feature-parent</artifactId>
-        <version>13.0.11</version>
+        <version>14.0.2</version>
         <relativePath/>
     </parent>
 
@@ -30,7 +30,7 @@ and is available at http://www.eclipse.org/legal/epl-v10.html
             <dependency>
                 <groupId>org.opendaylight.infrautils</groupId>
                 <artifactId>infrautils-artifacts</artifactId>
-                <version>6.0.6</version>
+                <version>7.0.2</version>
                 <type>pom</type>
                 <scope>import</scope>
             </dependency>
diff --git a/southbound/southbound-features/odl-ovsdb-southbound-test/pom.xml b/southbound/southbound-features/odl-ovsdb-southbound-test/pom.xml
index 0a54019a7..04dbb1b39 100644
--- a/southbound/southbound-features/odl-ovsdb-southbound-test/pom.xml
+++ b/southbound/southbound-features/odl-ovsdb-southbound-test/pom.xml
@@ -12,7 +12,7 @@ and is available at http://www.eclipse.org/legal/epl-v10.html
     <parent>
         <groupId>org.opendaylight.odlparent</groupId>
         <artifactId>single-feature-parent</artifactId>
-        <version>13.0.11</version>
+        <version>14.0.2</version>
         <relativePath/>
     </parent>
 
diff --git a/southbound/southbound-features/pom.xml b/southbound/southbound-features/pom.xml
index 6fb369204..7950d3f75 100644
--- a/southbound/southbound-features/pom.xml
+++ b/southbound/southbound-features/pom.xml
@@ -12,7 +12,7 @@ and is available at http://www.eclipse.org/legal/epl-v10.html
     <parent>
         <groupId>org.opendaylight.odlparent</groupId>
         <artifactId>odlparent-lite</artifactId>
-        <version>13.0.11</version>
+        <version>14.0.2</version>
         <relativePath/>
     </parent>
 
diff --git a/southbound/southbound-impl/pom.xml b/southbound/southbound-impl/pom.xml
index 5a958d04b..494da27e3 100644
--- a/southbound/southbound-impl/pom.xml
+++ b/southbound/southbound-impl/pom.xml
@@ -29,6 +29,10 @@ and is available at http://www.eclipse.org/legal/epl-v10.html
   </properties>
 
   <dependencies>
+    <dependency>
+      <groupId>org.opendaylight.yangtools</groupId>
+      <artifactId>binding-data-codec-api</artifactId>
+    </dependency>
     <dependency>
       <groupId>org.opendaylight.yangtools</groupId>
       <artifactId>yang-data-util</artifactId>
@@ -45,10 +49,6 @@ and is available at http://www.eclipse.org/legal/epl-v10.html
       <groupId>org.opendaylight.mdsal</groupId>
       <artifactId>mdsal-dom-api</artifactId>
     </dependency>
-    <dependency>
-      <groupId>org.opendaylight.mdsal</groupId>
-      <artifactId>mdsal-binding-dom-codec-api</artifactId>
-    </dependency>
     <dependency>
       <groupId>org.opendaylight.mdsal</groupId>
       <artifactId>mdsal-eos-binding-api</artifactId>
diff --git a/southbound/southbound-karaf/pom.xml b/southbound/southbound-karaf/pom.xml
index 498bdd025..aa19810e2 100644
--- a/southbound/southbound-karaf/pom.xml
+++ b/southbound/southbound-karaf/pom.xml
@@ -9,7 +9,7 @@ and is available at http://www.eclipse.org/legal/epl-v10.html INTERNAL
   <parent>
     <groupId>org.opendaylight.odlparent</groupId>
     <artifactId>karaf4-parent</artifactId>
-    <version>13.0.11</version>
+    <version>14.0.2</version>
     <relativePath/>
   </parent>
   <modelVersion>4.0.0</modelVersion>
diff --git a/utils/mdsal-utils/src/main/java/org/opendaylight/ovsdb/utils/mdsal/utils/MdsalObject.java b/utils/mdsal-utils/src/main/java/org/opendaylight/ovsdb/utils/mdsal/utils/MdsalObject.java
index 3d1caff65..719bfae1f 100644
--- a/utils/mdsal-utils/src/main/java/org/opendaylight/ovsdb/utils/mdsal/utils/MdsalObject.java
+++ b/utils/mdsal-utils/src/main/java/org/opendaylight/ovsdb/utils/mdsal/utils/MdsalObject.java
@@ -5,10 +5,9 @@
  * terms of the Eclipse Public License v1.0 which accompanies this distribution,
  * and is available at http://www.eclipse.org/legal/epl-v10.html
  */
-
 package org.opendaylight.ovsdb.utils.mdsal.utils;
 
-import org.opendaylight.yangtools.yang.binding.DataObject;
+import org.opendaylight.yangtools.binding.DataObject;
 import org.opendaylight.yangtools.yang.binding.InstanceIdentifier;
 
 public class MdsalObject {
diff --git a/utils/mdsal-utils/src/main/java/org/opendaylight/ovsdb/utils/mdsal/utils/MdsalUtils.java b/utils/mdsal-utils/src/main/java/org/opendaylight/ovsdb/utils/mdsal/utils/MdsalUtils.java
index c512f61fa..4b21e50b4 100644
--- a/utils/mdsal-utils/src/main/java/org/opendaylight/ovsdb/utils/mdsal/utils/MdsalUtils.java
+++ b/utils/mdsal-utils/src/main/java/org/opendaylight/ovsdb/utils/mdsal/utils/MdsalUtils.java
@@ -15,7 +15,7 @@ import org.opendaylight.mdsal.binding.api.ReadTransaction;
 import org.opendaylight.mdsal.binding.api.WriteTransaction;
 import org.opendaylight.mdsal.common.api.CommitInfo;
 import org.opendaylight.mdsal.common.api.LogicalDatastoreType;
-import org.opendaylight.yangtools.yang.binding.DataObject;
+import org.opendaylight.yangtools.binding.DataObject;
 import org.opendaylight.yangtools.yang.binding.InstanceIdentifier;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
diff --git a/utils/mdsal-utils/src/main/java/org/opendaylight/ovsdb/utils/mdsal/utils/MdsalUtilsAsync.java b/utils/mdsal-utils/src/main/java/org/opendaylight/ovsdb/utils/mdsal/utils/MdsalUtilsAsync.java
index 91383f1c5..2afe27bff 100644
--- a/utils/mdsal-utils/src/main/java/org/opendaylight/ovsdb/utils/mdsal/utils/MdsalUtilsAsync.java
+++ b/utils/mdsal-utils/src/main/java/org/opendaylight/ovsdb/utils/mdsal/utils/MdsalUtilsAsync.java
@@ -5,7 +5,6 @@
  * terms of the Eclipse Public License v1.0 which accompanies this distribution,
  * and is available at http://www.eclipse.org/legal/epl-v10.html
  */
-
 package org.opendaylight.ovsdb.utils.mdsal.utils;
 
 import com.google.common.util.concurrent.FluentFuture;
@@ -17,14 +16,14 @@ import org.opendaylight.mdsal.binding.api.ReadTransaction;
 import org.opendaylight.mdsal.binding.api.WriteTransaction;
 import org.opendaylight.mdsal.common.api.CommitInfo;
 import org.opendaylight.mdsal.common.api.LogicalDatastoreType;
-import org.opendaylight.yangtools.yang.binding.DataObject;
+import org.opendaylight.yangtools.binding.DataObject;
 import org.opendaylight.yangtools.yang.binding.InstanceIdentifier;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
 public class MdsalUtilsAsync {
-
     private static final Logger LOG = LoggerFactory.getLogger(MdsalUtilsAsync.class);
+
     private final DataBroker databroker;
 
     /**
diff --git a/utils/mdsal-utils/src/main/java/org/opendaylight/ovsdb/utils/mdsal/utils/NotifyingDataChangeListener.java b/utils/mdsal-utils/src/main/java/org/opendaylight/ovsdb/utils/mdsal/utils/NotifyingDataChangeListener.java
index 97b8c0363..56d88e656 100644
--- a/utils/mdsal-utils/src/main/java/org/opendaylight/ovsdb/utils/mdsal/utils/NotifyingDataChangeListener.java
+++ b/utils/mdsal-utils/src/main/java/org/opendaylight/ovsdb/utils/mdsal/utils/NotifyingDataChangeListener.java
@@ -17,8 +17,8 @@ import org.opendaylight.mdsal.binding.api.DataTreeChangeListener;
 import org.opendaylight.mdsal.binding.api.DataTreeIdentifier;
 import org.opendaylight.mdsal.binding.api.DataTreeModification;
 import org.opendaylight.mdsal.common.api.LogicalDatastoreType;
+import org.opendaylight.yangtools.binding.DataObject;
 import org.opendaylight.yangtools.concepts.Registration;
-import org.opendaylight.yangtools.yang.binding.DataObject;
 import org.opendaylight.yangtools.yang.binding.InstanceIdentifier;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
diff --git a/utils/mdsal-utils/src/main/java/org/opendaylight/ovsdb/utils/mdsal/utils/TransactionHistory.java b/utils/mdsal-utils/src/main/java/org/opendaylight/ovsdb/utils/mdsal/utils/TransactionHistory.java
index 692e57ae8..6e1fab7eb 100644
--- a/utils/mdsal-utils/src/main/java/org/opendaylight/ovsdb/utils/mdsal/utils/TransactionHistory.java
+++ b/utils/mdsal-utils/src/main/java/org/opendaylight/ovsdb/utils/mdsal/utils/TransactionHistory.java
@@ -5,11 +5,10 @@
  * terms of the Eclipse Public License v1.0 which accompanies this distribution,
  * and is available at http://www.eclipse.org/legal/epl-v10.html
  */
-
 package org.opendaylight.ovsdb.utils.mdsal.utils;
 
 import java.util.ArrayList;
-import org.opendaylight.yangtools.yang.binding.DataObject;
+import org.opendaylight.yangtools.binding.DataObject;
 import org.opendaylight.yangtools.yang.binding.InstanceIdentifier;
 
 public class TransactionHistory extends ArrayList<TransactionElement> {
diff --git a/utils/odl-ovsdb-utils/pom.xml b/utils/odl-ovsdb-utils/pom.xml
index c94b22c20..e10c8c946 100644
--- a/utils/odl-ovsdb-utils/pom.xml
+++ b/utils/odl-ovsdb-utils/pom.xml
@@ -12,7 +12,7 @@ and is available at http://www.eclipse.org/legal/epl-v10.html
     <parent>
         <groupId>org.opendaylight.odlparent</groupId>
         <artifactId>single-feature-parent</artifactId>
-        <version>13.0.11</version>
+        <version>14.0.2</version>
         <relativePath/>
     </parent>
 
@@ -29,7 +29,7 @@ and is available at http://www.eclipse.org/legal/epl-v10.html
             <dependency>
                 <groupId>org.opendaylight.controller</groupId>
                 <artifactId>controller-artifacts</artifactId>
-                <version>9.0.2</version>
+                <version>10.0.1</version>
                 <type>pom</type>
                 <scope>import</scope>
             </dependency>
diff --git a/utils/pom.xml b/utils/pom.xml
index efce0a0ef..0791b9468 100644
--- a/utils/pom.xml
+++ b/utils/pom.xml
@@ -12,7 +12,7 @@ and is available at http://www.eclipse.org/legal/epl-v10.html
   <parent>
     <groupId>org.opendaylight.odlparent</groupId>
     <artifactId>odlparent-lite</artifactId>
-    <version>13.0.11</version>
+    <version>14.0.2</version>
     <relativePath/>
   </parent>
 
diff --git a/utils/yang-utils/pom.xml b/utils/yang-utils/pom.xml
index 35848bfaa..b2cbdbb48 100644
--- a/utils/yang-utils/pom.xml
+++ b/utils/yang-utils/pom.xml
@@ -25,8 +25,8 @@ and is available at http://www.eclipse.org/legal/epl-v10.html
 
   <dependencies>
     <dependency>
-      <groupId>org.opendaylight.mdsal</groupId>
-      <artifactId>yang-binding</artifactId>
+      <groupId>org.opendaylight.yangtools</groupId>
+      <artifactId>binding-spec</artifactId>
     </dependency>
   </dependencies>
 
-- 
2.43.0


From fb4d2d5181363b73b98c618926c75157325c801d Mon Sep 17 00:00:00 2001
From: jenkins-releng <jenkins-releng@opendaylight.org>
Date: Tue, 30 Jul 2024 17:21:30 +0000
Subject: [PATCH 4/4] Release Validate

---
 commons/binding-parent/pom.xml                              | 4 ++--
 commons/it/pom.xml                                          | 2 +-
 commons/pom.xml                                             | 2 +-
 hwvtepsouthbound/hwvtepsouthbound-api/pom.xml               | 4 ++--
 hwvtepsouthbound/hwvtepsouthbound-artifacts/pom.xml         | 2 +-
 hwvtepsouthbound/hwvtepsouthbound-features/features/pom.xml | 2 +-
 .../odl-ovsdb-hwvtepsouthbound-api/pom.xml                  | 2 +-
 .../odl-ovsdb-hwvtepsouthbound-rest/pom.xml                 | 4 ++--
 .../odl-ovsdb-hwvtepsouthbound-test/pom.xml                 | 2 +-
 .../odl-ovsdb-hwvtepsouthbound-ui/pom.xml                   | 4 ++--
 .../odl-ovsdb-hwvtepsouthbound/pom.xml                      | 2 +-
 hwvtepsouthbound/hwvtepsouthbound-features/pom.xml          | 2 +-
 hwvtepsouthbound/hwvtepsouthbound-impl/pom.xml              | 2 +-
 hwvtepsouthbound/hwvtepsouthbound-it/pom.xml                | 2 +-
 hwvtepsouthbound/hwvtepsouthbound-karaf/pom.xml             | 2 +-
 hwvtepsouthbound/pom.xml                                    | 2 +-
 library/artifacts/pom.xml                                   | 2 +-
 library/features/features/pom.xml                           | 2 +-
 library/features/odl-ovsdb-library/pom.xml                  | 4 ++--
 library/features/pom.xml                                    | 2 +-
 library/impl/pom.xml                                        | 4 ++--
 library/it/pom.xml                                          | 6 +++---
 library/karaf/pom.xml                                       | 2 +-
 library/pom.xml                                             | 2 +-
 pom.xml                                                     | 2 +-
 schemas/hardwarevtep/pom.xml                                | 4 ++--
 schemas/openvswitch/pom.xml                                 | 4 ++--
 schemas/pom.xml                                             | 2 +-
 southbound/pom.xml                                          | 2 +-
 southbound/southbound-api/pom.xml                           | 4 ++--
 southbound/southbound-artifacts/pom.xml                     | 2 +-
 southbound/southbound-features/features/pom.xml             | 2 +-
 .../southbound-features/odl-ovsdb-southbound-api/pom.xml    | 2 +-
 .../odl-ovsdb-southbound-impl-rest/pom.xml                  | 4 ++--
 .../odl-ovsdb-southbound-impl-ui/pom.xml                    | 4 ++--
 .../southbound-features/odl-ovsdb-southbound-impl/pom.xml   | 2 +-
 .../southbound-features/odl-ovsdb-southbound-test/pom.xml   | 2 +-
 southbound/southbound-features/pom.xml                      | 2 +-
 southbound/southbound-impl/pom.xml                          | 2 +-
 southbound/southbound-it/pom.xml                            | 2 +-
 southbound/southbound-karaf/pom.xml                         | 2 +-
 utils/config/pom.xml                                        | 4 ++--
 utils/hwvtepsouthbound-utils/pom.xml                        | 4 ++--
 utils/mdsal-utils/pom.xml                                   | 4 ++--
 utils/odl-ovsdb-utils/pom.xml                               | 2 +-
 utils/ovsdb-it-utils/pom.xml                                | 2 +-
 utils/pom.xml                                               | 2 +-
 utils/servicehelper/pom.xml                                 | 4 ++--
 utils/southbound-utils/pom.xml                              | 4 ++--
 utils/yang-utils/pom.xml                                    | 4 ++--
 50 files changed, 69 insertions(+), 69 deletions(-)

diff --git a/commons/binding-parent/pom.xml b/commons/binding-parent/pom.xml
index a1a3decc1..4eedb0653 100644
--- a/commons/binding-parent/pom.xml
+++ b/commons/binding-parent/pom.xml
@@ -17,7 +17,7 @@
 
   <groupId>org.opendaylight.ovsdb</groupId>
   <artifactId>ovsdb-binding-parent</artifactId>
-  <version>1.19.0-SNAPSHOT</version>
+  <version>1.19.0</version>
   <packaging>pom</packaging>
 
   <dependencyManagement>
@@ -25,7 +25,7 @@
       <dependency>
         <groupId>org.opendaylight.aaa</groupId>
         <artifactId>aaa-artifacts</artifactId>
-        <version>0.20.0-SNAPSHOT</version>
+        <version>0.20.0</version>
         <type>pom</type>
         <scope>import</scope>
       </dependency>
diff --git a/commons/it/pom.xml b/commons/it/pom.xml
index 206402570..4fcee628d 100644
--- a/commons/it/pom.xml
+++ b/commons/it/pom.xml
@@ -18,7 +18,7 @@ and is available at http://www.eclipse.org/legal/epl-v10.html
 
   <groupId>org.opendaylight.ovsdb</groupId>
   <artifactId>it</artifactId>
-  <version>1.19.0-SNAPSHOT</version>
+  <version>1.19.0</version>
   <packaging>pom</packaging>
   <!-- <name> formatting is used by autorelease to parse and notify projects on
        build failure. Please do not modify this unless you have a good reason. -->
diff --git a/commons/pom.xml b/commons/pom.xml
index 992a54fef..1c2f6b379 100644
--- a/commons/pom.xml
+++ b/commons/pom.xml
@@ -18,7 +18,7 @@ and is available at http://www.eclipse.org/legal/epl-v10.html
 
   <groupId>org.opendaylight.ovsdb</groupId>
   <artifactId>parents</artifactId>
-  <version>1.19.0-SNAPSHOT</version>
+  <version>1.19.0</version>
   <!-- <name> formatting is used by autorelease to parse and notify projects on
        build failure. Please do not modify this unless you have a good reason. -->
   <name>ODL :: ovsdb :: ${project.artifactId}</name>
diff --git a/hwvtepsouthbound/hwvtepsouthbound-api/pom.xml b/hwvtepsouthbound/hwvtepsouthbound-api/pom.xml
index 868c73049..5983117e6 100644
--- a/hwvtepsouthbound/hwvtepsouthbound-api/pom.xml
+++ b/hwvtepsouthbound/hwvtepsouthbound-api/pom.xml
@@ -10,14 +10,14 @@ and is available at http://www.eclipse.org/legal/epl-v10.html
   <parent>
     <groupId>org.opendaylight.ovsdb</groupId>
     <artifactId>ovsdb-binding-parent</artifactId>
-    <version>1.19.0-SNAPSHOT</version>
+    <version>1.19.0</version>
     <relativePath>../../commons/binding-parent</relativePath>
   </parent>
 
   <modelVersion>4.0.0</modelVersion>
   <groupId>org.opendaylight.ovsdb</groupId>
   <artifactId>hwvtepsouthbound-api</artifactId>
-  <version>1.19.0-SNAPSHOT</version>
+  <version>1.19.0</version>
   <packaging>bundle</packaging>
   <!-- <name> formatting is used by autorelease to parse and notify projects on
        build failure. Please do not modify this unless you have a good reason. -->
diff --git a/hwvtepsouthbound/hwvtepsouthbound-artifacts/pom.xml b/hwvtepsouthbound/hwvtepsouthbound-artifacts/pom.xml
index 8705fff79..d37cc487a 100644
--- a/hwvtepsouthbound/hwvtepsouthbound-artifacts/pom.xml
+++ b/hwvtepsouthbound/hwvtepsouthbound-artifacts/pom.xml
@@ -19,7 +19,7 @@ and is available at http://www.eclipse.org/legal/epl-v10.html
 
   <groupId>org.opendaylight.ovsdb</groupId>
   <artifactId>hwvtepsouthbound-artifacts</artifactId>
-  <version>1.19.0-SNAPSHOT</version>
+  <version>1.19.0</version>
   <packaging>pom</packaging>
   <!-- <name> formatting is used by autorelease to parse and notify projects on
        build failure. Please do not modify this unless you have a good reason. -->
diff --git a/hwvtepsouthbound/hwvtepsouthbound-features/features/pom.xml b/hwvtepsouthbound/hwvtepsouthbound-features/features/pom.xml
index 09de4666a..01962d079 100644
--- a/hwvtepsouthbound/hwvtepsouthbound-features/features/pom.xml
+++ b/hwvtepsouthbound/hwvtepsouthbound-features/features/pom.xml
@@ -18,7 +18,7 @@ and is available at http://www.eclipse.org/legal/epl-v10.html
 
     <groupId>org.opendaylight.ovsdb</groupId>
     <artifactId>hwvtepsouthbound-features</artifactId>
-    <version>1.19.0-SNAPSHOT</version>
+    <version>1.19.0</version>
     <packaging>feature</packaging>
     <!-- <name> formatting is used by autorelease to parse and notify projects on
          build failure. Please do not modify this unless you have a good reason. -->
diff --git a/hwvtepsouthbound/hwvtepsouthbound-features/odl-ovsdb-hwvtepsouthbound-api/pom.xml b/hwvtepsouthbound/hwvtepsouthbound-features/odl-ovsdb-hwvtepsouthbound-api/pom.xml
index 3fc7ee5cd..b461ce58b 100644
--- a/hwvtepsouthbound/hwvtepsouthbound-features/odl-ovsdb-hwvtepsouthbound-api/pom.xml
+++ b/hwvtepsouthbound/hwvtepsouthbound-features/odl-ovsdb-hwvtepsouthbound-api/pom.xml
@@ -11,7 +11,7 @@
 
     <groupId>org.opendaylight.ovsdb</groupId>
     <artifactId>odl-ovsdb-hwvtepsouthbound-api</artifactId>
-    <version>1.19.0-SNAPSHOT</version>
+    <version>1.19.0</version>
     <packaging>feature</packaging>
     <!-- <name> formatting is used by autorelease to parse and notify projects on
          build failure. Please do not modify this unless you have a good reason. -->
diff --git a/hwvtepsouthbound/hwvtepsouthbound-features/odl-ovsdb-hwvtepsouthbound-rest/pom.xml b/hwvtepsouthbound/hwvtepsouthbound-features/odl-ovsdb-hwvtepsouthbound-rest/pom.xml
index f1397c740..ea0000f7f 100644
--- a/hwvtepsouthbound/hwvtepsouthbound-features/odl-ovsdb-hwvtepsouthbound-rest/pom.xml
+++ b/hwvtepsouthbound/hwvtepsouthbound-features/odl-ovsdb-hwvtepsouthbound-rest/pom.xml
@@ -18,7 +18,7 @@ and is available at http://www.eclipse.org/legal/epl-v10.html
 
     <groupId>org.opendaylight.ovsdb</groupId>
     <artifactId>odl-ovsdb-hwvtepsouthbound-rest</artifactId>
-    <version>1.19.0-SNAPSHOT</version>
+    <version>1.19.0</version>
     <packaging>feature</packaging>
 
     <!-- <name> formatting is used by autorelease to parse and notify projects on
@@ -30,7 +30,7 @@ and is available at http://www.eclipse.org/legal/epl-v10.html
             <dependency>
                 <groupId>org.opendaylight.netconf</groupId>
                 <artifactId>netconf-artifacts</artifactId>
-                <version>8.0.0-SNAPSHOT</version>
+                <version>8.0.0</version>
                 <scope>import</scope>
                 <type>pom</type>
             </dependency>
diff --git a/hwvtepsouthbound/hwvtepsouthbound-features/odl-ovsdb-hwvtepsouthbound-test/pom.xml b/hwvtepsouthbound/hwvtepsouthbound-features/odl-ovsdb-hwvtepsouthbound-test/pom.xml
index 213f8b648..a579a5a89 100644
--- a/hwvtepsouthbound/hwvtepsouthbound-features/odl-ovsdb-hwvtepsouthbound-test/pom.xml
+++ b/hwvtepsouthbound/hwvtepsouthbound-features/odl-ovsdb-hwvtepsouthbound-test/pom.xml
@@ -18,7 +18,7 @@ and is available at http://www.eclipse.org/legal/epl-v10.html
 
     <groupId>org.opendaylight.ovsdb</groupId>
     <artifactId>odl-ovsdb-hwvtepsouthbound-test</artifactId>
-    <version>1.19.0-SNAPSHOT</version>
+    <version>1.19.0</version>
     <packaging>feature</packaging>
 
     <!-- <name> formatting is used by autorelease to parse and notify projects on
diff --git a/hwvtepsouthbound/hwvtepsouthbound-features/odl-ovsdb-hwvtepsouthbound-ui/pom.xml b/hwvtepsouthbound/hwvtepsouthbound-features/odl-ovsdb-hwvtepsouthbound-ui/pom.xml
index aaa6ae6b2..02d2a6ca4 100644
--- a/hwvtepsouthbound/hwvtepsouthbound-features/odl-ovsdb-hwvtepsouthbound-ui/pom.xml
+++ b/hwvtepsouthbound/hwvtepsouthbound-features/odl-ovsdb-hwvtepsouthbound-ui/pom.xml
@@ -18,7 +18,7 @@ and is available at http://www.eclipse.org/legal/epl-v10.html
 
     <groupId>org.opendaylight.ovsdb</groupId>
     <artifactId>odl-ovsdb-hwvtepsouthbound-ui</artifactId>
-    <version>1.19.0-SNAPSHOT</version>
+    <version>1.19.0</version>
     <packaging>feature</packaging>
 
     <!-- <name> formatting is used by autorelease to parse and notify projects on
@@ -30,7 +30,7 @@ and is available at http://www.eclipse.org/legal/epl-v10.html
             <dependency>
                 <groupId>org.opendaylight.netconf</groupId>
                 <artifactId>netconf-artifacts</artifactId>
-                <version>8.0.0-SNAPSHOT</version>
+                <version>8.0.0</version>
                 <scope>import</scope>
                 <type>pom</type>
             </dependency>
diff --git a/hwvtepsouthbound/hwvtepsouthbound-features/odl-ovsdb-hwvtepsouthbound/pom.xml b/hwvtepsouthbound/hwvtepsouthbound-features/odl-ovsdb-hwvtepsouthbound/pom.xml
index 6d1ed8fe3..3a81bbbd7 100644
--- a/hwvtepsouthbound/hwvtepsouthbound-features/odl-ovsdb-hwvtepsouthbound/pom.xml
+++ b/hwvtepsouthbound/hwvtepsouthbound-features/odl-ovsdb-hwvtepsouthbound/pom.xml
@@ -18,7 +18,7 @@ and is available at http://www.eclipse.org/legal/epl-v10.html
 
     <groupId>org.opendaylight.ovsdb</groupId>
     <artifactId>odl-ovsdb-hwvtepsouthbound</artifactId>
-    <version>1.19.0-SNAPSHOT</version>
+    <version>1.19.0</version>
     <packaging>feature</packaging>
 
     <!-- <name> formatting is used by autorelease to parse and notify projects on
diff --git a/hwvtepsouthbound/hwvtepsouthbound-features/pom.xml b/hwvtepsouthbound/hwvtepsouthbound-features/pom.xml
index 01ad5182d..361f17ce9 100644
--- a/hwvtepsouthbound/hwvtepsouthbound-features/pom.xml
+++ b/hwvtepsouthbound/hwvtepsouthbound-features/pom.xml
@@ -16,7 +16,7 @@ and is available at http://www.eclipse.org/legal/epl-v10.html INTERNAL
   </parent>
   <groupId>org.opendaylight.ovsdb</groupId>
   <artifactId>hwvtepsouthbound-features-aggregator</artifactId>
-  <version>1.19.0-SNAPSHOT</version>
+  <version>1.19.0</version>
   <packaging>pom</packaging>
   <!-- <name> formatting is used by autorelease to parse and notify projects on
        build failure. Please do not modify this unless you have a good reason. -->
diff --git a/hwvtepsouthbound/hwvtepsouthbound-impl/pom.xml b/hwvtepsouthbound/hwvtepsouthbound-impl/pom.xml
index b8dd0f484..3ff2b153e 100644
--- a/hwvtepsouthbound/hwvtepsouthbound-impl/pom.xml
+++ b/hwvtepsouthbound/hwvtepsouthbound-impl/pom.xml
@@ -12,7 +12,7 @@ and is available at http://www.eclipse.org/legal/epl-v10.html
   <parent>
     <groupId>org.opendaylight.ovsdb</groupId>
     <artifactId>ovsdb-binding-parent</artifactId>
-    <version>1.19.0-SNAPSHOT</version>
+    <version>1.19.0</version>
     <relativePath>../../commons/binding-parent</relativePath>
   </parent>
 
diff --git a/hwvtepsouthbound/hwvtepsouthbound-it/pom.xml b/hwvtepsouthbound/hwvtepsouthbound-it/pom.xml
index b50f49bde..e12a261cf 100644
--- a/hwvtepsouthbound/hwvtepsouthbound-it/pom.xml
+++ b/hwvtepsouthbound/hwvtepsouthbound-it/pom.xml
@@ -11,7 +11,7 @@ and is available at http://www.eclipse.org/legal/epl-v10.html
   <parent>
     <groupId>org.opendaylight.ovsdb</groupId>
     <artifactId>it</artifactId>
-    <version>1.19.0-SNAPSHOT</version>
+    <version>1.19.0</version>
     <relativePath>../../commons/it</relativePath>
   </parent>
 
diff --git a/hwvtepsouthbound/hwvtepsouthbound-karaf/pom.xml b/hwvtepsouthbound/hwvtepsouthbound-karaf/pom.xml
index 9dda89052..94eff2564 100644
--- a/hwvtepsouthbound/hwvtepsouthbound-karaf/pom.xml
+++ b/hwvtepsouthbound/hwvtepsouthbound-karaf/pom.xml
@@ -15,7 +15,7 @@ and is available at http://www.eclipse.org/legal/epl-v10.html INTERNAL
   <modelVersion>4.0.0</modelVersion>
   <groupId>org.opendaylight.ovsdb</groupId>
   <artifactId>hwvtepsouthbound-karaf</artifactId>
-  <version>1.19.0-SNAPSHOT</version>
+  <version>1.19.0</version>
   <!-- <name> formatting is used by autorelease to parse and notify projects on
        build failure. Please do not modify this unless you have a good reason. -->
   <name>ODL :: ovsdb :: ${project.artifactId}</name>
diff --git a/hwvtepsouthbound/pom.xml b/hwvtepsouthbound/pom.xml
index 12c19f4b5..45f219daf 100644
--- a/hwvtepsouthbound/pom.xml
+++ b/hwvtepsouthbound/pom.xml
@@ -17,7 +17,7 @@ and is available at http://www.eclipse.org/legal/epl-v10.html INTERNAL
 
   <groupId>org.opendaylight.ovsdb</groupId>
   <artifactId>hwvtepsouthbound-aggregator</artifactId>
-  <version>1.19.0-SNAPSHOT</version>
+  <version>1.19.0</version>
   <!-- <name> formatting is used by autorelease to parse and notify projects on
        build failure. Please do not modify this unless you have a good reason. -->
   <name>ODL :: ovsdb :: ${project.artifactId}</name>
diff --git a/library/artifacts/pom.xml b/library/artifacts/pom.xml
index c654e1158..6c57507db 100644
--- a/library/artifacts/pom.xml
+++ b/library/artifacts/pom.xml
@@ -19,7 +19,7 @@ and is available at http://www.eclipse.org/legal/epl-v10.html
 
   <groupId>org.opendaylight.ovsdb</groupId>
   <artifactId>library-artifacts</artifactId>
-  <version>1.19.0-SNAPSHOT</version>
+  <version>1.19.0</version>
   <packaging>pom</packaging>
   <!-- <name> formatting is used by autorelease to parse and notify projects on
        build failure. Please do not modify this unless you have a good reason. -->
diff --git a/library/features/features/pom.xml b/library/features/features/pom.xml
index 1dd804a54..139dd749a 100644
--- a/library/features/features/pom.xml
+++ b/library/features/features/pom.xml
@@ -18,7 +18,7 @@ and is available at http://www.eclipse.org/legal/epl-v10.html
 
     <groupId>org.opendaylight.ovsdb</groupId>
     <artifactId>library-features</artifactId>
-    <version>1.19.0-SNAPSHOT</version>
+    <version>1.19.0</version>
     <packaging>feature</packaging>
     <!-- <name> formatting is used by autorelease to parse and notify projects on
          build failure. Please do not modify this unless you have a good reason. -->
diff --git a/library/features/odl-ovsdb-library/pom.xml b/library/features/odl-ovsdb-library/pom.xml
index 095815392..b2ac28ee8 100644
--- a/library/features/odl-ovsdb-library/pom.xml
+++ b/library/features/odl-ovsdb-library/pom.xml
@@ -18,7 +18,7 @@ and is available at http://www.eclipse.org/legal/epl-v10.html
 
     <groupId>org.opendaylight.ovsdb</groupId>
     <artifactId>odl-ovsdb-library</artifactId>
-    <version>1.19.0-SNAPSHOT</version>
+    <version>1.19.0</version>
     <packaging>feature</packaging>
 
     <!-- <name> formatting is used by autorelease to parse and notify projects on
@@ -41,7 +41,7 @@ and is available at http://www.eclipse.org/legal/epl-v10.html
         <dependency>
             <groupId>org.opendaylight.aaa</groupId>
             <artifactId>odl-aaa-cert</artifactId>
-            <version>0.20.0-SNAPSHOT</version>
+            <version>0.20.0</version>
             <type>xml</type>
             <classifier>features</classifier>
         </dependency>
diff --git a/library/features/pom.xml b/library/features/pom.xml
index 9e0cd597b..872fa8a2d 100644
--- a/library/features/pom.xml
+++ b/library/features/pom.xml
@@ -16,7 +16,7 @@ and is available at http://www.eclipse.org/legal/epl-v10.html INTERNAL
   </parent>
   <groupId>org.opendaylight.ovsdb</groupId>
   <artifactId>library-features-aggregator</artifactId>
-  <version>1.19.0-SNAPSHOT</version>
+  <version>1.19.0</version>
   <!-- <name> formatting is used by autorelease to parse and notify projects on
        build failure. Please do not modify this unless you have a good reason. -->
   <name>ODL :: ovsdb :: ${project.artifactId}</name>
diff --git a/library/impl/pom.xml b/library/impl/pom.xml
index ca171e037..2f563bbdb 100644
--- a/library/impl/pom.xml
+++ b/library/impl/pom.xml
@@ -12,14 +12,14 @@ and is available at http://www.eclipse.org/legal/epl-v10.html
   <parent>
     <groupId>org.opendaylight.ovsdb</groupId>
     <artifactId>ovsdb-binding-parent</artifactId>
-    <version>1.19.0-SNAPSHOT</version>
+    <version>1.19.0</version>
     <relativePath>../../commons/binding-parent</relativePath>
   </parent>
 
   <modelVersion>4.0.0</modelVersion>
   <groupId>org.opendaylight.ovsdb</groupId>
   <artifactId>library</artifactId>
-  <version>1.19.0-SNAPSHOT</version>
+  <version>1.19.0</version>
   <packaging>bundle</packaging>
   <!-- <name> formatting is used by autorelease to parse and notify projects on
        build failure. Please do not modify this unless you have a good reason. -->
diff --git a/library/it/pom.xml b/library/it/pom.xml
index 5c9f7624e..34ea198d6 100644
--- a/library/it/pom.xml
+++ b/library/it/pom.xml
@@ -11,14 +11,14 @@ and is available at http://www.eclipse.org/legal/epl-v10.html
   <parent>
     <groupId>org.opendaylight.ovsdb</groupId>
     <artifactId>it</artifactId>
-    <version>1.19.0-SNAPSHOT</version>
+    <version>1.19.0</version>
     <relativePath>../../commons/it</relativePath>
   </parent>
 
   <modelVersion>4.0.0</modelVersion>
   <groupId>org.opendaylight.ovsdb</groupId>
   <artifactId>library-it</artifactId>
-  <version>1.19.0-SNAPSHOT</version>
+  <version>1.19.0</version>
   <packaging>jar</packaging>
   <!-- <name> formatting is used by autorelease to parse and notify projects on
        build failure. Please do not modify this unless you have a good reason. -->
@@ -27,7 +27,7 @@ and is available at http://www.eclipse.org/legal/epl-v10.html
   <properties>
     <karaf.distro.groupId>org.opendaylight.ovsdb</karaf.distro.groupId>
     <karaf.distro.artifactId>library-karaf</karaf.distro.artifactId>
-    <karaf.distro.version>1.19.0-SNAPSHOT</karaf.distro.version>
+    <karaf.distro.version>1.19.0</karaf.distro.version>
     <karaf.distro.type>zip</karaf.distro.type>
   </properties>
 
diff --git a/library/karaf/pom.xml b/library/karaf/pom.xml
index 2aaeb58fd..959e888dc 100644
--- a/library/karaf/pom.xml
+++ b/library/karaf/pom.xml
@@ -15,7 +15,7 @@ and is available at http://www.eclipse.org/legal/epl-v10.html INTERNAL
   <modelVersion>4.0.0</modelVersion>
   <groupId>org.opendaylight.ovsdb</groupId>
   <artifactId>library-karaf</artifactId>
-  <version>1.19.0-SNAPSHOT</version>
+  <version>1.19.0</version>
   <!-- <name> formatting is used by autorelease to parse and notify projects on
        build failure. Please do not modify this unless you have a good reason. -->
   <name>ODL :: ovsdb :: ${project.artifactId}</name>
diff --git a/library/pom.xml b/library/pom.xml
index 0ea825461..b77dad528 100644
--- a/library/pom.xml
+++ b/library/pom.xml
@@ -17,7 +17,7 @@ and is available at http://www.eclipse.org/legal/epl-v10.html
 
   <groupId>org.opendaylight.ovsdb</groupId>
   <artifactId>library-aggregator</artifactId>
-  <version>1.19.0-SNAPSHOT</version>
+  <version>1.19.0</version>
   <!-- <name> formatting is used by autorelease to parse and notify projects on
        build failure. Please do not modify this unless you have a good reason. -->
   <name>ODL :: ovsdb :: ${project.artifactId}</name>
diff --git a/pom.xml b/pom.xml
index 889a6c774..29b1d74ee 100644
--- a/pom.xml
+++ b/pom.xml
@@ -18,7 +18,7 @@ and is available at http://www.eclipse.org/legal/epl-v10.html
 
   <groupId>org.opendaylight.ovsdb</groupId>
   <artifactId>ovsdb</artifactId>
-  <version>1.19.0-SNAPSHOT</version>
+  <version>1.19.0</version>
   <name>${project.artifactId}</name> <!-- Used by Sonar to set project name -->
   <packaging>pom</packaging>
 
diff --git a/schemas/hardwarevtep/pom.xml b/schemas/hardwarevtep/pom.xml
index 70c118d26..6c808344f 100644
--- a/schemas/hardwarevtep/pom.xml
+++ b/schemas/hardwarevtep/pom.xml
@@ -12,13 +12,13 @@ and is available at http://www.eclipse.org/legal/epl-v10.html
   <parent>
     <groupId>org.opendaylight.ovsdb</groupId>
     <artifactId>ovsdb-binding-parent</artifactId>
-    <version>1.19.0-SNAPSHOT</version>
+    <version>1.19.0</version>
     <relativePath>../../commons/binding-parent</relativePath>
   </parent>
 
   <groupId>org.opendaylight.ovsdb</groupId>
   <artifactId>schema.hardwarevtep</artifactId>
-  <version>1.19.0-SNAPSHOT</version>
+  <version>1.19.0</version>
   <packaging>bundle</packaging>
   <!-- <name> formatting is used by autorelease to parse and notify projects on
        build failure. Please do not modify this unless you have a good reason. -->
diff --git a/schemas/openvswitch/pom.xml b/schemas/openvswitch/pom.xml
index a2f5f2703..136c9f0f5 100644
--- a/schemas/openvswitch/pom.xml
+++ b/schemas/openvswitch/pom.xml
@@ -12,13 +12,13 @@ and is available at http://www.eclipse.org/legal/epl-v10.html
   <parent>
     <groupId>org.opendaylight.ovsdb</groupId>
     <artifactId>ovsdb-binding-parent</artifactId>
-    <version>1.19.0-SNAPSHOT</version>
+    <version>1.19.0</version>
     <relativePath>../../commons/binding-parent</relativePath>
   </parent>
 
   <groupId>org.opendaylight.ovsdb</groupId>
   <artifactId>schema.openvswitch</artifactId>
-  <version>1.19.0-SNAPSHOT</version>
+  <version>1.19.0</version>
   <packaging>bundle</packaging>
   <!-- <name> formatting is used by autorelease to parse and notify projects on
        build failure. Please do not modify this unless you have a good reason. -->
diff --git a/schemas/pom.xml b/schemas/pom.xml
index 41bfa899b..9b92bfdab 100644
--- a/schemas/pom.xml
+++ b/schemas/pom.xml
@@ -18,7 +18,7 @@ and is available at http://www.eclipse.org/legal/epl-v10.html
 
   <groupId>org.opendaylight.ovsdb</groupId>
   <artifactId>schemas</artifactId>
-  <version>1.19.0-SNAPSHOT</version>
+  <version>1.19.0</version>
   <!-- <name> formatting is used by autorelease to parse and notify projects on
        build failure. Please do not modify this unless you have a good reason. -->
   <name>ODL :: ovsdb :: ${project.artifactId}</name>
diff --git a/southbound/pom.xml b/southbound/pom.xml
index 73b0e4560..337a8fb11 100644
--- a/southbound/pom.xml
+++ b/southbound/pom.xml
@@ -16,7 +16,7 @@ and is available at http://www.eclipse.org/legal/epl-v10.html INTERNAL
 
   <groupId>org.opendaylight.ovsdb</groupId>
   <artifactId>southbound-aggregator</artifactId>
-  <version>1.19.0-SNAPSHOT</version>
+  <version>1.19.0</version>
   <!-- <name> formatting is used by autorelease to parse and notify projects on
        build failure. Please do not modify this unless you have a good reason. -->
   <name>ODL :: ovsdb :: ${project.artifactId}</name>
diff --git a/southbound/southbound-api/pom.xml b/southbound/southbound-api/pom.xml
index 36e640f16..3daa6b903 100644
--- a/southbound/southbound-api/pom.xml
+++ b/southbound/southbound-api/pom.xml
@@ -10,14 +10,14 @@ and is available at http://www.eclipse.org/legal/epl-v10.html
   <parent>
     <groupId>org.opendaylight.ovsdb</groupId>
     <artifactId>ovsdb-binding-parent</artifactId>
-    <version>1.19.0-SNAPSHOT</version>
+    <version>1.19.0</version>
     <relativePath>../../commons/binding-parent</relativePath>
   </parent>
 
   <modelVersion>4.0.0</modelVersion>
   <groupId>org.opendaylight.ovsdb</groupId>
   <artifactId>southbound-api</artifactId>
-  <version>1.19.0-SNAPSHOT</version>
+  <version>1.19.0</version>
   <packaging>bundle</packaging>
   <!-- <name> formatting is used by autorelease to parse and notify projects on
        build failure. Please do not modify this unless you have a good reason. -->
diff --git a/southbound/southbound-artifacts/pom.xml b/southbound/southbound-artifacts/pom.xml
index 67110daaa..708512f20 100644
--- a/southbound/southbound-artifacts/pom.xml
+++ b/southbound/southbound-artifacts/pom.xml
@@ -19,7 +19,7 @@ and is available at http://www.eclipse.org/legal/epl-v10.html
 
   <groupId>org.opendaylight.ovsdb</groupId>
   <artifactId>southbound-artifacts</artifactId>
-  <version>1.19.0-SNAPSHOT</version>
+  <version>1.19.0</version>
   <packaging>pom</packaging>
   <!-- <name> formatting is used by autorelease to parse and notify projects on
        build failure. Please do not modify this unless you have a good reason. -->
diff --git a/southbound/southbound-features/features/pom.xml b/southbound/southbound-features/features/pom.xml
index a495de2f4..abc39335b 100644
--- a/southbound/southbound-features/features/pom.xml
+++ b/southbound/southbound-features/features/pom.xml
@@ -18,7 +18,7 @@ and is available at http://www.eclipse.org/legal/epl-v10.html
 
     <groupId>org.opendaylight.ovsdb</groupId>
     <artifactId>southbound-features</artifactId>
-    <version>1.19.0-SNAPSHOT</version>
+    <version>1.19.0</version>
     <packaging>feature</packaging>
     <!-- <name> formatting is used by autorelease to parse and notify projects on
          build failure. Please do not modify this unless you have a good reason. -->
diff --git a/southbound/southbound-features/odl-ovsdb-southbound-api/pom.xml b/southbound/southbound-features/odl-ovsdb-southbound-api/pom.xml
index 52258d22f..62eca9cde 100644
--- a/southbound/southbound-features/odl-ovsdb-southbound-api/pom.xml
+++ b/southbound/southbound-features/odl-ovsdb-southbound-api/pom.xml
@@ -18,7 +18,7 @@ and is available at http://www.eclipse.org/legal/epl-v10.html
 
     <groupId>org.opendaylight.ovsdb</groupId>
     <artifactId>odl-ovsdb-southbound-api</artifactId>
-    <version>1.19.0-SNAPSHOT</version>
+    <version>1.19.0</version>
     <packaging>feature</packaging>
     <!-- <name> formatting is used by autorelease to parse and notify projects on
          build failure. Please do not modify this unless you have a good reason. -->
diff --git a/southbound/southbound-features/odl-ovsdb-southbound-impl-rest/pom.xml b/southbound/southbound-features/odl-ovsdb-southbound-impl-rest/pom.xml
index d1ba82d83..c9d05e918 100644
--- a/southbound/southbound-features/odl-ovsdb-southbound-impl-rest/pom.xml
+++ b/southbound/southbound-features/odl-ovsdb-southbound-impl-rest/pom.xml
@@ -18,7 +18,7 @@ and is available at http://www.eclipse.org/legal/epl-v10.html
 
     <groupId>org.opendaylight.ovsdb</groupId>
     <artifactId>odl-ovsdb-southbound-impl-rest</artifactId>
-    <version>1.19.0-SNAPSHOT</version>
+    <version>1.19.0</version>
     <packaging>feature</packaging>
 
     <!-- <name> formatting is used by autorelease to parse and notify projects on
@@ -30,7 +30,7 @@ and is available at http://www.eclipse.org/legal/epl-v10.html
             <dependency>
                 <groupId>org.opendaylight.netconf</groupId>
                 <artifactId>netconf-artifacts</artifactId>
-                <version>8.0.0-SNAPSHOT</version>
+                <version>8.0.0</version>
                 <scope>import</scope>
                 <type>pom</type>
             </dependency>
diff --git a/southbound/southbound-features/odl-ovsdb-southbound-impl-ui/pom.xml b/southbound/southbound-features/odl-ovsdb-southbound-impl-ui/pom.xml
index 86193332a..daa7637f0 100644
--- a/southbound/southbound-features/odl-ovsdb-southbound-impl-ui/pom.xml
+++ b/southbound/southbound-features/odl-ovsdb-southbound-impl-ui/pom.xml
@@ -18,7 +18,7 @@ and is available at http://www.eclipse.org/legal/epl-v10.html
 
     <groupId>org.opendaylight.ovsdb</groupId>
     <artifactId>odl-ovsdb-southbound-impl-ui</artifactId>
-    <version>1.19.0-SNAPSHOT</version>
+    <version>1.19.0</version>
     <packaging>feature</packaging>
 
     <!-- <name> formatting is used by autorelease to parse and notify projects on
@@ -30,7 +30,7 @@ and is available at http://www.eclipse.org/legal/epl-v10.html
             <dependency>
                 <groupId>org.opendaylight.netconf</groupId>
                 <artifactId>netconf-artifacts</artifactId>
-                <version>8.0.0-SNAPSHOT</version>
+                <version>8.0.0</version>
                 <scope>import</scope>
                 <type>pom</type>
             </dependency>
diff --git a/southbound/southbound-features/odl-ovsdb-southbound-impl/pom.xml b/southbound/southbound-features/odl-ovsdb-southbound-impl/pom.xml
index af5c5eee4..18870ad46 100644
--- a/southbound/southbound-features/odl-ovsdb-southbound-impl/pom.xml
+++ b/southbound/southbound-features/odl-ovsdb-southbound-impl/pom.xml
@@ -18,7 +18,7 @@ and is available at http://www.eclipse.org/legal/epl-v10.html
 
     <groupId>org.opendaylight.ovsdb</groupId>
     <artifactId>odl-ovsdb-southbound-impl</artifactId>
-    <version>1.19.0-SNAPSHOT</version>
+    <version>1.19.0</version>
     <packaging>feature</packaging>
 
     <!-- <name> formatting is used by autorelease to parse and notify projects on
diff --git a/southbound/southbound-features/odl-ovsdb-southbound-test/pom.xml b/southbound/southbound-features/odl-ovsdb-southbound-test/pom.xml
index 04dbb1b39..277f52c33 100644
--- a/southbound/southbound-features/odl-ovsdb-southbound-test/pom.xml
+++ b/southbound/southbound-features/odl-ovsdb-southbound-test/pom.xml
@@ -18,7 +18,7 @@ and is available at http://www.eclipse.org/legal/epl-v10.html
 
     <groupId>org.opendaylight.ovsdb</groupId>
     <artifactId>odl-ovsdb-southbound-test</artifactId>
-    <version>1.19.0-SNAPSHOT</version>
+    <version>1.19.0</version>
     <packaging>feature</packaging>
 
     <!-- <name> formatting is used by autorelease to parse and notify projects on
diff --git a/southbound/southbound-features/pom.xml b/southbound/southbound-features/pom.xml
index 7950d3f75..8d967c65b 100644
--- a/southbound/southbound-features/pom.xml
+++ b/southbound/southbound-features/pom.xml
@@ -18,7 +18,7 @@ and is available at http://www.eclipse.org/legal/epl-v10.html
 
     <groupId>org.opendaylight.ovsdb</groupId>
     <artifactId>southbound-features-aggregator</artifactId>
-    <version>1.19.0-SNAPSHOT</version>
+    <version>1.19.0</version>
     <!-- <name> formatting is used by autorelease to parse and notify projects on
          build failure. Please do not modify this unless you have a good reason. -->
     <name>ODL :: ovsdb :: ${project.artifactId}</name>
diff --git a/southbound/southbound-impl/pom.xml b/southbound/southbound-impl/pom.xml
index 494da27e3..c21424aac 100644
--- a/southbound/southbound-impl/pom.xml
+++ b/southbound/southbound-impl/pom.xml
@@ -12,7 +12,7 @@ and is available at http://www.eclipse.org/legal/epl-v10.html
   <parent>
     <groupId>org.opendaylight.ovsdb</groupId>
     <artifactId>ovsdb-binding-parent</artifactId>
-    <version>1.19.0-SNAPSHOT</version>
+    <version>1.19.0</version>
     <relativePath>../../commons/binding-parent</relativePath>
   </parent>
 
diff --git a/southbound/southbound-it/pom.xml b/southbound/southbound-it/pom.xml
index a927273bc..40098492d 100644
--- a/southbound/southbound-it/pom.xml
+++ b/southbound/southbound-it/pom.xml
@@ -12,7 +12,7 @@ and is available at http://www.eclipse.org/legal/epl-v10.html
   <parent>
     <groupId>org.opendaylight.ovsdb</groupId>
     <artifactId>it</artifactId>
-    <version>1.19.0-SNAPSHOT</version>
+    <version>1.19.0</version>
     <relativePath>../../commons/it</relativePath>
   </parent>
   <modelVersion>4.0.0</modelVersion>
diff --git a/southbound/southbound-karaf/pom.xml b/southbound/southbound-karaf/pom.xml
index aa19810e2..3fc30eee1 100644
--- a/southbound/southbound-karaf/pom.xml
+++ b/southbound/southbound-karaf/pom.xml
@@ -15,7 +15,7 @@ and is available at http://www.eclipse.org/legal/epl-v10.html INTERNAL
   <modelVersion>4.0.0</modelVersion>
   <groupId>org.opendaylight.ovsdb</groupId>
   <artifactId>southbound-karaf</artifactId>
-  <version>1.19.0-SNAPSHOT</version>
+  <version>1.19.0</version>
   <!-- <name> formatting is used by autorelease to parse and notify projects on
        build failure. Please do not modify this unless you have a good reason. -->
   <name>ODL :: ovsdb :: ${project.artifactId}</name>
diff --git a/utils/config/pom.xml b/utils/config/pom.xml
index 5548042d6..d67cfaedc 100644
--- a/utils/config/pom.xml
+++ b/utils/config/pom.xml
@@ -12,13 +12,13 @@ and is available at http://www.eclipse.org/legal/epl-v10.html
   <parent>
     <groupId>org.opendaylight.ovsdb</groupId>
     <artifactId>ovsdb-binding-parent</artifactId>
-    <version>1.19.0-SNAPSHOT</version>
+    <version>1.19.0</version>
     <relativePath>../../commons/binding-parent</relativePath>
   </parent>
 
   <groupId>org.opendaylight.ovsdb</groupId>
   <artifactId>utils.config</artifactId>
-  <version>1.19.0-SNAPSHOT</version>
+  <version>1.19.0</version>
   <!-- <name> formatting is used by autorelease to parse and notify projects on
        build failure. Please do not modify this unless you have a good reason. -->
   <name>ODL :: ovsdb :: ${project.artifactId}</name>
diff --git a/utils/hwvtepsouthbound-utils/pom.xml b/utils/hwvtepsouthbound-utils/pom.xml
index fb4586094..a76df9b44 100644
--- a/utils/hwvtepsouthbound-utils/pom.xml
+++ b/utils/hwvtepsouthbound-utils/pom.xml
@@ -11,13 +11,13 @@ and is available at http://www.eclipse.org/legal/epl-v10.html
   <parent>
     <groupId>org.opendaylight.ovsdb</groupId>
     <artifactId>ovsdb-binding-parent</artifactId>
-    <version>1.19.0-SNAPSHOT</version>
+    <version>1.19.0</version>
     <relativePath>../../commons/binding-parent</relativePath>
   </parent>
 
   <groupId>org.opendaylight.ovsdb</groupId>
   <artifactId>utils.hwvtepsouthbound-utils</artifactId>
-  <version>1.19.0-SNAPSHOT</version>
+  <version>1.19.0</version>
   <packaging>bundle</packaging>
   <!-- <name> formatting is used by autorelease to parse and notify projects on
        build failure. Please do not modify this unless you have a good reason. -->
diff --git a/utils/mdsal-utils/pom.xml b/utils/mdsal-utils/pom.xml
index 67b61b155..c111598f6 100644
--- a/utils/mdsal-utils/pom.xml
+++ b/utils/mdsal-utils/pom.xml
@@ -11,13 +11,13 @@ and is available at http://www.eclipse.org/legal/epl-v10.html
   <parent>
     <groupId>org.opendaylight.ovsdb</groupId>
     <artifactId>ovsdb-binding-parent</artifactId>
-    <version>1.19.0-SNAPSHOT</version>
+    <version>1.19.0</version>
     <relativePath>../../commons/binding-parent</relativePath>
   </parent>
 
   <groupId>org.opendaylight.ovsdb</groupId>
   <artifactId>utils.mdsal-utils</artifactId>
-  <version>1.19.0-SNAPSHOT</version>
+  <version>1.19.0</version>
   <packaging>bundle</packaging>
   <!-- <name> formatting is used by autorelease to parse and notify projects on
        build failure. Please do not modify this unless you have a good reason. -->
diff --git a/utils/odl-ovsdb-utils/pom.xml b/utils/odl-ovsdb-utils/pom.xml
index e10c8c946..1ed0ec03b 100644
--- a/utils/odl-ovsdb-utils/pom.xml
+++ b/utils/odl-ovsdb-utils/pom.xml
@@ -18,7 +18,7 @@ and is available at http://www.eclipse.org/legal/epl-v10.html
 
     <groupId>org.opendaylight.ovsdb</groupId>
     <artifactId>odl-ovsdb-utils</artifactId>
-    <version>1.19.0-SNAPSHOT</version>
+    <version>1.19.0</version>
     <packaging>feature</packaging>
     <!-- <name> formatting is used by autorelease to parse and notify projects on
          build failure. Please do not modify this unless you have a good reason. -->
diff --git a/utils/ovsdb-it-utils/pom.xml b/utils/ovsdb-it-utils/pom.xml
index b3ca76819..a40d87876 100644
--- a/utils/ovsdb-it-utils/pom.xml
+++ b/utils/ovsdb-it-utils/pom.xml
@@ -11,7 +11,7 @@ and is available at http://www.eclipse.org/legal/epl-v10.html
   <parent>
     <groupId>org.opendaylight.ovsdb</groupId>
     <artifactId>ovsdb-binding-parent</artifactId>
-    <version>1.19.0-SNAPSHOT</version>
+    <version>1.19.0</version>
     <relativePath>../../commons/binding-parent</relativePath>
   </parent>
 
diff --git a/utils/pom.xml b/utils/pom.xml
index 0791b9468..6ded4ced9 100644
--- a/utils/pom.xml
+++ b/utils/pom.xml
@@ -18,7 +18,7 @@ and is available at http://www.eclipse.org/legal/epl-v10.html
 
   <groupId>org.opendaylight.ovsdb</groupId>
   <artifactId>utils</artifactId>
-  <version>1.19.0-SNAPSHOT</version>
+  <version>1.19.0</version>
   <packaging>pom</packaging>
   <!-- <name> formatting is used by autorelease to parse and notify projects on
        build failure. Please do not modify this unless you have a good reason. -->
diff --git a/utils/servicehelper/pom.xml b/utils/servicehelper/pom.xml
index de0ee8ca5..9817b6a13 100644
--- a/utils/servicehelper/pom.xml
+++ b/utils/servicehelper/pom.xml
@@ -12,13 +12,13 @@ and is available at http://www.eclipse.org/legal/epl-v10.html
   <parent>
     <groupId>org.opendaylight.ovsdb</groupId>
     <artifactId>ovsdb-binding-parent</artifactId>
-    <version>1.19.0-SNAPSHOT</version>
+    <version>1.19.0</version>
     <relativePath>../../commons/binding-parent</relativePath>
   </parent>
 
   <groupId>org.opendaylight.ovsdb</groupId>
   <artifactId>utils.servicehelper</artifactId>
-  <version>1.19.0-SNAPSHOT</version>
+  <version>1.19.0</version>
   <packaging>bundle</packaging>
   <!-- <name> formatting is used by autorelease to parse and notify projects on
        build failure. Please do not modify this unless you have a good reason. -->
diff --git a/utils/southbound-utils/pom.xml b/utils/southbound-utils/pom.xml
index 7f6291acb..f0b256fb2 100644
--- a/utils/southbound-utils/pom.xml
+++ b/utils/southbound-utils/pom.xml
@@ -11,13 +11,13 @@ and is available at http://www.eclipse.org/legal/epl-v10.html
   <parent>
     <groupId>org.opendaylight.ovsdb</groupId>
     <artifactId>ovsdb-binding-parent</artifactId>
-    <version>1.19.0-SNAPSHOT</version>
+    <version>1.19.0</version>
     <relativePath>../../commons/binding-parent</relativePath>
   </parent>
 
   <groupId>org.opendaylight.ovsdb</groupId>
   <artifactId>utils.southbound-utils</artifactId>
-  <version>1.19.0-SNAPSHOT</version>
+  <version>1.19.0</version>
   <packaging>bundle</packaging>
   <!-- <name> formatting is used by autorelease to parse and notify projects on
        build failure. Please do not modify this unless you have a good reason. -->
diff --git a/utils/yang-utils/pom.xml b/utils/yang-utils/pom.xml
index b2cbdbb48..abff121b9 100644
--- a/utils/yang-utils/pom.xml
+++ b/utils/yang-utils/pom.xml
@@ -11,13 +11,13 @@ and is available at http://www.eclipse.org/legal/epl-v10.html
   <parent>
     <groupId>org.opendaylight.ovsdb</groupId>
     <artifactId>ovsdb-binding-parent</artifactId>
-    <version>1.19.0-SNAPSHOT</version>
+    <version>1.19.0</version>
     <relativePath>../../commons/binding-parent</relativePath>
   </parent>
 
   <groupId>org.opendaylight.ovsdb</groupId>
   <artifactId>utils.yang-utils</artifactId>
-  <version>1.19.0-SNAPSHOT</version>
+  <version>1.19.0</version>
   <packaging>bundle</packaging>
   <!-- <name> formatting is used by autorelease to parse and notify projects on
        build failure. Please do not modify this unless you have a good reason. -->
-- 
2.43.0