diff --git a/cli/src/main/java/org/onosproject/cli/net/IntentsListCommand.java b/cli/src/main/java/org/onosproject/cli/net/IntentsListCommand.java
index 5e5ce12..59473ca 100644
--- a/cli/src/main/java/org/onosproject/cli/net/IntentsListCommand.java
+++ b/cli/src/main/java/org/onosproject/cli/net/IntentsListCommand.java
@@ -26,6 +26,7 @@
 import org.onosproject.net.Link;
 import org.onosproject.net.NetworkResource;
 import org.onosproject.net.intent.ConnectivityIntent;
+import org.onosproject.net.intent.HostToHostIntent;
 import org.onosproject.net.intent.Intent;
 import org.onosproject.net.intent.IntentService;
 import org.onosproject.net.intent.IntentState;
@@ -92,6 +93,7 @@
     private class IntentSummaries {
         private IntentSummary summaryAll;
         private IntentSummary summaryConnectivity;
+        private IntentSummary summaryHostToHost;
         private IntentSummary summaryPointToPoint;
         private IntentSummary summaryMultiPointToSinglePoint;
         private IntentSummary summarySinglePointToMultiPoint;
@@ -105,6 +107,7 @@
         private void init() {
             summaryAll = new IntentSummary("All");
             summaryConnectivity = new IntentSummary("Connectivity");
+            summaryHostToHost = new IntentSummary("HostToHost");
             summaryPointToPoint = new IntentSummary("PointToPoint");
             summaryMultiPointToSinglePoint =
                 new IntentSummary("MultiPointToSinglePoint");
@@ -140,6 +143,10 @@
                     // NOTE: ConnectivityIntent is a base type Intent
                     // continue;
                 }
+                if (intent instanceof HostToHostIntent) {
+                    summaryHostToHost.update(intentState);
+                    continue;
+                }
                 if (intent instanceof PointToPointIntent) {
                     summaryPointToPoint.update(intentState);
                     continue;
@@ -174,6 +181,7 @@
             ObjectMapper mapper = new ObjectMapper();
             ObjectNode result = mapper.createObjectNode();
             result.put("connectivity", summaryConnectivity.json(mapper));
+            result.put("hostToHost", summaryHostToHost.json(mapper));
             result.put("pointToPoint", summaryPointToPoint.json(mapper));
             result.put("multiPointToSinglePoint",
                        summaryMultiPointToSinglePoint.json(mapper));
@@ -191,6 +199,7 @@
          */
         private void printSummary() {
             summaryConnectivity.printState();
+            summaryHostToHost.printState();
             summaryPointToPoint.printState();
             summaryMultiPointToSinglePoint.printState();
             summarySinglePointToMultiPoint.printState();
@@ -335,7 +344,10 @@
             }
         }
 
-        if (intent instanceof PointToPointIntent) {
+        if (intent instanceof HostToHostIntent) {
+            HostToHostIntent pi = (HostToHostIntent) intent;
+            print("    host1=%s, host2=%s", pi.one(), pi.two());
+        } else if (intent instanceof PointToPointIntent) {
             PointToPointIntent pi = (PointToPointIntent) intent;
             print("    ingress=%s, egress=%s", pi.ingressPoint(), pi.egressPoint());
         } else if (intent instanceof MultiPointToSinglePointIntent) {
@@ -405,22 +417,22 @@
                 pnode.add(link.toString());
             }
             result.set("path", pnode);
-
+        } else if (intent instanceof HostToHostIntent) {
+            HostToHostIntent pi = (HostToHostIntent) intent;
+            result.set("host1", LinksListCommand.json(mapper, pi.one()));
+            result.set("host2", LinksListCommand.json(mapper, pi.two()));
         } else if (intent instanceof PointToPointIntent) {
             PointToPointIntent pi = (PointToPointIntent) intent;
             result.set("ingress", LinksListCommand.json(mapper, pi.ingressPoint()));
             result.set("egress", LinksListCommand.json(mapper, pi.egressPoint()));
-
         } else if (intent instanceof MultiPointToSinglePointIntent) {
             MultiPointToSinglePointIntent pi = (MultiPointToSinglePointIntent) intent;
             result.set("ingress", json(mapper, pi.ingressPoints()));
             result.set("egress", LinksListCommand.json(mapper, pi.egressPoint()));
-
         } else if (intent instanceof SinglePointToMultiPointIntent) {
             SinglePointToMultiPointIntent pi = (SinglePointToMultiPointIntent) intent;
             result.set("ingress", LinksListCommand.json(mapper, pi.ingressPoint()));
             result.set("egress", json(mapper, pi.egressPoints()));
-
         } else if (intent instanceof LinkCollectionIntent) {
             LinkCollectionIntent li = (LinkCollectionIntent) intent;
             result.set("links", LinksListCommand.json(li.links()));
diff --git a/cli/src/main/java/org/onosproject/cli/net/LinksListCommand.java b/cli/src/main/java/org/onosproject/cli/net/LinksListCommand.java
index d33f733..99872ac 100644
--- a/cli/src/main/java/org/onosproject/cli/net/LinksListCommand.java
+++ b/cli/src/main/java/org/onosproject/cli/net/LinksListCommand.java
@@ -23,6 +23,7 @@
 import org.apache.karaf.shell.commands.Command;
 import org.onosproject.cli.AbstractShellCommand;
 import org.onosproject.net.ConnectPoint;
+import org.onosproject.net.HostId;
 import org.onosproject.net.Link;
 import org.onosproject.net.link.LinkService;
 
@@ -89,6 +90,19 @@
     }
 
     /**
+     * Produces a JSON object for the specified host ID.
+     *
+     * @param mapper    object mapper
+     * @param hostId    host ID to encode
+     * @return JSON object
+     */
+    public static ObjectNode json(ObjectMapper mapper, HostId hostId) {
+        return mapper.createObjectNode()
+                .put("mac", hostId.mac().toString())
+                .put("vlanId", hostId.vlanId().toString());
+    }
+
+    /**
      * Produces a JSON object for the specified connect point.
      *
      * @param mapper       object mapper
