Added normalization of HostToHost id fingerprint to allow host one/two to come in either order.
diff --git a/core/api/src/main/java/org/onlab/onos/net/intent/HostToHostIntent.java b/core/api/src/main/java/org/onlab/onos/net/intent/HostToHostIntent.java
index 92b148d..7177d3f 100644
--- a/core/api/src/main/java/org/onlab/onos/net/intent/HostToHostIntent.java
+++ b/core/api/src/main/java/org/onlab/onos/net/intent/HostToHostIntent.java
@@ -17,26 +17,33 @@
     private final HostId two;
 
     /**
-     * Creates a new point-to-point intent with the supplied ingress/egress
-     * ports.
+     * Creates a new host-to-host intent with the supplied host pair.
      *
      * @param appId     application identifier
      * @param one       first host
      * @param two       second host
      * @param selector  action
      * @param treatment ingress port
-     * @throws NullPointerException if {@code ingressPort} or {@code egressPort}
-     *                              is null.
+     * @throws NullPointerException if {@code one} or {@code two} is null.
      */
     public HostToHostIntent(ApplicationId appId, HostId one, HostId two,
                             TrafficSelector selector,
                             TrafficTreatment treatment) {
-        super(id(HostToHostIntent.class, one, two, selector, treatment),
+        super(id(HostToHostIntent.class, min(one, two), max(one, two),
+                 selector, treatment),
               appId, null, selector, treatment);
         this.one = checkNotNull(one);
         this.two = checkNotNull(two);
     }
 
+    private static HostId min(HostId one, HostId two) {
+        return one.hashCode() < two.hashCode() ? one : two;
+    }
+
+    private static HostId max(HostId one, HostId two) {
+        return one.hashCode() > two.hashCode() ? one : two;
+    }
+
     /**
      * Returns identifier of the first host.
      *