diff --git a/apps/inbandtelemetry/intApp-gui2/intApp/BUILD.bazel b/apps/inbandtelemetry/intApp-gui2/intApp/BUILD.bazel
new file mode 100644
index 0000000..aecef14
--- /dev/null
+++ b/apps/inbandtelemetry/intApp-gui2/intApp/BUILD.bazel
@@ -0,0 +1,46 @@
+"""
+ Copyright 2020-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.
+"""
+
+package(default_visibility = ["//:__subpackages__"])
+
+load("@npm_angular_bazel//:index.bzl", "ng_module")
+
+ng_module(
+    name = "intapp-gui2-lib",
+    srcs = glob(
+        include = [
+            "**/*.ts",
+        ],
+        exclude = [
+            "**/*.spec.ts",
+        ],
+    ),
+    assets = glob([
+        "**/*.css",
+        "**/*.html",
+    ]),
+    tsconfig = "//web/gui2:tsconfig.json",
+    deps = [
+        "//web/gui2-fw-lib",
+        "@npm//@angular/animations",
+        "@npm//@angular/core",
+        "@npm//@angular/forms",
+        "@npm//@angular/platform-browser-dynamic",
+        "@npm//@angular/router",
+        "@npm//@types",
+        "@npm//rxjs",
+    ],
+)
diff --git a/apps/inbandtelemetry/intApp-gui2/intApp/lib/intapp-gui2-lib.module.ts b/apps/inbandtelemetry/intApp-gui2/intApp/lib/intapp-gui2-lib.module.ts
new file mode 100644
index 0000000..9dae779
--- /dev/null
+++ b/apps/inbandtelemetry/intApp-gui2/intApp/lib/intapp-gui2-lib.module.ts
@@ -0,0 +1,39 @@
+/*
+ * Copyright 2020-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 { NgModule } from '@angular/core';
+import { CommonModule } from '@angular/common';
+import {RouterModule} from '@angular/router';
+import { Gui2FwLibModule } from 'org_onosproject_onos/web/gui2-fw-lib/public_api';
+import { IntAppComponent } from './intapp/intapp.component';
+import { FormsModule, ReactiveFormsModule } from '@angular/forms';
+
+@NgModule({
+    declarations: [
+        IntAppComponent,
+    ],
+    imports: [
+        CommonModule,
+        RouterModule.forChild([{path: '', component: IntAppComponent}]),
+        Gui2FwLibModule,
+        FormsModule,
+        ReactiveFormsModule
+    ],
+    exports: [
+        IntAppComponent,
+    ]
+})
+export class intAppGui2LibModule { }
diff --git a/apps/inbandtelemetry/intApp-gui2/intApp/lib/intapp/intapp.component.css b/apps/inbandtelemetry/intApp-gui2/intApp/lib/intapp/intapp.component.css
new file mode 100644
index 0000000..c57601b
--- /dev/null
+++ b/apps/inbandtelemetry/intApp-gui2/intApp/lib/intapp/intapp.component.css
@@ -0,0 +1,215 @@
+/*
+ * Copyright 2020-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 -- INT App View (theme) -- CSS file
+ */
+
+#ov-int-app-main {
+    padding: 5px;
+}
+
+#ov-int-app-main .button-panel {
+    margin: 10px;
+    width: 200px;
+}
+
+.light #ov-int-app-main .button-panel {
+    background-color: #ccf;
+}
+
+.dark #ov-int-app-main .button-panel {
+    background-color: #444;
+}
+
+#ov-int-app-main .int-app-button {
+    cursor: pointer;
+    padding: 4px;
+    text-align: center;
+}
+
+.dark #ov-int-app-main .int-app-button {
+    color: black;
+    background-color: #aaa;
+}
+
+#ov-int-app-main .config-button-panel {
+    margin: 10px;
+    width: 200px;
+}
+
+.light #ov-int-app-main .config-button-panel {
+    background-color: #ccf;
+}
+
+.dark #ov-int-app-main .config-button-panel {
+    background-color: #444;
+}
+
+#ov-int-app-main .int-app-config-button {
+    cursor: pointer;
+    padding: 4px;
+    text-align: center;
+}
+
+#ov-int-app-main input {
+    padding: 4px;
+    font-size: inherit;
+}
+
+.dark #ov-int-app-main .int-app-config-button {
+    color: black;
+    background-color: #aaa;
+}
+/*---------------------------------------------------------------------------*/
+#ov-int-app-main hr {
+    border: 0;
+    height: 1px;
+    background: #333;
+}
+
+#ov-int-app-main h2 {
+    display: inline-block;
+    margin: 10px 0px 10px;
+}
+
+#ov-int-app-main h3 {
+    display: inline-block;
+    margin-bottom: 5px;
+}
+
+#ov-int-app-main h4 {
+    display: inline-block;
+    margin-bottom: 5px;
+}
+
+
+/* Panel Styling */
+#ov-int-app-main-item-details-panel.floatpanel {
+    position: absolute;
+    top: 115px;
+}
+
+.light #ov-int-app-main-item-details-panel.floatpanel {
+    background-color: rgb(229, 234, 237);
+}
+
+.dark #ov-int-app-main-item-details-panel.floatpanel {
+    background-color: #3A4042;
+}
+
+#ov-int-app-main-item-details-panel h4 {
+    margin: 0;
+}
+
+#ov-int-app-main-item-details-panel h3 {
+    margin: 0;
+    font-size: medium;
+}
+#ov-int-app-main-item-details-panel td {
+    padding: 5px;
+}
+#ov-int-app-main-item-details-panel td.label {
+    font-style: italic;
+    opacity: 0.8;
+}
+
+.error-text{
+    color:red;
+}
+
+.myrow {
+    display: flex;
+    flex-wrap: wrap;
+}
+.mygrid {
+    flex: 1;
+    min-width: 25%;
+    padding : 10px;
+}
+
+/* Table Css*/
+
+#int-app-main-intents.tabular-header {
+    text-align: left;
+}
+#int-app-main-intents 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;
+    color: #3c3a3a;
+}
+
+#int-app-main-intents div.summary-list .table-body {
+    overflow:scroll;
+}
+
+#ov-int-app-main hr {
+    border: 0;
+    height: 1px;
+    background: #333;
+}
+
+#ov-int-app-main h2 {
+    display: inline-block;
+    margin: 15px 0px 15px;
+}
+
+#ov-int-app-main h3 {
+    display: inline-block;
+    margin-bottom: 10px;
+}
+
+#ov-int-app-main h4 {
+    display: inline-block;
+    margin-bottom: 10px;
+}
+
+.light #ov-int-app-main-item-details-panel.floatpanel {
+    background-color: rgb(229, 234, 237);
+}
+.dark #ov-int-app-main-item-details-panel.floatpanel {
+    background-color: #3A4042;
+}
+
+#ov-int-app-main-item-details-panel h3 {
+    margin: 0;
+    font-size: large;
+}
+
+#ov-int-app-main-item-details-panel h4 {
+    margin: 0;
+}
+
+#ov-int-app-main-item-details-panel td {
+    padding: 5px;
+}
+
+#int-app-main-intents, div.ctrl-btns {
+}
+
+#int-app-main-intents th, td {
+    text-align: left;
+    padding:  8px;
+}
+
+
diff --git a/apps/inbandtelemetry/intApp-gui2/intApp/lib/intapp/intapp.component.html b/apps/inbandtelemetry/intApp-gui2/intApp/lib/intapp/intapp.component.html
new file mode 100644
index 0000000..c1fe049
--- /dev/null
+++ b/apps/inbandtelemetry/intApp-gui2/intApp/lib/intapp/intapp.component.html
@@ -0,0 +1,195 @@
+<!--
+~ Copyright 2020-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-int-app-main">
+    <div class="tabular-header">
+        <h2 style="font-weight: bold">In-band Network Telemetry (INT) Control
+            Application</h2>
+    </div>
+
+    <hr>
+
+    <div class="tabular-header">
+        <h2>
+            INT Collector Configuration
+        </h2>
+        <div class="config-panel">
+            <h3>
+                Collector IPv4 address and UDP port
+            </h3>
+            <form [formGroup]="formConf" (ngSubmit)="sendIntConfigString()">
+                <input type="text" placeholder="IPv4 address" [ngClass]="{ 'is-invalid': formConf.controls.colIp.errors }"
+                       class="form-control" formControlName="colIp">
+                :
+                <input type="text" placeholder="port" class="form-control" [ngClass]="{ 'is-invalid': formConf.controls.colPort.errors }" formControlName="colPort">
+                <div *ngIf="formConf.controls.colIp.errors" class="invalid-feedback">
+                    <div class="error-text" *ngIf="formConf.controls.colIp.errors.required"> Control IP is required</div>
+                    <div class="error-text" *ngIf="formConf.controls.colIp.errors.pattern">Control IP must be a valid IP address</div>
+                </div>
+                <div *ngIf="formConf.controls.colPort.errors" class="invalid-feedback">
+                    <div class="error-text" *ngIf="formConf.controls.colPort.errors.required">Port is required</div>
+                    <div class="error-text" *ngIf="formConf.controls.colPort.errors.pattern">Port must be a valid Port number</div>
+                </div>
+                <div class="config-button-panel">
+                    <button class="int-app-button">
+                        Apply Configuration
+                    </button>
+                </div>
+            </form>
+        </div>
+    </div>
+    <div class="tabular-header">
+        <h2 style="font-weight: bold">In-band Network Telemetry (INT) Control
+            Application</h2>
+    </div>
+
+    <hr>
+                <div class="tabular-header">
+                    <h2>
+                        INT Watchlist Rules
+                    </h2>
+                    <div>
+                        <form [formGroup]="formSend" (ngSubmit)="sendIntIntentString()">
+                        <div class="input-panel">
+                            <h3>
+                                Create New Watchlist Rule
+                            </h3>
+                            <div>
+                                <label>
+                                <input type="text" placeholder="Source IP address" [ngClass]="{ 'is-invalid': formSend.controls.ip4SrcPrefix.errors }"
+                                       class="form-control" formControlName="ip4SrcPrefix">
+
+                                </label>
+                                <label>
+                                    <input type="text" placeholder="Dest IP address" [ngClass]="{ 'is-invalid': formSend.controls.ip4DstPrefix.errors }"
+                                           class="form-control" formControlName="ip4DstPrefix">
+                                </label>
+                                <label>
+                                    <input type="text" placeholder="Source port" [ngClass]="{ 'is-invalid': formSend.controls.l4SrcPort.errors }"
+                                               class="form-control" formControlName="l4SrcPort">
+                                </label>
+                                <label>
+                                    <input type="text" placeholder="Dest port" [ngClass]="{ 'is-invalid': formSend.controls.l4DstPort.errors }"
+                                           class="form-control" formControlName="l4DstPort">
+                                </label>
+                                <label>
+                                    Protocol
+                                    <select name="protocol" formControlName="protocol">
+                                        <option selected disabled hidden
+                                                style="display: none" value=''></option>
+                                        <option value="TCP">TCP</option>
+                                        <option value="UDP">UDP</option>
+                                    </select>
+                                </label>
+                                <div *ngIf="formSend.controls.ip4DstPrefix.errors" class="invalid-feedback">
+                                    <div class="error-text" *ngIf="formSend.controls.ip4DstPrefix.errors.required"> Destination IP is required</div>
+                                    <div class="error-text" *ngIf="formSend.controls.ip4DstPrefix.errors.pattern">Destination IP must be a valid IP address</div>
+                                </div>
+                                <div *ngIf="formSend.controls.ip4SrcPrefix.errors" class="invalid-feedback">
+                                    <div class="error-text" *ngIf="formSend.controls.ip4SrcPrefix.errors.required">Source IP is required</div>
+                                    <div class="error-text" *ngIf="formSend.controls.ip4SrcPrefix.errors.pattern">Source IP must be a valid IP address</div>
+                                </div>
+                                <div *ngIf="formSend.controls.l4DstPort.errors" class="invalid-feedback">
+                                    <div class="error-text" *ngIf="formSend.controls.l4DstPort.errors.pattern">Destination Port must be a valid Port</div>
+                                </div>
+                                <div *ngIf="formSend.controls.l4SrcPort.errors" class="invalid-feedback">
+                                    <div class="error-text" *ngIf="formSend.controls.l4SrcPort.errors.pattern">Source Port must be a valid Port</div>
+                                </div>
+                            </div>
+                            <div>
+                                    <div class="myrow">
+                                        <div *ngFor="let data of metaData">
+                                            <div class="mygrid">
+                                                <label>
+                                                    <input type="checkbox"
+                                                           (change)="onCheckboxChange(data.value, $event.target.checked)"/>
+                                                    {{ data.name }}
+                                                </label>
+                                            </div>
+                                        </div>
+                                    </div>
+                            </div>
+                        </div>
+                        <div class="button-panel">
+                            <button class="int-app-button">
+                                Apply Watchlist Rule
+                            </button>
+                        </div>
+                        </form>
+                    </div>
+                </div>
+
+    <!-- ++++++++++++++++++++++++++++++++++++++++++++++++++++++++ -->
+    <div class='int-app-main-intents'>
+        <div class="tabular-header">
+            <h2>Installed Watchlist Rules ({{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>
+                <!-- tooltip tt-msg="uninstallTip" -->
+                <div (click)="delIntIntent()">
+                    <onos-icon classes="{active: ctrlBtnState.selection}" iconId="garbage"
+                               iconSize="42"></onos-icon>
+                </div>
+            </div>
+        </div>
+
+        <div id="summary-list" class="summary-list" onosTableResize>
+            <div class="table-header">
+                <table>
+                    <tr>
+                        <td colId="available" class="table-icon"></td>
+                        <td colId="type" class="table-icon"></td>
+                        <td colId="id">ID</td>
+                        <td colId="srcAddr" sortable>Src Address</td>
+                        <td colId="dstAddr" sortable>Dst Address</td>
+                        <td colId="srcPort" sortable>Src Port</td>
+                        <td colId="dstPort" sortable>Dst Port</td>
+                        <td colId="protocol" sortable>Protocol</td>
+                        <td colId="metadata" sortable>Metadata</td>
+                    </tr>
+                </table>
+            </div>
+            <div class="table-body">
+                <table>
+                    <tr class="table-body" *ngIf="tableData.length === 0" class="no-data">
+                        <td colspan="9">{{ annots.noRowsMsg }}</td>
+                    </tr>
+                    <tr *ngFor="let row of tableData | filter : tableDataFilter"
+                        (click)="selectCallback($event, row)"
+                        [ngClass]="{selected: row.id === selId, 'data-change': isChanged(row.id)}">
+                        <td class="table-icon">
+                            <onos-icon classes="{{ row._iconid_available}}"
+                                       iconId={{row._iconid_available}}></onos-icon>
+                        </td>
+                        <td class="table-icon">
+                            <onos-icon classes="{{row._iconid_type? 'active-type':undefined}}"
+                                       iconId="{{row._iconid_type}}"></onos-icon>
+                        </td>
+                        <td>{{ row.id }}</td>
+                        <td>{{ row.srcAddr }}</td>
+                        <td>{{ row.dstAddr}}</td>
+                        <td>{{ row.srcPort}}</td>
+                        <td>{{ row.dstPort }}</td>
+                        <td>{{ row.protocol }}</td>
+                        <td>{{ row.metadata }}</td>
+                    </tr>
+                </table>
+            </div>
+        </div>
+    </div>
+</div>
\ No newline at end of file
diff --git a/apps/inbandtelemetry/intApp-gui2/intApp/lib/intapp/intapp.component.ts b/apps/inbandtelemetry/intApp-gui2/intApp/lib/intapp/intapp.component.ts
new file mode 100644
index 0000000..ea2a328
--- /dev/null
+++ b/apps/inbandtelemetry/intApp-gui2/intApp/lib/intapp/intapp.component.ts
@@ -0,0 +1,151 @@
+/*
+ * Copyright 2020-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 { FormBuilder, FormGroup, FormArray, FormControl, Validators } from '@angular/forms';
+
+import {
+    FnService,
+    LogService,
+    WebSocketService,
+    SortDir, TableBaseImpl, TableResponse,
+} from 'org_onosproject_onos/web/gui2-fw-lib/public_api';
+
+import {ActivatedRoute, Router} from '@angular/router';
+
+// constants
+const intIntentAddReq = 'intIntentAddRequest';
+const intIntentDelReq = 'intIntentDelRequest';
+const intConfigAddReq = 'intConfigAddRequest';
+const regColIp = '^([0-9]{1,3}\\.){3}[0-9]{1,3}$';
+const regColPort = '^[0-9]{0,5}$';
+const regSendIp = '^([0-9]{1,3}\\.){3}[0-9]{1,3}(/[0-9]{1,2})?$'
+const regSendPort ='^[0-9]{0,5}$'
+
+export interface Metadata {
+    name: string;
+    value: string;
+}
+
+/**
+ * ONOS GUI -- INT App View Component
+ */
+@Component({
+    selector: 'int-app',
+    templateUrl: './intapp.component.html',
+    styleUrls: ['./intapp.component.css',
+        '../../../../../../web/gui2-fw-lib/lib/widget/table.css',
+        '../../../../../../web/gui2-fw-lib/lib/widget/table.theme.css'
+    ]
+})
+export class IntAppComponent extends TableBaseImpl implements OnInit, OnDestroy {
+
+    formConf: FormGroup;
+    formSend: FormGroup;
+    metaData: Metadata[] = [
+        { name: 'Switch ID', value : 'SWITCH_ID'},
+        { name: 'Port IDs', value:'PORT_ID' },
+        { name: 'Hop Latency', value: 'HOP_LATENCY', },
+        { name: 'Queue Occupancy', value:'QUEUE_OCCUPANCY' },
+        { name: 'Ingress Timestamp', value:'INGRESS_TIMESTAMP' },
+        { name: 'Egress Timestamp', value: 'EGRESS_TIMESTAMP' },
+        { name: 'Egress Port Tx Utilization', value:'EGRESS_TX_UTIL' },
+    ];
+
+    constructor(
+        protected fs: FnService,
+        protected log: LogService,
+        protected as: ActivatedRoute,
+        protected router: Router,
+        protected wss: WebSocketService,
+        protected fb: FormBuilder,
+    ) {
+        super(fs, log, wss, 'intAppIntIntent');
+
+    }
+
+    ngOnInit() {
+        this.init();
+        this.formSend = this.fb.group({
+            name: this.fb.array([]),
+            ip4SrcPrefix: new FormControl(null, [Validators.required, Validators.pattern(regSendIp)]),
+            ip4DstPrefix: new FormControl(null, [Validators.required, Validators.pattern(regSendIp)]),
+            l4SrcPort: new FormControl(null, [ Validators.pattern(regSendPort)]),
+            l4DstPort: new FormControl(null, [ Validators.pattern(regSendPort)]),
+            protocol: new FormControl(),
+        });
+        this.formConf = this.fb.group({
+            colIp: new FormControl(null, [Validators.required, Validators.pattern(regColIp)]),
+            colPort: new FormControl( null, [Validators.required, Validators.pattern(regColPort)])
+        });
+        this.log.debug('IntAppComponent initialized');
+    }
+
+    ngOnDestroy() {
+        this.destroy();
+        this.log.debug('IntAppComponent destroyed');
+    }
+
+    navto(path) {
+        this.log.debug('navigate');
+        if (this.selId) {
+            this.router.navigate([path], {queryParams: {itemId: this.selId}});
+        }
+    }
+
+    onCheckboxChange(name: string, isChecked: boolean) {
+        this.log.debug('event'+ isChecked);
+        const meta = (this.formSend.controls.name as FormArray);
+
+        if (isChecked) {
+            meta.push(new FormControl(name));
+        } else {
+            const index = meta.controls.findIndex(x => x.value === name);
+            meta.removeAt(index);
+        }
+    }
+
+    sendIntConfigString() {
+        if (this.formConf.invalid) {
+            return;
+        }
+        let configObjectNode = {
+            "collectorIp": this.formConf.value.colIp,
+            "collectorPort": this.formConf.value.colPort
+        };
+        this.wss.sendEvent(intConfigAddReq, configObjectNode);
+    }
+
+    sendIntIntentString() {
+        if (this.formSend.invalid) {
+            return;
+        }
+        let intentObjectNode = {
+            "ip4SrcPrefix": this.formSend.value.ip4SrcPrefix,
+            "ip4DstPrefix": this.formSend.value.ip4DstPrefix,
+            "l4SrcPort": this.formSend.value.l4SrcPort,
+            "l4DstPort": this.formSend.value.l4DstPort,
+            "protocol": this.formSend.value.protocol,
+            "metadata": this.formSend.value.name
+        };
+        this.wss.sendEvent(intIntentAddReq, intentObjectNode);
+    }
+
+    delIntIntent(){
+        if (this.selId) {
+            this.wss.sendEvent(intIntentDelReq,{"intentId": this.selId});
+        }
+    }
+}
diff --git a/apps/inbandtelemetry/intApp-gui2/intApp/public_api.ts b/apps/inbandtelemetry/intApp-gui2/intApp/public_api.ts
new file mode 100644
index 0000000..7b8fc29
--- /dev/null
+++ b/apps/inbandtelemetry/intApp-gui2/intApp/public_api.ts
@@ -0,0 +1,22 @@
+/*
+ * Copyright 2019-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.
+ */
+
+/*
+ * Public API Surface of intApp-gui2-lib
+ */
+
+export * from './lib/intapp-gui2-lib.module';
+export * from './lib/intapp/intapp.component';
diff --git a/apps/inbandtelemetry/intApp-gui2/intApp/test.ts b/apps/inbandtelemetry/intApp-gui2/intApp/test.ts
new file mode 100644
index 0000000..3e4cb26
--- /dev/null
+++ b/apps/inbandtelemetry/intApp-gui2/intApp/test.ts
@@ -0,0 +1,38 @@
+/*
+ * Copyright 2019-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.
+ */
+
+// This file is required by karma.conf.js and loads recursively all the .spec and framework files
+
+import 'core-js/es7/reflect';
+import 'zone.js/dist/zone';
+import 'zone.js/dist/zone-testing';
+import { getTestBed } from '@angular/core/testing';
+import {
+  BrowserDynamicTestingModule,
+  platformBrowserDynamicTesting
+} from '@angular/platform-browser-dynamic/testing';
+
+declare const require: any;
+
+// First, initialize the Angular testing environment.
+getTestBed().initTestEnvironment(
+  BrowserDynamicTestingModule,
+  platformBrowserDynamicTesting()
+);
+// Then we find all the tests.
+const context = require.context('./', true, /\.spec\.ts$/);
+// And load the modules.
+context.keys().map(context);
