diff --git a/apps/vtn/vtnmgr/pom.xml b/apps/vtn/vtnmgr/pom.xml
index 03e6670..4b360c2 100644
--- a/apps/vtn/vtnmgr/pom.xml
+++ b/apps/vtn/vtnmgr/pom.xml
@@ -49,5 +49,9 @@
             <artifactId>onos-app-vtn-rsc</artifactId>
             <version>${project.version}</version>
         </dependency>
+        <dependency>
+            <groupId>org.apache.karaf.shell</groupId>
+            <artifactId>org.apache.karaf.shell.console</artifactId>
+        </dependency>
     </dependencies>
 </project>
diff --git a/apps/vtn/vtnmgr/src/main/java/org/onosproject/vtn/cli/VtnCommand.java b/apps/vtn/vtnmgr/src/main/java/org/onosproject/vtn/cli/VtnCommand.java
new file mode 100644
index 0000000..92900f2
--- /dev/null
+++ b/apps/vtn/vtnmgr/src/main/java/org/onosproject/vtn/cli/VtnCommand.java
@@ -0,0 +1,38 @@
+/*
+ * Copyright 2015 Open Networking Laboratory
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.onosproject.vtn.cli;
+
+import org.apache.karaf.shell.commands.Command;
+import org.apache.karaf.shell.commands.Option;
+import org.onosproject.cli.AbstractShellCommand;
+import org.onosproject.vtn.manager.impl.VTNManager;
+
+/**
+ * Supports for updating the external gateway virtualPort.
+ */
+@Command(scope = "onos", name = "externalportname-set",
+        description = "Supports for setting the external port name.")
+public class VtnCommand extends AbstractShellCommand {
+
+    @Option(name = "-n", aliases = "--name", description = "external port name.", required = true,
+            multiValued = false)
+    String exPortName = "";
+
+    @Override
+    protected void execute() {
+        VTNManager.setExPortName(exPortName);
+    }
+}
diff --git a/apps/vtn/vtnmgr/src/main/java/org/onosproject/vtn/cli/package-info.java b/apps/vtn/vtnmgr/src/main/java/org/onosproject/vtn/cli/package-info.java
new file mode 100644
index 0000000..7368244
--- /dev/null
+++ b/apps/vtn/vtnmgr/src/main/java/org/onosproject/vtn/cli/package-info.java
@@ -0,0 +1,20 @@
+/*
+ * Copyright 2015 Open Networking Laboratory
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+/**
+ * VTN application that applies configuration and flows to the device.
+ */
+package org.onosproject.vtn.cli;
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 5b137c8..95a320f 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
@@ -26,6 +26,7 @@
 import java.util.List;
 import java.util.Map;
 import java.util.Set;
+import java.util.concurrent.ConcurrentHashMap;
 import java.util.stream.Collectors;
 
 import org.apache.felix.scr.annotations.Activate;
@@ -84,8 +85,12 @@
 import org.onosproject.vtn.table.L2ForwardService;
 import org.onosproject.vtn.table.L3ForwardService;
 import org.onosproject.vtn.table.SnatService;
+import org.onosproject.vtn.table.impl.ArpServiceImpl;
 import org.onosproject.vtn.table.impl.ClassifierServiceImpl;
+import org.onosproject.vtn.table.impl.DnatServiceImpl;
 import org.onosproject.vtn.table.impl.L2ForwardServiceImpl;
+import org.onosproject.vtn.table.impl.L3ForwardServiceImpl;
+import org.onosproject.vtn.table.impl.SnatServiceImpl;
 import org.onosproject.vtn.util.DataPathIdGenerator;
 import org.onosproject.vtn.util.VtnConfig;
 import org.onosproject.vtn.util.VtnData;
@@ -94,9 +99,6 @@
 import org.onosproject.vtnrsc.DefaultVirtualPort;
 import org.onosproject.vtnrsc.FixedIp;
 import org.onosproject.vtnrsc.FloatingIp;
