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 25efa95..1de3caf 100644
--- a/src/main/java/net/onrc/onos/core/topology/TopologyEvents.java
+++ b/src/main/java/net/onrc/onos/core/topology/TopologyEvents.java
@@ -30,7 +30,6 @@
  */
 @JsonSerialize(using = TopologyEventsSerializer.class)
 public final class TopologyEvents {
-    private final long timestamp;       // Topology event timestamp (Epoch ms)
     private final Collection<SwitchEvent> addedSwitchEvents;
     private final Collection<SwitchEvent> removedSwitchEvents;
     private final Collection<PortEvent> addedPortEvents;
@@ -43,7 +42,6 @@
     /**
      * Constructor.
      *
-     * @param timestamp the timestamp for the event (Epoch ms)
      * @param addedSwitchEvents the collection of added Switch Events.
      * @param removedSwitchEvents the collection of removed Switch Events.
      * @param addedPortEvents the collection of added Port Events.
@@ -54,8 +52,7 @@
      * @param removedHostEvents the collection of removed Host Events.
      */
     // CHECKSTYLE:OFF suppress the warning about too many parameters
-    public TopologyEvents(long timestamp,
-                          Collection<SwitchEvent> addedSwitchEvents,
+    public TopologyEvents(Collection<SwitchEvent> addedSwitchEvents,
                           Collection<SwitchEvent> removedSwitchEvents,
                           Collection<PortEvent> addedPortEvents,
                           Collection<PortEvent> removedPortEvents,
@@ -64,7 +61,6 @@
                           Collection<HostEvent> addedHostEvents,
                           Collection<HostEvent> removedHostEvents) {
         // CHECKSTYLE:ON
-        this.timestamp = timestamp;
         this.addedSwitchEvents =
             Collections.unmodifiableCollection(addedSwitchEvents);
         this.removedSwitchEvents =
@@ -84,15 +80,6 @@
     }
 
     /**
-     * Gets the timestamp for the events (Epoch ms).
-     *
-     * @return the timestamp for the events (Epoch ms).
-     */
-    public long getTimestamp() {
-        return timestamp;
-    }
-
-    /**
      * Gets the collection of added Switch Events.
      *
      * @return the collection of added Switch Events.
diff --git a/src/main/java/net/onrc/onos/core/topology/TopologyManager.java b/src/main/java/net/onrc/onos/core/topology/TopologyManager.java
index aa6642c..b12bc0f 100644
--- a/src/main/java/net/onrc/onos/core/topology/TopologyManager.java
+++ b/src/main/java/net/onrc/onos/core/topology/TopologyManager.java
@@ -513,8 +513,7 @@
         //
         for (ITopologyListener listener : this.topologyListeners) {
             TopologyEvents events =
-                new TopologyEvents(lastEventTimestampEpochMs,
-                                   kryo.copy(apiAddedSwitchEvents),
+                new TopologyEvents(kryo.copy(apiAddedSwitchEvents),
                                    kryo.copy(apiRemovedSwitchEvents),
                                    kryo.copy(apiAddedPortEvents),
                                    kryo.copy(apiRemovedPortEvents),
diff --git a/src/test/java/net/onrc/onos/core/intent/runtime/PathCalcRuntimeModuleTest.java b/src/test/java/net/onrc/onos/core/intent/runtime/PathCalcRuntimeModuleTest.java
index a8e222e..425646d 100644
--- a/src/test/java/net/onrc/onos/core/intent/runtime/PathCalcRuntimeModuleTest.java
+++ b/src/test/java/net/onrc/onos/core/intent/runtime/PathCalcRuntimeModuleTest.java
@@ -474,8 +474,7 @@
         removedLinkEvents.add(linkEvent1);
         removedLinkEvents.add(linkEvent2);
 
-        topologyEvents = new TopologyEvents(0,
-                                            emptySwitchEvents,
+        topologyEvents = new TopologyEvents(emptySwitchEvents,
                                             emptySwitchEvents,
                                             emptyPortEvents,
                                             emptyPortEvents,
@@ -710,8 +709,7 @@
         removedLinkEvents.add(linkEvent1);
         removedLinkEvents.add(linkEvent2);
 
-        topologyEvents = new TopologyEvents(0,
-                                            emptySwitchEvents,
+        topologyEvents = new TopologyEvents(emptySwitchEvents,
                                             emptySwitchEvents,
                                             emptyPortEvents,
                                             emptyPortEvents,
@@ -763,8 +761,7 @@
         addedLinkEvents.add(linkEvent1);
         addedLinkEvents.add(linkEvent2);
 
-        topologyEvents = new TopologyEvents(0,
-                                            emptySwitchEvents,
+        topologyEvents = new TopologyEvents(emptySwitchEvents,
                                             emptySwitchEvents,
                                             emptyPortEvents,
                                             emptyPortEvents,
diff --git a/src/test/java/net/onrc/onos/core/intent/runtime/UseCaseTest.java b/src/test/java/net/onrc/onos/core/intent/runtime/UseCaseTest.java
index b6e2187..87e096f 100644
--- a/src/test/java/net/onrc/onos/core/intent/runtime/UseCaseTest.java
+++ b/src/test/java/net/onrc/onos/core/intent/runtime/UseCaseTest.java
@@ -284,8 +284,7 @@
         removedLinkEvents.add(linkEvent1);
         removedLinkEvents.add(linkEvent2);
 
-        topologyEvents = new TopologyEvents(0,
-                                            addedSwitchEvents,
+        topologyEvents = new TopologyEvents(addedSwitchEvents,
                                             removedSwitchEvents,
                                             addedPortEvents,
                                             removedPortEvents,
@@ -318,8 +317,7 @@
         addedLinkEvents.add(linkEvent1);
         addedLinkEvents.add(linkEvent2);
 
-        topologyEvents = new TopologyEvents(0,
-                                            addedSwitchEvents,
+        topologyEvents = new TopologyEvents(addedSwitchEvents,
                                             removedSwitchEvents,
                                             addedPortEvents,
                                             removedPortEvents,
