diff --git a/src/main/java/org/opencord/cordvtn/api/net/ServicePort.java b/src/main/java/org/opencord/cordvtn/api/net/ServicePort.java
index 07db2e7..64e9a5a 100644
--- a/src/main/java/org/opencord/cordvtn/api/net/ServicePort.java
+++ b/src/main/java/org/opencord/cordvtn/api/net/ServicePort.java
@@ -34,7 +34,9 @@
     PortId id();
 
     /**
-     * Returns the port name.
+     * Returns the port name on a switch.
+     * This name is used as key for identifying a service port when a port is
+     * added or updated.
      *
      * @return port name
      */
diff --git a/src/main/java/org/opencord/cordvtn/cli/CordVtnPortListCommand.java b/src/main/java/org/opencord/cordvtn/cli/CordVtnPortListCommand.java
index a5c5db1..d78a466 100644
--- a/src/main/java/org/opencord/cordvtn/cli/CordVtnPortListCommand.java
+++ b/src/main/java/org/opencord/cordvtn/cli/CordVtnPortListCommand.java
@@ -39,7 +39,7 @@
         description = "Lists all VTN ports")
 public class CordVtnPortListCommand extends AbstractShellCommand {
 
-    private static final String FORMAT = "%-40s%-20s%-18s%-8s%s";
+    private static final String FORMAT = "%-40s%-30s%-20s%-18s%-10s%s";
 
     @Argument(name = "networkId", description = "Network ID")
     private String networkId = null;
@@ -61,16 +61,17 @@
                 print("Failed to list networks in JSON format");
             }
         } else {
-            print(FORMAT, "ID", "MAC", "IP", "VLAN", "WAN IPs");
+            print(FORMAT, "ID", "Name", "MAC", "IP", "VLAN", "WAN IPs");
             for (ServicePort port: ports) {
                 List<String> floatingIps = port.addressPairs().stream()
                         .map(ip -> ip.ip().toString())
                         .collect(Collectors.toList());
                 print(FORMAT, port.id(),
-                      port.mac(),
-                      port.ip(),
-                      port.vlanId() != null ? port.vlanId() : "",
-                      floatingIps.isEmpty() ? "" : floatingIps);
+                        port.name(),
+                        port.mac(),
+                        port.ip(),
+                        port.vlanId() != null ? port.vlanId() : "",
+                        floatingIps.isEmpty() ? "" : floatingIps);
             }
         }
     }
@@ -85,13 +86,14 @@
                             .put("mac", pair.mac().toString())));
 
             result.add(mapper().createObjectNode()
-                               .put("id", port.id().id())
-                               .put("networkId", port.networkId().id())
-                               .put("mac", port.mac().toString())
-                               .put("ip", port.ip().toString())
-                               .put("vlan", port.vlanId() != null ?
-                                       port.vlanId().toString() : null)
-                               .set("addressPairs", addrPairs));
+                    .put("id", port.id().id())
+                    .put("name", port.name())
+                    .put("networkId", port.networkId().id())
+                    .put("mac", port.mac().toString())
+                    .put("ip", port.ip().toString())
+                    .put("vlan", port.vlanId() != null ?
+                            port.vlanId().toString() : null)
+                    .set("addressPairs", addrPairs));
         }
         return result;
     }
diff --git a/src/main/java/org/opencord/cordvtn/cli/CordVtnSyncNeutronStatesCommand.java b/src/main/java/org/opencord/cordvtn/cli/CordVtnSyncNeutronStatesCommand.java
index c7dcdeb..397f48c 100644
--- a/src/main/java/org/opencord/cordvtn/cli/CordVtnSyncNeutronStatesCommand.java
+++ b/src/main/java/org/opencord/cordvtn/cli/CordVtnSyncNeutronStatesCommand.java
@@ -15,7 +15,6 @@
  */
 package org.opencord.cordvtn.cli;
 
-import com.google.common.base.Strings;
 import org.apache.karaf.shell.commands.Argument;
 import org.apache.karaf.shell.commands.Command;
 import org.onlab.packet.IpAddress;
@@ -63,8 +62,9 @@
             required = true, multiValued = false)
     private String password = null;
 
