diff --git a/web/gui2/src/main/webapp/app/view/settings/settings/settings.component.css b/web/gui2/src/main/webapp/app/view/settings/settings/settings.component.css
new file mode 100644
index 0000000..c2c5621
--- /dev/null
+++ b/web/gui2/src/main/webapp/app/view/settings/settings/settings.component.css
@@ -0,0 +1,43 @@
+/*
+ * Copyright 2018-present Open Networking Foundation
+ *
+ * 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 -- Settings Panel (layout) -- CSS file
+ */
+ #ov-settings .tabular-header {
+     text-align: left;
+ }
+
+ #ov-settings h2 {
+     display: inline-block;
+ }
+
+ #ov-settings div.summary-list .table-header td {
+    font-weight: bold;
+    font-variant: small-caps;
+    text-transform: uppercase;
+    font-size: 10pt;
+    padding-top: 8px;
+    padding-bottom: 8px;
+    letter-spacing: 0.02em;
+    cursor: pointer;
+    background-color: #e5e5e6;
+}
+
+#ov-settings th, td {
+    text-align: left;
+    padding:  8px;
+}
\ No newline at end of file
diff --git a/web/gui2/src/main/webapp/app/view/settings/settings/settings.component.html b/web/gui2/src/main/webapp/app/view/settings/settings/settings.component.html
new file mode 100644
index 0000000..7f88b51
--- /dev/null
+++ b/web/gui2/src/main/webapp/app/view/settings/settings/settings.component.html
@@ -0,0 +1,63 @@
+<!--
+~ Copyright 2018-present Open Networking Foundation
+~
+~ 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.
+-->
+<div id="ov-settings">
+    <div class="tabular-header">
+        <h2>Component Settings ({{tableData.length}} total)</h2>
+        <div class="ctrl-btns">
+            <div class="refresh" (click)="toggleRefresh()">
+                <onos-icon classes="{{ autoRefresh?'active refresh':'refresh' }}" iconId="refresh" iconSize="42" toolTip="{{ autoRefreshTip }}"></onos-icon>
+            </div>
+        </div>
+    </div>
+    <div class="summary-list" onosTableResize>
+        <div class="table-header">
+            <table>
+                <tr>
+                    <td colId="component" [ngStyle]="{width: '260px'}" (click)="onSort('component')">Component
+                        <onos-icon classes="active-sort" [iconSize]="10" [iconId]="sortIcon('component')"></onos-icon>
+                    </td>
+                    <td colId="prop" [ngStyle]="{width: '260px'}" (click)="onSort('prop')">Property
+                        <onos-icon classes="active-sort" [iconSize]="10" [iconId]="sortIcon('prop')"></onos-icon>
+                    </td>
+                    <td colId="type" [ngStyle]="{width: '80px'}" (click)="onSort('type')">Type
+                        <onos-icon classes="active-sort" [iconSize]="10" [iconId]="sortIcon('type')"></onos-icon>
+                    </td>
+                    <td colId="value" [ngStyle]="{width: '260px'}" (click)="onSort('value')">Value
+                        <onos-icon classes="active-sort" [iconSize]="10" [iconId]="sortIcon('value')"></onos-icon>
+                    </td>
+                    <td colId="desc" (click)="onSort('desc')">Description
+                        <onos-icon classes="active-sort" [iconSize]="10" [iconId]="sortIcon('desc')"></onos-icon>
+                    </td>
+                </tr>
+            </table>
+        </div>
+        <div class="table-body">
+            <table>
+                <tr *ngIf="tableData.length === 0" class="no-data">
+                    <td colspan="5">{{ annots.noRowMsg }}</td>
+                </tr>
+                <tr *ngFor="let setting of tableData" (click)="selectCallback($event, setting)" [ngClass]="{selected: setting.id === selId, 'data-change': isChanged(setting.id)}">
+                    <td [ngStyle]="{width: '260px'}">{{setting.component}}</td>
+                    <td [ngStyle]="{width: '260px'}">{{setting.prop}}</td>
+                    <td [ngStyle]="{width: '80px'}">{{setting.type}}</td>
+                    <td [ngStyle]="{width: '260px'}" [ngClass]="{notdef: setting.value !== setting.defValue}">{{setting.value}}</td>
+                    <td>{{setting.desc}}</td>
+                </tr>
+            </table>
+        </div>
+    </div>
+    <onos-settingsdetails class="floatpanels" id="{{ selId }}" [settingsDetails]="settingsDetails" (closeEvent)="deselectRow($event)"></onos-settingsdetails>
+</div>
\ No newline at end of file
diff --git a/web/gui2/src/main/webapp/app/view/settings/settings/settings.component.spec.ts b/web/gui2/src/main/webapp/app/view/settings/settings/settings.component.spec.ts
new file mode 100644
index 0000000..6ceb4ad
--- /dev/null
+++ b/web/gui2/src/main/webapp/app/view/settings/settings/settings.component.spec.ts
@@ -0,0 +1,145 @@
+/*
+* Copyright 2018-present Open Networking Foundation
+*
+* 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.
+*/
+import { async, ComponentFixture, TestBed } from '@angular/core/testing';
+
+import { SettingsComponent } from './settings.component';
+import { ActivatedRoute, Params } from '@angular/router';
+import { of } from 'rxjs';
+import { FnService } from '../../../fw/util/fn.service';
+import { LogService } from '../../../log.service';
+import { IconComponent } from '../../../fw/svg/icon/icon.component';
+import { IconService } from '../../../fw/svg/icon.service';
+import { LoadingService } from '../../../fw/layer/loading.service';
+import { WebSocketService } from '../../../fw/remote/websocket.service';
+import { DebugElement } from '@angular/core';
+import { By } from '@angular/platform-browser';
+import { SettingsDetailsComponent } from '../settingsdetails/settingsdetails.component';
+import { BrowserAnimationsModule } from '@angular/platform-browser/animations';
+
+class MockActivatedRoute extends ActivatedRoute {
+    constructor(params: Params) {
+        super();
+        this.queryParams = of(params);
+    }
+}
+
+class MockIconService {
+    loadIconDef() { }
+}
+
+class MockLoadingService {
+    startAnim() { }
+    stop() { }
+    waiting() { }
+}
+
+class MockWebSocketService {
+    createWebSocket() { }
+    isConnected() { return false; }
+    unbindHandlers() { }
+    bindHandlers() { }
+}
+
+/**
+ * ONOS GUI -- Settings View Module - Unit Tests
+ */
+describe('SettingsComponent', () => {
+    let fs: FnService;
+    let ar: MockActivatedRoute;
+    let windowMock: Window;
+    let logServiceSpy: jasmine.SpyObj<LogService>;
+    let component: SettingsComponent;
+    let fixture: ComponentFixture<SettingsComponent>;
+
+    const logSpy = jasmine.createSpyObj('LogService', ['info', 'debug', 'warn', 'error']);
+    ar = new MockActivatedRoute({ 'debug': 'txrx' });
+
+    windowMock = <any>{
+        location: <any>{
+            settingsname: 'foo',
+            settings: 'foo',
+            port: '80',
+            protocol: 'http',
+            search: { debug: 'true' },
+            href: 'ws://foo:123/onos/ui/websock/path',
+            absUrl: 'ws://foo:123/onos/ui/websock/path'
+        }
+    };
+    fs = new FnService(ar, logSpy, windowMock);
+
+    beforeEach(async(() => {
+        TestBed.configureTestingModule({
+            imports: [BrowserAnimationsModule],
+            declarations: [SettingsComponent, IconComponent, SettingsDetailsComponent],
+            providers: [
+                { provide: FnService, useValue: fs },
+                { provide: IconService, useClass: MockIconService },
+                { provide: LoadingService, useClass: MockLoadingService },
+                { provide: LogService, useValue: logSpy },
+                { provide: WebSocketService, useClass: MockWebSocketService },
+            ]
+        })
+            .compileComponents();
+        logServiceSpy = TestBed.get(LogService);
+    }));
+
+    beforeEach(() => {
+        fixture = TestBed.createComponent(SettingsComponent);
+        component = fixture.componentInstance;
+        fixture.detectChanges();
+    });
+
+    it('should create', () => {
+        expect(component).toBeTruthy();
+    });
+
+    it('should have a div.tabular-header inside a div#ov-settings', () => {
+        const settingsDe: DebugElement = fixture.debugElement;
+        const divDe = settingsDe.query(By.css('div#ov-settings div.tabular-header'));
+        expect(divDe).toBeTruthy();
+    });
+
+    it('should have a h2 inside the div.tabular-header', () => {
+        const settingsDe: DebugElement = fixture.debugElement;
+        const divDe = settingsDe.query(By.css('div#ov-settings div.tabular-header h2'));
+        const div: HTMLElement = divDe.nativeElement;
+        expect(div.textContent).toEqual('Component Settings (0 total)');
+    });
+
+    it('should have a refresh button inside the div.tabular-header', () => {
+        const settingsDe: DebugElement = fixture.debugElement;
+        const divDe = settingsDe.query(By.css('div#ov-settings div.tabular-header div.ctrl-btns div.refresh'));
+        expect(divDe).toBeTruthy();
+    });
+
+    it('should have a div.summary-list inside a div#ov-settings', () => {
+        const settingsDe: DebugElement = fixture.debugElement;
+        const divDe = settingsDe.query(By.css('div#ov-settings div.summary-list'));
+        expect(divDe).toBeTruthy();
+    });
+
+    it('should have a div.table-header inside a div.summary-list inside a div#ov-settings', () => {
+        const settingsDe: DebugElement = fixture.debugElement;
+        const divDe = settingsDe.query(By.css('div#ov-settings div.summary-list div.table-header'));
+        expect(divDe).toBeTruthy();
+    });
+
+    it('should have a div.table-body inside a div.summary-list inside a div#ov-settings', () => {
+        const settingsDe: DebugElement = fixture.debugElement;
+        const divDe = settingsDe.query(By.css('div#ov-settings div.summary-list div.table-body'));
+        expect(divDe).toBeTruthy();
+    });
+});
diff --git a/web/gui2/src/main/webapp/app/view/settings/settings/settings.component.ts b/web/gui2/src/main/webapp/app/view/settings/settings/settings.component.ts
new file mode 100644
index 0000000..bc74b6a
--- /dev/null
+++ b/web/gui2/src/main/webapp/app/view/settings/settings/settings.component.ts
@@ -0,0 +1,91 @@
+/*
+* Copyright 2018-present Open Networking Foundation
+*
+* 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.
+*/
+import { Component, OnInit, OnDestroy } from '@angular/core';
+import { TableBaseImpl, TableResponse, SortDir } from '../../../fw/widget/table.base';
+import { FnService } from '../../../fw/util/fn.service';
+import { LoadingService } from '../../../fw/layer/loading.service';
+import { LogService } from '../../../log.service';
+import { WebSocketService } from '../../../fw/remote/websocket.service';
+
+/**
+ * Model of the data returned through the Web Socket about settings.
+ */
+interface SettingsTableResponse extends TableResponse {
+    settings: Settings[];
+}
+
+/**
+ * Model of the data returned through Web Socket for a single settings
+ */
+export interface Settings {
+    fqComponent: string;
+    component: string;
+    prop: string;
+    type: string;
+    value: number;
+    defValue: number;
+    desc: string;
+}
+
+/**
+ * ONOS GUI -- Settings View Component
+ */
+@Component({
+    selector: 'onos-settings',
+    templateUrl: './settings.component.html',
+    styleUrls: ['./settings.component.css', '../../../fw/widget/table.css', '../../../fw/widget/table.theme.css']
+})
+
+export class SettingsComponent extends TableBaseImpl implements OnInit, OnDestroy {
+
+    settingsDetails: Settings;
+
+    constructor(
+        protected fs: FnService,
+        protected ls: LoadingService,
+        protected log: LogService,
+        protected wss: WebSocketService
+    ) {
+        super(fs, ls, log, wss, 'setting');
+        this.responseCallback = this.settingsResponseCb;
+        this.parentSelCb = this.rowSelection;
+
+        this.sortParams = {
+            firstCol: 'component',
+            firstDir: SortDir.desc,
+            secondCol: 'prop',
+            secondDir: SortDir.asc,
+        };
+    }
+
+    ngOnInit() {
+        this.init();
+        this.log.debug('SettingsComponent initialized');
+    }
+
+    ngOnDestroy() {
+        this.destroy();
+        this.log.debug('SettingsComponent destroyed');
+    }
+
+    settingsResponseCb(data: SettingsTableResponse) {
+        this.log.debug('Settings response received for ', data.settings.length, 'settings');
+    }
+
+    rowSelection(event: any, row: any) {
+        this.settingsDetails = row;
+    }
+}
