diff --git a/src/main/java/net/onrc/onos/core/topology/Link.java b/src/main/java/net/onrc/onos/core/topology/Link.java
index f54ff51..80d450e 100644
--- a/src/main/java/net/onrc/onos/core/topology/Link.java
+++ b/src/main/java/net/onrc/onos/core/topology/Link.java
@@ -1,7 +1,7 @@
 package net.onrc.onos.core.topology;
 
 import net.onrc.onos.core.topology.web.serializers.LinkSerializer;
-
+import net.onrc.onos.core.util.LinkTuple;
 import org.codehaus.jackson.map.annotate.JsonSerialize;
 
 // TODO Everything returned by these interfaces must be either Unmodifiable view,
@@ -11,6 +11,14 @@
  */
 @JsonSerialize(using = LinkSerializer.class)
 public interface Link extends ITopologyElement, StringAttributes {
+
+    /**
+     * Gets a {@link LinkTuple} that identifies this link.
+     *
+     * @return a LinkTuple representing the Port
+     */
+    public LinkTuple getLinkTuple();
+
     /**
      * Gets the source switch for the link.
      *
diff --git a/src/main/java/net/onrc/onos/core/topology/LinkEvent.java b/src/main/java/net/onrc/onos/core/topology/LinkEvent.java
index 01b4efe..dadf3c6 100644
--- a/src/main/java/net/onrc/onos/core/topology/LinkEvent.java
+++ b/src/main/java/net/onrc/onos/core/topology/LinkEvent.java
@@ -5,6 +5,7 @@
 
 import net.onrc.onos.core.topology.web.serializers.LinkEventSerializer;
 import net.onrc.onos.core.util.Dpid;
+import net.onrc.onos.core.util.LinkTuple;
 import net.onrc.onos.core.util.PortNumber;
 import net.onrc.onos.core.util.SwitchPort;
 
@@ -22,8 +23,7 @@
 @JsonSerialize(using = LinkEventSerializer.class)
 public class LinkEvent extends TopologyElement<LinkEvent> {
 
-    private final SwitchPort src;
-    private final SwitchPort dst;
+    private final LinkTuple id;
     // TODO add LastSeenTime, Capacity if appropriate
 
     /**
@@ -31,8 +31,18 @@
      */
     @Deprecated
     protected LinkEvent() {
-        src = null;
-        dst = null;
+        id = null;
+    }
+
+    /**
+     * Creates the Link object.
+     *
+     * @param id link tuple to identify this link
+     */
+    public LinkEvent(LinkTuple id) {
+        Validate.notNull(id);
+
+        this.id = id;
     }
 
     /**
@@ -42,11 +52,7 @@
      * @param dst destination SwitchPort
      */
     public LinkEvent(SwitchPort src, SwitchPort dst) {
-        Validate.notNull(src);
-        Validate.notNull(dst);
-
-        this.src = src;
-        this.dst = dst;
+        this(new LinkTuple(src, dst));
     }
 
     /**
@@ -56,16 +62,14 @@
      */
     public LinkEvent(LinkEvent original) {
         super(original);
-        this.src = original.src;
-        this.dst = original.dst;
+        Validate.isTrue(Objects.equals(this.id, original.id));
+
+        this.id = original.id;
     }
 
     // TODO probably want to remove this
     public LinkEvent(Link link) {
-        src = new SwitchPort(link.getSrcSwitch().getDpid(),
-                link.getSrcPort().getNumber());
-        dst = new SwitchPort(link.getDstSwitch().getDpid(),
-                link.getDstPort().getNumber());
+        this(link.getLinkTuple());
         // FIXME losing attributes here
     }
 
@@ -79,8 +83,16 @@
      */
     public LinkEvent(Dpid srcDpid, PortNumber srcPortNo,
                      Dpid dstDpid, PortNumber dstPortNo) {
-        src = new SwitchPort(srcDpid, srcPortNo);
-        dst = new SwitchPort(dstDpid, dstPortNo);
+        this(new LinkTuple(srcDpid, srcPortNo, dstDpid, dstPortNo));
+    }
+
+    /**
+     * Gets a {@link LinkTuple} that identifies this link.
+     *
+     * @return a LinkTuple representing the Port
+     */
+    public LinkTuple getLinkTuple() {
+        return id;
     }
 
     /**
@@ -89,7 +101,7 @@
      * @return source SwitchPort.
      */
     public SwitchPort getSrc() {
-        return src;
+        return getLinkTuple().getSrc();
     }
 
     /**
@@ -98,12 +110,12 @@
      * @return destination SwitchPort.
      */
     public SwitchPort getDst() {
-        return dst;
+        return getLinkTuple().getDst();
     }
 
     @Override
     public String toString() {
-        return "[LinkEvent " + src + "->" + dst + "]";
+        return "[LinkEvent " + getSrc() + "->" + getDst() + "]";
     }
 
     public static final int LINKID_BYTES = 2 + PortEvent.PORTID_BYTES * 2;
@@ -127,16 +139,15 @@
     }
 
     public ByteBuffer getIDasByteBuffer() {
-        return getLinkID(src.getDpid(), src.getPortNumber(),
-                dst.getDpid(), dst.getPortNumber());
+        return getLinkID(getSrc().getDpid(), getSrc().getPortNumber(),
+                getDst().getDpid(), getDst().getPortNumber());
     }
 
     @Override
     public int hashCode() {
         final int prime = 31;
         int result = super.hashCode();
-        result = prime * result + ((dst == null) ? 0 : dst.hashCode());
-        result = prime * result + ((src == null) ? 0 : src.hashCode());
+        result = prime * result + Objects.hashCode(id);
         return result;
     }
 
