diff --git a/apps/openstacknetworking/app/src/main/java/org/onosproject/openstacknetworking/cli/OpenstackDirectPortListCommand.java b/apps/openstacknetworking/app/src/main/java/org/onosproject/openstacknetworking/cli/OpenstackDirectPortListCommand.java
index 6b6d129..2ffdb83 100644
--- a/apps/openstacknetworking/app/src/main/java/org/onosproject/openstacknetworking/cli/OpenstackDirectPortListCommand.java
+++ b/apps/openstacknetworking/app/src/main/java/org/onosproject/openstacknetworking/cli/OpenstackDirectPortListCommand.java
@@ -29,6 +29,7 @@
 import static org.onosproject.cli.AbstractShellCommand.get;
 import static org.onosproject.openstacknetworking.api.Constants.DIRECT;
 import static org.onosproject.openstacknetworking.api.Constants.PCISLOT;
+import static org.onosproject.openstacknetworking.util.OpenstackNetworkingUtil.deriveResourceName;
 import static org.onosproject.openstacknetworking.util.OpenstackNetworkingUtil.getIntfNameFromPciAddress;
 
 /**
@@ -59,13 +60,13 @@
             Network osNet = service.network(port.getNetworkId());
             if (port.getVifType().equals(UNBOUND)) {
                 print(FORMAT, port.getId(),
-                        osNet.getName(),
+                        deriveResourceName(osNet),
                         port.getMacAddress(),
                         fixedIps.isEmpty() ? "" : fixedIps,
                         UNBOUND, UNBOUND);
             } else {
                 print(FORMAT, port.getId(),
-                        osNet.getName(),
+                        deriveResourceName(osNet),
                         port.getMacAddress(),
                         fixedIps.isEmpty() ? "" : fixedIps,
                         port.getProfile().containsKey(PCISLOT) ?
diff --git a/apps/openstacknetworking/app/src/main/java/org/onosproject/openstacknetworking/cli/OpenstackNetworkListCommand.java b/apps/openstacknetworking/app/src/main/java/org/onosproject/openstacknetworking/cli/OpenstackNetworkListCommand.java
index 456019a..d3e9af7 100644
--- a/apps/openstacknetworking/app/src/main/java/org/onosproject/openstacknetworking/cli/OpenstackNetworkListCommand.java
+++ b/apps/openstacknetworking/app/src/main/java/org/onosproject/openstacknetworking/cli/OpenstackNetworkListCommand.java
@@ -30,6 +30,7 @@
 import java.util.List;
 import java.util.stream.Collectors;
 
+import static org.onosproject.openstacknetworking.util.OpenstackNetworkingUtil.deriveResourceName;
 import static org.onosproject.openstacknetworking.util.OpenstackNetworkingUtil.modelEntityToJson;
 import static org.onosproject.openstacknetworking.util.OpenstackNetworkingUtil.prettyJson;
 
@@ -47,7 +48,7 @@
     protected void doExecute() {
         OpenstackNetworkService service = get(OpenstackNetworkService.class);
         List<Network> networks = Lists.newArrayList(service.networks());
-        networks.sort(Comparator.comparing(Network::getName));
+        networks.sort(Comparator.comparing(Network::getId));
 
         if (outputJson()) {
             print("%s", json(networks));
@@ -69,7 +70,7 @@
                 });
 
                 print(FORMAT, net.getId(),
-                        net.getName(),
+                        deriveResourceName(net),
                         service.networkType(net.getId()).toString(),
                         net.getProviderSegID(),
                         subnets.isEmpty() ? "" : subnetsString,
diff --git a/apps/openstacknetworking/app/src/main/java/org/onosproject/openstacknetworking/cli/OpenstackPortListCommand.java b/apps/openstacknetworking/app/src/main/java/org/onosproject/openstacknetworking/cli/OpenstackPortListCommand.java
index 131c809..f557a1c 100644
--- a/apps/openstacknetworking/app/src/main/java/org/onosproject/openstacknetworking/cli/OpenstackPortListCommand.java
+++ b/apps/openstacknetworking/app/src/main/java/org/onosproject/openstacknetworking/cli/OpenstackPortListCommand.java
@@ -33,6 +33,7 @@
 import java.util.List;
 import java.util.stream.Collectors;
 
+import static org.onosproject.openstacknetworking.util.OpenstackNetworkingUtil.deriveResourceName;
 import static org.onosproject.openstacknetworking.util.OpenstackNetworkingUtil.modelEntityToJson;
 import static org.onosproject.openstacknetworking.util.OpenstackNetworkingUtil.prettyJson;
 
@@ -70,7 +71,7 @@
                         .map(IP::getIpAddress)
                         .collect(Collectors.toList());
                 Network osNet = service.network(port.getNetworkId());
-                String netName = osNet == null ? "N/A" : osNet.getName();
+                String netName = osNet == null ? "N/A" : deriveResourceName(osNet);
                 print(FORMAT, port.getId(),
                         netName,
                         port.getMacAddress(),
diff --git a/apps/openstacknetworking/app/src/main/java/org/onosproject/openstacknetworking/cli/OpenstackRouterListCommand.java b/apps/openstacknetworking/app/src/main/java/org/onosproject/openstacknetworking/cli/OpenstackRouterListCommand.java
index f635131..d73f4e9 100644
--- a/apps/openstacknetworking/app/src/main/java/org/onosproject/openstacknetworking/cli/OpenstackRouterListCommand.java
+++ b/apps/openstacknetworking/app/src/main/java/org/onosproject/openstacknetworking/cli/OpenstackRouterListCommand.java
@@ -34,6 +34,7 @@
 import java.util.Objects;
 import java.util.stream.Collectors;
 
+import static org.onosproject.openstacknetworking.util.OpenstackNetworkingUtil.deriveResourceName;
 import static org.onosproject.openstacknetworking.util.OpenstackNetworkingUtil.modelEntityToJson;
 import static org.onosproject.openstacknetworking.util.OpenstackNetworkingUtil.prettyJson;
 
@@ -55,7 +56,7 @@
     @Override
     protected void doExecute() {
         List<Router> routers = Lists.newArrayList(routerService.routers());
-        routers.sort(Comparator.comparing(Router::getName));
+        routers.sort(Comparator.comparing(Router::getId));
 
         if (outputJson()) {
             print("%s", json(routers));
@@ -80,7 +81,7 @@
                 routerService.routerInterfaces(router.getId()).forEach(iface -> {
                     internals.add(getRouterIfaceIp(iface));
                 });
-                print(FORMAT, router.getId(), router.getName(), externals, internals);
+                print(FORMAT, router.getId(), deriveResourceName(router), externals, internals);
             }
         }
     }
diff --git a/apps/openstacknetworking/app/src/main/java/org/onosproject/openstacknetworking/cli/OpenstackSecurityGroupListCommand.java b/apps/openstacknetworking/app/src/main/java/org/onosproject/openstacknetworking/cli/OpenstackSecurityGroupListCommand.java
index de92ca3..493c485 100644
--- a/apps/openstacknetworking/app/src/main/java/org/onosproject/openstacknetworking/cli/OpenstackSecurityGroupListCommand.java
+++ b/apps/openstacknetworking/app/src/main/java/org/onosproject/openstacknetworking/cli/OpenstackSecurityGroupListCommand.java
@@ -29,7 +29,7 @@
 import java.util.Comparator;
 import java.util.List;
 
-import static org.onosproject.cli.AbstractShellCommand.get;
+import static org.onosproject.openstacknetworking.util.OpenstackNetworkingUtil.deriveResourceName;
 import static org.onosproject.openstacknetworking.util.OpenstackNetworkingUtil.modelEntityToJson;
 import static org.onosproject.openstacknetworking.util.OpenstackNetworkingUtil.prettyJson;
 
@@ -59,7 +59,7 @@
             print("Hint: use --json option to see security group rules as well\n");
             print(FORMAT, "ID", "Name");
             for (SecurityGroup sg: service.securityGroups()) {
-                print(FORMAT, sg.getId(), sg.getName());
+                print(FORMAT, sg.getId(), deriveResourceName(sg));
             }
         }
     }
diff --git a/apps/openstacknetworking/app/src/main/java/org/onosproject/openstacknetworking/cli/OpenstackSubnetListCommand.java b/apps/openstacknetworking/app/src/main/java/org/onosproject/openstacknetworking/cli/OpenstackSubnetListCommand.java
index 4a4a3c5..6fbfd5b 100644
--- a/apps/openstacknetworking/app/src/main/java/org/onosproject/openstacknetworking/cli/OpenstackSubnetListCommand.java
+++ b/apps/openstacknetworking/app/src/main/java/org/onosproject/openstacknetworking/cli/OpenstackSubnetListCommand.java
@@ -29,6 +29,7 @@
 import java.util.Comparator;
 import java.util.List;
 
+import static org.onosproject.openstacknetworking.util.OpenstackNetworkingUtil.deriveResourceName;
 import static org.onosproject.openstacknetworking.util.OpenstackNetworkingUtil.modelEntityToJson;
 import static org.onosproject.openstacknetworking.util.OpenstackNetworkingUtil.prettyJson;
 
@@ -46,7 +47,7 @@
     protected void doExecute() {
         OpenstackNetworkService service = get(OpenstackNetworkService.class);
         List<Subnet> subnets = Lists.newArrayList(service.subnets());
-        subnets.sort(Comparator.comparing(Subnet::getName));
+        subnets.sort(Comparator.comparing(Subnet::getId));
 
         if (outputJson()) {
             print("%s", json(subnets));
@@ -56,10 +57,10 @@
 
             for (Subnet subnet: subnets) {
                 Network osNet = service.network(subnet.getNetworkId());
-                String netName = osNet == null ? "N/A" : osNet.getName();
+                String netName = osNet == null ? "N/A" : deriveResourceName(osNet);
                 print(FORMAT,
                         subnet.getId(),
-                        subnet.getName(),
+                        deriveResourceName(subnet),
                         subnet.getCidr(),
                         subnet.getGateway(),
                         subnet.getNetworkId(),
diff --git a/apps/openstacknetworking/app/src/main/java/org/onosproject/openstacknetworking/impl/DistributedOpenstackNetworkStore.java b/apps/openstacknetworking/app/src/main/java/org/onosproject/openstacknetworking/impl/DistributedOpenstackNetworkStore.java
index 474e6d1..cbae272 100644
--- a/apps/openstacknetworking/app/src/main/java/org/onosproject/openstacknetworking/impl/DistributedOpenstackNetworkStore.java
+++ b/apps/openstacknetworking/app/src/main/java/org/onosproject/openstacknetworking/impl/DistributedOpenstackNetworkStore.java
@@ -204,7 +204,7 @@
     @Override
     public void createNetwork(Network osNet) {
         osNetworkStore.compute(osNet.getId(), (id, existing) -> {
-            final String error = osNet.getName() + ERR_DUPLICATE;
+            final String error = osNet.getId() + ERR_DUPLICATE;
             checkArgument(existing == null, error);
             return osNet;
         });
@@ -213,7 +213,7 @@
     @Override
     public void updateNetwork(Network osNet) {
         osNetworkStore.compute(osNet.getId(), (id, existing) -> {
-            final String error = osNet.getName() + ERR_NOT_FOUND;
+            final String error = osNet.getId() + ERR_NOT_FOUND;
             checkArgument(existing != null, error);
             return osNet;
         });
diff --git a/apps/openstacknetworking/app/src/main/java/org/onosproject/openstacknetworking/impl/DistributedOpenstackRouterStore.java b/apps/openstacknetworking/app/src/main/java/org/onosproject/openstacknetworking/impl/DistributedOpenstackRouterStore.java
index f541dfc..94ddc49 100644
--- a/apps/openstacknetworking/app/src/main/java/org/onosproject/openstacknetworking/impl/DistributedOpenstackRouterStore.java
+++ b/apps/openstacknetworking/app/src/main/java/org/onosproject/openstacknetworking/impl/DistributedOpenstackRouterStore.java
@@ -161,7 +161,7 @@
     @Override
     public void createRouter(Router osRouter) {
         osRouterStore.compute(osRouter.getId(), (id, existing) -> {
-            final String error = osRouter.getName() + ERR_DUPLICATE;
+            final String error = osRouter.getId() + ERR_DUPLICATE;
             checkArgument(existing == null, error);
             return osRouter;
         });
@@ -170,7 +170,7 @@
     @Override
     public void updateRouter(Router osRouter) {
         osRouterStore.compute(osRouter.getId(), (id, existing) -> {
-            final String error = osRouter.getName() + ERR_NOT_FOUND;
+            final String error = osRouter.getId() + ERR_NOT_FOUND;
             checkArgument(existing != null, error);
             return osRouter;
         });
diff --git a/apps/openstacknetworking/app/src/main/java/org/onosproject/openstacknetworking/impl/DistributedSecurityGroupStore.java b/apps/openstacknetworking/app/src/main/java/org/onosproject/openstacknetworking/impl/DistributedSecurityGroupStore.java
index 78e0e4c..ca97bb2 100644
--- a/apps/openstacknetworking/app/src/main/java/org/onosproject/openstacknetworking/impl/DistributedSecurityGroupStore.java
+++ b/apps/openstacknetworking/app/src/main/java/org/onosproject/openstacknetworking/impl/DistributedSecurityGroupStore.java
@@ -115,7 +115,7 @@
     @Override
     public void createSecurityGroup(SecurityGroup sg) {
         osSecurityGroupStore.compute(sg.getId(), (id, existing) -> {
-            final String error = sg.getName() + ERR_DUPLICATE;
+            final String error = sg.getId() + ERR_DUPLICATE;
             checkArgument(existing == null, error);
             return sg;
         });
@@ -124,7 +124,7 @@
     @Override
     public void updateSecurityGroup(SecurityGroup sg) {
         osSecurityGroupStore.compute(sg.getId(), (id, existing) -> {
-            final String error = sg.getName() + ERR_NOT_FOUND;
+            final String error = sg.getId() + ERR_NOT_FOUND;
             checkArgument(existing != null, error);
             return sg;
         });
diff --git a/apps/openstacknetworking/app/src/main/java/org/onosproject/openstacknetworking/impl/OpenstackNetworkManager.java b/apps/openstacknetworking/app/src/main/java/org/onosproject/openstacknetworking/impl/OpenstackNetworkManager.java
index c79f12c..9aefe12 100644
--- a/apps/openstacknetworking/app/src/main/java/org/onosproject/openstacknetworking/impl/OpenstackNetworkManager.java
+++ b/apps/openstacknetworking/app/src/main/java/org/onosproject/openstacknetworking/impl/OpenstackNetworkManager.java
@@ -83,6 +83,7 @@
 import static org.onosproject.openstacknetworking.api.OpenstackNetwork.Type.LOCAL;
 import static org.onosproject.openstacknetworking.api.OpenstackNetwork.Type.VLAN;
 import static org.onosproject.openstacknetworking.api.OpenstackNetwork.Type.VXLAN;
+import static org.onosproject.openstacknetworking.util.OpenstackNetworkingUtil.deriveResourceName;
 import static org.onosproject.openstacknetworking.util.OpenstackNetworkingUtil.getIntfNameFromPciAddress;
 import static org.onosproject.openstacknetworking.util.OpenstackNetworkingUtil.vnicType;
 import static org.onosproject.openstacknode.api.OpenstackNode.NodeType.GATEWAY;
@@ -211,7 +212,7 @@
             return finalAugmentedNetwork;
         });
 
-        log.info(String.format(MSG_NETWORK, osNet.getName(), MSG_CREATED));
+        log.info(String.format(MSG_NETWORK, deriveResourceName(osNet), MSG_CREATED));
     }
 
     @Override
@@ -241,7 +242,7 @@
             }
             Network osNet = osNetworkStore.removeNetwork(netId);
             if (osNet != null) {
-                log.info(String.format(MSG_NETWORK, osNet.getName(), MSG_REMOVED));
+                log.info(String.format(MSG_NETWORK, deriveResourceName(osNet), MSG_REMOVED));
             }
 
             Versioned<OpenstackNetwork> augmentedNetwork = augmentedNetworkMap.remove(netId);
@@ -751,7 +752,7 @@
                 .filter(port -> Objects.equals(port.getDeviceId(), router.getId()))
                 .findAny().orElse(null);
         if (exGatewayPort == null) {
-            log.warn("no external gateway port for router({})", router.getName());
+            log.warn("no external gateway port for router({})", deriveResourceName(router));
             return null;
         }
 
diff --git a/apps/openstacknetworking/app/src/main/java/org/onosproject/openstacknetworking/impl/OpenstackRouterManager.java b/apps/openstacknetworking/app/src/main/java/org/onosproject/openstacknetworking/impl/OpenstackRouterManager.java
index 19a831c..8280b1f 100644
--- a/apps/openstacknetworking/app/src/main/java/org/onosproject/openstacknetworking/impl/OpenstackRouterManager.java
+++ b/apps/openstacknetworking/app/src/main/java/org/onosproject/openstacknetworking/impl/OpenstackRouterManager.java
@@ -42,6 +42,7 @@
 
 import static com.google.common.base.Preconditions.checkArgument;
 import static com.google.common.base.Preconditions.checkNotNull;
+import static org.onosproject.openstacknetworking.util.OpenstackNetworkingUtil.deriveResourceName;
 import static org.slf4j.LoggerFactory.getLogger;
 
 /**
@@ -110,17 +111,15 @@
     public void createRouter(Router osRouter) {
         checkNotNull(osRouter, ERR_NULL_ROUTER);
         checkArgument(!Strings.isNullOrEmpty(osRouter.getId()), ERR_NULL_ROUTER_ID);
-        checkArgument(!Strings.isNullOrEmpty(osRouter.getName()), ERR_NULL_ROUTER_NAME);
 
         osRouterStore.createRouter(osRouter);
-        log.info(String.format(MSG_ROUTER, osRouter.getName(), MSG_CREATED));
+        log.info(String.format(MSG_ROUTER, deriveResourceName(osRouter), MSG_CREATED));
     }
 
     @Override
     public void updateRouter(Router osRouter) {
         checkNotNull(osRouter, ERR_NULL_ROUTER);
         checkArgument(!Strings.isNullOrEmpty(osRouter.getId()), ERR_NULL_ROUTER_ID);
-        checkArgument(!Strings.isNullOrEmpty(osRouter.getName()), ERR_NULL_ROUTER_NAME);
 
         osRouterStore.updateRouter(osRouter);
         log.info(String.format(MSG_ROUTER, osRouter.getId(), MSG_UPDATED));
@@ -136,7 +135,7 @@
             }
             Router osRouter = osRouterStore.removeRouter(routerId);
             if (osRouter != null) {
-                log.info(String.format(MSG_ROUTER, osRouter.getName(), MSG_REMOVED));
+                log.info(String.format(MSG_ROUTER, deriveResourceName(osRouter), MSG_REMOVED));
             }
         }
     }
diff --git a/apps/openstacknetworking/app/src/main/java/org/onosproject/openstacknetworking/impl/OpenstackRoutingHandler.java b/apps/openstacknetworking/app/src/main/java/org/onosproject/openstacknetworking/impl/OpenstackRoutingHandler.java
index d7fa91b..b825fc6 100644
--- a/apps/openstacknetworking/app/src/main/java/org/onosproject/openstacknetworking/impl/OpenstackRoutingHandler.java
+++ b/apps/openstacknetworking/app/src/main/java/org/onosproject/openstacknetworking/impl/OpenstackRoutingHandler.java
@@ -79,6 +79,7 @@
 import static org.onosproject.openstacknetworking.api.Constants.STAT_OUTBOUND_TABLE;
 import static org.onosproject.openstacknetworking.impl.OsgiPropertyConstants.ARP_MODE;
 import static org.onosproject.openstacknetworking.impl.OsgiPropertyConstants.USE_STATEFUL_SNAT;
+import static org.onosproject.openstacknetworking.util.OpenstackNetworkingUtil.deriveResourceName;
 import static org.onosproject.openstacknetworking.util.OpenstackNetworkingUtil.getPropertyValue;
 import static org.onosproject.openstacknetworking.util.OpenstackNetworkingUtil.getPropertyValueAsBoolean;
 import static org.onosproject.openstacknetworking.util.OpenstackNetworkingUtil.tunnelPortNumByNetType;
@@ -200,7 +201,7 @@
 
         setInternalRoutes(osRouter, osSubnet, true);
         setGatewayRules(osSubnet, osRouter, true);
-        log.info("Connected subnet({}) to {}", osSubnet.getCidr(), osRouter.getName());
+        log.info("Connected subnet({}) to {}", osSubnet.getCidr(), deriveResourceName(osRouter));
     }
 
     private void routerIfaceRemoved(Router osRouter, RouterInterface osRouterIface) {
@@ -221,7 +222,7 @@
 
         setInternalRoutes(osRouter, osSubnet, false);
         setGatewayRules(osSubnet, osRouter, false);
-        log.info("Disconnected subnet({}) from {}", osSubnet.getCidr(), osRouter.getName());
+        log.info("Disconnected subnet({}) from {}", osSubnet.getCidr(), deriveResourceName(osRouter));
     }
 
     private void setGatewayRules(Subnet osSubnet, Router osRouter, boolean install) {
@@ -658,8 +659,7 @@
             }
 
             log.debug("Router(name:{}, ID:{}) is created",
-                                                    event.subject().getName(),
-                                                    event.subject().getId());
+                    deriveResourceName(event.subject()), event.subject().getId());
 
             routerUpdated(event.subject());
         }
@@ -670,8 +670,7 @@
             }
 
             log.debug("Router(name:{}, ID:{}) is updated",
-                                                    event.subject().getName(),
-                                                    event.subject().getId());
+                    deriveResourceName(event.subject()), event.subject().getId());
 
             routerUpdated(event.subject());
         }
@@ -682,8 +681,7 @@
             }
 
             log.debug("Router(name:{}, ID:{}) is removed",
-                                                    event.subject().getName(),
-                                                    event.subject().getId());
+                    deriveResourceName(event.subject()), event.subject().getId());
 
             routerRemove(event.subject());
         }
diff --git a/apps/openstacknetworking/app/src/main/java/org/onosproject/openstacknetworking/impl/OpenstackRoutingSnatHandler.java b/apps/openstacknetworking/app/src/main/java/org/onosproject/openstacknetworking/impl/OpenstackRoutingSnatHandler.java
index b3c1a1f..82e4196 100644
--- a/apps/openstacknetworking/app/src/main/java/org/onosproject/openstacknetworking/impl/OpenstackRoutingSnatHandler.java
+++ b/apps/openstacknetworking/app/src/main/java/org/onosproject/openstacknetworking/impl/OpenstackRoutingSnatHandler.java
@@ -116,6 +116,7 @@
 import static org.onosproject.openstacknetworking.api.OpenstackNetwork.Type.VLAN;
 import static org.onosproject.openstacknetworking.impl.OsgiPropertyConstants.USE_STATEFUL_SNAT;
 import static org.onosproject.openstacknetworking.impl.OsgiPropertyConstants.USE_STATEFUL_SNAT_DEFAULT;
+import static org.onosproject.openstacknetworking.util.OpenstackNetworkingUtil.deriveResourceName;
 import static org.onosproject.openstacknetworking.util.OpenstackNetworkingUtil.externalGatewayIpSnatEnabled;
 import static org.onosproject.openstacknetworking.util.OpenstackNetworkingUtil.externalPeerRouterFromSubnet;
 import static org.onosproject.openstacknetworking.util.OpenstackNetworkingUtil.getPropertyValueAsBoolean;
@@ -1348,8 +1349,7 @@
             }
 
             log.debug("Router(name:{}, ID:{}) is created",
-                    event.subject().getName(),
-                    event.subject().getId());
+                    deriveResourceName(event.subject()), event.subject().getId());
 
             routerUpdated(event.subject());
         }
@@ -1360,8 +1360,7 @@
             }
 
             log.debug("Router(name:{}, ID:{}) is updated",
-                    event.subject().getName(),
-                    event.subject().getId());
+                    deriveResourceName(event.subject()), event.subject().getId());
 
             routerUpdated(event.subject());
         }
diff --git a/apps/openstacknetworking/app/src/main/java/org/onosproject/openstacknetworking/impl/OpenstackSwitchingHandler.java b/apps/openstacknetworking/app/src/main/java/org/onosproject/openstacknetworking/impl/OpenstackSwitchingHandler.java
index c30ea73..fa1341a 100644
--- a/apps/openstacknetworking/app/src/main/java/org/onosproject/openstacknetworking/impl/OpenstackSwitchingHandler.java
+++ b/apps/openstacknetworking/app/src/main/java/org/onosproject/openstacknetworking/impl/OpenstackSwitchingHandler.java
@@ -77,6 +77,7 @@
 import static org.onosproject.openstacknetworking.api.Constants.STAT_FLAT_OUTBOUND_TABLE;
 import static org.onosproject.openstacknetworking.api.Constants.VTAG_TABLE;
 import static org.onosproject.openstacknetworking.api.InstancePortEvent.Type.OPENSTACK_INSTANCE_MIGRATION_STARTED;
+import static org.onosproject.openstacknetworking.util.OpenstackNetworkingUtil.deriveResourceName;
 import static org.onosproject.openstacknetworking.util.OpenstackNetworkingUtil.getPropertyValue;
 import static org.onosproject.openstacknetworking.util.OpenstackNetworkingUtil.structurePortName;
 import static org.onosproject.openstacknetworking.util.OpenstackNetworkingUtil.swapStaleLocation;
@@ -549,7 +550,7 @@
         if (osNet == null || Strings.isNullOrEmpty(osNet.getProviderSegID())) {
             final String error =
                     String.format(ERR_SET_FLOWS_VNI,
-                        instPort, osNet == null ? STR_NONE : osNet.getName());
+                        instPort, osNet == null ? STR_NONE : deriveResourceName(osNet));
             throw new IllegalStateException(error);
         }
 
@@ -567,7 +568,7 @@
         if (osNet == null || Strings.isNullOrEmpty(osNet.getProviderSegID())) {
             final String error =
                     String.format(ERR_SET_FLOWS_VNI,
-                        instPort, osNet == null ? STR_NONE : osNet.getName());
+                        instPort, osNet == null ? STR_NONE : deriveResourceName(osNet));
             throw new IllegalStateException(error);
         }
         return Long.valueOf(osNet.getProviderSegID());
diff --git a/apps/openstacknetworking/app/src/main/java/org/onosproject/openstacknetworking/util/OpenstackNetworkingUtil.java b/apps/openstacknetworking/app/src/main/java/org/onosproject/openstacknetworking/util/OpenstackNetworkingUtil.java
index 7549b90..2be23e3 100644
--- a/apps/openstacknetworking/app/src/main/java/org/onosproject/openstacknetworking/util/OpenstackNetworkingUtil.java
+++ b/apps/openstacknetworking/app/src/main/java/org/onosproject/openstacknetworking/util/OpenstackNetworkingUtil.java
@@ -85,6 +85,7 @@
 import org.openstack4j.core.transport.Config;
 import org.openstack4j.core.transport.ObjectMapperSingleton;
 import org.openstack4j.model.ModelEntity;
+import org.openstack4j.model.common.BasicResource;
 import org.openstack4j.model.common.Identifier;
 import org.openstack4j.model.network.ExternalGateway;
 import org.openstack4j.model.network.IP;
@@ -173,6 +174,9 @@
     private static final String PREFIX_DEVICE_NUMBER = "s";
     private static final String PREFIX_FUNCTION_NUMBER = "f";
 
+    private static final String PARENTHESES_START = "(";
+    private static final String PARENTHESES_END = ")";
+
     // keystone endpoint related variables
     private static final String DOMAIN_DEFAULT = "default";
     private static final String KEYSTONE_V2 = "v2.0";
@@ -526,7 +530,7 @@
      * @param osSg  openstack security group
      */
     public static void printSecurityGroup(SecurityGroup osSg) {
-        print(SECURITY_GROUP_FORMAT, osSg.getId(), osSg.getName());
+        print(SECURITY_GROUP_FORMAT, osSg.getId(), deriveResourceName(osSg));
     }
 
     /**
@@ -537,7 +541,7 @@
     public static void printNetwork(Network osNet) {
         final String strNet = String.format(NETWORK_FORMAT,
                 osNet.getId(),
-                osNet.getName(),
+                deriveResourceName(osNet),
                 osNet.getProviderSegID(),
                 osNet.getSubnets());
         print(strNet);
@@ -552,7 +556,7 @@
     public static void printSubnet(Subnet osSubnet,
                                    OpenstackNetworkService osNetService) {
         final Network network = osNetService.network(osSubnet.getNetworkId());
-        final String netName = network == null ? NOT_AVAILABLE : network.getName();
+        final String netName = network == null ? NOT_AVAILABLE : deriveResourceName(network);
         final String strSubnet = String.format(SUBNET_FORMAT,
                 osSubnet.getId(),
                 netName,
@@ -572,7 +576,7 @@
                 .map(IP::getIpAddress)
                 .collect(Collectors.toList());
         final Network network = osNetService.network(osPort.getNetworkId());
-        final String netName = network == null ? NOT_AVAILABLE : network.getName();
+        final String netName = network == null ? NOT_AVAILABLE : deriveResourceName(network);
         final String strPort = String.format(PORT_FORMAT,
                 osPort.getId(),
                 netName,
@@ -605,7 +609,7 @@
 
         final String strRouter = String.format(ROUTER_FORMAT,
                 osRouter.getId(),
-                osRouter.getName(),
+                deriveResourceName(osRouter),
                 externals.isEmpty() ? "" : externals,
                 internals.isEmpty() ? "" : internals);
         print(strRouter);
@@ -1158,8 +1162,7 @@
         }
         if (osRouter.getExternalGatewayInfo() == null) {
             // this router does not have external connectivity
-            log.trace("router({}) has no external gateway",
-                    osRouter.getName());
+            log.trace("router({}) has no external gateway", deriveResourceName(osRouter));
             return null;
         }
 
@@ -1499,6 +1502,20 @@
         return getDhcpOptionValue(port, "tag:ipxe,67");
     }
 
+    /**
+     * Returns a valid resource name.
+     *
+     * @param resource openstack basic resource object
+     * @return a valid resource name
+     */
+    public static String deriveResourceName(BasicResource resource) {
+        if (Strings.isNullOrEmpty(resource.getName())) {
+            return PARENTHESES_START + resource.getId() + PARENTHESES_END;
+        } else {
+            return resource.getName();
+        }
+    }
+
     private static String getDhcpOptionValue(NeutronPort port, String optionNameStr) {
         ObjectNode node = modelEntityToJson(port, NeutronPort.class);
 
diff --git a/apps/openstacknetworking/app/src/test/java/org/onosproject/openstacknetworking/impl/OpenstackRouterManagerTest.java b/apps/openstacknetworking/app/src/test/java/org/onosproject/openstacknetworking/impl/OpenstackRouterManagerTest.java
index b4afb75..ee84361 100644
--- a/apps/openstacknetworking/app/src/test/java/org/onosproject/openstacknetworking/impl/OpenstackRouterManagerTest.java
+++ b/apps/openstacknetworking/app/src/test/java/org/onosproject/openstacknetworking/impl/OpenstackRouterManagerTest.java
@@ -187,18 +187,6 @@
     }
 
     /**
-     * Tests if updating a router with null name fails with an exception.
-     */
-    @Test(expected = IllegalArgumentException.class)
-    public void testCreateRouterWithNullName() {
-        final Router testRouter = NeutronRouter.builder()
-                .id(ROUTER_ID)
-                .name(null)
-                .build();
-        target.createRouter(testRouter);
-    }
-
-    /**
      * Tests if creating a duplicate router fails with an exception.
      */
     @Test(expected = IllegalArgumentException.class)
