diff --git a/apps/k8s-networking/app/src/main/java/org/onosproject/k8snetworking/cli/K8sSyncRulesCommand.java b/apps/k8s-networking/app/src/main/java/org/onosproject/k8snetworking/cli/K8sSyncRulesCommand.java
index 097292c..2a12e66 100644
--- a/apps/k8s-networking/app/src/main/java/org/onosproject/k8snetworking/cli/K8sSyncRulesCommand.java
+++ b/apps/k8s-networking/app/src/main/java/org/onosproject/k8snetworking/cli/K8sSyncRulesCommand.java
@@ -33,8 +33,8 @@
         description = "Synchronizes all kubernetes flow rules")
 public class K8sSyncRulesCommand extends AbstractShellCommand {
 
-    private static final long SLEEP_MS = 3000; // we wait 3s for init each node
-    private static final long TIMEOUT_MS = 10000; // we wait 10s
+    private static final long SLEEP_MS = 10000; // we wait 10s for init each node
+    private static final long TIMEOUT_MS = 30000; // we wait 30s
 
     private static final String SUCCESS_MSG = "Successfully synchronize flow rules for node %s!";
     private static final String FAIL_MSG = "Failed to synchronize flow rules for node %s.";
diff --git a/apps/k8s-networking/app/src/main/java/org/onosproject/k8snetworking/impl/K8sRoutingArpHandler.java b/apps/k8s-networking/app/src/main/java/org/onosproject/k8snetworking/impl/K8sRoutingArpHandler.java
index 9986760..8e80419 100644
--- a/apps/k8s-networking/app/src/main/java/org/onosproject/k8snetworking/impl/K8sRoutingArpHandler.java
+++ b/apps/k8s-networking/app/src/main/java/org/onosproject/k8snetworking/impl/K8sRoutingArpHandler.java
@@ -184,6 +184,11 @@
     }
 
     private void setPodArpRequestRule(K8sNode k8sNode, boolean install) {
+        if (k8sNode.extBridgePortNum() == null) {
+            log.warn("External bridge port is disabled.");
+            return;
+        }
+
         TrafficSelector selector = DefaultTrafficSelector.builder()
                 .matchInPort(k8sNode.extToIntgPatchPortNum())
                 .matchEthType(Ethernet.TYPE_ARP)
diff --git a/apps/k8s-networking/app/src/main/java/org/onosproject/k8snetworking/impl/K8sServiceHandler.java b/apps/k8s-networking/app/src/main/java/org/onosproject/k8snetworking/impl/K8sServiceHandler.java
index fd0dff0..93d913d 100644
--- a/apps/k8s-networking/app/src/main/java/org/onosproject/k8snetworking/impl/K8sServiceHandler.java
+++ b/apps/k8s-networking/app/src/main/java/org/onosproject/k8snetworking/impl/K8sServiceHandler.java
@@ -316,9 +316,7 @@
         });
 
         // setup load balancing rules using group table
-        k8sServiceService.services().stream()
-                .filter(s -> CLUSTER_IP.equals(s.getSpec().getType()))
-                .forEach(s -> setStatelessGroupFlowRules(deviceId, s, install));
+        k8sServiceService.services().forEach(s -> setStatelessGroupFlowRules(deviceId, s, install));
     }
 
     private void setSrcDstCidrRules(DeviceId deviceId, String srcCidr,
diff --git a/apps/k8s-networking/app/src/main/java/org/onosproject/k8snetworking/web/K8sManagementWebResource.java b/apps/k8s-networking/app/src/main/java/org/onosproject/k8snetworking/web/K8sManagementWebResource.java
index 5d23fab..1b96e70 100644
--- a/apps/k8s-networking/app/src/main/java/org/onosproject/k8snetworking/web/K8sManagementWebResource.java
+++ b/apps/k8s-networking/app/src/main/java/org/onosproject/k8snetworking/web/K8sManagementWebResource.java
@@ -53,15 +53,8 @@
 public class K8sManagementWebResource extends AbstractWebResource {
     private final Logger log = LoggerFactory.getLogger(getClass());
 
-    private static final String PORT_ID = "portId";
-    private static final String DEVICE_ID = "deviceId";
-    private static final String PORT_NUMBER = "portNumber";
-    private static final String IP_ADDRESS = "ipAddress";
-    private static final String MAC_ADDRESS = "macAddress";
-    private static final String NETWORK_ID = "networkId";
-
-    private static final long SLEEP_MIDDLE_MS = 3000; // we wait 3s
-    private static final long TIMEOUT_MS = 10000; // we wait 10s
+    private static final long SLEEP_MS = 10000; // we wait 10s
+    private static final long TIMEOUT_MS = 30000; // we wait 30s
 
     private final K8sApiConfigService configService = get(K8sApiConfigService.class);
     private final K8sPodAdminService podAdminService = get(K8sPodAdminService.class);
@@ -186,7 +179,7 @@
             long  waitMs = timeoutExpiredMs - System.currentTimeMillis();
 
             try {
-                sleep(SLEEP_MIDDLE_MS);
+                sleep(SLEEP_MS);
             } catch (InterruptedException e) {
                 log.error("Exception caused during node synchronization...");
             }
diff --git a/apps/k8s-node/api/src/main/java/org/onosproject/k8snode/api/DefaultK8sNode.java b/apps/k8s-node/api/src/main/java/org/onosproject/k8snode/api/DefaultK8sNode.java
index 551a339..7e4b4bc 100644
--- a/apps/k8s-node/api/src/main/java/org/onosproject/k8snode/api/DefaultK8sNode.java
+++ b/apps/k8s-node/api/src/main/java/org/onosproject/k8snode/api/DefaultK8sNode.java
@@ -373,7 +373,7 @@
 
     @Override
     public PortNumber intgBridgePortNum() {
-        return portNumber(intgBridge, intgBridgePortName());
+        return PortNumber.LOCAL;
     }
 
     @Override
@@ -384,7 +384,6 @@
     @Override
     public PortNumber intgToLocalPatchPortNum() {
         return portNumber(intgBridge, intgToLocalPatchPortName());
-
     }
 
     @Override
@@ -409,10 +408,7 @@
 
     @Override
     public PortNumber extBridgePortNum() {
-        if (this.extIntf == null) {
-            return null;
-        }
-        return portNumber(extBridge, extBridgePortName());
+        return PortNumber.LOCAL;
     }
 
     @Override
