diff --git a/apps/scalablegateway/src/main/java/org/onosproject/scalablegateway/api/GatewayNode.java b/apps/scalablegateway/src/main/java/org/onosproject/scalablegateway/api/GatewayNode.java
index 3b9af7c..c02c1ec 100644
--- a/apps/scalablegateway/src/main/java/org/onosproject/scalablegateway/api/GatewayNode.java
+++ b/apps/scalablegateway/src/main/java/org/onosproject/scalablegateway/api/GatewayNode.java
@@ -15,12 +15,9 @@
  */
 package org.onosproject.scalablegateway.api;
 
-import com.google.common.collect.ImmutableList;
 import org.onlab.packet.Ip4Address;
 import org.onosproject.net.DeviceId;
 
-import java.util.List;
-
 import static com.google.common.base.Preconditions.checkNotNull;
 
 /**
@@ -28,13 +25,13 @@
  */
 public final class GatewayNode {
     private final DeviceId gatewayDeviceId;
-    private final List<String> gatewayExternalInterfaceNames;
+    private final String gatewayExternalInterfaceName;
     private final Ip4Address dataIpAddress;
 
-    private GatewayNode(DeviceId gatewayDeviceId, List<String> gatewayExternalInterfaceNames,
+    private GatewayNode(DeviceId gatewayDeviceId, String gatewayExternalInterfaceName,
                         Ip4Address dataIpAddress) {
         this.gatewayDeviceId = gatewayDeviceId;
-        this.gatewayExternalInterfaceNames = gatewayExternalInterfaceNames;
+        this.gatewayExternalInterfaceName = gatewayExternalInterfaceName;
         this.dataIpAddress = dataIpAddress;
     }
 
@@ -48,12 +45,12 @@
     }
 
     /**
-     * Returns the list of gateway`s interface names.
+     * Returns the gateway`s interface name.
      *
-     * @return The list of interface names
+     * @return The gateway`s interface name
      */
-    public List<String> getGatewayExternalInterfaceNames() {
-        return ImmutableList.copyOf(gatewayExternalInterfaceNames);
+    public String getGatewayExternalInterfaceName() {
+        return gatewayExternalInterfaceName;
     }
 
     /**
@@ -80,7 +77,7 @@
     public static final class Builder {
 
         private DeviceId gatewayDeviceId;
-        private List<String> gatewayExternalInterfaceNames;
+        private String gatewayExternalInterfaceName;
         private Ip4Address dataIpAddress;
 
         /**
@@ -95,13 +92,13 @@
         }
 
         /**
-         * Sets the list of gateway`s interface names.
+         * Sets the gateway`s interface name.
          *
-         * @param names The list of gateway`s interface name
+         * @param name The gateway`s interface name
          * @return Builder object
          */
-        public Builder gatewayExternalInterfaceNames(List<String> names) {
-            this.gatewayExternalInterfaceNames = names;
+        public Builder gatewayExternalInterfaceName(String name) {
+            this.gatewayExternalInterfaceName = name;
             return this;
         }
 
@@ -122,7 +119,7 @@
          * @return GatewayNode object
          */
         public GatewayNode build() {
-            return new GatewayNode(checkNotNull(gatewayDeviceId), checkNotNull(gatewayExternalInterfaceNames),
+            return new GatewayNode(checkNotNull(gatewayDeviceId), checkNotNull(gatewayExternalInterfaceName),
                     checkNotNull(dataIpAddress));
         }
     }
diff --git a/apps/scalablegateway/src/main/java/org/onosproject/scalablegateway/api/GatewayNodeConfig.java b/apps/scalablegateway/src/main/java/org/onosproject/scalablegateway/api/GatewayNodeConfig.java
index 4ab87b4..0d4f561 100644
--- a/apps/scalablegateway/src/main/java/org/onosproject/scalablegateway/api/GatewayNodeConfig.java
+++ b/apps/scalablegateway/src/main/java/org/onosproject/scalablegateway/api/GatewayNodeConfig.java
@@ -18,7 +18,6 @@
 
 import com.fasterxml.jackson.databind.JsonNode;
 import com.fasterxml.jackson.databind.node.ObjectNode;
-import com.google.common.collect.Lists;
 import com.google.common.collect.Sets;
 import org.onlab.packet.Ip4Address;
 import org.onosproject.core.ApplicationId;
@@ -26,8 +25,6 @@
 import org.onosproject.net.config.Config;
 import org.slf4j.Logger;
 
-import java.util.Collections;
-import java.util.List;
 import java.util.Set;
 import java.util.stream.StreamSupport;
 
@@ -64,8 +61,7 @@
             try {
                 nodes.add(new GatewayNode.Builder()
                         .gatewayDeviceId(DeviceId.deviceId(jsonNode.path(BRIDGE_ID).asText()))
-                        .gatewayExternalInterfaceNames(
-                                getExternalInterfaceName(jsonNode.path(EXTERNAL_INTERFACE_NAME).asText()))
+                        .gatewayExternalInterfaceName(jsonNode.path(EXTERNAL_INTERFACE_NAME).asText())
                         .dataIpAddress(Ip4Address.valueOf(jsonNode.path(DATAPLANE_IP).asText())).build());
             } catch (IllegalArgumentException | NullPointerException e) {
                 log.error("Failed to read {}", e.toString());
@@ -74,11 +70,6 @@
         return nodes;
     }
 
-    private List<String> getExternalInterfaceName(String s) {
-        List<String> list = Lists.newArrayList();
-        return Collections.addAll(list, s.split(",")) ? list : null;
-    }
-
     @Override
     public boolean isValid() {
         JsonNode jsonNodes = object.get(NODES);
diff --git a/apps/scalablegateway/src/main/java/org/onosproject/scalablegateway/api/ScalableGatewayService.java b/apps/scalablegateway/src/main/java/org/onosproject/scalablegateway/api/ScalableGatewayService.java
index bd1b29e..d3d0f86 100644
--- a/apps/scalablegateway/src/main/java/org/onosproject/scalablegateway/api/ScalableGatewayService.java
+++ b/apps/scalablegateway/src/main/java/org/onosproject/scalablegateway/api/ScalableGatewayService.java
@@ -35,12 +35,12 @@
     GatewayNode getGatewayNode(DeviceId deviceId);
 
     /**
-     * Returns the list of gateway`s port numbers with the given device identifier.
+     * Returns the gateway`s port number with the given device identifier.
      *
      * @param deviceId The gateway node deviceId
-     * @return The list of external interface port number
+     * @return The external interface port number
      */
-    List<PortNumber> getGatewayExternalPorts(DeviceId deviceId);
+    PortNumber getGatewayExternalPort(DeviceId deviceId);
 
     /**
      * Returns group id for gateway load balance.
diff --git a/apps/scalablegateway/src/main/java/org/onosproject/scalablegateway/cli/ScalableGatewayAddCommand.java b/apps/scalablegateway/src/main/java/org/onosproject/scalablegateway/cli/ScalableGatewayAddCommand.java
index 911062c..4a93563 100644
--- a/apps/scalablegateway/src/main/java/org/onosproject/scalablegateway/cli/ScalableGatewayAddCommand.java
+++ b/apps/scalablegateway/src/main/java/org/onosproject/scalablegateway/cli/ScalableGatewayAddCommand.java
@@ -16,7 +16,6 @@
 
 package org.onosproject.scalablegateway.cli;
 
-import com.google.common.collect.Lists;
 import org.apache.karaf.shell.commands.Argument;
 import org.apache.karaf.shell.commands.Command;
 import org.onlab.packet.Ip4Address;
@@ -25,9 +24,6 @@
 import org.onosproject.scalablegateway.api.GatewayNode;
 import org.onosproject.scalablegateway.api.ScalableGatewayService;
 
-import java.util.Collections;
-import java.util.List;
-
 /**
  * Adds gateway node information for scalablegateway node managements.
  */
@@ -60,7 +56,7 @@
         GatewayNode gatewayNode = GatewayNode.builder()
                 .gatewayDeviceId(DeviceId.deviceId(deviceId))
                 .dataIpAddress(Ip4Address.valueOf(ipAddress))
-                .gatewayExternalInterfaceNames(splitNameList(interfaceName))
+                .gatewayExternalInterfaceName(interfaceName)
                 .build();
         if (service.addGatewayNode(gatewayNode)) {
             print(SUCCESS);
@@ -69,8 +65,4 @@
         }
     }
 
-    private List<String> splitNameList(String interfaceName) {
-        List<String> list = Lists.newArrayList();
-        return Collections.addAll(list, interfaceName.split(",")) ? list : null;
-    }
 }
diff --git a/apps/scalablegateway/src/main/java/org/onosproject/scalablegateway/cli/ScalableGatewayListCommand.java b/apps/scalablegateway/src/main/java/org/onosproject/scalablegateway/cli/ScalableGatewayListCommand.java
index d48dd43..87db21e 100644
--- a/apps/scalablegateway/src/main/java/org/onosproject/scalablegateway/cli/ScalableGatewayListCommand.java
+++ b/apps/scalablegateway/src/main/java/org/onosproject/scalablegateway/cli/ScalableGatewayListCommand.java
@@ -35,6 +35,6 @@
         service.getGatewayNodes().forEach(node -> print(FORMAT,
                 node.getGatewayDeviceId().toString(),
                 node.getDataIpAddress().toString(),
-                node.getGatewayExternalInterfaceNames().toString()));
+                node.getGatewayExternalInterfaceName().toString()));
     }
 }
