diff --git a/apps/test/intent-perf/src/main/java/org/onosproject/intentperf/IntentPerfUi.java b/apps/test/intent-perf/src/main/java/org/onosproject/intentperf/IntentPerfUi.java
index ab4bef7..cb2233d 100644
--- a/apps/test/intent-perf/src/main/java/org/onosproject/intentperf/IntentPerfUi.java
+++ b/apps/test/intent-perf/src/main/java/org/onosproject/intentperf/IntentPerfUi.java
@@ -131,7 +131,7 @@
 
         private void send(Sample sample) {
             if (streamingEnabled) {
-                connection().sendMessage("intentPerfSample", 0, sampleNode(sample));
+                connection().sendMessage("intentPerfSample", sampleNode(sample));
             }
         }
 
diff --git a/core/api/src/main/java/org/onosproject/ui/RequestHandler.java b/core/api/src/main/java/org/onosproject/ui/RequestHandler.java
index cb7c901..04d2a56 100644
--- a/core/api/src/main/java/org/onosproject/ui/RequestHandler.java
+++ b/core/api/src/main/java/org/onosproject/ui/RequestHandler.java
@@ -87,7 +87,7 @@
      */
     protected void sendMessage(String eventType, ObjectNode payload) {
         // TODO: remove sid
-        parent.connection().sendMessage(eventType, 0, payload);
+        parent.connection().sendMessage(eventType, payload);
     }
 
     /**
diff --git a/core/api/src/main/java/org/onosproject/ui/UiConnection.java b/core/api/src/main/java/org/onosproject/ui/UiConnection.java
index 4fb388d..ad7e5ee 100644
--- a/core/api/src/main/java/org/onosproject/ui/UiConnection.java
+++ b/core/api/src/main/java/org/onosproject/ui/UiConnection.java
@@ -60,6 +60,8 @@
 
     /**
      * Sends the specified JSON message to the user interface client.
+     * It is assumed that the message is already correctly formatted and
+     * ready to send.
      *
      * @param message message to send
      */
@@ -68,11 +70,9 @@
     /**
      * Composes a message into JSON and sends it to the user interface client.
      *
-     * @param type    message type
-     * @param sid     message sequence number
+     * @param type    message (event) type
      * @param payload message payload
      */
-    // TODO: remove sid parameter
-    void sendMessage(String type, long sid, ObjectNode payload);
+    void sendMessage(String type, ObjectNode payload);
 
 }
\ No newline at end of file
diff --git a/web/gui/src/main/java/org/onosproject/ui/impl/UiWebSocket.java b/web/gui/src/main/java/org/onosproject/ui/impl/UiWebSocket.java
index 96ebadb..0290857 100644
--- a/web/gui/src/main/java/org/onosproject/ui/impl/UiWebSocket.java
+++ b/web/gui/src/main/java/org/onosproject/ui/impl/UiWebSocket.java
@@ -229,12 +229,9 @@
     }
 
     @Override
-    public synchronized void sendMessage(String type, long sid, ObjectNode payload) {
+    public synchronized void sendMessage(String type, ObjectNode payload) {
         ObjectNode message = mapper.createObjectNode();
         message.put(EVENT, type);
-        if (sid > 0) {
-            message.put(SID, sid);
-        }
         message.set(PAYLOAD, payload != null ? payload : mapper.createObjectNode());
         sendMessage(message);
     }
@@ -305,7 +302,7 @@
         ObjectNode payload = mapper.createObjectNode();
         payload.set(CLUSTER_NODES, instances);
         payload.put(USER, userName);
-        sendMessage(BOOTSTRAP, 0, payload);
+        sendMessage(BOOTSTRAP, payload);
     }
 
 }
diff --git a/web/gui/src/main/java/org/onosproject/ui/impl/UiWebSocketServlet.java b/web/gui/src/main/java/org/onosproject/ui/impl/UiWebSocketServlet.java
index 0ca3b05..d0cbeec 100644
--- a/web/gui/src/main/java/org/onosproject/ui/impl/UiWebSocketServlet.java
+++ b/web/gui/src/main/java/org/onosproject/ui/impl/UiWebSocketServlet.java
@@ -94,7 +94,7 @@
      */
     static void sendToAll(String type, ObjectNode payload) {
         if (instance != null) {
-            instance.sockets.forEach(ws -> ws.sendMessage(type, 0, payload));
+            instance.sockets.forEach(ws -> ws.sendMessage(type, payload));
         }
     }
 
@@ -108,7 +108,7 @@
     static void sendToUser(String userName, String type, ObjectNode payload) {
         if (instance != null) {
             instance.sockets.stream().filter(ws -> userName.equals(ws.userName()))
-                    .forEach(ws -> ws.sendMessage(type, 0, payload));
+                    .forEach(ws -> ws.sendMessage(type, payload));
         }
     }
 
diff --git a/web/gui/src/main/java/org/onosproject/ui/impl/topo/UiTopoSession.java b/web/gui/src/main/java/org/onosproject/ui/impl/topo/UiTopoSession.java
index 79e262b..f13ebc5 100644
--- a/web/gui/src/main/java/org/onosproject/ui/impl/topo/UiTopoSession.java
+++ b/web/gui/src/main/java/org/onosproject/ui/impl/topo/UiTopoSession.java
@@ -139,7 +139,7 @@
         //   that are not relevant, and only send up events for objects that
         //   are currently being viewed by the user.
 
-        webSocket.sendMessage(TOPO2_UI_MODEL_EVENT, 0, payload);
+        webSocket.sendMessage(TOPO2_UI_MODEL_EVENT, payload);
     }
 
     /**