-    private static final String NET_FORMAT = "%-40s%-20s%-20s%-8s%-20s%s";
-    private static final String PORT_FORMAT = "%-40s%-20s%-18s%-8s%s";
+    private static final String PORT_NAME_PREFIX = "tap";
+    private static final String NET_FORMAT = "%-40s%-30s%-20s%-8s%-20s%s";
+    private static final String PORT_FORMAT = "%-40s%-30s%-20s%-18s%-10s%s";
 
     @Override
     protected void execute() {
@@ -127,15 +127,13 @@
         });
 
         print("\nSynchronizing service ports...");
-        print(PORT_FORMAT, "ID", "MAC", "IP", "VLAN", "WAN IPs");
+        print(PORT_FORMAT, "ID", "Name", "MAC", "IP", "VLAN", "WAN IPs");
         osClient.networking().port().list().forEach(osPort -> {
             ServicePort.Builder sportBuilder = DefaultServicePort.builder()
                     .id(PortId.of(osPort.getId()))
+                    .name(PORT_NAME_PREFIX + osPort.getId().substring(0, 11))
                     .networkId(NetworkId.of(osPort.getNetworkId()));
 
-            if (!Strings.isNullOrEmpty(osPort.getName())) {
-                sportBuilder.name(osPort.getName());
-            }
             if (osPort.getMacAddress() != null) {
                 sportBuilder.mac(MacAddress.valueOf(osPort.getMacAddress()));
             }
@@ -154,10 +152,11 @@
                     .map(ip -> ip.ip().toString())
                     .collect(Collectors.toList());
             print(PORT_FORMAT, updated.id(),
-                  updated.mac(),
-                  updated.ip(),
-                  updated.vlanId() != null ? updated.vlanId() : "",
-                  floatingIps.isEmpty() ? "" : floatingIps);
+                    updated.name(),
+                    updated.mac(),
+                    updated.ip(),
+                    updated.vlanId() != null ? updated.vlanId() : "",
+                    floatingIps.isEmpty() ? "" : floatingIps);
         });
     }
 }
diff --git a/src/main/java/org/opencord/cordvtn/cli/CordVtnSyncXosStatesCommand.java b/src/main/java/org/opencord/cordvtn/cli/CordVtnSyncXosStatesCommand.java
index b3fc988..a5f5610 100644
--- a/src/main/java/org/opencord/cordvtn/cli/CordVtnSyncXosStatesCommand.java
+++ b/src/main/java/org/opencord/cordvtn/cli/CordVtnSyncXosStatesCommand.java
@@ -47,8 +47,8 @@
             required = true, multiValued = false)
     private String password = null;
 
-    private static final String NET_FORMAT = "%-40s%-20s%-20s%-8s%-20s%s";
-    private static final String PORT_FORMAT = "%-40s%-20s%-18s%-8s%s";
+    private static final String NET_FORMAT = "%-40s%-30s%-20s%-8s%-20s%s";
+    private static final String PORT_FORMAT = "%-40s%-30s%-20s%-18s%-10s%s";
 
     @Override
     protected void execute() {
@@ -80,7 +80,7 @@
 
         // FIXME creating a port fails until XOS service API provides network ID
         print("\nSynchronizing service ports...");
-        print(PORT_FORMAT, "ID", "MAC", "IP", "VLAN", "WAN IPs");
+        print(PORT_FORMAT, "ID", "Name", "MAC", "IP", "VLAN", "WAN IPs");
         client.servicePorts().forEach(sport -> {
             if (snetService.servicePort(sport.id()) != null) {
                 snetService.updateServicePort(sport);
@@ -92,10 +92,11 @@
                     .map(ip -> ip.ip().toString())
                     .collect(Collectors.toList());
             print(PORT_FORMAT, updated.id(),
-                  updated.mac(),
-                  updated.ip(),
-                  updated.vlanId() != null ? updated.vlanId() : "",
-                  floatingIps.isEmpty() ? "" : floatingIps);
+                    updated.name(),
+                    updated.mac(),
+                    updated.ip(),
+                    updated.vlanId() != null ? updated.vlanId() : "",
+                    floatingIps.isEmpty() ? "" : floatingIps);
         });
     }
 }
