diff --git a/web/gui2/src/main/webapp/app/nav/nav.component.html b/web/gui2/src/main/webapp/app/nav/nav.component.html
index 505dc46..04c60b3 100644
--- a/web/gui2/src/main/webapp/app/nav/nav.component.html
+++ b/web/gui2/src/main/webapp/app/nav/nav.component.html
@@ -1,5 +1,5 @@
 <!--
-~ Copyright 2014-present Open Networking Foundation
+~ 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.
@@ -15,38 +15,21 @@
 -->
 <nav id="nav" [@navState]="ns.showNav">
     <div id="platform" class="nav-hdr">{{ lionFn('cat_platform') }}</div>
-
-    <a id="app" (click)="ns.hideNav()" routerLink="/app" routerLinkActive="active">
-        <onos-icon iconId="nav_apps"></onos-icon> Applications</a>
-
-    <a id="settings" (click)="ns.hideNav()" routerLink="/settings" routerLinkActive="active">
-        <onos-icon iconId="nav_settings"></onos-icon> Settings</a>
-
-    <a id="cluster" (click)="ns.hideNav()" routerLink="/cluster" routerLinkActive="active">
-        <onos-icon iconId="nav_cluster"></onos-icon> Cluster Nodes</a>
-
-    <a id="processor" (click)="ns.hideNav()" routerLink="/processor" routerLinkActive="active">
-        <onos-icon iconId="nav_processors"></onos-icon> Packet Processors</a>
-
-    <a id="partition" (click)="ns.hideNav()" routerLink="/partition" routerLinkActive="active">
-        <onos-icon iconId="nav_partitions"></onos-icon> Partitions</a>
+    <div *ngFor="let uiView of ns.uiPlatformViews">
+        <a id="{{uiView.id}}" (click)="ns.hideNav()" routerLink="/{{uiView.id}}">
+        <onos-icon iconId="{{ uiView.icon }}"></onos-icon> {{ uiView.label }}</a>
+    </div>
 
     <div id="network" class="nav-hdr">{{ lionFn('cat_network') }}</div>
+    <div *ngFor="let uiView of ns.uiNetworkViews">
+        <a id="{{uiView.id}}" (click)="ns.hideNav()" routerLink="/{{uiView.id}}">
+            <onos-icon iconId="{{ uiView.icon }}"></onos-icon> {{ uiView.label }}</a>
+    </div>
 
-    <a id="device" (click)="ns.hideNav()" routerLink="/device" routerLinkActive="active">
-        <onos-icon iconId="nav_devs"></onos-icon> Devices</a>
+    <div *ngIf="ns.uiOtherViews.length > 0" id="other" class="nav-hdr">{{ lionFn('cat_other') }}</div>
+    <div *ngFor="let uiView of ns.uiOtherViews">
+        <a id="{{uiView.id}}" (click)="ns.hideNav()" routerLink="/{{uiView.id}}">
+            <onos-icon iconId="{{ uiView.icon }}"></onos-icon> {{ uiView.label }}</a>
+    </div>
 
-    <a id="link" (click)="ns.hideNav()" routerLink="/link" routerLinkActive="active">
-        <onos-icon iconId="nav_links"></onos-icon> Links</a>
-
-    <a id="host" (click)="ns.hideNav()" routerLink="/host" routerLinkActive="active">
-        <onos-icon iconId="nav_hosts"></onos-icon> Hosts</a>
-
-    <a id="intent" (click)="ns.hideNav()" routerLink="/intent" routerLinkActive="active">
-        <onos-icon iconId="nav_intents"></onos-icon> Intents</a>
-
-    <a id="tunnel" (click)="ns.hideNav()" routerLink="/tunnel" routerLinkActive="active">
-        <onos-icon iconId="nav_tunnels"></onos-icon> Tunnels</a>
-
-    <div id="other" class="nav-hdr">{{ lionFn('cat_other') }}</div>
 </nav>
diff --git a/web/gui2/src/main/webapp/app/nav/nav.component.spec.ts b/web/gui2/src/main/webapp/app/nav/nav.component.spec.ts
index c5e8c35..acc400f 100644
--- a/web/gui2/src/main/webapp/app/nav/nav.component.spec.ts
+++ b/web/gui2/src/main/webapp/app/nav/nav.component.spec.ts
@@ -14,11 +14,12 @@
  * limitations under the License.
  */
 import { async, ComponentFixture, TestBed } from '@angular/core/testing';
-import { ActivatedRoute, Params } from '@angular/router';
+import { RouterModule, ActivatedRoute, Params } from '@angular/router';
 import { BrowserAnimationsModule } from '@angular/platform-browser/animations';
 import { DebugElement } from '@angular/core';
 import { By } from '@angular/platform-browser';
