diff --git a/cli/src/main/java/org/onosproject/cli/net/DevicePortStateCommand.java b/cli/src/main/java/org/onosproject/cli/net/DevicePortStateCommand.java
index 490d514..7cd177f 100644
--- a/cli/src/main/java/org/onosproject/cli/net/DevicePortStateCommand.java
+++ b/cli/src/main/java/org/onosproject/cli/net/DevicePortStateCommand.java
@@ -37,7 +37,7 @@
 
     @Argument(index = 1, name = "portNumber", description = "Port Number",
             required = true, multiValued = false)
-    Integer portNumber = null;
+    String portNumber = null;
 
     @Argument(index = 2, name = "portState",
             description = "Desired State. Either \"enable\" or \"disable\".",
@@ -53,7 +53,7 @@
             print(" %s", "Device does not exist");
             return;
         }
-        PortNumber pnum = PortNumber.portNumber(portNumber);
+        PortNumber pnum = PortNumber.fromString(portNumber);
         Port p = deviceService.getPort(dev.id(), pnum);
         if (p == null) {
             print(" %s", "Port does not exist");
diff --git a/cli/src/main/java/org/onosproject/cli/net/DevicePortStatsCommand.java b/cli/src/main/java/org/onosproject/cli/net/DevicePortStatsCommand.java
index 2aa631f..eb07071 100644
--- a/cli/src/main/java/org/onosproject/cli/net/DevicePortStatsCommand.java
+++ b/cli/src/main/java/org/onosproject/cli/net/DevicePortStatsCommand.java
@@ -18,6 +18,7 @@
 import static org.onosproject.cli.net.DevicesListCommand.getSortedDevices;
 import static org.onosproject.net.DeviceId.deviceId;
 
+import java.util.Comparator;
 import java.util.List;
 import java.util.concurrent.TimeUnit;
 
@@ -28,6 +29,7 @@
 import org.onosproject.cli.AbstractShellCommand;
 import org.onosproject.net.Device;
 import org.onosproject.net.DeviceId;
+import org.onosproject.net.PortNumber;
 import org.onosproject.net.device.DeviceService;
 import org.onosproject.net.device.PortStatistics;
 
@@ -60,7 +62,9 @@
 
     @Argument(index = 1, name = "portNumber", description = "Port Number",
             required = false, multiValued = false)
-    Integer portNumber = null;
+    String portNumberStr = null;
+
+    PortNumber portNumber = null;
 
     private static final String FORMAT =
             "   port=%s, pktRx=%s, pktTx=%s, bytesRx=%s, bytesTx=%s, pktRxDrp=%s, pktTxDrp=%s, Dur=%s";
@@ -69,6 +73,10 @@
     protected void execute() {
         DeviceService deviceService = get(DeviceService.class);
 
+        if (portNumberStr != null) {
+            portNumber = PortNumber.fromString(portNumberStr);
+        }
+
         if (uri == null) {
             for (Device d : getSortedDevices(deviceService)) {
                 if (delta) {
@@ -106,17 +114,22 @@
     private void printPortStats(DeviceId deviceId, Iterable<PortStatistics> portStats) {
         print("deviceId=%s", deviceId);
         for (PortStatistics stat : sortByPort(portStats)) {
-            if (portNumber != null && stat.port() != portNumber) {
+            if (isIrrelevant(stat)) {
                 continue;
             }
             if (nonzero && stat.isZero()) {
                 continue;
             }
-            print(FORMAT, stat.port(), stat.packetsReceived(), stat.packetsSent(), stat.bytesReceived(),
+            print(FORMAT, stat.portNumber(), stat.packetsReceived(), stat.packetsSent(), stat.bytesReceived(),
                     stat.bytesSent(), stat.packetsRxDropped(), stat.packetsTxDropped(), stat.durationSec());
         }
     }
 
+    private boolean isIrrelevant(PortStatistics stat) {
+        // TODO revisit logical port (e.g., ALL) handling
+        return portNumber != null && !portNumber.equals(stat.portNumber());
+    }
+
     /**
      * Prints Port delta statistics.
      *
@@ -128,7 +141,7 @@
                 + " rateRx=%s, rateTx=%s, pktRxDrp=%s, pktTxDrp=%s, interval=%s";
         print("deviceId=%s", deviceId);
         for (PortStatistics stat : sortByPort(portStats)) {
-            if (portNumber != null && stat.port() != portNumber) {
+            if (isIrrelevant(stat)) {
                 continue;
             }
             if (nonzero && stat.isZero()) {
@@ -138,7 +151,7 @@
                     (((float) stat.durationNano()) / TimeUnit.SECONDS.toNanos(1));
             float rateRx = stat.bytesReceived() * 8 / duration;
             float rateTx = stat.bytesSent() * 8 / duration;
-            print(formatDelta, stat.port(),
+            print(formatDelta, stat.portNumber(),
                     stat.packetsReceived(),
                     stat.packetsSent(),
                     stat.bytesReceived(),
@@ -167,7 +180,7 @@
         print("|---------------------------------------------------------------------------------------------------|");
 
         for (PortStatistics stat : sortByPort(portStats)) {
-            if (portNumber != null && stat.port() != portNumber) {
+            if (isIrrelevant(stat)) {
                 continue;
             }
             if (nonzero && stat.isZero()) {
@@ -177,7 +190,7 @@
                     (((float) stat.durationNano()) / TimeUnit.SECONDS.toNanos(1));
             float rateRx = duration > 0 ? stat.bytesReceived() * 8 / duration : 0;
             float rateTx = duration > 0 ? stat.bytesSent() * 8 / duration : 0;
-            print(formatDeltaTable, stat.port(),
+            print(formatDeltaTable, stat.portNumber(),
                   humanReadable(stat.packetsReceived()),
                   humanReadable(stat.bytesReceived()),
                   humanReadableBps(rateRx),
@@ -225,8 +238,8 @@
 
     private static List<PortStatistics> sortByPort(Iterable<PortStatistics> portStats) {
         List<PortStatistics> portStatsList = Lists.newArrayList(portStats);
-        portStatsList.sort((PortStatistics o1, PortStatistics o2) ->
-                o1.port() - o2.port());
+
+        portStatsList.sort(Comparator.comparing(ps -> ps.portNumber().toLong()));
         return portStatsList;
     }
 }
