Enhanced the CLIs.
diff --git a/cli/src/main/java/org/onlab/onos/cli/net/DeviceIdCompleter.java b/cli/src/main/java/org/onlab/onos/cli/net/DeviceIdCompleter.java
index 2614d51..5d38bca 100644
--- a/cli/src/main/java/org/onlab/onos/cli/net/DeviceIdCompleter.java
+++ b/cli/src/main/java/org/onlab/onos/cli/net/DeviceIdCompleter.java
@@ -24,7 +24,7 @@
         Iterator<Device> it = service.getDevices().iterator();
         SortedSet<String> strings = delegate.getStrings();
         while (it.hasNext()) {
-            strings.add(it.next().id().uri().toString());
+            strings.add(it.next().id().toString());
         }
 
         // Now let the completer do the work for figuring out what to offer.
diff --git a/cli/src/main/java/org/onlab/onos/cli/net/DevicePortsListCommand.java b/cli/src/main/java/org/onlab/onos/cli/net/DevicePortsListCommand.java
index f09e39a..95f23af 100644
--- a/cli/src/main/java/org/onlab/onos/cli/net/DevicePortsListCommand.java
+++ b/cli/src/main/java/org/onlab/onos/cli/net/DevicePortsListCommand.java
@@ -2,10 +2,15 @@
 
 import org.apache.karaf.shell.commands.Argument;
 import org.apache.karaf.shell.commands.Command;
-import org.onlab.onos.cli.AbstractShellCommand;
+import org.onlab.onos.net.Device;
 import org.onlab.onos.net.Port;
 import org.onlab.onos.net.device.DeviceService;
 
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.Comparator;
+import java.util.List;
+
 import static org.onlab.onos.net.DeviceId.deviceId;
 
 /**
@@ -13,21 +18,42 @@
  */
 @Command(scope = "onos", name = "ports",
          description = "Lists all ports of a device")
-public class DevicePortsListCommand extends AbstractShellCommand {
+public class DevicePortsListCommand extends DevicesListCommand {
 
-    private static final String FMT = "port=%s, state=%s";
+    private static final String FMT = "  port=%s, state=%s";
 
     @Argument(index = 0, name = "deviceId", description = "Device ID",
-              required = true, multiValued = false)
-    String deviceId = null;
+              required = false, multiValued = false)
+    String uri = null;
+
+    private static final Comparator<Port> PORT_COMPARATOR = new Comparator<Port>() {
+        @Override
+        public int compare(Port p1, Port p2) {
+            long delta = p1.number().toLong() - p2.number().toLong();
+            return delta == 0 ? 0 : (delta < 0 ? -1 : +1);
+        }
+    };
 
     @Override
     protected Object doExecute() throws Exception {
         DeviceService service = getService(DeviceService.class);
-        Iterable<Port> ports = service.getPorts(deviceId(deviceId));
-        for (Port port : ports) {
-            print(FMT, port.number(), port.isEnabled() ? "enabled" : "disabled");
+        if (uri == null) {
+            for (Device device : service.getDevices()) {
+                printDevicePorts(service, device);
+            }
+        } else {
+            printDevicePorts(service, service.getDevice(deviceId(uri)));
         }
         return null;
     }
+
+    private void printDevicePorts(DeviceService service, Device device) {
+        List<Port> ports = new ArrayList<>(service.getPorts(device.id()));
+        Collections.sort(ports, PORT_COMPARATOR);
+        printDevice(device, service.isAvailable(device.id()));
+        for (Port port : ports) {
+            print(FMT, port.number(), port.isEnabled() ? "enabled" : "disabled");
+        }
+    }
+
 }
diff --git a/cli/src/main/java/org/onlab/onos/cli/net/DevicesListCommand.java b/cli/src/main/java/org/onlab/onos/cli/net/DevicesListCommand.java
index c7e2c8c..21bb892 100644
--- a/cli/src/main/java/org/onlab/onos/cli/net/DevicesListCommand.java
+++ b/cli/src/main/java/org/onlab/onos/cli/net/DevicesListCommand.java
@@ -13,14 +13,27 @@
 public class DevicesListCommand extends AbstractShellCommand {
 
     private static final String FMT =
-            "id=%s, type=%s, mfr=%s, hw=%s, sw=%s, serial=%s";
+            "id=%s, available=%s, type=%s, mfr=%s, hw=%s, sw=%s, serial=%s";
 
     @Override
     protected Object doExecute() throws Exception {
-        for (Device device : getService(DeviceService.class).getDevices()) {
-            print(FMT, device.id().uri(), device.type(), device.manufacturer(),
-                  device.hwVersion(), device.swVersion(), device.serialNumber());
+        DeviceService service = getService(DeviceService.class);
+        for (Device device : service.getDevices()) {
+            printDevice(device, service.isAvailable(device.id()));
         }
         return null;
     }
+
+    /**
+     * Prints information about the specified device.
+     *
+     * @param device      infrastructure device
+     * @param isAvailable true of device is available
+     */
+    protected void printDevice(Device device, boolean isAvailable) {
+        print(FMT, device.id(), isAvailable, device.type(),
+              device.manufacturer(), device.hwVersion(), device.swVersion(),
+              device.serialNumber());
+    }
+
 }
diff --git a/cli/src/main/java/org/onlab/onos/cli/net/LinksListCommand.java b/cli/src/main/java/org/onlab/onos/cli/net/LinksListCommand.java
index d94d547..7197361 100644
--- a/cli/src/main/java/org/onlab/onos/cli/net/LinksListCommand.java
+++ b/cli/src/main/java/org/onlab/onos/cli/net/LinksListCommand.java
@@ -27,8 +27,8 @@
         Iterable<Link> links = deviceId != null ?
                 service.getDeviceLinks(deviceId(deviceId)) : service.getLinks();
         for (Link link : links) {
-            print(FMT, link.src().deviceId().uri(), link.src().port(),
-                  link.dst().deviceId().uri(), link.dst().port(), link.type());
+            print(FMT, link.src().deviceId(), link.src().port(),
+                  link.dst().deviceId(), link.dst().port(), link.type());
         }
         return null;
     }