diff --git a/src/main/java/net/onrc/onos/ofcontroller/networkgraph/DeviceEvent.java b/src/main/java/net/onrc/onos/ofcontroller/networkgraph/DeviceEvent.java
new file mode 100644
index 0000000..a69b57a
--- /dev/null
+++ b/src/main/java/net/onrc/onos/ofcontroller/networkgraph/DeviceEvent.java
@@ -0,0 +1,55 @@
+package net.onrc.onos.ofcontroller.networkgraph;
+
+import java.net.InetAddress;
+import java.util.HashSet;
+import java.util.LinkedList;
+import java.util.List;
+import java.util.Set;
+
+import net.floodlightcontroller.util.MACAddress;
+import net.onrc.onos.ofcontroller.networkgraph.PortEvent.SwitchPort;
+
+/**
+ * Self-contained Device object for event
+ *
+ * TODO: We probably want common base class/interface for Self-Contained Event Object
+ *
+ */
+public class DeviceEvent {
+    private final MACAddress mac;
+    protected List<SwitchPort> attachmentPoints;
+    protected Set<InetAddress> ipAddresses;
+
+    public DeviceEvent(MACAddress mac) {
+	this.mac = mac;
+	this.attachmentPoints = new LinkedList<>();
+	this.ipAddresses = new HashSet<>();
+    }
+
+    public MACAddress getMac() {
+	return mac;
+    }
+
+    public List<SwitchPort> getAttachmentPoints() {
+	return attachmentPoints;
+    }
+
+    public void setAttachmentPoints(List<SwitchPort> attachmentPoints) {
+	this.attachmentPoints = attachmentPoints;
+    }
+
+    boolean addIpAddress(InetAddress addr) {
+	return this.ipAddresses.add(addr);
+    }
+
+    boolean removeIpAddress(InetAddress addr) {
+	return this.ipAddresses.remove(addr);
+    }
+
+    @Override
+    public String toString() {
+	return "[DeviceEvent " + mac + " attachmentPoints:" + attachmentPoints + " ipAddr:" + ipAddresses + "]";
+    }
+
+
+}
diff --git a/src/main/java/net/onrc/onos/ofcontroller/networkgraph/LinkEvent.java b/src/main/java/net/onrc/onos/ofcontroller/networkgraph/LinkEvent.java
new file mode 100644
index 0000000..bcea838
--- /dev/null
+++ b/src/main/java/net/onrc/onos/ofcontroller/networkgraph/LinkEvent.java
@@ -0,0 +1,36 @@
+package net.onrc.onos.ofcontroller.networkgraph;
+
+import net.onrc.onos.ofcontroller.networkgraph.PortEvent.SwitchPort;
+
+/**
+ * Self-contained Link object for event
+ *
+ * TODO: We probably want common base class/interface for Self-Contained Event Object
+ *
+ */
+public class LinkEvent {
+    private final SwitchPort src;
+    private final SwitchPort dst;
+
+    public LinkEvent(Long src_dpid, Long src_port_no, Long dst_dpid,
+	    Long dst_port_no) {
+
+	src = new SwitchPort(src_dpid, src_port_no);
+	dst = new SwitchPort(dst_dpid, dst_port_no);
+
+    }
+
+    public SwitchPort getSrc() {
+        return src;
+    }
+
+    public SwitchPort getDst() {
+        return dst;
+    }
+
+    @Override
+    public String toString() {
+	return "[LinkEvent " + src + "->" + dst + "]";
+    }
+
+}
diff --git a/src/main/java/net/onrc/onos/ofcontroller/networkgraph/PortEvent.java b/src/main/java/net/onrc/onos/ofcontroller/networkgraph/PortEvent.java
new file mode 100644
index 0000000..f51ee58
--- /dev/null
+++ b/src/main/java/net/onrc/onos/ofcontroller/networkgraph/PortEvent.java
@@ -0,0 +1,55 @@
+package net.onrc.onos.ofcontroller.networkgraph;
+
+/**
+ * Self-contained Port object for event
+ *
+ * TODO: We probably want common base class/interface for Self-Contained Event Object
+ *
+ */
+public class PortEvent {
+    public static class SwitchPort {
+        public final Long dpid;
+        public final Long number;
+
+        public SwitchPort(Long dpid, Long number) {
+            this.dpid = dpid;
+            this.number = number;
+        }
+
+        public Long getDpid() {
+            return dpid;
+        }
+
+        public Long getNumber() {
+            return number;
+        }
+
+        @Override
+        public String toString() {
+            return "(" + Long.toHexString(dpid) + "@" + number + ")";
+        }
+
+    }
+
+    private final SwitchPort id;
+    // TODO Add Hardware Address
+    // TODO Add Description
+
+    public PortEvent(Long dpid, Long number) {
+	this.id = new SwitchPort(dpid, number);
+    }
+
+    public Long getDpid() {
+	return id.dpid;
+    }
+
+    public Long getNumber() {
+	return id.number;
+    }
+
+    @Override
+    public String toString() {
+	return "[PortEvent 0x" + Long.toHexString(id.dpid) + "@" + id.number + "]";
+    }
+
+}
diff --git a/src/main/java/net/onrc/onos/ofcontroller/networkgraph/SwitchEvent.java b/src/main/java/net/onrc/onos/ofcontroller/networkgraph/SwitchEvent.java
new file mode 100644
index 0000000..5444dd2
--- /dev/null
+++ b/src/main/java/net/onrc/onos/ofcontroller/networkgraph/SwitchEvent.java
@@ -0,0 +1,25 @@
+package net.onrc.onos.ofcontroller.networkgraph;
+
+/**
+ * Self-contained Switch object for event
+ *
+ * TODO: We probably want common base class/interface for Self-Contained Event Object
+ *
+ */
+public class SwitchEvent {
+    private final Long dpid;
+
+    public SwitchEvent(Long dpid) {
+	this.dpid = dpid;
+    }
+
+    public Long getDpid() {
+	return dpid;
+    }
+
+    @Override
+    public String toString() {
+	return "[SwitchEvent 0x" + Long.toHexString(dpid) + "]";
+    }
+
+}