diff --git a/src/main/java/org/opencord/cordvtn/impl/InstanceManager.java b/src/main/java/org/opencord/cordvtn/impl/InstanceManager.java
index 80f21ee..e8983c6 100644
--- a/src/main/java/org/opencord/cordvtn/impl/InstanceManager.java
+++ b/src/main/java/org/opencord/cordvtn/impl/InstanceManager.java
@@ -216,7 +216,7 @@
     private ServicePort getServicePortByPortName(String portName) {
         Optional<ServicePort> sport = snetService.servicePorts()
                 .stream()
-                .filter(p -> p.id().id().contains(portName.substring(3)))
+                .filter(p -> Objects.equals(p.name(), portName))
                 .findFirst();
         return sport.isPresent() ? sport.get() : null;
     }
diff --git a/src/main/java/org/opencord/cordvtn/impl/ServiceNetworkManager.java b/src/main/java/org/opencord/cordvtn/impl/ServiceNetworkManager.java
index aaa74e5..1ac5f16 100644
--- a/src/main/java/org/opencord/cordvtn/impl/ServiceNetworkManager.java
+++ b/src/main/java/org/opencord/cordvtn/impl/ServiceNetworkManager.java
@@ -77,6 +77,7 @@
     private static final String ERR_NULL_SERVICE_NET_TYPE  = "Service network type cannot be null";
     private static final String ERR_NULL_SERVICE_PORT = "Service port cannot be null";
     private static final String ERR_NULL_SERVICE_PORT_ID = "Service port ID cannot be null";
+    private static final String ERR_NULL_SERVICE_PORT_NAME = "Service port name cannot be null";
     private static final String ERR_NULL_SERVICE_PORT_NET_ID = "Service port network ID cannot be null";
 
     private static final String ERR_NOT_FOUND = " does not exist";
@@ -218,6 +219,7 @@
     public void createServicePort(ServicePort sport) {
         checkNotNull(sport, ERR_NULL_SERVICE_PORT);
         checkNotNull(sport.id(), ERR_NULL_SERVICE_PORT_ID);
+        checkNotNull(sport.id(), ERR_NULL_SERVICE_PORT_NAME);
         checkNotNull(sport.networkId(), ERR_NULL_SERVICE_PORT_NET_ID);
         synchronized (this) {
             ServiceNetwork existing = snetStore.serviceNetwork(sport.networkId());
diff --git a/src/main/java/org/opencord/cordvtn/rest/NeutronMl2PortsWebResource.java b/src/main/java/org/opencord/cordvtn/rest/NeutronMl2PortsWebResource.java
index 8776e39..4e11c1f 100644
--- a/src/main/java/org/opencord/cordvtn/rest/NeutronMl2PortsWebResource.java
+++ b/src/main/java/org/opencord/cordvtn/rest/NeutronMl2PortsWebResource.java
@@ -16,7 +16,6 @@
 package org.opencord.cordvtn.rest;
 
 import com.fasterxml.jackson.databind.JsonNode;
-import com.google.common.base.Strings;
 import org.onlab.osgi.DefaultServiceDirectory;
 import org.onlab.packet.IpAddress;
 import org.onlab.packet.MacAddress;
@@ -61,6 +60,7 @@
 
     private static final String MESSAGE = "Received ports %s request";
     private static final String PORTS = "ports";
+    private static final String PORT_NAME_PREFIX = "tap";
 
     private final ServiceNetworkAdminService adminService =
             DefaultServiceDirectory.getService(ServiceNetworkAdminService.class);
@@ -105,8 +105,8 @@
     public Response updatePort(@PathParam("id") String id, InputStream input) {
         log.trace(String.format(MESSAGE, "UPDATE " + id));
 
-        final ServicePort port = readPort(input);
-        adminService.updateServicePort(port);
+        final ServicePort sport = readPort(input);
+        adminService.updateServicePort(sport);
 
         return status(OK).build();
     }
@@ -138,11 +138,9 @@
 
             ServicePort.Builder sportBuilder = DefaultServicePort.builder()
                     .id(PortId.of(osPort.getId()))
+                    .name(PORT_NAME_PREFIX + osPort.getId().substring(0, 11))
                     .networkId(NetworkId.of(osPort.getNetworkId()));
 
-            if (!Strings.isNullOrEmpty(osPort.getName())) {
-                sportBuilder.name(osPort.getName());
-            }
             if (osPort.getMacAddress() != null) {
                 sportBuilder.mac(MacAddress.valueOf(osPort.getMacAddress()));
             }
