diff --git a/apps/kubevirt-networking/app/src/main/java/org/onosproject/kubevirtnetworking/impl/KubevirtNetworkHandler.java b/apps/kubevirt-networking/app/src/main/java/org/onosproject/kubevirtnetworking/impl/KubevirtNetworkHandler.java
index 241b3c5..d4a90a5 100644
--- a/apps/kubevirt-networking/app/src/main/java/org/onosproject/kubevirtnetworking/impl/KubevirtNetworkHandler.java
+++ b/apps/kubevirt-networking/app/src/main/java/org/onosproject/kubevirtnetworking/impl/KubevirtNetworkHandler.java
@@ -504,21 +504,20 @@
         MacAddress routerMacAddress = getRouterMacAddress(router);
 
         if (routerMacAddress == null) {
-            log.warn("Setting gateway default eggress rule to gateway for tenant internal network because " +
-                    "there's no br-int port for device {}", gwDeviceId);
+            log.warn("Setting gateway default egress rule to gateway for tenant " +
+                "internal network because there's no br-int port for device {}", gwDeviceId);
             return;
         }
 
         KubevirtNode gwNode = kubevirtNodeService.node(gwDeviceId);
 
         if (gwNode == null) {
-            log.warn("Setting gateway default eggress rule to gateway for tenant internal network because " +
-                    "there's no gateway node for device {}", gwDeviceId);
+            log.warn("Setting gateway default egress rule to gateway for tenant " +
+                "internal network because there's no gateway node for device {}", gwDeviceId);
             return;
         }
 
-
-        PortNumber patchPortNumber = tunnelToTenantPort(workerNode, network);
+        PortNumber patchPortNumber = tunnelToTenantPort(deviceService, workerNode, network);
         if (patchPortNumber == null) {
             return;
         }
@@ -608,7 +607,7 @@
             return;
         }
 
-        PortNumber tunToIntPortNum = portNumber(gwNode.tunBridge(), TUNNEL_TO_INTEGRATION);
+        PortNumber tunToIntPortNum = portNumber(deviceService, gwNode.tunBridge(), TUNNEL_TO_INTEGRATION);
 
         TrafficSelector.Builder sBuilder = DefaultTrafficSelector.builder()
                 .matchTunnelId(Long.parseLong(network.segmentId()));
