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 7c8f2a5..cb7c901 100644
--- a/core/api/src/main/java/org/onosproject/ui/RequestHandler.java
+++ b/core/api/src/main/java/org/onosproject/ui/RequestHandler.java
@@ -59,11 +59,9 @@
     /**
      * Processes the incoming message payload from the client.
      *
-     * @param sid     message sequence identifier
      * @param payload request message payload
      */
-    // TODO: remove sid from signature
-    public abstract void process(long sid, ObjectNode payload);
+    public abstract void process(ObjectNode payload);
 
 
     // ===================================================================
@@ -85,19 +83,6 @@
      * Sends a message back to the client with the given event type and payload.
      *
      * @param eventType message event type
-     * @param sid       message sequence identifier
-     * @param payload   message payload
-     */
-    // TODO: remove sid from signature
-    @Deprecated
-    protected void sendMessage(String eventType, long sid, ObjectNode payload) {
-        parent.connection().sendMessage(eventType, sid, payload);
-    }
-
-    /**
-     * Sends a message back to the client with the given event type and payload.
-     *
-     * @param eventType message event type
      * @param payload   message payload
      */
     protected void sendMessage(String eventType, ObjectNode payload) {
@@ -108,7 +93,7 @@
     /**
      * Sends a message back to the client.
      * Here, the message is preformatted; the assumption is that it has its
-     * eventType and payload attributes already filled in.
+     * "event" (event type) and "payload" attributes already filled in.
      *
      * @param message the message to send
      */
@@ -122,12 +107,10 @@
      * Note that the message handlers must be defined in the same parent.
      *
      * @param eventType event type
-     * @param sid       sequence identifier
      * @param payload   message payload
      */
-    // TODO: remove sid from signature
-    protected void chain(String eventType, long sid, ObjectNode payload) {
-        parent.exec(eventType, sid, payload);
+    protected void chain(String eventType, ObjectNode payload) {
+        parent.exec(eventType, payload);
     }
 
     // ===================================================================
diff --git a/core/api/src/main/java/org/onosproject/ui/UiMessageHandler.java b/core/api/src/main/java/org/onosproject/ui/UiMessageHandler.java
index f6c1535..609c28b 100644
--- a/core/api/src/main/java/org/onosproject/ui/UiMessageHandler.java
+++ b/core/api/src/main/java/org/onosproject/ui/UiMessageHandler.java
@@ -39,7 +39,7 @@
  * </p>
  * <pre>
  * {
- *     "type": "<em>event-type</em>",
+ *     "event": "<em>event-type</em>",
  *     "payload": {
  *         <em>arbitrary JSON object structure</em>
  *     }
@@ -93,22 +93,19 @@
     public void process(ObjectNode message) {
         String type = JsonUtils.eventType(message);
         ObjectNode payload = JsonUtils.payload(message);
-        // TODO: remove sid
-        exec(type, 0, payload);
+        exec(type, payload);
     }
 
     /**
      * Finds the appropriate handler and executes the process method.
      *
      * @param eventType event type
-     * @param sid       sequence identifier
      * @param payload   message payload
      */
-    // TODO: remove sid from signature
-    void exec(String eventType, long sid, ObjectNode payload) {
+    void exec(String eventType, ObjectNode payload) {
         RequestHandler requestHandler = handlerMap.get(eventType);
         if (requestHandler != null) {
-            requestHandler.process(sid, payload);
+            requestHandler.process(payload);
         } else {
             log.warn("no request handler for event type {}", eventType);
         }
diff --git a/core/api/src/main/java/org/onosproject/ui/chart/ChartRequestHandler.java b/core/api/src/main/java/org/onosproject/ui/chart/ChartRequestHandler.java
index 5c3e2f7..4d5459b 100644
--- a/core/api/src/main/java/org/onosproject/ui/chart/ChartRequestHandler.java
+++ b/core/api/src/main/java/org/onosproject/ui/chart/ChartRequestHandler.java
@@ -49,7 +49,7 @@
     }
 
     @Override
-    public void process(long sid, ObjectNode payload) {
+    public void process(ObjectNode payload) {
         ChartModel cm = createChartModel();
         populateChart(cm, payload);
 
diff --git a/core/api/src/main/java/org/onosproject/ui/table/TableRequestHandler.java b/core/api/src/main/java/org/onosproject/ui/table/TableRequestHandler.java
index 6fadeb3..99fca8b 100644
--- a/core/api/src/main/java/org/onosproject/ui/table/TableRequestHandler.java
+++ b/core/api/src/main/java/org/onosproject/ui/table/TableRequestHandler.java
@@ -46,9 +46,9 @@
      * table rows, sort them according the the request sort parameters, and
      * send back the response to the client.
      *
-     * @param reqType   type of the request event
-     * @param respType  type of the response event
-     * @param nodeName  name of JSON node holding row data
+     * @param reqType  type of the request event
+     * @param respType type of the response event
+     * @param nodeName name of JSON node holding row data
      */
     public TableRequestHandler(String reqType, String respType, String nodeName) {
         super(reqType);
@@ -57,7 +57,7 @@
     }
 
     @Override
-    public void process(long sid, ObjectNode payload) {
+    public void process(ObjectNode payload) {
         TableModel tm = createTableModel();
         populateTable(tm, payload);
 
@@ -72,7 +72,7 @@
         ObjectNode rootNode = MAPPER.createObjectNode();
         rootNode.set(nodeName, TableUtils.generateRowArrayNode(tm));
         rootNode.set(ANNOTS, TableUtils.generateAnnotObjectNode(tm));
-        sendMessage(respType, 0, rootNode);
+        sendMessage(respType, rootNode);
     }
 
     /**
@@ -91,7 +91,7 @@
     /**
      * Adds table configuration specific annotations to table model.
      *
-     * @param tm a table model
+     * @param tm      a table model
      * @param payload the event payload from the client
      */
     protected void addTableConfigAnnotations(TableModel tm, ObjectNode payload) {
@@ -141,7 +141,7 @@
      * parameters (other than sort column and sort direction) that are required
      * to generate the appropriate data.
      *
-     * @param tm the table model
+     * @param tm      the table model
      * @param payload request payload
      */
     protected abstract void populateTable(TableModel tm, ObjectNode payload);