-import org.onosproject.vtnrsc.Router;
-import org.onosproject.vtnrsc.RouterGateway;
-import org.onosproject.vtnrsc.RouterId;
 import org.onosproject.vtnrsc.RouterInterface;
 import org.onosproject.vtnrsc.SecurityGroup;
 import org.onosproject.vtnrsc.SegmentationId;
@@ -110,7 +112,6 @@
 import org.onosproject.vtnrsc.event.VtnRscEventFeedback;
 import org.onosproject.vtnrsc.event.VtnRscListener;
 import org.onosproject.vtnrsc.floatingip.FloatingIpService;
-import org.onosproject.vtnrsc.router.RouterService;
 import org.onosproject.vtnrsc.routerinterface.RouterInterfaceService;
 import org.onosproject.vtnrsc.service.VtnRscService;
 import org.onosproject.vtnrsc.subnet.SubnetService;
@@ -173,9 +174,6 @@
     protected FloatingIpService floatingIpService;
 
     @Reference(cardinality = ReferenceCardinality.MANDATORY_UNARY)
-    protected RouterService routerService;
-
-    @Reference(cardinality = ReferenceCardinality.MANDATORY_UNARY)
     protected RouterInterfaceService routerInterfaceService;
 
     private ApplicationId appId;
@@ -190,10 +188,10 @@
     private final DeviceListener deviceListener = new InnerDeviceListener();
     private final VtnRscListener l3EventListener = new VtnL3EventListener();
 
+    private static String exPortName = "eth0";
     private static final String IFACEID = "ifaceid";
     private static final String CONTROLLER_IP_KEY = "ipaddress";
     public static final String DRIVER_NAME = "onosfw";
-    private static final String EX_PORT_NAME = "eth0";
     private static final String VIRTUALPORT = "vtn-virtual-port";
     private static final String SWITCHES_OF_CONTROLLER = "switchesOfController";
     private static final String SWITCH_OF_LOCAL_HOST_PORTS = "switchOfLocalHostPorts";
@@ -215,9 +213,14 @@
         appId = coreService.registerApplication(APP_ID);
         classifierService = new ClassifierServiceImpl(appId);
         l2ForwardService = new L2ForwardServiceImpl(appId);
+        arpService = new ArpServiceImpl(appId);
+        l3ForwardService = new L3ForwardServiceImpl(appId);
+        snatService = new SnatServiceImpl(appId);
+        dnatService = new DnatServiceImpl(appId);
 
         deviceService.addListener(deviceListener);
         hostService.addListener(hostListener);
+        vtnRscService.addListener(l3EventListener);
 
         KryoNamespace.Builder serializer = KryoNamespace.newBuilder()
                                 .register(KryoNamespaces.API)
@@ -307,7 +310,7 @@
             config.driver(DRIVER_NAME);
             configService.applyConfig(deviceId, BasicDeviceConfig.class, config.node());
             // Add Bridge
-            VtnConfig.applyBridgeConfig(handler, dpid, EX_PORT_NAME);
+            VtnConfig.applyBridgeConfig(handler, dpid, exPortName);
             log.info("A new ovs is created in node {}", localIp.toString());
             switchesOfController.put(localIp, true);
         }
@@ -471,6 +474,28 @@
         if (virtualPort == null) {
             virtualPort = VtnData.getPort(vPortStore, virtualPortId);
         }
+        Iterator<FixedIp> fixip = virtualPort.fixedIps().iterator();
+        SubnetId subnetId = null;
+        if (fixip.hasNext()) {
+            subnetId = fixip.next().subnetId();
+        }
+        if (subnetId != null) {
+            Map<HostId, Host> hosts = new ConcurrentHashMap();
+            if (hostsOfSubnet.get(subnetId) != null) {
+                hosts = hostsOfSubnet.get(subnetId);
+            }
+            if (type == Objective.Operation.ADD) {
+                hosts.put(host.id(), host);
+                hostsOfSubnet.put(subnetId, hosts);
+            } else if (type == Objective.Operation.REMOVE) {
+                hosts.remove(host.id());
+                if (hosts.size() != 0) {
+                    hostsOfSubnet.put(subnetId, hosts);
+                } else {
+                    hostsOfSubnet.remove(subnetId);
+                }
+            }
+        }
 
         Iterable<Device> devices = deviceService.getAvailableDevices();
         PortNumber inPort = host.location().port();
