diff --git a/drivers/gnmi/src/main/java/org/onosproject/drivers/gnmi/OpenConfigGnmiDeviceDescriptionDiscovery.java b/drivers/gnmi/src/main/java/org/onosproject/drivers/gnmi/OpenConfigGnmiDeviceDescriptionDiscovery.java
index eb41f4d..5717ffe 100644
--- a/drivers/gnmi/src/main/java/org/onosproject/drivers/gnmi/OpenConfigGnmiDeviceDescriptionDiscovery.java
+++ b/drivers/gnmi/src/main/java/org/onosproject/drivers/gnmi/OpenConfigGnmiDeviceDescriptionDiscovery.java
@@ -92,6 +92,7 @@
 
         final Map<String, DefaultPortDescription.Builder> ports = Maps.newHashMap();
         final Map<String, DefaultAnnotations.Builder> annotations = Maps.newHashMap();
+        final Map<String, PortNumber> portIds = Maps.newHashMap();
 
         // Creates port descriptions with port name and port number
         response.getNotificationList()
@@ -106,7 +107,7 @@
                         }
                         final DefaultPortDescription.Builder builder = ports.get(ifName);
                         final DefaultAnnotations.Builder annotationsBuilder = annotations.get(ifName);
-                        parseInterfaceInfo(update, ifName, builder, annotationsBuilder);
+                        parseInterfaceInfo(update, ifName, builder, annotationsBuilder, portIds);
                     });
                 });
 
@@ -117,9 +118,14 @@
             if (!annotationsBuilder.build().keys().contains(LAST_CHANGE)) {
                 annotationsBuilder.set(LAST_CHANGE, String.valueOf(0));
             }
+            // Override port number if /interfaces/interface/state/id is available
+            if (portIds.containsKey(key)) {
+                value.withPortNumber(portIds.get(key));
+            }
             DefaultAnnotations annotation = annotations.get(key).build();
             portDescriptionList.add(value.annotations(annotation).build());
         });
+
         return portDescriptionList;
     }
 
@@ -144,15 +150,17 @@
     private void parseInterfaceInfo(Update update,
                                     String ifName,
                                     DefaultPortDescription.Builder builder,
-                                    DefaultAnnotations.Builder annotationsBuilder) {
+                                    DefaultAnnotations.Builder annotationsBuilder,
+                                    Map<String, PortNumber> portIds) {
 
         final Path path = update.getPath();
         final List<PathElem> elems = path.getElemList();
         final Gnmi.TypedValue val = update.getVal();
         if (elems.size() == 4) {
-            // /interfaces/interface/state/ifindex
-            // /interfaces/interface/state/oper-status
-            // /interfaces/interface/state/last-change
+            /* /interfaces/interface/state/ifindex
+               /interfaces/interface/state/oper-status
+               /interfaces/interface/state/last-change
+               /interfaces/interface/state/id */
             final String pathElemName = elems.get(3).getName();
             switch (pathElemName) {
                 case "ifindex": // port number
@@ -164,6 +172,12 @@
                 case "last-change":
                     annotationsBuilder.set(LAST_CHANGE, String.valueOf(val.getUintVal()));
                     return;
+                case "id":
+                    /* Temporary stored in portIds and eventually substituted
+                       when all updates have been processed. This is done because
+                       there is no guarantee about the order of the updates delivery */
+                    portIds.put(ifName, PortNumber.portNumber(val.getUintVal(), ifName));
+                    return;
                 default:
                     break;
             }