@@ -160,7 +171,6 @@
             return false;
         }
 
-        return Objects.equals(this.src, other.src) &&
-                Objects.equals(this.dst, other.dst);
+        return Objects.equals(this.id, other.id);
     }
 }
diff --git a/src/main/java/net/onrc/onos/core/topology/LinkImpl.java b/src/main/java/net/onrc/onos/core/topology/LinkImpl.java
index 26c260a..a573540 100644
--- a/src/main/java/net/onrc/onos/core/topology/LinkImpl.java
+++ b/src/main/java/net/onrc/onos/core/topology/LinkImpl.java
@@ -2,6 +2,8 @@
 
 import java.util.Map;
 
+import net.onrc.onos.core.util.LinkTuple;
+
 import org.apache.commons.lang.Validate;
 
 /**
@@ -62,6 +64,11 @@
     }
 
     @Override
+    public LinkTuple getLinkTuple() {
+        return linkObj.getLinkTuple();
+    }
+
+    @Override
     public Switch getSrcSwitch() {
         topology.acquireReadLock();
         try {
diff --git a/src/main/java/net/onrc/onos/core/util/serializers/KryoFactory.java b/src/main/java/net/onrc/onos/core/util/serializers/KryoFactory.java
index ae1fdb9..07efbbe 100644
--- a/src/main/java/net/onrc/onos/core/util/serializers/KryoFactory.java
+++ b/src/main/java/net/onrc/onos/core/util/serializers/KryoFactory.java
@@ -51,6 +51,7 @@
 import net.onrc.onos.core.util.IPv4Net;
 import net.onrc.onos.core.util.IPv6;
 import net.onrc.onos.core.util.IPv6Net;
+import net.onrc.onos.core.util.LinkTuple;
 import net.onrc.onos.core.util.PortNumber;
 import net.onrc.onos.core.util.Switch;
 import net.onrc.onos.core.util.SwitchPort;
@@ -193,6 +194,7 @@
         kryo.register(PortNumber.class);
         kryo.register(Switch.class);
         kryo.register(SwitchPort.class);
+        kryo.register(LinkTuple.class);
 
         // New data model-related classes
         kryo.register(DeviceEvent.class);
diff --git a/src/test/java/net/onrc/onos/core/intent/PathIntentMapTest.java b/src/test/java/net/onrc/onos/core/intent/PathIntentMapTest.java
index b8d9a48..8318476 100644
--- a/src/test/java/net/onrc/onos/core/intent/PathIntentMapTest.java
+++ b/src/test/java/net/onrc/onos/core/intent/PathIntentMapTest.java
@@ -14,6 +14,7 @@
 import net.onrc.onos.core.topology.Port;
 import net.onrc.onos.core.topology.Switch;
 import net.onrc.onos.core.util.Dpid;
+import net.onrc.onos.core.util.LinkTuple;
 import net.onrc.onos.core.util.PortNumber;
 
 import org.junit.After;
@@ -71,20 +72,32 @@
         link23 = createMock(Link.class);
         link24 = createMock(Link.class);
         expect(link12.getCapacity()).andReturn(1000.0).anyTimes();
-        expect(link23.getCapacity()).andReturn(1000.0).anyTimes();
-        expect(link24.getCapacity()).andReturn(1000.0).anyTimes();
         expect(link12.getSrcSwitch()).andReturn(sw1).anyTimes();
-        expect(link23.getSrcSwitch()).andReturn(sw2).anyTimes();
-        expect(link24.getSrcSwitch()).andReturn(sw2).anyTimes();
         expect(link12.getSrcPort()).andReturn(port11).anyTimes();
-        expect(link23.getSrcPort()).andReturn(port21).anyTimes();
-        expect(link24.getSrcPort()).andReturn(port23).anyTimes();
         expect(link12.getDstSwitch()).andReturn(sw2).anyTimes();
-        expect(link23.getDstSwitch()).andReturn(sw3).anyTimes();
-        expect(link24.getDstSwitch()).andReturn(sw4).anyTimes();
         expect(link12.getDstPort()).andReturn(port22).anyTimes();
+        expect(link12.getLinkTuple()).andReturn(
+                new LinkTuple(DPID_1, port11.getNumber(),
+                              DPID_2, port22.getNumber())).anyTimes();
+
+        expect(link23.getCapacity()).andReturn(1000.0).anyTimes();
+        expect(link23.getSrcSwitch()).andReturn(sw2).anyTimes();
+        expect(link23.getSrcPort()).andReturn(port21).anyTimes();
+        expect(link23.getDstSwitch()).andReturn(sw3).anyTimes();
         expect(link23.getDstPort()).andReturn(port31).anyTimes();
+        expect(link23.getLinkTuple()).andReturn(
+                new LinkTuple(DPID_2, port21.getNumber(),
+                              DPID_3, port31.getNumber())).anyTimes();
+
+        expect(link24.getCapacity()).andReturn(1000.0).anyTimes();
+        expect(link24.getSrcSwitch()).andReturn(sw2).anyTimes();
+        expect(link24.getSrcPort()).andReturn(port23).anyTimes();
+        expect(link24.getDstSwitch()).andReturn(sw4).anyTimes();
         expect(link24.getDstPort()).andReturn(port41).anyTimes();
+        expect(link24.getLinkTuple()).andReturn(
+                new LinkTuple(DPID_2, port23.getNumber(),
+                              DPID_4, port41.getNumber())).anyTimes();
+
         replay(link12);
         replay(link23);
         replay(link24);
