diff --git a/core/api/src/main/java/org/onlab/onos/net/intent/LinkCollectionIntent.java b/core/api/src/main/java/org/onlab/onos/net/intent/LinkCollectionIntent.java
index 9d0fde8..6a8b002 100644
--- a/core/api/src/main/java/org/onlab/onos/net/intent/LinkCollectionIntent.java
+++ b/core/api/src/main/java/org/onlab/onos/net/intent/LinkCollectionIntent.java
@@ -4,6 +4,7 @@
 import java.util.Objects;
 import java.util.Set;
 
+import org.onlab.onos.net.ConnectPoint;
 import org.onlab.onos.net.Link;
 import org.onlab.onos.net.flow.TrafficSelector;
 import org.onlab.onos.net.flow.TrafficTreatment;
@@ -18,6 +19,8 @@
 
     private final Set<Link> links;
 
+    private final ConnectPoint egressPoint;
+
     /**
      * Creates a new point-to-point intent with the supplied ingress/egress
      * ports and using the specified explicit path.
@@ -26,19 +29,23 @@
      * @param selector    traffic match
      * @param treatment   action
      * @param links       traversed links
+     * @param egressPoint egress point
      * @throws NullPointerException {@code path} is null
      */
     public LinkCollectionIntent(IntentId id,
                                 TrafficSelector selector,
                                 TrafficTreatment treatment,
-                                Set<Link> links) {
+                                Set<Link> links,
+                                ConnectPoint egressPoint) {
         super(id, selector, treatment);
         this.links = links;
+        this.egressPoint = egressPoint;
     }
 
     protected LinkCollectionIntent() {
         super();
         this.links = null;
+        this.egressPoint = null;
     }
 
     @Override
@@ -56,6 +63,15 @@
         return links;
     }
 
+    /**
+     * Returns the egress point of the intent.
+     *
+     * @return the egress point
+     */
+    public ConnectPoint egressPoint() {
+        return egressPoint;
+    }
+
     @Override
     public boolean equals(Object o) {
         if (this == o) {
@@ -70,12 +86,13 @@
 
         LinkCollectionIntent that = (LinkCollectionIntent) o;
 
-        return Objects.equals(this.links, that.links);
+        return Objects.equals(this.links, that.links) &&
+                Objects.equals(this.egressPoint, that.egressPoint);
     }
 
     @Override
     public int hashCode() {
-        return Objects.hash(super.hashCode(), links);
+        return Objects.hash(super.hashCode(), links, egressPoint);
     }
 
     @Override
@@ -85,6 +102,7 @@
                 .add("match", selector())
                 .add("action", treatment())
                 .add("links", links())
+                .add("egress", egressPoint())
                 .toString();
     }
 }