diff --git a/apps/kubevirt-networking/app/src/main/java/org/onosproject/kubevirtnetworking/impl/KubevirtSwitchingTenantHandler.java b/apps/kubevirt-networking/app/src/main/java/org/onosproject/kubevirtnetworking/impl/KubevirtSwitchingTenantHandler.java
index 3967d6a..3d0045d 100644
--- a/apps/kubevirt-networking/app/src/main/java/org/onosproject/kubevirtnetworking/impl/KubevirtSwitchingTenantHandler.java
+++ b/apps/kubevirt-networking/app/src/main/java/org/onosproject/kubevirtnetworking/impl/KubevirtSwitchingTenantHandler.java
@@ -152,14 +152,17 @@
         for (KubevirtNode localNode : kubevirtNodeService.completeNodes(WORKER)) {
 
             while (true) {
-                if (tunnelToTenantPort(localNode, network) != null) {
+                KubevirtNode updatedNode = kubevirtNodeService.node(localNode.hostname());
+                if (tunnelToTenantPort(deviceService, updatedNode, network) != null) {
                     break;
                 } else {
+                    log.info("Waiting for tunnel to tenant patch port creation " +
+                             "on ingress rule setup on node {}", updatedNode);
                     waitFor(3);
                 }
             }
 
-            PortNumber patchPortNumber = tunnelToTenantPort(localNode, network);
+            PortNumber patchPortNumber = tunnelToTenantPort(deviceService, localNode, network);
 
             TrafficSelector.Builder sBuilder = DefaultTrafficSelector.builder()
                     .matchTunnelId(Long.parseLong(network.segmentId()));
@@ -182,11 +185,24 @@
 
     private void setIngressRules(KubevirtNode node, boolean install) {
         for (KubevirtNetwork network : kubevirtNetworkService.tenantNetworks()) {
-            PortNumber patchPortNumber = tunnelToTenantPort(node, network);
-            if (patchPortNumber == null) {
+
+            if (node == null || node.type() != WORKER) {
                 return;
             }
 
+            while (true) {
+                KubevirtNode updatedNode = kubevirtNodeService.node(node.hostname());
+                if (tunnelToTenantPort(deviceService, updatedNode, network) != null) {
+                    break;
+                } else {
+                    log.info("Waiting for tunnel to tenant patch port creation " +
+                             "on ingress rule setup on node {}", updatedNode);
+                    waitFor(3);
+                }
+            }
+
+            PortNumber patchPortNumber = tunnelToTenantPort(deviceService, node, network);
+
             TrafficSelector.Builder sBuilder = DefaultTrafficSelector.builder()
                     .matchTunnelId(Long.parseLong(network.segmentId()));
 
@@ -236,11 +252,19 @@
                 continue;
             }
 
-            PortNumber patchPortNumber = tunnelToTenantPort(remoteNode, network);
-            if (patchPortNumber == null) {
-                return;
+            while (true) {
+                KubevirtNode updatedNode = kubevirtNodeService.node(localNode.hostname());
+                if (tunnelToTenantPort(deviceService, updatedNode, network) != null) {
+                    break;
+                } else {
+                    log.info("Waiting for tunnel to tenant patch port creation " +
+                             "on egress rule setup on node {}", updatedNode);
+                    waitFor(3);
+                }
             }
 
+            PortNumber patchPortNumber = tunnelToTenantPort(deviceService, remoteNode, network);
+
             PortNumber tunnelPortNumber = tunnelPort(remoteNode, network);
             if (tunnelPortNumber == null) {
                 return;
diff --git a/apps/kubevirt-networking/app/src/main/java/org/onosproject/kubevirtnetworking/util/KubevirtNetworkingUtil.java b/apps/kubevirt-networking/app/src/main/java/org/onosproject/kubevirtnetworking/util/KubevirtNetworkingUtil.java
index 89ff8b2..21353b9 100644
--- a/apps/kubevirt-networking/app/src/main/java/org/onosproject/kubevirtnetworking/util/KubevirtNetworkingUtil.java
+++ b/apps/kubevirt-networking/app/src/main/java/org/onosproject/kubevirtnetworking/util/KubevirtNetworkingUtil.java
@@ -27,7 +27,6 @@
 import org.apache.commons.net.util.SubnetUtils;
 import org.json.JSONException;
 import org.json.JSONObject;
-import org.onlab.osgi.DefaultServiceDirectory;
 import org.onlab.packet.ARP;
 import org.onlab.packet.Ethernet;
 import org.onlab.packet.Ip4Address;
@@ -405,11 +404,13 @@
     /**
      * Obtains the tunnel bridge to tenant bridge patch port number.
      *
+     * @param deviceService device service
      * @param node    kubevirt node
      * @param network kubevirt network
      * @return patch port number
      */
-    public static PortNumber tunnelToTenantPort(KubevirtNode node, KubevirtNetwork network) {
+    public static PortNumber tunnelToTenantPort(DeviceService deviceService,
+                             KubevirtNode node, KubevirtNetwork network) {
         if (network.segmentId() == null) {
             return null;
         }
@@ -419,7 +420,7 @@
         }
 
         String tunToTenantPortName = TUNNEL_TO_TENANT_PREFIX + segmentIdHex(network.segmentId());
-        return portNumber(node.tunBridge(), tunToTenantPortName);
+        return portNumber(deviceService, node.tunBridge(), tunToTenantPortName);
     }
 
     /**
@@ -463,8 +464,7 @@
         return "";
     }
 
-    public static PortNumber portNumber(DeviceId deviceId, String portName) {
-        DeviceService deviceService = DefaultServiceDirectory.getService(DeviceService.class);
+    public static PortNumber portNumber(DeviceService deviceService, DeviceId deviceId, String portName) {
         Port port = deviceService.getPorts(deviceId).stream()
                 .filter(p -> p.isEnabled() &&
                         Objects.equals(p.annotations().value(PORT_NAME), portName))
