diff --git a/src/main/java/net/onrc/onos/core/topology/DeviceEvent.java b/src/main/java/net/onrc/onos/core/topology/DeviceEvent.java
index 0030516..02041eb 100644
--- a/src/main/java/net/onrc/onos/core/topology/DeviceEvent.java
+++ b/src/main/java/net/onrc/onos/core/topology/DeviceEvent.java
@@ -5,8 +5,11 @@
 import java.util.List;
 
 import net.floodlightcontroller.util.MACAddress;
+import net.onrc.onos.core.topology.web.serializers.DeviceEventSerializer;
 import net.onrc.onos.core.util.SwitchPort;
 
+import org.codehaus.jackson.map.annotate.JsonSerialize;
+
 /**
  * Self-contained Device event(s) Object
  * <p/>
@@ -19,6 +22,7 @@
  * <p/>
  * TODO: We probably want common base class/interface for Self-Contained Event Object
  */
+@JsonSerialize(using = DeviceEventSerializer.class)
 public class DeviceEvent {
     private final MACAddress mac;
     protected List<SwitchPort> attachmentPoints;
diff --git a/src/main/java/net/onrc/onos/core/topology/PortEvent.java b/src/main/java/net/onrc/onos/core/topology/PortEvent.java
index 114b3ef..296a567 100644
--- a/src/main/java/net/onrc/onos/core/topology/PortEvent.java
+++ b/src/main/java/net/onrc/onos/core/topology/PortEvent.java
@@ -1,10 +1,12 @@
 package net.onrc.onos.core.topology;
 
+import net.onrc.onos.core.topology.web.serializers.PortEventSerializer;
 import net.onrc.onos.core.util.Dpid;
 import net.onrc.onos.core.util.PortNumber;
 import net.onrc.onos.core.util.SwitchPort;
 
 import org.apache.commons.lang.Validate;
+import org.codehaus.jackson.map.annotate.JsonSerialize;
 import java.nio.ByteBuffer;
 import java.util.Objects;
 
@@ -13,6 +15,7 @@
  * <p/>
  * TODO: We probably want common base class/interface for Self-Contained Event Object.
  */
+@JsonSerialize(using = PortEventSerializer.class)
 public class PortEvent {
 
     protected final SwitchPort id;
diff --git a/src/main/java/net/onrc/onos/core/topology/SwitchEvent.java b/src/main/java/net/onrc/onos/core/topology/SwitchEvent.java
index 4e9418a..de0fff6 100644
--- a/src/main/java/net/onrc/onos/core/topology/SwitchEvent.java
+++ b/src/main/java/net/onrc/onos/core/topology/SwitchEvent.java
@@ -1,15 +1,19 @@
 package net.onrc.onos.core.topology;
 
+import net.onrc.onos.core.topology.web.serializers.SwitchEventSerializer;
 import net.onrc.onos.core.util.Dpid;
 
 import java.nio.ByteBuffer;
 import java.util.Objects;
 
+import org.codehaus.jackson.map.annotate.JsonSerialize;
+
 /**
  * Self-contained Switch Object.
  * <p/>
  * TODO: We probably want common base class/interface for Self-Contained Event Object.
  */
+@JsonSerialize(using = SwitchEventSerializer.class)
 public class SwitchEvent {
     protected final Dpid dpid;
 
diff --git a/src/main/java/net/onrc/onos/core/topology/TopologyEvents.java b/src/main/java/net/onrc/onos/core/topology/TopologyEvents.java
index 71b7fb5..e553836 100644
--- a/src/main/java/net/onrc/onos/core/topology/TopologyEvents.java
+++ b/src/main/java/net/onrc/onos/core/topology/TopologyEvents.java
@@ -3,6 +3,9 @@
 import java.util.Collection;
 import java.util.Collections;
 
+import net.onrc.onos.core.topology.web.serializers.TopologyEventsSerializer;
+import org.codehaus.jackson.map.annotate.JsonSerialize;
+
 /**
  * Class for encapsulating multiple topology events.
  * <p/>
@@ -25,6 +28,7 @@
  * The above ordering guarantees that adding a port for example
  * will be processed after the corresponding switch itself is added.
  */
+@JsonSerialize(using = TopologyEventsSerializer.class)
 public final class TopologyEvents {
     private final long timestamp;
     private final Collection<SwitchEvent> addedSwitchEvents;
diff --git a/src/main/java/net/onrc/onos/core/topology/web/serializers/DeviceEventSerializer.java b/src/main/java/net/onrc/onos/core/topology/web/serializers/DeviceEventSerializer.java
new file mode 100644
index 0000000..94ccce2
--- /dev/null
+++ b/src/main/java/net/onrc/onos/core/topology/web/serializers/DeviceEventSerializer.java
@@ -0,0 +1,38 @@
+package net.onrc.onos.core.topology.web.serializers;
+
+import java.io.IOException;
+
+import net.onrc.onos.core.topology.DeviceEvent;
+import net.onrc.onos.core.util.SwitchPort;
+
+import org.codehaus.jackson.JsonGenerator;
+import org.codehaus.jackson.map.SerializerProvider;
+import org.codehaus.jackson.map.ser.std.SerializerBase;
+
+public class DeviceEventSerializer extends SerializerBase<DeviceEvent> {
+
+    public DeviceEventSerializer() {
+        super(DeviceEvent.class);
+    }
+
+    @Override
+    public void serialize(DeviceEvent deviceEvent, JsonGenerator jsonGenerator,
+        SerializerProvider serializerProvider) throws IOException {
+
+        //
+        // TODO: For now, the JSON format of the serialized output should
+        // be same as the JSON format of the corresponding class Device.
+        // In the future, we will use a single serializer.
+        //
+
+        jsonGenerator.writeStartObject();
+        jsonGenerator.writeStringField("mac", deviceEvent.getMac().toString());
+        jsonGenerator.writeFieldName("attachmentPoints");
+        jsonGenerator.writeStartArray();
+        for (SwitchPort switchPort : deviceEvent.getAttachmentPoints()) {
+            jsonGenerator.writeObject(switchPort);
+        }
+        jsonGenerator.writeEndArray();
+        jsonGenerator.writeEndObject();
+    }
+}
diff --git a/src/main/java/net/onrc/onos/core/topology/web/serializers/DeviceSerializer.java b/src/main/java/net/onrc/onos/core/topology/web/serializers/DeviceSerializer.java
index 5319adf..1f8676a 100644
--- a/src/main/java/net/onrc/onos/core/topology/web/serializers/DeviceSerializer.java
+++ b/src/main/java/net/onrc/onos/core/topology/web/serializers/DeviceSerializer.java
@@ -18,16 +18,19 @@
     @Override
     public void serialize(Device dev, JsonGenerator jsonGenerator,
         SerializerProvider serializerProvider) throws IOException {
+
+        //
+        // TODO: For now, the JSON format of the serialized output should
+        // be same as the JSON format of the corresponding class DeviceEvent.
+        // In the future, we will use a single serializer.
+        //
+
         jsonGenerator.writeStartObject();
         jsonGenerator.writeStringField("mac", dev.getMacAddress().toString());
         jsonGenerator.writeFieldName("attachmentPoints");
         jsonGenerator.writeStartArray();
         for (Port port : dev.getAttachmentPoints()) {
-            jsonGenerator.writeStartObject();
-            jsonGenerator.writeStringField("dpid", port.getDpid().toString());
-            // XXX Should port number be treated as unsigned?
-            jsonGenerator.writeNumberField("port", port.getNumber().value());
-            jsonGenerator.writeEndObject();
+            jsonGenerator.writeObject(port.asSwitchPort());
         }
         jsonGenerator.writeEndArray();
         jsonGenerator.writeEndObject();
diff --git a/src/main/java/net/onrc/onos/core/topology/web/serializers/LinkEventSerializer.java b/src/main/java/net/onrc/onos/core/topology/web/serializers/LinkEventSerializer.java
index 2621167..0678d49 100644
--- a/src/main/java/net/onrc/onos/core/topology/web/serializers/LinkEventSerializer.java
+++ b/src/main/java/net/onrc/onos/core/topology/web/serializers/LinkEventSerializer.java
@@ -33,11 +33,15 @@
                           final SerializerProvider serializerProvider)
             throws IOException {
 
-        jsonGenerator.writeStartObject();
+        //
+        // TODO: For now, the JSON format of the serialized output should
+        // be same as the JSON format of the corresponding class Link.
+        // In the future, we will use a single serializer.
+        //
 
+        jsonGenerator.writeStartObject();
         jsonGenerator.writeObjectField("src", linkEvent.getSrc());
         jsonGenerator.writeObjectField("dst", linkEvent.getDst());
-
         jsonGenerator.writeEndObject();
     }
 }
diff --git a/src/main/java/net/onrc/onos/core/topology/web/serializers/LinkSerializer.java b/src/main/java/net/onrc/onos/core/topology/web/serializers/LinkSerializer.java
index 1cecca5..bec4760 100644
--- a/src/main/java/net/onrc/onos/core/topology/web/serializers/LinkSerializer.java
+++ b/src/main/java/net/onrc/onos/core/topology/web/serializers/LinkSerializer.java
@@ -18,17 +18,15 @@
     public void serialize(Link link, JsonGenerator jsonGenerator,
                           SerializerProvider serializerProvider)
             throws IOException {
+
+        //
+        // TODO: For now, the JSON format of the serialized output should
+        // be same as the JSON format of the corresponding class LinkEvent.
+        // In the future, we will use a single serializer.
+        //
         jsonGenerator.writeStartObject();
-        jsonGenerator.writeStringField("src-switch",
-                link.getSrcSwitch().getDpid().toString());
-        // XXX port number as unsigned?
-        jsonGenerator.writeNumberField("src-port",
-                link.getSrcPort().getNumber().value());
-        jsonGenerator.writeStringField("dst-switch",
-                link.getDstSwitch().getDpid().toString());
-        jsonGenerator.writeNumberField("dst-port",
-                link.getDstPort().getNumber().value());
+        jsonGenerator.writeObjectField("src", link.getSrcPort().asSwitchPort());
+        jsonGenerator.writeObjectField("dst", link.getDstPort().asSwitchPort());
         jsonGenerator.writeEndObject();
     }
-
 }
diff --git a/src/main/java/net/onrc/onos/core/topology/web/serializers/PortEventSerializer.java b/src/main/java/net/onrc/onos/core/topology/web/serializers/PortEventSerializer.java
new file mode 100644
index 0000000..84f23ac
--- /dev/null
+++ b/src/main/java/net/onrc/onos/core/topology/web/serializers/PortEventSerializer.java
@@ -0,0 +1,41 @@
+package net.onrc.onos.core.topology.web.serializers;
+
+import java.io.IOException;
+
+import net.onrc.onos.core.topology.PortEvent;
+
+import org.codehaus.jackson.JsonGenerator;
+import org.codehaus.jackson.map.SerializerProvider;
+import org.codehaus.jackson.map.ser.std.SerializerBase;
+
+public class PortEventSerializer extends SerializerBase<PortEvent> {
+
+    public PortEventSerializer() {
+        super(PortEvent.class);
+    }
+
+    @Override
+    public void serialize(PortEvent portEvent, JsonGenerator jsonGenerator,
+                          SerializerProvider serializerProvider)
+            throws IOException {
+        //
+        // TODO: For now, the JSON format of the serialized output should
+        // be same as the JSON format of the corresponding class Port.
+        // In the future, we will use a single serializer.
+        //
+
+        jsonGenerator.writeStartObject();
+        jsonGenerator.writeStringField("state", "ACTIVE");
+        jsonGenerator.writeStringField("dpid", portEvent.getDpid().toString());
+        //
+        // FIXME: The solution below to preresent the "short" port number
+        // as an unsigned value is a hack. The fix should be elsewhere
+        // (e.g., in class PortNumber itself).
+        //
+        jsonGenerator.writeNumberField("portNumber",
+                                       (0xffff & portEvent.getPortNumber().value()));
+        jsonGenerator.writeStringField("desc",
+                                       null /* port.getDescription() */);
+        jsonGenerator.writeEndObject();
+    }
+}
diff --git a/src/main/java/net/onrc/onos/core/topology/web/serializers/PortSerializer.java b/src/main/java/net/onrc/onos/core/topology/web/serializers/PortSerializer.java
index 52fbe44..a0d7385 100644
--- a/src/main/java/net/onrc/onos/core/topology/web/serializers/PortSerializer.java
+++ b/src/main/java/net/onrc/onos/core/topology/web/serializers/PortSerializer.java
@@ -18,12 +18,23 @@
     public void serialize(Port port, JsonGenerator jsonGenerator,
                           SerializerProvider serializerProvider)
             throws IOException {
+        //
+        // TODO: For now, the JSON format of the serialized output should
+        // be same as the JSON format of the corresponding class PortEvent.
+        // In the future, we will use a single serializer.
+        //
+
         jsonGenerator.writeStartObject();
         jsonGenerator.writeStringField("state", "ACTIVE");
         jsonGenerator.writeStringField("dpid", port.getDpid().toString());
-        jsonGenerator.writeNumberField("number", port.getNumber().value());
+        //
+        // FIXME: The solution below to preresent the "short" port number
+        // as an unsigned value is a hack. The fix should be elsewhere
+        // (e.g., in class PortNumber itself).
+        //
+        jsonGenerator.writeNumberField("portNumber",
+                                       (0xffff & port.getNumber().value()));
         jsonGenerator.writeStringField("desc", port.getDescription());
         jsonGenerator.writeEndObject();
     }
-
 }
diff --git a/src/main/java/net/onrc/onos/core/topology/web/serializers/SwitchEventSerializer.java b/src/main/java/net/onrc/onos/core/topology/web/serializers/SwitchEventSerializer.java
new file mode 100644
index 0000000..09358c4
--- /dev/null
+++ b/src/main/java/net/onrc/onos/core/topology/web/serializers/SwitchEventSerializer.java
@@ -0,0 +1,43 @@
+package net.onrc.onos.core.topology.web.serializers;
+
+import java.io.IOException;
+
+import net.onrc.onos.core.topology.SwitchEvent;
+
+import org.codehaus.jackson.JsonGenerator;
+import org.codehaus.jackson.map.SerializerProvider;
+import org.codehaus.jackson.map.ser.std.SerializerBase;
+
+public class SwitchEventSerializer extends SerializerBase<SwitchEvent> {
+
+    public SwitchEventSerializer() {
+        super(SwitchEvent.class);
+    }
+
+    @Override
+    public void serialize(SwitchEvent switchEvent, JsonGenerator jsonGenerator,
+                          SerializerProvider serializerProvider) throws IOException {
+        //
+        // TODO: For now, the JSON format of the serialized output should
+        // be same as the JSON format of the corresponding class Switch.
+        // In the future, we will use a single serializer.
+        //
+
+        jsonGenerator.writeStartObject();
+        jsonGenerator.writeStringField("dpid",
+                                       switchEvent.getDpid().toString());
+        jsonGenerator.writeStringField("state", "ACTIVE");
+        //
+        // TODO: For now, we write empty "ports" array for consistency
+        // with the corresponding Switch JSON serializer.
+        //
+        jsonGenerator.writeArrayFieldStart("ports");
+        /*
+        for (Port port : sw.getPorts()) {
+            jsonGenerator.writeObject(port);
+        }
+        */
+        jsonGenerator.writeEndArray();
+        jsonGenerator.writeEndObject();
+    }
+}
diff --git a/src/main/java/net/onrc/onos/core/topology/web/serializers/SwitchSerializer.java b/src/main/java/net/onrc/onos/core/topology/web/serializers/SwitchSerializer.java
index 01bd22f..3b74c53 100644
--- a/src/main/java/net/onrc/onos/core/topology/web/serializers/SwitchSerializer.java
+++ b/src/main/java/net/onrc/onos/core/topology/web/serializers/SwitchSerializer.java
@@ -18,6 +18,11 @@
     @Override
     public void serialize(Switch sw, JsonGenerator jsonGenerator,
                           SerializerProvider serializerProvider) throws IOException {
+        //
+        // TODO: For now, the JSON format of the serialized output should
+        // be same as the JSON format of the corresponding class SwitchEvent.
+        // In the future, we will use a single serializer.
+        //
 
         jsonGenerator.writeStartObject();
         jsonGenerator.writeStringField("dpid", sw.getDpid().toString());
@@ -29,5 +34,4 @@
         jsonGenerator.writeEndArray();
         jsonGenerator.writeEndObject();
     }
-
 }
