diff --git a/apps/k8s-node/api/src/main/java/org/onosproject/k8snode/api/Constants.java b/apps/k8s-node/api/src/main/java/org/onosproject/k8snode/api/Constants.java
index b6382d7..82b63cb 100644
--- a/apps/k8s-node/api/src/main/java/org/onosproject/k8snode/api/Constants.java
+++ b/apps/k8s-node/api/src/main/java/org/onosproject/k8snode/api/Constants.java
@@ -28,14 +28,14 @@
     public static final String LOCAL_BRIDGE = "kbr-local";
     public static final String TUNNEL_BRIDGE = "kbr-tun";
     public static final String EXTERNAL_ROUTER = "kbr-router";
-    public static final String INTEGRATION_TO_EXTERNAL_BRIDGE = "kbr-int-ex";
-    public static final String PHYSICAL_EXTERNAL_BRIDGE = "phy-kbr-ex";
-    public static final String INTEGRATION_TO_LOCAL_BRIDGE = "kbr-int-local";
-    public static final String LOCAL_TO_INTEGRATION_BRIDGE = "kbr-local-int";
-    public static final String EXTERNAL_TO_ROUTER = "kbr-ex-router";
-    public static final String ROUTER_TO_EXTERNAL = "kbr-router-ex";
-    public static final String INTEGRATION_TO_TUN_BRIDGE = "kbr-int-tun";
-    public static final String TUN_TO_INTEGRATION_BRIDGE = "kbr-tun-int";
+    public static final String INTEGRATION_TO_EXTERNAL_BRIDGE = "int-ex";
+    public static final String PHYSICAL_EXTERNAL_BRIDGE = "ex-int";
+    public static final String INTEGRATION_TO_LOCAL_BRIDGE = "int-local";
+    public static final String LOCAL_TO_INTEGRATION_BRIDGE = "local-int";
+    public static final String EXTERNAL_TO_ROUTER = "ex-router";
+    public static final String ROUTER_TO_EXTERNAL = "router-ex";
+    public static final String INTEGRATION_TO_TUN_BRIDGE = "int-tun";
+    public static final String TUN_TO_INTEGRATION_BRIDGE = "tun-int";
     public static final String VXLAN_TUNNEL = "vxlan";
     public static final String GRE_TUNNEL = "gre";
     public static final String GENEVE_TUNNEL = "geneve";
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 7e4b4bc..6bb2001 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
@@ -190,7 +190,24 @@
 
     @Override
     public DeviceId tunBridge() {
-        return tunBridge;
+
+        if (mode == PASSTHROUGH) {
+            K8sHostService hostService =
+                    DefaultServiceDirectory.getService(K8sHostService.class);
+            DeviceId deviceId = null;
+            for (K8sHost host : hostService.hosts()) {
+                if (host.nodeNames().contains(hostname())) {
+                    for (K8sTunnelBridge bridge : host.tunBridges()) {
+                        if (bridge.tunnelId() == segmentId()) {
+                            deviceId = bridge.deviceId();
+                        }
+                    }
+                }
+            }
+            return deviceId;
+        } else {
+            return tunBridge;
+        }
     }
 
     @Override
@@ -403,7 +420,28 @@
 
     @Override
     public PortNumber tunToIntgPortNum() {
-        return portNumber(tunBridge, tunToIntgPatchPortName());
+        if (mode() == PASSTHROUGH) {
+            K8sHostService hostService =
+                    DefaultServiceDirectory.getService(K8sHostService.class);
+            Port port = null;
+            for (K8sHost host : hostService.hosts()) {
+                if (host.nodeNames().contains(hostname())) {
+                    for (K8sTunnelBridge bridge : host.tunBridges()) {
+                        if (bridge.tunnelId() == segmentId()) {
+                            port = port(bridge.deviceId(), tunToIntgPatchPortName());
+                        }
+                    }
+                }
+            }
+
+            if (port == null) {
+                return null;
+            } else {
+                return port.number();
+            }
+        } else {
+            return portNumber(tunBridge, tunToIntgPatchPortName());
+        }
     }
 
     @Override
