diff --git a/web/gui/src/main/webapp/app/fw/widget/tableDetail.js b/web/gui/src/main/webapp/app/fw/widget/tableDetail.js
new file mode 100644
index 0000000..57f65a7
--- /dev/null
+++ b/web/gui/src/main/webapp/app/fw/widget/tableDetail.js
@@ -0,0 +1,66 @@
+/*
+ * 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 -- Widget -- Table Detail Panel Service
+ */
+(function () {
+    'use strict';
+
+    // injected refs
+    var $log, $interval, $timeout, fs, wss;
+
+    // constants
+    // var refreshInterval = 2000;
+
+    function noop() {}
+
+    // TODO: describe the input object for the main function
+    // example params to (functionX):
+    // {
+    //    ...
+    // }
+    function buildBasePanel(opts) {
+        var popTopF = fs.isF(opts.popTop) || noop,
+            popMidF = fs.isF(opts.popMid) || noop,
+            popBotF = fs.isF(opts.popBot) || noop;
+
+        $log.debug('options are', opts);
+
+        // TODO use panel service to create base panel
+
+        // TODO: create divs, and pass into invocations of popTopF(div), etc.
+    }
+
+    // more functions
+
+    // TODO: add ref to PanelService
+    angular.module('onosWidget')
+    .factory('TableDetailService',
+    ['$log', '$interval', '$timeout', 'FnService', 'WebSocketService',
+
+    function (_$log_, _$interval_, _$timeout_, _fs_, _wss_) {
+        $log = _$log_;
+        $interval = _$interval_;
+        $timeout = _$timeout_;
+        fs = _fs_;
+        wss = _wss_;
+
+        return {
+            buildBasePanel: buildBasePanel
+        };
+    }]);
+}());
diff --git a/web/gui/src/main/webapp/app/view/device/device.js b/web/gui/src/main/webapp/app/view/device/device.js
index c85f5ec..ec8d8b5 100644
--- a/web/gui/src/main/webapp/app/view/device/device.js
+++ b/web/gui/src/main/webapp/app/view/device/device.js
@@ -258,14 +258,29 @@
         detailsPanel.hide();
     }
 
+    // Sample functions for detail panel creation
+    function popTop(div) {
+        $log.debug('populateTop');
+        // TODO: real work
+        // div.append(.....);
+        // div.append(.....);
+        // div.append(.....);
+    }
+
+    function popMid(div) {
+        $log.debug('populateMiddle');
+        // TODO: real work
+    }
+
     angular.module('ovDevice', [])
     .controller('OvDeviceCtrl',
-        ['$log', '$scope', '$location', 'TableBuilderService', 'FnService',
+        ['$log', '$scope', '$location', 'TableBuilderService',
+            'TableDetailService', 'FnService',
             'MastService', 'PanelService', 'WebSocketService', 'IconService',
             'NavService', 'KeyService',
 
         function (_$log_, _$scope_, _$location_,
-                  tbs, _fs_, _mast_, _ps_, _wss_, _is_, _ns_, _ks_) {
+                  tbs, tds, _fs_, _mast_, _ps_, _wss_, _is_, _ns_, _ks_) {
             var params,
                 handlers = {};
 
@@ -314,6 +329,16 @@
                 selCb: selCb
             });
 
+
+            // ==================== for testing for now ===============
+            // TODO: more than just an example
+            tds.buildBasePanel({
+                popTop: popTop,
+                popMid: popMid
+            });
+            // ==================== for testing for now ===============
+
+
             $scope.nav = function (path) {
                 if ($scope.selId) {
                     ns.navTo(path, { devId: $scope.selId });
diff --git a/web/gui/src/main/webapp/index.html b/web/gui/src/main/webapp/index.html
index 9f321f2..79542fa 100644
--- a/web/gui/src/main/webapp/index.html
+++ b/web/gui/src/main/webapp/index.html
@@ -81,6 +81,7 @@
     <script src="app/fw/widget/toolbar.js"></script>
     <script src="app/fw/widget/tooltip.js"></script>
     <script src="app/fw/widget/button.js"></script>
+    <script src="app/fw/widget/tableDetail.js"></script>
     <script src="app/fw/widget/tableBuilder.js"></script>
     <script src="app/fw/widget/chartBuilder.js"></script>
     <script src="app/fw/widget/listBuilder.js"></script>
