diff --git a/src/main/java/net/onrc/onos/datastore/topology/RCDevice.java b/src/main/java/net/onrc/onos/datastore/topology/RCDevice.java
index a431490..8d696ed 100644
--- a/src/main/java/net/onrc/onos/datastore/topology/RCDevice.java
+++ b/src/main/java/net/onrc/onos/datastore/topology/RCDevice.java
@@ -21,6 +21,7 @@
 import net.onrc.onos.datastore.topology.RCLink.STATUS;
 import net.onrc.onos.datastore.utils.ByteArrayComparator;
 import net.onrc.onos.datastore.utils.ByteArrayUtil;
+import net.onrc.onos.ofcontroller.networkgraph.DeviceEvent;
 
 public class RCDevice extends RCObject {
     @SuppressWarnings("unused")
@@ -53,8 +54,7 @@
 
     // Assuming mac is unique cluster-wide
     public static byte[] getDeviceID(final byte[] mac) {
-	return ByteBuffer.allocate(2 + mac.length).putChar('D').put(mac)
-	        .array();
+        return DeviceEvent.getDeviceID(mac);
     }
 
     public static StringBuilder keysToSB(Collection<byte[]> keys) {
diff --git a/src/main/java/net/onrc/onos/datastore/topology/RCLink.java b/src/main/java/net/onrc/onos/datastore/topology/RCLink.java
index caf446d..9ce8857 100644
--- a/src/main/java/net/onrc/onos/datastore/topology/RCLink.java
+++ b/src/main/java/net/onrc/onos/datastore/topology/RCLink.java
@@ -15,6 +15,8 @@
 import edu.stanford.ramcloud.JRamCloud;
 import net.onrc.onos.datastore.RCObject;
 import net.onrc.onos.datastore.RCTable;
+import net.onrc.onos.ofcontroller.networkgraph.LinkEvent;
+import net.onrc.onos.ofcontroller.networkgraph.PortEvent;
 
 public class RCLink extends RCObject {
     @SuppressWarnings("unused")
@@ -77,13 +79,10 @@
     private final SwitchPort dst;
     private STATUS status;
 
-    public static final int LINKID_BYTES = 2 + RCPort.PORTID_BYTES * 2;
-
     public static byte[] getLinkID(Long src_dpid, Long src_port_no,
 	    Long dst_dpid, Long dst_port_no) {
-	return ByteBuffer.allocate(LINKID_BYTES).putChar('L')
-	        .put(RCPort.getPortID(src_dpid, src_port_no))
-	        .put(RCPort.getPortID(dst_dpid, dst_port_no)).array();
+	return LinkEvent.getLinkID(src_dpid, src_port_no, dst_dpid,
+		dst_port_no);
     }
 
     public static StringBuilder keysToSB(Collection<byte[]> keys) {
@@ -118,7 +117,7 @@
 	    throw new IllegalArgumentException("Invalid Link key");
 	}
 	long src_port_pair[] = RCPort.getPortPairFromKey(keyBuf.slice());
-	keyBuf.position(2 + RCPort.PORTID_BYTES);
+	keyBuf.position(2 + PortEvent.PORTID_BYTES);
 	long dst_port_pair[] = RCPort.getPortPairFromKey(keyBuf.slice());
 
 	tuple[0] = src_port_pair[0];
diff --git a/src/main/java/net/onrc/onos/datastore/topology/RCPort.java b/src/main/java/net/onrc/onos/datastore/topology/RCPort.java
index b1f3bef..c3cdf86 100644
--- a/src/main/java/net/onrc/onos/datastore/topology/RCPort.java
+++ b/src/main/java/net/onrc/onos/datastore/topology/RCPort.java
@@ -21,6 +21,7 @@
 import net.onrc.onos.datastore.RCTable;
 import net.onrc.onos.datastore.utils.ByteArrayComparator;
 import net.onrc.onos.datastore.utils.ByteArrayUtil;
+import net.onrc.onos.ofcontroller.networkgraph.PortEvent;
 
 public class RCPort extends RCObject {
     private static final Logger log = LoggerFactory.getLogger(RCPort.class);
@@ -69,17 +70,8 @@
     @Deprecated
     transient boolean isDeviceIdsModified;
 
-    public static final int PORTID_BYTES = RCSwitch.SWITCHID_BYTES + 2 + 8;
-
     public static byte[] getPortID(Long dpid, Long number) {
-	if (dpid == null) {
-	    throw new IllegalArgumentException("dpid cannot be null");
-	}
-	if (number == null) {
-	    throw new IllegalArgumentException("number cannot be null");
-	}
-	return ByteBuffer.allocate(PORTID_BYTES).putChar('S').putLong(dpid)
-	        .putChar('P').putLong(number).array();
+        return PortEvent.getPortID(dpid, number);
     }
 
     public static StringBuilder keysToSB(Collection<byte[]> keys) {
diff --git a/src/main/java/net/onrc/onos/datastore/topology/RCSwitch.java b/src/main/java/net/onrc/onos/datastore/topology/RCSwitch.java
index 3b00084..a0dd037 100644
--- a/src/main/java/net/onrc/onos/datastore/topology/RCSwitch.java
+++ b/src/main/java/net/onrc/onos/datastore/topology/RCSwitch.java
@@ -14,6 +14,7 @@
 import net.onrc.onos.datastore.RCObject;
 import net.onrc.onos.datastore.RCTable;
 import net.onrc.onos.datastore.utils.ByteArrayComparator;
+import net.onrc.onos.ofcontroller.networkgraph.SwitchEvent;
 
 import org.openflow.util.HexString;
 import org.slf4j.Logger;
@@ -70,14 +71,8 @@
     @Deprecated
     transient private boolean isPortIdsModified;
 
-    public static final int SWITCHID_BYTES = 2 + 8;
-
     public static byte[] getSwitchID(Long dpid) {
-	if (dpid == null) {
-	    throw new IllegalArgumentException("dpid cannot be null");
-	}
-	return ByteBuffer.allocate(SWITCHID_BYTES).putChar('S').putLong(dpid)
-	        .array();
+        return SwitchEvent.getSwitchID(dpid);
     }
 
     public static StringBuilder keysToSB(Collection<byte[]> keys) {
diff --git a/src/main/java/net/onrc/onos/ofcontroller/networkgraph/DeviceEvent.java b/src/main/java/net/onrc/onos/ofcontroller/networkgraph/DeviceEvent.java
index 014fc43..fa7a761 100644
--- a/src/main/java/net/onrc/onos/ofcontroller/networkgraph/DeviceEvent.java
+++ b/src/main/java/net/onrc/onos/ofcontroller/networkgraph/DeviceEvent.java
@@ -1,6 +1,7 @@
 package net.onrc.onos.ofcontroller.networkgraph;
 
 import java.net.InetAddress;
+import java.nio.ByteBuffer;
 import java.util.HashSet;
 import java.util.LinkedList;
 import java.util.List;
@@ -71,5 +72,11 @@
 	return "[DeviceEvent " + mac + " attachmentPoints:" + attachmentPoints + " ipAddr:" + ipAddresses + "]";
     }
 
+    // Assuming mac is unique cluster-wide
+    public static byte[] getDeviceID(final byte[] mac) {
+	return ByteBuffer.allocate(2 + mac.length).putChar('D').put(mac)
+		.array();
+    }
+
 
 }
diff --git a/src/main/java/net/onrc/onos/ofcontroller/networkgraph/LinkEvent.java b/src/main/java/net/onrc/onos/ofcontroller/networkgraph/LinkEvent.java
index d9342aa..81f9ba3 100644
--- a/src/main/java/net/onrc/onos/ofcontroller/networkgraph/LinkEvent.java
+++ b/src/main/java/net/onrc/onos/ofcontroller/networkgraph/LinkEvent.java
@@ -1,5 +1,7 @@
 package net.onrc.onos.ofcontroller.networkgraph;
 
+import java.nio.ByteBuffer;
+
 import net.onrc.onos.ofcontroller.networkgraph.PortEvent.SwitchPort;
 
 /**
@@ -33,4 +35,13 @@
 	return "[LinkEvent " + src + "->" + dst + "]";
     }
 
+    public static final int LINKID_BYTES = 2 + PortEvent.PORTID_BYTES * 2;
+
+    public static byte[] getLinkID(Long src_dpid, Long src_port_no,
+	    Long dst_dpid, Long dst_port_no) {
+	return ByteBuffer.allocate(LinkEvent.LINKID_BYTES).putChar('L')
+		.put(PortEvent.getPortID(src_dpid, src_port_no))
+		.put(PortEvent.getPortID(dst_dpid, dst_port_no)).array();
+    }
+
 }
diff --git a/src/main/java/net/onrc/onos/ofcontroller/networkgraph/PortEvent.java b/src/main/java/net/onrc/onos/ofcontroller/networkgraph/PortEvent.java
index addd695..e4caee5 100644
--- a/src/main/java/net/onrc/onos/ofcontroller/networkgraph/PortEvent.java
+++ b/src/main/java/net/onrc/onos/ofcontroller/networkgraph/PortEvent.java
@@ -1,5 +1,7 @@
 package net.onrc.onos.ofcontroller.networkgraph;
 
+import java.nio.ByteBuffer;
+
 /**
  * Self-contained Port event Object
  *
@@ -52,4 +54,17 @@
 	return "[PortEvent 0x" + Long.toHexString(id.dpid) + "@" + id.number + "]";
     }
 
+    public static final int PORTID_BYTES = SwitchEvent.SWITCHID_BYTES + 2 + 8;
+
+    public static byte[] getPortID(Long dpid, Long number) {
+	if (dpid == null) {
+	    throw new IllegalArgumentException("dpid cannot be null");
+	}
+	if (number == null) {
+	    throw new IllegalArgumentException("number cannot be null");
+	}
+	return ByteBuffer.allocate(PortEvent.PORTID_BYTES).putChar('S').putLong(dpid)
+		.putChar('P').putLong(number).array();
+    }
+
 }
diff --git a/src/main/java/net/onrc/onos/ofcontroller/networkgraph/SwitchEvent.java b/src/main/java/net/onrc/onos/ofcontroller/networkgraph/SwitchEvent.java
index 959a7d9..58532ae 100644
--- a/src/main/java/net/onrc/onos/ofcontroller/networkgraph/SwitchEvent.java
+++ b/src/main/java/net/onrc/onos/ofcontroller/networkgraph/SwitchEvent.java
@@ -1,5 +1,6 @@
 package net.onrc.onos.ofcontroller.networkgraph;
 
+import java.nio.ByteBuffer;
 import java.util.ArrayList;
 import java.util.List;
 
@@ -40,4 +41,14 @@
 	return "[SwitchEvent 0x" + Long.toHexString(dpid) + "]";
     }
 
+    public static final int SWITCHID_BYTES = 2 + 8;
+
+    public static byte[] getSwitchID(Long dpid) {
+	if (dpid == null) {
+	    throw new IllegalArgumentException("dpid cannot be null");
+	}
+	return ByteBuffer.allocate(SwitchEvent.SWITCHID_BYTES).putChar('S').putLong(dpid)
+		.array();
+    }
+
 }