diff --git a/apps/k8s-node/app/src/main/java/org/onosproject/k8snode/codec/K8sNodeCodec.java b/apps/k8s-node/app/src/main/java/org/onosproject/k8snode/codec/K8sNodeCodec.java
index 4cc6609..2a938e0 100644
--- a/apps/k8s-node/app/src/main/java/org/onosproject/k8snode/codec/K8sNodeCodec.java
+++ b/apps/k8s-node/app/src/main/java/org/onosproject/k8snode/codec/K8sNodeCodec.java
@@ -44,6 +44,7 @@
     private static final String CLUSTER_NAME = "clusterName";
     private static final String HOSTNAME = "hostname";
     private static final String TYPE = "type";
+    private static final String MODE = "mode";
     private static final String SEGMENT_ID = "segmentId";
     private static final String MANAGEMENT_IP = "managementIp";
     private static final String DATA_IP = "dataIp";
@@ -67,6 +68,7 @@
                 .put(CLUSTER_NAME, node.clusterName())
                 .put(HOSTNAME, node.hostname())
                 .put(TYPE, node.type().name())
+                .put(MODE, node.mode().name())
                 .put(SEGMENT_ID, node.segmentId())
                 .put(STATE, node.state().name())
                 .put(MANAGEMENT_IP, node.managementIp().toString());
diff --git a/apps/k8s-node/app/src/main/java/org/onosproject/k8snode/impl/DefaultK8sApiConfigHandler.java b/apps/k8s-node/app/src/main/java/org/onosproject/k8snode/impl/DefaultK8sApiConfigHandler.java
index 342787c..cf78b6e 100644
--- a/apps/k8s-node/app/src/main/java/org/onosproject/k8snode/impl/DefaultK8sApiConfigHandler.java
+++ b/apps/k8s-node/app/src/main/java/org/onosproject/k8snode/impl/DefaultK8sApiConfigHandler.java
@@ -61,6 +61,7 @@
 import static org.onosproject.k8snode.api.K8sNode.Type.MASTER;
 import static org.onosproject.k8snode.api.K8sNode.Type.MINION;
 import static org.onosproject.k8snode.api.K8sNodeService.APP_ID;
+import static org.onosproject.k8snode.api.K8sNodeState.ON_BOARDED;
 import static org.onosproject.k8snode.api.K8sNodeState.PRE_ON_BOARD;
 import static org.onosproject.k8snode.util.K8sNodeUtil.k8sClient;
 import static org.slf4j.LoggerFactory.getLogger;
@@ -82,7 +83,7 @@
     private static final String DEFAULT_GATEWAY_IP = "127.0.0.1";
     private static final String DEFAULT_BRIDGE_IP = "127.0.0.1";
 
-    private static final long SLEEP_MS = 3000; // we wait 3s
+    private static final long SLEEP_MS = 10000; // we wait 10s
 
     @Reference(cardinality = ReferenceCardinality.MANDATORY)
     protected CoreService coreService;
@@ -151,9 +152,22 @@
             return;
         }
 
-        k8sClient.nodes().list().getItems().forEach(n ->
-            k8sNodeAdminService.createNode(buildK8sNode(n, config))
-        );
+        for (Node node : k8sClient.nodes().list().getItems()) {
+            K8sNode k8sNode = buildK8sNode(node, config);
+            k8sNodeAdminService.createNode(k8sNode);
+
+            while (k8sNodeAdminService.node(k8sNode.hostname()).state() != ON_BOARDED) {
+                try {
+                    sleep(SLEEP_MS);
+                } catch (InterruptedException e) {
+                    log.error("Exception caused during on-boarding state checking...");
+                }
+
+                if (k8sNodeAdminService.node(k8sNode.hostname()).state() == ON_BOARDED) {
+                    break;
+                }
+            }
+        }
     }
 
     private void bootstrapK8sHosts(K8sApiConfig config) {
@@ -299,13 +313,9 @@
 
                 bootstrapK8sNodes(config);
 
-                try {
-                    sleep(SLEEP_MS);
-                } catch (InterruptedException e) {
-                    log.error("Exception caused during init state checking...");
+                if (config.infos().size() > 0) {
+                    bootstrapK8sHosts(config);
                 }
-
-                bootstrapK8sHosts(config);
             }
         }
     }
