diff --git a/apps/vtn/vtnmgr/src/main/java/org/onosproject/vtn/manager/impl/VtnManager.java b/apps/vtn/vtnmgr/src/main/java/org/onosproject/vtn/manager/impl/VtnManager.java
index 8f46dbe..2b794dc 100644
--- a/apps/vtn/vtnmgr/src/main/java/org/onosproject/vtn/manager/impl/VtnManager.java
+++ b/apps/vtn/vtnmgr/src/main/java/org/onosproject/vtn/manager/impl/VtnManager.java
@@ -715,24 +715,17 @@
                 .filter(d -> !("ovsdb:" + ipAddress).equals(d.id().toString()))
                 .forEach(d -> {
                     DriverHandler handler = driverService.createHandler(d.id());
-                    BridgeConfig bridgeConfig = handler
-                            .behaviour(BridgeConfig.class);
-                    Collection<BridgeDescription> bridgeDescriptions = bridgeConfig
-                            .getBridges();
-                    Iterator<BridgeDescription> it = bridgeDescriptions
-                            .iterator();
-                    while (it.hasNext()) {
-                        BridgeDescription sw = it.next();
-                        if (sw.bridgeName().name().equals(VtnConfig.DEFAULT_BRIDGE_NAME)) {
-                            List<Port> ports = deviceService.getPorts(sw.deviceId());
-                            ports.stream()
-                                    .filter(p -> p.annotations().value(AnnotationKeys.PORT_NAME)
-                                            .equalsIgnoreCase(tunnelName))
-                                    .forEach(p -> {
-                                l2ForwardService.programTunnelOut(sw.deviceId(),
-                                                                  segmentationId, p.number(),
-                                                                  dstMac, type, ipAddress);
-                            });
+                    BridgeConfig bridgeConfig = handler.behaviour(BridgeConfig.class);
+                    Collection<BridgeDescription> bridgeDescriptions = bridgeConfig.getBridges();
+                    for (BridgeDescription sw : bridgeDescriptions) {
+                        if (sw.name().equals(VtnConfig.DEFAULT_BRIDGE_NAME) &&
+                                sw.deviceId().isPresent()) {
+                            List<Port> ports = deviceService.getPorts(sw.deviceId().get());
+                            ports.stream().filter(p -> p.annotations().value(AnnotationKeys.PORT_NAME)
+                                    .equalsIgnoreCase(tunnelName))
+                                    .forEach(p -> l2ForwardService.programTunnelOut(
+                                            sw.deviceId().get(), segmentationId, p.number(),
+                                            dstMac, type, ipAddress));
                             break;
                         }
                     }
diff --git a/apps/vtn/vtnmgr/src/main/java/org/onosproject/vtn/util/VtnConfig.java b/apps/vtn/vtnmgr/src/main/java/org/onosproject/vtn/util/VtnConfig.java
index 3341779..7301a46 100644
--- a/apps/vtn/vtnmgr/src/main/java/org/onosproject/vtn/util/VtnConfig.java
+++ b/apps/vtn/vtnmgr/src/main/java/org/onosproject/vtn/util/VtnConfig.java
@@ -23,7 +23,9 @@
 import org.onosproject.net.DefaultAnnotations;
 import org.onosproject.net.PortNumber;
 import org.onosproject.net.behaviour.BridgeConfig;
+import org.onosproject.net.behaviour.BridgeDescription;
 import org.onosproject.net.behaviour.BridgeName;
+import org.onosproject.net.behaviour.DefaultBridgeDescription;
 import org.onosproject.net.behaviour.DefaultTunnelDescription;
 import org.onosproject.net.behaviour.IpTunnelEndPoint;
 import org.onosproject.net.behaviour.TunnelConfig;
@@ -62,7 +64,16 @@
      */
     public static void applyBridgeConfig(DriverHandler handler, String dpid, String exPortName) {
         BridgeConfig bridgeConfig = handler.behaviour(BridgeConfig.class);
-        bridgeConfig.addBridge(BridgeName.bridgeName(DEFAULT_BRIDGE_NAME), dpid, exPortName);
+        BridgeDescription bridgeDesc = DefaultBridgeDescription.builder()
+                .name(DEFAULT_BRIDGE_NAME)
+                .failMode(BridgeDescription.FailMode.SECURE)
+                .datapathId(dpid)
+                .disableInBand()
+                .enableLocalController()
+                .build();
+
+        bridgeConfig.addBridge(bridgeDesc);
+        bridgeConfig.addPort(BridgeName.bridgeName(DEFAULT_BRIDGE_NAME), exPortName);
     }
 
     /**