@@ -887,15 +912,8 @@
         List gwIpMac = getGwIpAndMac(vmPort);
         IpAddress dstVmGwIp = (IpAddress) gwIpMac.get(0);
         MacAddress dstVmGwMac = (MacAddress) gwIpMac.get(1);
-        FixedIp fixedGwIp = getGwFixedIp(floatingIp);
-        MacAddress fGwMac = null;
-        if (fixedGwIp != null) {
-            VirtualPort gwPort = virtualPortService.getPort(fixedGwIp);
-            if (gwPort == null) {
-                gwPort = VtnData.getPort(vPortStore, fixedGwIp);
-            }
-            fGwMac = gwPort.macAddress();
-        }
+        List fGwIpMac = getGwIpAndMac(fipPort);
+        MacAddress fGwMac = (MacAddress) fGwIpMac.get(1);
         TenantNetwork vmNetwork = tenantNetworkService
                 .getNetwork(vmPort.networkId());
         TenantNetwork fipNetwork = tenantNetworkService
@@ -947,7 +965,7 @@
         Port exPort = null;
         for (Port port : ports) {
             String portName = port.annotations().value(AnnotationKeys.PORT_NAME);
-            if (portName != null && portName.equals(EX_PORT_NAME)) {
+            if (portName != null && portName.equals(exPortName)) {
                 exPort = port;
                 break;
             }
@@ -977,21 +995,6 @@
         return list;
     }
 
-    private FixedIp getGwFixedIp(FloatingIp floatingIp) {
-        RouterId routerId = floatingIp.routerId();
-        Router router = routerService.getRouter(routerId);
-        RouterGateway routerGateway = router.externalGatewayInfo();
-        Iterable<FixedIp> externalFixedIps = routerGateway.externalFixedIps();
-        FixedIp fixedGwIp = null;
-        if (externalFixedIps != null) {
-            Iterator<FixedIp> exFixedIps = externalFixedIps.iterator();
-            if (exFixedIps.hasNext()) {
-                fixedGwIp = exFixedIps.next();
-            }
-        }
-        return fixedGwIp;
-    }
-
     private void applyHostMonitoredL3Rules(Host host,
                                            Objective.Operation operation) {
         String ifaceId = host.annotations().value(IFACEID);
@@ -1060,4 +1063,8 @@
                                    l3vni, exPort, operation);
         }
     }
+
+    public static void setExPortName(String name) {
+        exPortName = name;
+    }
 }
diff --git a/apps/vtn/vtnmgr/src/main/resources/OSGI-INF/blueprint/shell-config.xml b/apps/vtn/vtnmgr/src/main/resources/OSGI-INF/blueprint/shell-config.xml
new file mode 100644
index 0000000..ecc6de0
--- /dev/null
+++ b/apps/vtn/vtnmgr/src/main/resources/OSGI-INF/blueprint/shell-config.xml
@@ -0,0 +1,23 @@
+<!--
+  ~ Copyright 2015 Open Networking Laboratory
+  ~
+  ~ Licensed under the Apache License, Version 2.0 (the "License");
+  ~ you may not use this file except in compliance with the License.
+  ~ You may obtain a copy of the License at
+  ~
+  ~     http://www.apache.org/licenses/LICENSE-2.0
+  ~
+  ~ Unless required by applicable law or agreed to in writing, software
+  ~ distributed under the License is distributed on an "AS IS" BASIS,
+  ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+  ~ See the License for the specific language governing permissions and
+  ~ limitations under the License.
+  -->
+<blueprint xmlns="http://www.osgi.org/xmlns/blueprint/v1.0.0">
+
+  <command-bundle xmlns="http://karaf.apache.org/xmlns/shell/v1.1.0">
+    <command>
+      <action class="org.onosproject.vtn.cli.VtnCommand"/>
+    </command>
+  </command-bundle>
+</blueprint>
