diff --git a/core/api/src/main/java/org/onosproject/ui/JsonUtils.java b/core/api/src/main/java/org/onosproject/ui/JsonUtils.java
index f27c6e7..dc3d0bc 100644
--- a/core/api/src/main/java/org/onosproject/ui/JsonUtils.java
+++ b/core/api/src/main/java/org/onosproject/ui/JsonUtils.java
@@ -33,25 +33,6 @@
     /**
      * Composes a message structure for the given message type and payload.
      *
-     * @param type    event type
-     * @param sid     sequence ID
-     * @param payload event payload
-     * @return the object node representation
-     */
-    @Deprecated
-    public static ObjectNode envelope(String type, long sid, ObjectNode payload) {
-        ObjectNode event = MAPPER.createObjectNode();
-        event.put("event", type);
-        if (sid > 0) {
-            event.put("sid", sid);
-        }
-        event.set("payload", payload);
-        return event;
-    }
-
-    /**
-     * Composes a message structure for the given message type and payload.
-     *
      * @param type    message type
      * @param payload message payload
      * @return the object node representation
@@ -75,18 +56,6 @@
     }
 
     /**
-     * Returns the sequence identifier from the specified event, or 0 (zero)
-     * if the "sid" property does not exist.
-     *
-     * @param event message event
-     * @return extracted sequence identifier
-     */
-    @Deprecated
-    public static long sid(ObjectNode event) {
-        return number(event, "sid");
-    }
-
-    /**
      * Returns the payload from the specified event.
      *
      * @param event message event
diff --git a/web/gui/src/main/java/org/onosproject/ui/impl/TopologyViewMessageHandlerBase.java b/web/gui/src/main/java/org/onosproject/ui/impl/TopologyViewMessageHandlerBase.java
index e3b4f76..83a23ff 100644
--- a/web/gui/src/main/java/org/onosproject/ui/impl/TopologyViewMessageHandlerBase.java
+++ b/web/gui/src/main/java/org/onosproject/ui/impl/TopologyViewMessageHandlerBase.java
@@ -157,27 +157,27 @@
     }
 
     // Produces an informational log message event bound to the client.
-    protected ObjectNode info(long id, String message) {
-        return message("info", id, message);
+    protected ObjectNode info(String message) {
+        return message("info", message);
     }
 
     // Produces a warning log message event bound to the client.
-    protected ObjectNode warning(long id, String message) {
-        return message("warning", id, message);
+    protected ObjectNode warning(String message) {
+        return message("warning", message);
     }
 
     // Produces an error log message event bound to the client.
-    protected ObjectNode error(long id, String message) {
-        return message("error", id, message);
+    protected ObjectNode error(String message) {
+        return message("error", message);
     }
 
     // Produces a log message event bound to the client.
-    private ObjectNode message(String severity, long id, String message) {
+    private ObjectNode message(String severity, String message) {
         ObjectNode payload = objectNode()
                 .put("severity", severity)
                 .put("message", message);
 
-        return JsonUtils.envelope("message", id, payload);
+        return JsonUtils.envelope("message", payload);
     }
 
     // Produces a cluster instance message to the client.
@@ -201,7 +201,7 @@
         addMetaUi(node.id().toString(), payload);
 
         String type = msgType != null ? msgType : CLUSTER_EVENT.get(event.type());
-        return JsonUtils.envelope(type, 0, payload);
+        return JsonUtils.envelope(type, payload);
     }
 
     // Produces a device event message to the client.
@@ -231,7 +231,7 @@
         addMetaUi(device.id().toString(), payload);
 
         String type = DEVICE_EVENT.get(event.type());
-        return JsonUtils.envelope(type, 0, payload);
+        return JsonUtils.envelope(type, payload);
     }
 
     // Produces a link event message to the client.
@@ -248,7 +248,7 @@
                 .put("dst", link.dst().deviceId().toString())
                 .put("dstPort", link.dst().port().toString());
         String type = LINK_EVENT.get(event.type());
-        return JsonUtils.envelope(type, 0, payload);
+        return JsonUtils.envelope(type, payload);
     }
 
     // Produces a host event message to the client.
@@ -273,7 +273,7 @@
         addMetaUi(host.id().toString(), payload);
 
         String type = HOST_EVENT.get(event.type());
-        return JsonUtils.envelope(type, 0, payload);
+        return JsonUtils.envelope(type, payload);
     }
 
     // Encodes the specified host location into a JSON object.
