diff --git a/cli/src/main/java/org/onlab/onos/cli/net/IntentsListCommand.java b/cli/src/main/java/org/onlab/onos/cli/net/IntentsListCommand.java
index 7cfe2c6..ab9fb83 100644
--- a/cli/src/main/java/org/onlab/onos/cli/net/IntentsListCommand.java
+++ b/cli/src/main/java/org/onlab/onos/cli/net/IntentsListCommand.java
@@ -19,6 +19,7 @@
 import org.onlab.onos.net.intent.PointToPointIntent;
 import org.onlab.onos.net.intent.SinglePointToMultiPointIntent;
 
+import java.util.List;
 import java.util.Set;
 
 /**
@@ -39,19 +40,23 @@
                 print("id=%s, state=%s, type=%s, appId=%s",
                       intent.id(), state, intent.getClass().getSimpleName(),
                       intent.appId().name());
-                printDetails(intent);
+                printDetails(service, intent);
             }
         }
     }
 
-    private void printDetails(Intent intent) {
+    private void printDetails(IntentService service, Intent intent) {
         if (intent.resources() != null && !intent.resources().isEmpty()) {
             print("    resources=%s", intent.resources());
         }
         if (intent instanceof ConnectivityIntent) {
             ConnectivityIntent ci = (ConnectivityIntent) intent;
-            print("    selector=%s", ci.selector().criteria());
-            print("    treatment=%s", ci.treatment().instructions());
+            if (!ci.selector().criteria().isEmpty()) {
+                print("    selector=%s", ci.selector().criteria());
+            }
+            if (!ci.treatment().instructions().isEmpty()) {
+                print("    treatment=%s", ci.treatment().instructions());
+            }
         }
 
         if (intent instanceof PointToPointIntent) {
@@ -71,6 +76,11 @@
             print("    links=%s", li.links());
             print("    egress=%s", li.egressPoint());
         }
+
+        List<Intent> installable = service.getInstallableIntents(intent.id());
+        if (installable != null && !installable.isEmpty()) {
+            print("    installable=%s", installable);
+        }
     }
 
     // Produces JSON array of the specified intents.
@@ -86,10 +96,14 @@
     private JsonNode json(IntentService service, ObjectMapper mapper, Intent intent) {
         ObjectNode result = mapper.createObjectNode()
                 .put("id", intent.id().toString())
-                .put("state", service.getIntentState(intent.id()).toString())
                 .put("type", intent.getClass().getSimpleName())
                 .put("appId", intent.appId().name());
 
+        IntentState state = service.getIntentState(intent.id());
+        if (state != null) {
+            result.put("state", state.toString());
+        }
+
         if (intent.resources() != null && !intent.resources().isEmpty()) {
             ArrayNode rnode = mapper.createArrayNode();
             for (NetworkResource resource : intent.resources()) {
@@ -136,6 +150,10 @@
             result.set("links", LinksListCommand.json(li.links()));
         }
 
+        List<Intent> installable = service.getInstallableIntents(intent.id());
+        if (installable != null && !installable.isEmpty()) {
+            result.set("installable", json(service, installable));
+        }
         return result;
     }
 
