diff --git a/apps/yang-gui/src/main/java/org/onosproject/yang/gui/YangModelMessageHandler.java b/apps/yang-gui/src/main/java/org/onosproject/yang/gui/YangModelMessageHandler.java
index d6bd67e..31ff7b0 100644
--- a/apps/yang-gui/src/main/java/org/onosproject/yang/gui/YangModelMessageHandler.java
+++ b/apps/yang-gui/src/main/java/org/onosproject/yang/gui/YangModelMessageHandler.java
@@ -53,15 +53,14 @@
 
     // Table Column IDs
     private static final String ID = "id";
-    private static final String MODEL_ID = "modelId";
-    private static final String MODULE = "module";
     private static final String REVISION = "revision";
+    private static final String MODEL_ID = "modelId";
     // TODO: fill out table columns as needed
 
     private static final String SOURCE = "source";
 
     private static final String[] COL_IDS = {
-            ID, MODULE, REVISION, MODEL_ID
+            ID, REVISION, MODEL_ID
     };
 
     private static final String UTF8 = "UTF-8";
@@ -115,16 +114,15 @@
         protected void populateTable(TableModel tm, ObjectNode payload) {
             for (YangModel model : modelRegistry.getModels()) {
                 for (YangModuleId id : model.getYangModulesId()) {
-                    populateRow(tm.addRow(), model.hashCode(), id);
+                    populateRow(tm.addRow(), modelId(model), id);
                 }
             }
         }
 
-        private void populateRow(TableModel.Row row, int modelId, YangModuleId moduleId) {
-            row.cell(ID, "EM" + moduleId.hashCode())
-                    .cell(MODULE, moduleId.moduleName())
+        private void populateRow(TableModel.Row row, String modelId, YangModuleId moduleId) {
+            row.cell(ID, moduleId.moduleName())
                     .cell(REVISION, moduleId.revision())
-                    .cell(MODEL_ID, "YM" + modelId);
+                    .cell(MODEL_ID, modelId);
         }
     }
 
@@ -137,15 +135,15 @@
 
         @Override
         public void process(ObjectNode payload) {
-            String id = string(payload, MODEL_ID);
-            String name = string(payload, MODULE);
-            YangModule module = getModule(id, name);
+            String name = string(payload, ID);
+            String modelId = string(payload, MODEL_ID);
+            YangModule module = getModule(modelId, name);
 
             ObjectNode data = objectNode();
-            data.put(ID, id);
+            data.put(ID, name);
             if (module != null) {
-                data.put(MODULE, module.getYangModuleId().moduleName());
                 data.put(REVISION, module.getYangModuleId().revision());
+                data.put(MODEL_ID, modelId);
 
                 ArrayNode source = arrayNode();
                 data.set(SOURCE, source);
@@ -174,11 +172,11 @@
     }
 
 
-    private YangModule getModule(String id, String name) {
-        int nid = Integer.parseInt(id.substring(2));
-        log.info("Got {}; {}", id, nid);
+    private YangModule getModule(String modelId, String name) {
+        int nid = Integer.parseInt(modelId.substring(2));
+        log.info("Got {}; {}", modelId, nid);
         YangModel model = modelRegistry.getModels().stream()
-                .filter(m -> m.hashCode() == nid)
+                .filter(m -> modelId(m).equals(modelId))
                 .findFirst().orElse(null);
         if (model != null) {
             log.info("Got model");
@@ -188,4 +186,8 @@
         }
         return null;
     }
+
+    private String modelId(YangModel m) {
+        return "YM" + Math.abs(m.hashCode());
+    }
 }
diff --git a/apps/yang-gui/src/main/resources/app/view/yangModel/yangModel.html b/apps/yang-gui/src/main/resources/app/view/yangModel/yangModel.html
index 12b267c..2088b66 100644
--- a/apps/yang-gui/src/main/resources/app/view/yangModel/yangModel.html
+++ b/apps/yang-gui/src/main/resources/app/view/yangModel/yangModel.html
@@ -15,8 +15,7 @@
         <div class="table-header" onos-sortable-header>
             <table>
                 <tr>
-                    <td colId="id" col-width="130px" sortable>ID</td>
-                    <td colId="module" sortable>Module</td>
+                    <td colId="id" sortable>Module</td>
                     <td colId="revision" sortable>Revision</td>
                     <td colId="modelId" col-width="130px" sortable>Model ID</td>
                     <!-- TODO: More columns to be added -->
@@ -38,7 +37,6 @@
                     ng-class="{selected: ymodel.id === selId}"
                     ng-repeat-complete row-id="{{ymodel.id}}">
                     <td>{{ymodel.id}}</td>
-                    <td>{{ymodel.module}}</td>
                     <td>{{ymodel.revision}}</td>
                     <td>{{ymodel.modelId}}</td>
                     <!-- TODO: add more columns here -->
diff --git a/apps/yang-gui/src/main/resources/app/view/yangModel/yangModel.js b/apps/yang-gui/src/main/resources/app/view/yangModel/yangModel.js
index a106138..26e2828 100644
--- a/apps/yang-gui/src/main/resources/app/view/yangModel/yangModel.js
+++ b/apps/yang-gui/src/main/resources/app/view/yangModel/yangModel.js
@@ -110,14 +110,6 @@
         });
     }
 
-    function addModuleRow(tbody, module) {
-        var tr = tbody.append('tr');
-        moduleCols.forEach(function (col) {
-            tr.append('td').attr('width', 160)
-                .html('<a href="/v1/yang/modules/' + module.name + '" target="_model">' + module[col] + "</a>");
-        });
-    }
-
     function populateBottom(source) {
         var src = bottom.select('pre');
         src.html(source.join('\n'));
@@ -179,7 +171,7 @@
             // row selection callback
             function selCb($event, row) {
                 if ($scope.selId) {
-                    wss.sendEvent(detailsReq, { modelId: row.modelId, module: row.module  });
+                    wss.sendEvent(detailsReq, { modelId: row.modelId, id: row.id  });
                 } else {
                     $scope.hidePanel();
                 }
