diff --git a/web/gui/src/main/webapp/tests/app/fw/widget/table-spec.js b/web/gui/src/main/webapp/tests/app/fw/widget/table-spec.js
index 0df6141..995788f 100644
--- a/web/gui/src/main/webapp/tests/app/fw/widget/table-spec.js
+++ b/web/gui/src/main/webapp/tests/app/fw/widget/table-spec.js
@@ -18,9 +18,7 @@
  ONOS GUI -- Widget -- Table Service - Unit Tests
  */
 
-// NOTE TableService does not exist! It has been replaced/renamed?
-
-xdescribe('factory: fw/widget/table.js', function () {
+describe('factory: fw/widget/table.js', function () {
     var $log, $compile, $rootScope,
         fs, ts, mast, is,
         scope,
@@ -71,7 +69,7 @@
                 '</table>' +
             '</div>';
 
-    beforeEach(module('onosWidget', 'onosUtil', 'onosMast', 'onosSvg'));
+    beforeEach(module('onosWidget', 'onosUtil', 'onosMast', 'onosSvg', 'onosRemote', 'onosLayer'));
 
     var mockWindow = {
         innerWidth: 600,
@@ -90,20 +88,17 @@
     });
 
     beforeEach(inject(function (_$log_, _$compile_, _$rootScope_,
-                                FnService, TableService, MastService, IconService) {
+                                FnService, TableBuilderService, MastService, IconService) {
         $log = _$log_;
         $compile = _$compile_;
         $rootScope = _$rootScope_;
         fs = FnService;
-        ts = TableService;
+        ts = TableBuilderService;
         mast = MastService;
         is = IconService;
-    }));
-
-    beforeEach(function () {
         scope = $rootScope.$new();
         scope.tableData = [];
-    });
+    }));
 
     // Note: dummy header so that d3 doesn't trip up.
     //       $compile has to be used on the directive tag element, so it can't
@@ -146,7 +141,7 @@
 
     it('should define api functions', function () {
         expect(fs.areFunctions(ts, [
-            'resetSortIcons'
+            'buildTable'
         ])).toBeTruthy();
     });
 
@@ -297,7 +292,7 @@
         );
     }
 
-    it('should affirm that onos-fixed-header is working', function () {
+    xit('should affirm that onos-fixed-header is working', function () {
         containerDiv = angular.element(onosFixedHeaderTags);
 
         compile(containerDiv);
@@ -323,7 +318,7 @@
         verifyColWidth();
     });
 
-    it('should affirm that onos-sortable-header is working', function () {
+    xit('should affirm that onos-sortable-header is working', function () {
         headerDiv = angular.element(onosSortableHeaderTags);
 
         compile(headerDiv);
