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 fa7a761..a4c3450 100644
--- a/src/main/java/net/onrc/onos/ofcontroller/networkgraph/DeviceEvent.java
+++ b/src/main/java/net/onrc/onos/ofcontroller/networkgraph/DeviceEvent.java
@@ -28,6 +28,14 @@
     protected List<SwitchPort> attachmentPoints;
     protected Set<InetAddress> ipAddresses;
 
+
+    /**
+     * Default constructor.
+     */
+    public DeviceEvent() {
+	mac = null;
+    }
+
     public DeviceEvent(MACAddress mac) {
 	if (mac == null) {
 	    throw new IllegalArgumentException("Device mac cannot be null");
@@ -78,5 +86,7 @@
 		.array();
     }
 
-
+    public byte[] getID() {
+	return getDeviceID(mac.toBytes());
+    }
 }
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 81f9ba3..c8cf71e 100644
--- a/src/main/java/net/onrc/onos/ofcontroller/networkgraph/LinkEvent.java
+++ b/src/main/java/net/onrc/onos/ofcontroller/networkgraph/LinkEvent.java
@@ -14,6 +14,14 @@
     private final SwitchPort src;
     private final SwitchPort dst;
 
+    /**
+     * Default constructor.
+     */
+    public LinkEvent() {
+	src = null;
+	dst = null;
+    }
+
     public LinkEvent(Long src_dpid, Long src_port_no, Long dst_dpid,
 	    Long dst_port_no) {
 
@@ -44,4 +52,8 @@
 		.put(PortEvent.getPortID(dst_dpid, dst_port_no)).array();
     }
 
+    public byte[] getID() {
+	return getLinkID(src.getDpid(), src.getNumber(),
+			 dst.getDpid(), dst.getNumber());
+    }
 }
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 e4caee5..b42bf1e 100644
--- a/src/main/java/net/onrc/onos/ofcontroller/networkgraph/PortEvent.java
+++ b/src/main/java/net/onrc/onos/ofcontroller/networkgraph/PortEvent.java
@@ -13,6 +13,14 @@
         public final Long dpid;
         public final Long number;
 
+	/**
+	 * Default constructor.
+	 */
+	public SwitchPort() {
+	    dpid = null;
+	    number = null;
+	}
+
         public SwitchPort(Long dpid, Long number) {
             this.dpid = dpid;
             this.number = number;
@@ -37,6 +45,13 @@
     // TODO Add Hardware Address
     // TODO Add Description
 
+    /**
+     * Default constructor.
+     */
+    public PortEvent() {
+	id = null;
+    }
+
     public PortEvent(Long dpid, Long number) {
 	this.id = new SwitchPort(dpid, number);
     }
@@ -67,4 +82,7 @@
 		.putChar('P').putLong(number).array();
     }
 
+    public byte[] getID() {
+	return getPortID(getDpid(), getNumber());
+    }
 }
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 58532ae..dce0725 100644
--- a/src/main/java/net/onrc/onos/ofcontroller/networkgraph/SwitchEvent.java
+++ b/src/main/java/net/onrc/onos/ofcontroller/networkgraph/SwitchEvent.java
@@ -15,6 +15,13 @@
 
     private List<PortEvent> ports;
 
+    /**
+     * Default constructor.
+     */
+    public SwitchEvent() {
+	dpid = null;
+    }
+
     public SwitchEvent(Long dpid) {
 	this(dpid, new ArrayList<PortEvent>());
     }
@@ -51,4 +58,7 @@
 		.array();
     }
 
+    public byte[] getID() {
+	return getSwitchID(dpid);
+    }
 }