-import { of } from 'rxjs';
+import { of, from } from 'rxjs';
+import { HttpClient, HttpErrorResponse } from '@angular/common/http';
 
 import {
     ConsoleLoggerService,
@@ -37,7 +38,23 @@
     }
 }
 
-class MockNavService {}
+class MockHttpClient {
+    get() {
+        return from(['{"id":"app","icon":"nav_apps","cat":"PLATFORM","label":"Applications"},' +
+            '{"id":"settings","icon":"nav_settings","cat":"PLATFORM","label":"Settings"}']);
+    }
+
+    subscribe() {}
+}
+
+class MockNavService {
+    uiPlatformViews = [];
+    uiNetworkViews = [];
+    uiOtherViews = [];
+    uiHiddenViews = [];
+
+    getUiViews() {}
+}
 
 class MockIconService {
     loadIconDef() {}
@@ -80,11 +97,12 @@
         fs = new FnService(ar, log, windowMock);
 
         TestBed.configureTestingModule({
-            imports: [ BrowserAnimationsModule ],
+            imports: [ BrowserAnimationsModule, RouterModule ],
             declarations: [ NavComponent, IconComponent ],
             providers: [
                 { provide: FnService, useValue: fs },
                 { provide: IconService, useClass: MockIconService },
+                { provide: HttpClient, useClass: MockHttpClient },
                 { provide: LionService, useFactory: (() => {
                         return {
                             bundle: ((bundleId) => mockLion),
@@ -124,41 +142,6 @@
         expect(div.textContent).toEqual('%cat_platform%');
     });
 
-    it('should have an app view link inside a nav#nav', () => {
-        const appDe: DebugElement = fixture.debugElement;
-        const divDe = appDe.query(By.css('nav#nav a#app'));
-        const div: HTMLElement = divDe.nativeElement;
-        expect(div.textContent).toEqual(' Applications');
-    });
-
-    it('should have an cluster view link inside a nav#nav', () => {
-        const appDe: DebugElement = fixture.debugElement;
-        const divDe = appDe.query(By.css('nav#nav a#cluster'));
-        const div: HTMLElement = divDe.nativeElement;
-        expect(div.textContent).toEqual(' Cluster Nodes');
-    });
-
-    it('should have an processor view link inside a nav#nav', () => {
-        const appDe: DebugElement = fixture.debugElement;
-        const divDe = appDe.query(By.css('nav#nav a#processor'));
-        const div: HTMLElement = divDe.nativeElement;
-        expect(div.textContent).toEqual(' Packet Processors');
-    });
-
-    it('should have a settings view link inside a nav#nav', () => {
-        const appDe: DebugElement = fixture.debugElement;
-        const divDe = appDe.query(By.css('nav#nav a#settings'));
-        const div: HTMLElement = divDe.nativeElement;
-        expect(div.textContent).toEqual(' Settings');
-    });
-
-    it('should have a partition view link inside a nav#nav', () => {
-        const appDe: DebugElement = fixture.debugElement;
-        const divDe = appDe.query(By.css('nav#nav a#partition'));
-        const div: HTMLElement = divDe.nativeElement;
-        expect(div.textContent).toEqual(' Partitions');
-    });
-
     it('should have a network div.nav-hdr inside a nav#nav', () => {
         const appDe: DebugElement = fixture.debugElement;
         const divDe = appDe.query(By.css('nav#nav div#network.nav-hdr'));
@@ -166,38 +149,4 @@
         expect(div.textContent).toEqual('%cat_network%');
     });
 
-    it('should have a device view link inside a nav#nav', () => {
-        const appDe: DebugElement = fixture.debugElement;
-        const divDe = appDe.query(By.css('nav#nav a#device'));
-        const div: HTMLElement = divDe.nativeElement;
-        expect(div.textContent).toEqual(' Devices');
-    });
-
-    it('should have a link view link inside a nav#nav', () => {
-        const appDe: DebugElement = fixture.debugElement;
-        const divDe = appDe.query(By.css('nav#nav a#link'));
-        const div: HTMLElement = divDe.nativeElement;
-        expect(div.textContent).toEqual(' Links');
-    });
-
-    it('should have a host view link inside a nav#nav', () => {
-        const appDe: DebugElement = fixture.debugElement;
-        const divDe = appDe.query(By.css('nav#nav a#host'));
-        const div: HTMLElement = divDe.nativeElement;
-        expect(div.textContent).toEqual(' Hosts');
-    });
-
-    it('should have a intent view link inside a nav#nav', () => {
-        const appDe: DebugElement = fixture.debugElement;
-        const divDe = appDe.query(By.css('nav#nav a#intent'));
-        const div: HTMLElement = divDe.nativeElement;
-        expect(div.textContent).toEqual(' Intents');
-    });
-
-    it('should have a tunnel view link inside a nav#nav', () => {
-        const appDe: DebugElement = fixture.debugElement;
-        const divDe = appDe.query(By.css('nav#nav a#tunnel'));
-        const div: HTMLElement = divDe.nativeElement;
-        expect(div.textContent).toEqual(' Tunnels');
-    });
 });
diff --git a/web/gui2/src/main/webapp/app/nav/nav.component.ts b/web/gui2/src/main/webapp/app/nav/nav.component.ts
index b543049..058f514 100644
--- a/web/gui2/src/main/webapp/app/nav/nav.component.ts
+++ b/web/gui2/src/main/webapp/app/nav/nav.component.ts
@@ -52,7 +52,7 @@
     constructor(
         private log: LogService,
         private lion: LionService,
-        public ns: NavService
+        public ns: NavService,
     ) {
         this.log.debug('NavComponent constructed');
     }
@@ -70,6 +70,7 @@
         } else {
             this.doLion();
         }
+        this.ns.getUiViews();
     }
 
     /**
@@ -94,5 +95,4 @@
     dummyLion(key: string): string {
         return '%' + key + '%';
     }
-
 }
diff --git a/web/gui2/src/main/webapp/app/onos-routing.module.ts b/web/gui2/src/main/webapp/app/onos-routing.module.ts
index 327f17e..344e6d9 100644
--- a/web/gui2/src/main/webapp/app/onos-routing.module.ts
+++ b/web/gui2/src/main/webapp/app/onos-routing.module.ts
@@ -15,6 +15,7 @@
  */
 import { NgModule } from '@angular/core';
 import { Routes, RouterModule } from '@angular/router';
+import { FmGui2LibModule } from 'fm-gui2-lib';
 
 /**
  * The set of Routes in the application - can be chosen from nav menu or
@@ -77,6 +78,11 @@
         path: 'meter',
         loadChildren: 'app/view/meter/meter.module#MeterModule'
     },
+/*  Comment out below section for running locally with 'ng serve' when developing */
+    {
+        path: 'alarmTable',
+        loadChildren: 'fm-gui2-lib#FmGui2LibModule'
+    },
     {
         path: '',
         redirectTo: 'device', // Default to devices view - change to topo in future
@@ -92,7 +98,7 @@
  */
 @NgModule({
     imports: [
-        RouterModule.forRoot(onosRoutes)
+        RouterModule.forRoot(onosRoutes, { useHash : true })
     ],
     exports: [RouterModule],
     providers: []
diff --git a/web/gui2/src/main/webapp/app/onos.component.html b/web/gui2/src/main/webapp/app/onos.component.html
index 2012a17..0fedcca 100644
--- a/web/gui2/src/main/webapp/app/onos.component.html
+++ b/web/gui2/src/main/webapp/app/onos.component.html
@@ -1,5 +1,5 @@
 <!--
-~ Copyright 2014-present Open Networking Foundation
+~ 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.
diff --git a/web/gui2/src/main/webapp/app/view/apps/apps/apps.component.html b/web/gui2/src/main/webapp/app/view/apps/apps/apps.component.html
index 230263d..4a07787 100644
--- a/web/gui2/src/main/webapp/app/view/apps/apps/apps.component.html
+++ b/web/gui2/src/main/webapp/app/view/apps/apps/apps.component.html
@@ -16,7 +16,7 @@
 <div id="ov-app" (dragover)="onDragOver($event)" (dragleave)="onDragLeave($event)" (drop)="onDrop($event)">
     <div class="tabular-header">
         <onos-flash id="appMsgFlash" message="{{ alertMsg }}" dwell="5000" warning="true" (closed)="alertMsg = ''"></onos-flash>
-        <onos-confirm message="{{ confirmMsg }}" warning="{{ strongWarning }}" (chosen)="dOk($event)"></onos-confirm>
+        <onos-confirm title="{{ lionFn('dlg_confirm_action') }}" message="{{ confirmMsg }}" warning="{{ strongWarning }}" (chosen)="dOk($event)"></onos-confirm>
         <h2>
             {{lionFn('title_apps')}}
             ({{ tableData.length }}
diff --git a/web/gui2/src/main/webapp/app/view/device/devicedetails/devicedetails.component.ts b/web/gui2/src/main/webapp/app/view/device/devicedetails/devicedetails.component.ts
index b81b68f..0d0eedb 100644
--- a/web/gui2/src/main/webapp/app/view/device/devicedetails/devicedetails.component.ts
+++ b/web/gui2/src/main/webapp/app/view/device/devicedetails/devicedetails.component.ts
@@ -74,7 +74,7 @@
 
     ngOnInit() {
         this.init();
-        this.log.debug('App Details Component initialized:', this.id);
+        this.log.debug('Device Details Component initialized:', this.id);
     }
 
     /**
@@ -82,7 +82,7 @@
      */
     ngOnDestroy() {
         this.destroy();
-        this.log.debug('App Details Component destroyed');
+        this.log.debug('Device Details Component destroyed');
     }
 
     /**
