diff --git a/apps/yms/gui/src/main/java/org/onosproject/yms/gui/YangModelMessageHandler.java b/apps/yms/gui/src/main/java/org/onosproject/yms/gui/YangModelMessageHandler.java
new file mode 100644
index 0000000..e24c06f
--- /dev/null
+++ b/apps/yms/gui/src/main/java/org/onosproject/yms/gui/YangModelMessageHandler.java
@@ -0,0 +1,145 @@
+/*
+ * Copyright 2017-present Open Networking Laboratory
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.onosproject.yms.gui;
+
+import com.fasterxml.jackson.databind.node.ObjectNode;
+import com.google.common.collect.ImmutableSet;
+import org.onlab.osgi.ServiceDirectory;
+import org.onosproject.ui.RequestHandler;
+import org.onosproject.ui.UiConnection;
+import org.onosproject.ui.UiMessageHandler;
+import org.onosproject.ui.table.TableModel;
+import org.onosproject.ui.table.TableRequestHandler;
+import org.onosproject.yms.ymsm.YmsService;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import java.util.Collection;
+
+/**
+ * ONOS UI Yang Models message handler.
+ */
+public class YangModelMessageHandler extends UiMessageHandler {
+
+    private static final String TABLE_REQ = "yangModelDataRequest";
+    private static final String TABLE_RESP = "yangModelDataResponse";
+    private static final String MODELS = "models";
+
+    private static final String DETAILS_REQ = "yangModelDetailsRequest";
+    private static final String DETAILS_RESP = "yangModelDetailsResponse";
+    private static final String DETAILS = "details";
+
+    // Table Column IDs
+    private static final String ID = "id";
+    private static final String TYPE = "type";
+    // TODO: fill out table columns as needed
+
+    private static final String[] COL_IDS = {
+            ID, TYPE
+    };
+
+    private final Logger log = LoggerFactory.getLogger(getClass());
+
+    private YmsService ymsService;
+    // TODO: fill out other fields as necessary
+
+
+    // ===============-=-=-=-=-=-==================-=-=-=-=-=-=-===========
+
+    @Override
+    public void init(UiConnection connection, ServiceDirectory directory) {
+        super.init(connection, directory);
+        ymsService = directory.get(YmsService.class);
+        // TODO: addListeners(); ???
+    }
+
+    @Override
+    public void destroy() {
+        // TODO: removeListeners(); ???
+        super.destroy();
+        // NOTE: if no listeners are required, this method can be removed
+    }
+
+    @Override
+    protected Collection<RequestHandler> createRequestHandlers() {
+        return ImmutableSet.of(
+                new TableDataHandler()
+        );
+    }
+
+
+    // Handler for table requests
+    private final class TableDataHandler extends TableRequestHandler {
+        private static final String NO_ROWS_MESSAGE = "No YANG Models found";
+
+        private TableDataHandler() {
+            super(TABLE_REQ, TABLE_RESP, MODELS);
+        }
+
+        @Override
+        protected String[] getColumnIds() {
+            return COL_IDS;
+        }
+
+        @Override
+        protected String noRowsMessage(ObjectNode payload) {
+            return NO_ROWS_MESSAGE;
+        }
+
+        @Override
+        protected void populateTable(TableModel tm, ObjectNode payload) {
+            // TODO: use ymsService(?) to iterate over list of models...
+            for (int k = 0; k < 5; k++) {
+                populateRow(tm.addRow(), k);
+            }
+        }
+
+        // TODO: obviously, this should be adapted to arrange YANG model data
+        //       into the appropriate table columns
+        private void populateRow(TableModel.Row row, int k) {
+            row.cell(ID, k)
+                    .cell(TYPE, "ymtype-" + k);
+        }
+    }
+
+
+    // handler for selected model detail requests (selected table row)
+    private final class DetailRequestHandler extends RequestHandler {
+        private DetailRequestHandler() {
+            super(DETAILS_REQ);
+        }
+
+        @Override
+        public void process(ObjectNode payload) {
+            String id = string(payload, ID);
+
+            // TODO: retrieve the appropriate model from ymsService and create
+            //       a detail record to send back to the client.
+
+            ObjectNode data = objectNode();
+
+            data.put(ID, id);
+            data.put(TYPE, "some-type");
+            data.put("todo", "fill out with appropriate date attributes");
+
+            ObjectNode rootNode = objectNode();
+            rootNode.set(DETAILS, data);
+
+            sendMessage(DETAILS_RESP, rootNode);
+        }
+    }
+}
diff --git a/apps/yms/gui/src/main/java/org/onosproject/yms/gui/YangModelUiComponent.java b/apps/yms/gui/src/main/java/org/onosproject/yms/gui/YangModelUiComponent.java
new file mode 100644
index 0000000..2c96b00
--- /dev/null
+++ b/apps/yms/gui/src/main/java/org/onosproject/yms/gui/YangModelUiComponent.java
@@ -0,0 +1,85 @@
+/*
+ * Copyright 2017-present Open Networking Laboratory
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.onosproject.yms.gui;
+
+import com.google.common.collect.ImmutableList;
+import org.apache.felix.scr.annotations.Activate;
+import org.apache.felix.scr.annotations.Component;
+import org.apache.felix.scr.annotations.Deactivate;
+import org.apache.felix.scr.annotations.Reference;
+import org.apache.felix.scr.annotations.ReferenceCardinality;
+import org.onosproject.ui.UiExtension;
+import org.onosproject.ui.UiExtensionService;
+import org.onosproject.ui.UiMessageHandlerFactory;
+import org.onosproject.ui.UiView;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import java.util.List;
+
+import static org.onosproject.ui.UiView.Category;
+
+/**
+ * ONOS UI component for the Yang Models table view.
+ */
+@Component(immediate = true)
+public class YangModelUiComponent {
+
+    private static final ClassLoader CL =
+            YangModelUiComponent.class.getClassLoader();
+    private static final String VIEW_ID = "yangModel";
+    private static final String NAV_LABEL = "Yang Models";
+    private static final String NAV_ICON = "nav_yang";
+    private static final String HELP_URL =
+            "https://wiki.onosproject.org/display/ONOS/YANG+Models+in+ONOS";
+
+    private final Logger log = LoggerFactory.getLogger(getClass());
+
+    @Reference(cardinality = ReferenceCardinality.MANDATORY_UNARY)
+    protected UiExtensionService uiExtensionService;
+
+    // List of application views
+    private final List<UiView> uiViews = ImmutableList.of(
+            new UiView(Category.PLATFORM, VIEW_ID, NAV_LABEL, NAV_ICON, HELP_URL)
+    );
+
+    // Factory for UI message handlers
+    private final UiMessageHandlerFactory msgHandlerFactory =
+            () -> ImmutableList.of(
+                    new YangModelMessageHandler()
+            );
+
+    // Application UI Extension
+    private UiExtension extension =
+            new UiExtension.Builder(CL, uiViews)
+                    .resourcePath(VIEW_ID)
+                    .messageHandlerFactory(msgHandlerFactory)
+                    .build();
+
+    @Activate
+    protected void activate() {
+        uiExtensionService.register(extension);
+        log.info("Started");
+    }
+
+    @Deactivate
+    protected void deactivate() {
+        uiExtensionService.unregister(extension);
+        log.info("Stopped");
+    }
+
+}
diff --git a/apps/yms/gui/src/main/resources/app/view/yangModel/yangModel-theme.css b/apps/yms/gui/src/main/resources/app/view/yangModel/yangModel-theme.css
new file mode 100644
index 0000000..afeb601
--- /dev/null
+++ b/apps/yms/gui/src/main/resources/app/view/yangModel/yangModel-theme.css
@@ -0,0 +1,16 @@
+/*
+ * Copyright 2017-present Open Networking Laboratory
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
diff --git a/apps/yms/gui/src/main/resources/app/view/yangModel/yangModel.css b/apps/yms/gui/src/main/resources/app/view/yangModel/yangModel.css
new file mode 100644
index 0000000..2564c37
--- /dev/null
+++ b/apps/yms/gui/src/main/resources/app/view/yangModel/yangModel.css
@@ -0,0 +1,23 @@
+/*
+ * Copyright 2017-present Open Networking Laboratory
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+
+#ov-yang-model h2 {
+    display: inline-block;
+}
+
+#ov-yang-model div.ctrl-btns {
+}
diff --git a/apps/yms/gui/src/main/resources/app/view/yangModel/yangModel.html b/apps/yms/gui/src/main/resources/app/view/yangModel/yangModel.html
new file mode 100644
index 0000000..3860644
--- /dev/null
+++ b/apps/yms/gui/src/main/resources/app/view/yangModel/yangModel.html
@@ -0,0 +1,48 @@
+<!-- YANG Model partial HTML -->
+<div id="ov-yang-model">
+
+    <div class="tabular-header">
+        <h2>YANG Models ({{tableData.length}} total)</h2>
+        <div class="ctrl-btns">
+            <div class="refresh" ng-class="{active: autoRefresh}"
+                 icon icon-id="refresh" icon-size="42"
+                 tooltip tt-msg="autoRefreshTip"
+                 ng-click="toggleRefresh()"></div>
+        </div>
+    </div>
+
+    <div class="summary-list" onos-table-resize>
+        <div class="table-header" onos-sortable-header>
+            <table>
+                <tr>
+                    <td colId="id" col-width="130px" sortable>ID</td>
+                    <td colId="type" sortable>Type</td>
+                    <!-- TODO: More columns to be added -->
+                </tr>
+            </table>
+        </div>
+
+        <div class="table-body">
+            <table id-prop="id">
+                <tr ng-if="!tableData.length" class="no-data">
+                    <!-- TODO: set colspan to the final number of columns -->
+                    <td colspan="2">
+                        {{annots.no_rows_msg}}
+                    </td>
+                </tr>
+
+                <tr ng-repeat="ymodel in tableData track by $index"
+                    ng-click="selectCallback($event, ymodel)"
+                    ng-class="{selected: ymodel.id === selId}"
+                    ng-repeat-complete row-id="{{ymodel.id}}">
+                    <td>{{dev.id}}</td>
+                    <td>{{dev.type}}</td>
+                    <!-- TODO: add more colums here -->
+                </tr>
+            </table>
+        </div>
+    </div>
+
+    <yang-model-details-panel></yang-model-details-panel>
+
+</div>
diff --git a/apps/yms/gui/src/main/resources/app/view/yangModel/yangModel.js b/apps/yms/gui/src/main/resources/app/view/yangModel/yangModel.js
new file mode 100644
index 0000000..226041c
--- /dev/null
+++ b/apps/yms/gui/src/main/resources/app/view/yangModel/yangModel.js
@@ -0,0 +1,98 @@
+/*
+ * Copyright 2017-present Open Networking Laboratory
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+/*
+  ONOS GUI -- YANG Model table view
+ */
+
+(function () {
+    'use strict';
+
+    // injected refs
+    var $log, $scope, fs, ps, wss;
+
+    // internal state
+    var detailsPanel,
+        ymodel;
+
+    // constants
+    var pName = 'yang-model-details-panel',
+        detailsReq = 'yangModelDetailsRequest',
+        detailsResp = 'yangModelDetailsResponse';
+
+    // callback invoked when data from a details request returns from server
+    function respDetailsCb(data) {
+        $scope.panelData = data.details;
+        ymodel = data.yangModel;
+        $scope.$apply();
+        // TODO: complete the detail panel directive.
+        $log.debug('YANG_MODEL>', detailsResp, data);
+    }
+
+    angular.module('ovYangModel', [])
+        .controller('OvYangModelCtrl', [
+            '$log', '$scope', 'TableBuilderService', 'TableDetailService',
+            'FnService', 'PanelService', 'WebSocketService',
+
+            function (_$log_, _$scope_, tbs, tds, _fs_, _ps_, _wss_) {
+                var handlers = {};
+
+                $log = _$log_;
+                $scope = _$scope_;
+                fs = _fs_;
+                ps = _ps_;
+                wss = _wss_;
+
+                $scope.panelData = {};
+
+                // register response handler
+                handlers[detailsResp] = respDetailsCb;
+                wss.bindHandlers(handlers);
+
+                // row selection callback
+                function selCb($event, row) {
+                    if ($scope.selId) {
+                        wss.sendEvent(detailsReq, { id: row.id });
+                    } else {
+                        $scope.hidePanel();
+                    }
+                    $log.debug('Got a click on:', row);
+                }
+
+                tbs.buildTable({
+                    scope: $scope,
+                    tag: 'yangModel',
+                    selCb: selCb
+                });
+
+                $scope.$on('$destroy', function () {
+                    wss.unbindHandlers(handlers);
+                });
+
+                $log.log('OvYangModelCtrl has been created');
+            }
+        ]);
+
+        // .directive('yangModelDetailsPanel', [
+        //     '$rootScope', '$window',
+        //     function ($rootScope, $window) {
+        //         return function (scope) {
+        //             // TODO: details panel internals (see device.js as example
+        //         }
+        //     }
+        // ]);
+
+}());
\ No newline at end of file
diff --git a/apps/yms/gui/src/main/resources/yangModel/css.html b/apps/yms/gui/src/main/resources/yangModel/css.html
new file mode 100644
index 0000000..b6762b6
--- /dev/null
+++ b/apps/yms/gui/src/main/resources/yangModel/css.html
@@ -0,0 +1,2 @@
+<link rel="stylesheet" href="app/view/yangModel/yangModel.css">
+<link rel="stylesheet" href="app/view/yangModel/yangModel-theme.css">
\ No newline at end of file
diff --git a/apps/yms/gui/src/main/resources/yangModel/js.html b/apps/yms/gui/src/main/resources/yangModel/js.html
new file mode 100644
index 0000000..ff52ac3
--- /dev/null
+++ b/apps/yms/gui/src/main/resources/yangModel/js.html
@@ -0,0 +1 @@
+<script src="app/view/yangModel/yangModel.js"></script>
diff --git a/web/gui/src/main/java/org/onosproject/ui/impl/DeviceViewMessageHandler.java b/web/gui/src/main/java/org/onosproject/ui/impl/DeviceViewMessageHandler.java
index fc62d37..5a5b42e 100644
--- a/web/gui/src/main/java/org/onosproject/ui/impl/DeviceViewMessageHandler.java
+++ b/web/gui/src/main/java/org/onosproject/ui/impl/DeviceViewMessageHandler.java
@@ -219,7 +219,8 @@
             ObjectNode rootNode = objectNode();
             rootNode.set(DETAILS, data);
 
-            // use the codec context to get a JSON of the device. See ONOS-5976.
+            // NOTE: ... an alternate way of getting all the details of an item:
+            // Use the codec context to get a JSON of the device. See ONOS-5976.
             rootNode.set(DEVICE, getJsonCodecContext().encode(device, Device.class));
 
             sendMessage(DEV_DETAILS_RESP, rootNode);