diff --git a/src/main/java/net/onrc/onos/ofcontroller/networkgraph/TopologyEvent.java b/src/main/java/net/onrc/onos/ofcontroller/networkgraph/TopologyEvent.java
new file mode 100644
index 0000000..927d266
--- /dev/null
+++ b/src/main/java/net/onrc/onos/ofcontroller/networkgraph/TopologyEvent.java
@@ -0,0 +1,92 @@
+package net.onrc.onos.ofcontroller.networkgraph;
+
+/**
+ * Self-contained Topology event Object
+ *
+ * TODO: For now the topology event contains one of the following events:
+ * Switch, Port, Link, Device. In the future it will contain multiple events
+ * in a single transaction.
+ */
+public class TopologyEvent {
+    SwitchEvent switchEvent = null;		// Set for Switch event
+    PortEvent portEvent = null;			// Set for Port event
+    LinkEvent linkEvent = null;			// Set for Link event
+    DeviceEvent deviceEvent = null;		// Set for Device event
+
+    /**
+     * Default constructor.
+     */
+    public TopologyEvent() {
+    }
+
+    /**
+     * Constructor for given Switch event.
+     *
+     * @param switchEvent the Switch event to use.
+     */
+    TopologyEvent(SwitchEvent switchEvent) {
+	this.switchEvent = switchEvent;
+    }
+
+    /**
+     * Constructor for given Port event.
+     *
+     * @param portEvent the Port event to use.
+     */
+    TopologyEvent(PortEvent portEvent) {
+	this.portEvent = portEvent;
+    }
+
+    /**
+     * Constructor for given Link event.
+     *
+     * @param linkEvent the Link event to use.
+     */
+    TopologyEvent(LinkEvent linkEvent) {
+	this.linkEvent = linkEvent;
+    }
+
+    /**
+     * Constructor for given Device event.
+     *
+     * @param deviceEvent the Device event to use.
+     */
+    TopologyEvent(DeviceEvent deviceEvent) {
+	this.deviceEvent = deviceEvent;
+    }
+
+    /**
+     * Get the string representation of the event.
+     *
+     * @return the string representation of the event.
+     */
+    @Override
+    public String toString() {
+	if (switchEvent != null)
+	    return switchEvent.toString();
+	if (portEvent != null)
+	    return portEvent.toString();
+	if (linkEvent != null)
+	    return linkEvent.toString();
+	if (deviceEvent != null)
+	    return deviceEvent.toString();
+	return null;
+    }
+
+    /**
+     * Get the Topology event ID.
+     *
+     * @return the Topology event ID.
+     */
+    public byte[] getID() {
+	if (switchEvent != null)
+	    return switchEvent.getID();
+	if (portEvent != null)
+	    return portEvent.getID();
+	if (linkEvent != null)
+	    return linkEvent.getID();
+	if (deviceEvent != null)
+	    return deviceEvent.getID();
+	return null;
+    }
+}
diff --git a/src/main/java/net/onrc/onos/ofcontroller/util/serializers/KryoFactory.java b/src/main/java/net/onrc/onos/ofcontroller/util/serializers/KryoFactory.java
index 5998dcd..0d9f116 100644
--- a/src/main/java/net/onrc/onos/ofcontroller/util/serializers/KryoFactory.java
+++ b/src/main/java/net/onrc/onos/ofcontroller/util/serializers/KryoFactory.java
@@ -1,9 +1,16 @@
 package net.onrc.onos.ofcontroller.util.serializers;
 
+import java.net.InetAddress;
 import java.util.ArrayList;
 import java.util.TreeMap;
 
 import net.floodlightcontroller.util.MACAddress;
+import net.onrc.onos.ofcontroller.networkgraph.DeviceEvent;
+import net.onrc.onos.ofcontroller.networkgraph.LinkEvent;
+import net.onrc.onos.ofcontroller.networkgraph.PortEvent;
+import net.onrc.onos.ofcontroller.networkgraph.PortEvent.SwitchPort;
+import net.onrc.onos.ofcontroller.networkgraph.SwitchEvent;
+import net.onrc.onos.ofcontroller.networkgraph.TopologyEvent;
 import net.onrc.onos.ofcontroller.topology.TopologyElement;
 import net.onrc.onos.ofcontroller.util.CallerId;
 import net.onrc.onos.ofcontroller.util.DataPath;
@@ -28,7 +35,7 @@
 import net.onrc.onos.ofcontroller.util.IPv6Net;
 import net.onrc.onos.ofcontroller.util.Port;
 import net.onrc.onos.ofcontroller.util.Switch;
-import net.onrc.onos.ofcontroller.util.SwitchPort;
+// import net.onrc.onos.ofcontroller.util.SwitchPort;
 
 import com.esotericsoftware.kryo.Kryo;
 
@@ -145,13 +152,22 @@
 	kryo.register(MACAddress.class);
 	kryo.register(Port.class);
 	kryo.register(Switch.class);
-	kryo.register(SwitchPort.class);
+	// kryo.register(SwitchPort.class);
 
 	// Topology-related classes
 	kryo.register(TopologyElement.class);
 	kryo.register(TopologyElement.Type.class);
 	kryo.register(TreeMap.class);
 
+	// New data model-related classes
+	kryo.register(DeviceEvent.class);
+	kryo.register(InetAddress.class);
+	kryo.register(LinkEvent.class);
+	kryo.register(PortEvent.class);
+	kryo.register(PortEvent.SwitchPort.class);
+	kryo.register(SwitchEvent.class);
+	kryo.register(TopologyEvent.class);
+
 	return kryo;
     }
 }