diff --git a/src/main/java/net/onrc/onos/core/topology/web/serializers/TopologyEventsSerializer.java b/src/main/java/net/onrc/onos/core/topology/web/serializers/TopologyEventsSerializer.java
new file mode 100644
index 0000000..e5f81c0
--- /dev/null
+++ b/src/main/java/net/onrc/onos/core/topology/web/serializers/TopologyEventsSerializer.java
@@ -0,0 +1,105 @@
+package net.onrc.onos.core.topology.web.serializers;
+
+import net.onrc.onos.core.topology.DeviceEvent;
+import net.onrc.onos.core.topology.LinkEvent;
+import net.onrc.onos.core.topology.PortEvent;
+import net.onrc.onos.core.topology.SwitchEvent;
+import net.onrc.onos.core.topology.TopologyEvents;
+import org.codehaus.jackson.JsonGenerator;
+import org.codehaus.jackson.map.SerializerProvider;
+import org.codehaus.jackson.map.ser.std.SerializerBase;
+
+import java.io.IOException;
+
+/**
+ * JSON serializer for TopologyEvents objects.  Used by WebSocket
+ * implementation of the topology APIs.
+ */
+public class TopologyEventsSerializer extends SerializerBase<TopologyEvents> {
+
+    /**
+     * Default constructor. Performs basic initialization of the JSON
+     * serializer.
+     */
+    public TopologyEventsSerializer() {
+        super(TopologyEvents.class);
+    }
+
+    /**
+     * Serialize a TopologyEvents object in JSON.  The resulting JSON contains
+     * the added and removed topology objects: switches, links and ports.
+     *
+     * @param topologyEvents the TopologyEvents that is being converted to JSON
+     * @param jsonGenerator generator to place the serialized JSON into
+     * @param serializerProvider unused but required for method override
+     * @throws IOException if the JSON serialization process fails
+     */
+    @Override
+    public void serialize(TopologyEvents topologyEvents,
+                          JsonGenerator jsonGenerator,
+                          SerializerProvider serializerProvider)
+            throws IOException {
+
+        // Start the object
+        jsonGenerator.writeStartObject();
+
+        // Output the added switches array
+        jsonGenerator.writeArrayFieldStart("addedSwitches");
+        for (final SwitchEvent switchEvent : topologyEvents.getAddedSwitchEvents()) {
+            jsonGenerator.writeObject(switchEvent);
+        }
+        jsonGenerator.writeEndArray();
+
+        // Output the removed switches array
+        jsonGenerator.writeArrayFieldStart("removedSwitches");
+        for (final SwitchEvent switchEvent : topologyEvents.getRemovedSwitchEvents()) {
+            jsonGenerator.writeObject(switchEvent);
+        }
+        jsonGenerator.writeEndArray();
+
+        // Output the added ports array
+        jsonGenerator.writeArrayFieldStart("addedPorts");
+        for (final PortEvent portEvent : topologyEvents.getAddedPortEvents()) {
+            jsonGenerator.writeObject(portEvent);
+        }
+        jsonGenerator.writeEndArray();
+
+        // Output the removed ports array
+        jsonGenerator.writeArrayFieldStart("removedPorts");
+        for (final PortEvent portEvent : topologyEvents.getRemovedPortEvents()) {
+            jsonGenerator.writeObject(portEvent);
+        }
+        jsonGenerator.writeEndArray();
+
+        // Output the added links array
+        jsonGenerator.writeArrayFieldStart("addedLinks");
+        for (final LinkEvent linkEvent : topologyEvents.getAddedLinkEvents()) {
+            jsonGenerator.writeObject(linkEvent);
+        }
+        jsonGenerator.writeEndArray();
+
+        // Output the removed links array
+        jsonGenerator.writeArrayFieldStart("removedLinks");
+        for (final LinkEvent linkEvent : topologyEvents.getRemovedLinkEvents()) {
+            jsonGenerator.writeObject(linkEvent);
+        }
+        jsonGenerator.writeEndArray();
+
+        // Output the added hosts array
+        jsonGenerator.writeArrayFieldStart("addedHosts");
+        for (final DeviceEvent hostEvent : topologyEvents.getAddedHostEvents()) {
+            jsonGenerator.writeObject(hostEvent);
+        }
+        jsonGenerator.writeEndArray();
+
+        // Output the removed hosts array
+        jsonGenerator.writeArrayFieldStart("removedHosts");
+        for (final DeviceEvent hostEvent : topologyEvents.getRemovedHostEvents()) {
+            jsonGenerator.writeObject(hostEvent);
+        }
+        jsonGenerator.writeEndArray();
+
+        // All done
+        jsonGenerator.writeEndObject();
+    }
+}
diff --git a/src/main/java/net/onrc/onos/core/util/serializers/SwitchPortSerializer.java b/src/main/java/net/onrc/onos/core/util/serializers/SwitchPortSerializer.java
index 22a6679..9f0041d 100644
--- a/src/main/java/net/onrc/onos/core/util/serializers/SwitchPortSerializer.java
+++ b/src/main/java/net/onrc/onos/core/util/serializers/SwitchPortSerializer.java
@@ -36,10 +36,14 @@
 
         jsonGenerator.writeStringField("dpid",
                                        switchPort.getDpid().toString());
-        jsonGenerator.writeStringField("portNumber",
-                                       switchPort.getPortNumber().toString());
+        //
+        // FIXME: The solution below to preresent the "short" port number
+        // as an unsigned value is a hack. The fix should be elsewhere
+        // (e.g., in class PortNumber itself).
+        //
+        jsonGenerator.writeNumberField("portNumber",
+                                       (0xffff & switchPort.getPortNumber().value()));
 
         jsonGenerator.writeEndObject();
     }
-
 }