diff --git a/apps/k8s-node/app/src/main/java/org/onosproject/k8snode/impl/DefaultK8sNodeHandler.java b/apps/k8s-node/app/src/main/java/org/onosproject/k8snode/impl/DefaultK8sNodeHandler.java
index 7e99f47..cec3d2c 100644
--- a/apps/k8s-node/app/src/main/java/org/onosproject/k8snode/impl/DefaultK8sNodeHandler.java
+++ b/apps/k8s-node/app/src/main/java/org/onosproject/k8snode/impl/DefaultK8sNodeHandler.java
@@ -354,42 +354,42 @@
         // integration bridge -> external bridge
         PatchDescription brIntExtPatchDesc =
                 DefaultPatchDescription.builder()
-                .deviceId(k8sNode.intgBridgeName())
-                .ifaceName(k8sNode.intgToExtPatchPortName())
-                .peer(k8sNode.extToIntgPatchPortName())
-                .build();
+                        .deviceId(k8sNode.intgBridgeName())
+                        .ifaceName(k8sNode.intgToExtPatchPortName())
+                        .peer(k8sNode.extToIntgPatchPortName())
+                        .build();
 
         // integration bridge -> tunnel bridge
         PatchDescription brIntTunPatchDesc =
                 DefaultPatchDescription.builder()
-                .deviceId(k8sNode.intgBridgeName())
-                .ifaceName(k8sNode.intgToTunPatchPortName())
-                .peer(k8sNode.tunToIntgPatchPortName())
-                .build();
+                        .deviceId(k8sNode.intgBridgeName())
+                        .ifaceName(k8sNode.intgToTunPatchPortName())
+                        .peer(k8sNode.tunToIntgPatchPortName())
+                        .build();
 
         // external bridge -> integration bridge
         PatchDescription brExtIntPatchDesc =
                 DefaultPatchDescription.builder()
-                .deviceId(k8sNode.extBridgeName())
-                .ifaceName(k8sNode.extToIntgPatchPortName())
-                .peer(k8sNode.intgToExtPatchPortName())
-                .build();
+                        .deviceId(k8sNode.extBridgeName())
+                        .ifaceName(k8sNode.extToIntgPatchPortName())
+                        .peer(k8sNode.intgToExtPatchPortName())
+                        .build();
 
         // integration bridge -> local bridge
         PatchDescription brIntLocalPatchDesc =
                 DefaultPatchDescription.builder()
-                .deviceId(k8sNode.intgBridgeName())
-                .ifaceName(k8sNode.intgToLocalPatchPortName())
-                .peer(k8sNode.localToIntgPatchPortName())
-                .build();
+                        .deviceId(k8sNode.intgBridgeName())
+                        .ifaceName(k8sNode.intgToLocalPatchPortName())
+                        .peer(k8sNode.localToIntgPatchPortName())
+                        .build();
 
         // local bridge -> integration bridge
         PatchDescription brLocalIntPatchDesc =
                 DefaultPatchDescription.builder()
-                .deviceId(k8sNode.localBridgeName())
-                .ifaceName(k8sNode.localToIntgPatchPortName())
-                .peer(k8sNode.intgToLocalPatchPortName())
-                .build();
+                        .deviceId(k8sNode.localBridgeName())
+                        .ifaceName(k8sNode.localToIntgPatchPortName())
+                        .peer(k8sNode.intgToLocalPatchPortName())
+                        .build();
 
         InterfaceConfig ifaceConfig = device.as(InterfaceConfig.class);
         ifaceConfig.addPatchMode(k8sNode.intgToExtPatchPortName(), brIntExtPatchDesc);
@@ -402,10 +402,10 @@
             // tunnel bridge -> integration bridge
             PatchDescription brTunIntPatchDesc =
                     DefaultPatchDescription.builder()
-                    .deviceId(k8sNode.tunBridgeName())
-                    .ifaceName(k8sNode.tunToIntgPatchPortName())
-                    .peer(k8sNode.intgToTunPatchPortName())
-                    .build();
+                            .deviceId(k8sNode.tunBridgeName())
+                            .ifaceName(k8sNode.tunToIntgPatchPortName())
+                            .peer(k8sNode.intgToTunPatchPortName())
+                            .build();
 
             ifaceConfig.addPatchMode(k8sNode.tunToIntgPatchPortName(), brTunIntPatchDesc);
         }