diff --git a/apps/scalablegateway/src/main/java/org/onosproject/scalablegateway/impl/ScalableGatewayManager.java b/apps/scalablegateway/src/main/java/org/onosproject/scalablegateway/impl/ScalableGatewayManager.java
index 383684e..adf354e 100644
--- a/apps/scalablegateway/src/main/java/org/onosproject/scalablegateway/impl/ScalableGatewayManager.java
+++ b/apps/scalablegateway/src/main/java/org/onosproject/scalablegateway/impl/ScalableGatewayManager.java
@@ -155,23 +155,16 @@
     }
 
     @Override
-    public List<PortNumber> getGatewayExternalPorts(DeviceId deviceId) {
+    public PortNumber getGatewayExternalPort(DeviceId deviceId) {
         GatewayNode gatewayNode = checkNotNull(gatewayNodeMap.get(deviceId).value(), GATEWAYNODE_CAN_NOT_BE_NULL);
-        List<PortNumber> portNumbers = Lists.newArrayList();
-        gatewayNode.getGatewayExternalInterfaceNames()
+        String externalInterfaceName = gatewayNode.getGatewayExternalInterfaceName();
+        Optional<Port> port = deviceService.getPorts(deviceId)
                 .stream()
-                .forEach(name -> portNumbers.add(findPortNumFromPortName(gatewayNode.getGatewayDeviceId(), name)));
-        return portNumbers;
-    }
-
-    private PortNumber findPortNumFromPortName(DeviceId gatewayDeviceId, String name) {
-        Optional<Port> port = deviceService.getPorts(gatewayDeviceId)
-                .stream()
-                .filter(p -> p.annotations().value(PORT_NAME).equals(name))
+                .filter(p -> p.annotations().value(PORT_NAME).equals(externalInterfaceName))
                 .findFirst();
 
         if (!port.isPresent()) {
-            log.error("Cannot find port {} in gateway device {}", name, gatewayDeviceId);
+            log.error("Cannot find port {} in gateway device {}", externalInterfaceName, deviceId);
             return null;
         }
 
