diff --git a/catalog-ui/src/app/models.ts b/catalog-ui/src/app/models.ts
index f3eb5d5..ec70ebe 100644
--- a/catalog-ui/src/app/models.ts
+++ b/catalog-ui/src/app/models.ts
@@ -95,6 +95,7 @@
 export * from './models/modules/base-module';
 export * from './models/properties';
 export * from './models/requirement';
+export * from './models/server-error-response';
 export * from './models/tab';
 export * from './models/tooltip-data';
 export * from './models/user';
diff --git a/catalog-ui/src/app/models/modal.ts b/catalog-ui/src/app/models/modal.ts
index 51aa5e1..b7bdf25 100644
--- a/catalog-ui/src/app/models/modal.ts
+++ b/catalog-ui/src/app/models/modal.ts
@@ -5,12 +5,14 @@
     title: string;
     content: any;
     buttons: Array<ButtonModel>;
+    type: string; 'standard|error|alert'
 
-    constructor(size?: string, title?: string, content?: any, buttons?: Array<ButtonModel>) {
+    constructor(size?: string, title?: string, content?: any, buttons?: Array<ButtonModel>, type?:string) {
         this.size = size;
         this.title = title;
         this.content = content;
         this.buttons = buttons;
+        this.type = type || 'standard';
     }
 }
 
diff --git a/catalog-ui/src/app/models/server-error-response.ts b/catalog-ui/src/app/models/server-error-response.ts
new file mode 100644
index 0000000..61d09af
--- /dev/null
+++ b/catalog-ui/src/app/models/server-error-response.ts
@@ -0,0 +1,84 @@
+/*-
+ * ============LICENSE_START=======================================================
+ * SDC
+ * ================================================================================
+ * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.
+ * ================================================================================
+ * 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.
+ * ============LICENSE_END=========================================================
+ */
+
+/**
+ * Created by ngordon on 7/27/2017.
+ */
+
+import { Response } from '@angular/http';
+import { SEVERITY, ServerErrors } from "../utils/constants";
+
+export class ServerErrorResponse {
+
+    title: string;
+    message: string;
+    messageId: string;
+    status: number;
+    severity: SEVERITY;
+
+    constructor(response?: Response) {
+
+        if (response) {
+            let rejectionObj: any = {};
+            if (response.text().length) {
+                let rejection = response.json();
+                rejectionObj = rejection.serviceException || rejection.requestError && (rejection.requestError.serviceException || rejection.requestError.policyException);
+                rejectionObj.text = this.getFormattedMessage(rejectionObj.text || ServerErrors.MESSAGE_ERROR, rejectionObj.variables);
+            }
+
+            this.title = ServerErrors.ERROR_TITLE;
+            this.message = rejectionObj.text || response.statusText || ServerErrors.DEFAULT_ERROR;
+            this.messageId = rejectionObj.messageId;
+            this.status = response.status;
+            this.severity = SEVERITY.ERROR;
+        }
+    }
+
+
+    private getFormattedMessage = (text: string, variables: Array<string>): string => { //OLD CODE
+        // Remove the "Error: " text at the begining
+        if (text.trim().indexOf("Error:") === 0) {
+            text = text.replace("Error:", "").trim();
+        }
+
+        //mshitrit DE199895 bug fix
+        let count: number = 0;
+        variables.forEach(function (item) {
+            variables[count] = item ? item.replace('<', '&lt').replace('>', '&gt') : '';
+            count++;
+        });
+
+        // Format the message in case has array to <ul><li>
+        text = text.replace(/\[%(\d+)\]/g, function (_, m) {
+            let tmp = [];
+            let list = variables[--m].split(";");
+            list.forEach(function (item) {
+                tmp.push("<li>" + item + "</li>");
+            });
+            return "<ul>" + tmp.join("") + "</ul>";
+        });
+
+        // Format the message %1 %2
+        text = text.format(variables);
+
+        return text;
+
+    };
+}
\ No newline at end of file
diff --git a/catalog-ui/src/app/ng2/app.module.ts b/catalog-ui/src/app/ng2/app.module.ts
index 57adb8f..88c2d87 100644
--- a/catalog-ui/src/app/ng2/app.module.ts
+++ b/catalog-ui/src/app/ng2/app.module.ts
@@ -32,14 +32,13 @@
 } from "./utils/ng1-upgraded-provider";
 import {ConfigService} from "./services/config.service";
 import {HttpModule} from '@angular/http';
+import {HttpService} from './services/http.service';
 import {AuthenticationService} from './services/authentication.service';
 import {Cookie2Service} from "./services/cookie.service";
 import {ComponentServiceNg2} from "./services/component-services/component.service";
 import {ServiceServiceNg2} from "./services/component-services/service.service";
 import {ComponentInstanceServiceNg2} from "./services/component-instance-services/component-instance.service";
-import { InterceptorService } from 'ng2-interceptors';
 import { XHRBackend, RequestOptions } from '@angular/http';
-import {HttpInterceptor} from "./services/http.interceptor.service";
 import { SearchBarComponent } from './shared/search-bar/search-bar.component';
 import { SearchWithAutoCompleteComponent } from './shared/search-with-autocomplete/search-with-autocomplete.component';
 
@@ -49,16 +48,6 @@
     return () => config.loadValidationConfiguration();
 }
 
-export function interceptorFactory(xhrBackend: XHRBackend, requestOptions: RequestOptions){
-    let service = new InterceptorService(xhrBackend, requestOptions);
-      service.addInterceptor(new HttpInterceptor());
-    return service;
-}
-
-
-// export function httpServiceFactory(backend: XHRBackend, options: RequestOptions) {
-//     return new HttpService(backend, options);
-// }
 
 @NgModule({
     declarations: [
@@ -87,6 +76,7 @@
         ConfigService,
         ComponentServiceNg2,
         ServiceServiceNg2,
+        HttpService,
         ComponentInstanceServiceNg2,
         {
             provide: APP_INITIALIZER,
@@ -94,11 +84,6 @@
             deps: [ConfigService],
             multi: true
         },
-        {
-            provide: InterceptorService,
-            useFactory: interceptorFactory,
-            deps: [XHRBackend, RequestOptions]
-        }
      ],
     bootstrap: [AppComponent]
 })
diff --git a/catalog-ui/src/app/ng2/components/dynamic-element/elements-ui/integer-input/ui-element-integer-input.component.ts b/catalog-ui/src/app/ng2/components/dynamic-element/elements-ui/integer-input/ui-element-integer-input.component.ts
index 8b27ab7..3339b60 100644
--- a/catalog-ui/src/app/ng2/components/dynamic-element/elements-ui/integer-input/ui-element-integer-input.component.ts
+++ b/catalog-ui/src/app/ng2/components/dynamic-element/elements-ui/integer-input/ui-element-integer-input.component.ts
@@ -35,7 +35,7 @@
 
     onSave() {
         if (!this.control.invalid){
-            this.baseEmitter.emit(JSON.parse(this.value));
+            this.baseEmitter.emit(this.value ? JSON.parse(this.value) : this.value);
         }
     }
 }
diff --git a/catalog-ui/src/app/ng2/components/inputs-table/inputs-table.component.html b/catalog-ui/src/app/ng2/components/inputs-table/inputs-table.component.html
index 38de3ce..2b58d0f 100644
--- a/catalog-ui/src/app/ng2/components/inputs-table/inputs-table.component.html
+++ b/catalog-ui/src/app/ng2/components/inputs-table/inputs-table.component.html
@@ -1,5 +1,5 @@
 <div class="properties-table">
-    <loader [display]="isLoading" size="large" [relative]="false"></loader>
+    <loader [display]="isLoading" [size]="'large'" [relative]="true"></loader>
     <div class="table-header">
         <div class="table-cell col1">Property Name</div>
         <div class="table-cell col3">From Instance</div>
diff --git a/catalog-ui/src/app/ng2/components/inputs-table/inputs-table.component.ts b/catalog-ui/src/app/ng2/components/inputs-table/inputs-table.component.ts
index 30cdb89..736655f 100644
--- a/catalog-ui/src/app/ng2/components/inputs-table/inputs-table.component.ts
+++ b/catalog-ui/src/app/ng2/components/inputs-table/inputs-table.component.ts
@@ -57,7 +57,7 @@
 
     openDeleteModal = (input:InputFEModel) => {
         this.selectedInputToDelete = input;
-        this.modalService.openActionModal("Delete Input", "Are you sure you want to delete this input?", "Delete", this.onDeleteInput, "Close");
+        this.modalService.createActionModal("Delete Input", "Are you sure you want to delete this input?", "Delete", this.onDeleteInput, "Close").instance.open();
     }
 }
 
diff --git a/catalog-ui/src/app/ng2/components/loader/loader.component.html b/catalog-ui/src/app/ng2/components/loader/loader.component.html
index 0e13cee..a62aa11 100644
--- a/catalog-ui/src/app/ng2/components/loader/loader.component.html
+++ b/catalog-ui/src/app/ng2/components/loader/loader.component.html
@@ -1,4 +1,5 @@
-<div *ngIf="display" data-tests-id="tlv-loader">
+<div *ngIf="isVisible"  data-tests-id="tlv-loader" [ngClass]="relative ? 'loader-relative' : 'loader-fixed'" 
+        [style.top]="offset.top" [style.left]="offset.left" [style.width]="offset.width"  [style.height]="offset.height">
     <div class="tlv-loader-back" [ngClass]="{'tlv-loader-relative':relative}"></div>
     <div class="tlv-loader {{size}}"></div>
 </div>
diff --git a/catalog-ui/src/app/ng2/components/loader/loader.component.less b/catalog-ui/src/app/ng2/components/loader/loader.component.less
index 054b602..ddb9915 100644
--- a/catalog-ui/src/app/ng2/components/loader/loader.component.less
+++ b/catalog-ui/src/app/ng2/components/loader/loader.component.less
@@ -16,6 +16,22 @@
     z-index: 10002;
 }
 
+.loader-relative {
+    display: block;
+    position:absolute;
+    width: 100%;
+    height:100%;
+}
+
+.loader-fixed {
+    display: block;
+    position:fixed;
+    top:0;
+    left:0;
+    width: 100%;
+    height:100%;
+}
+
 @keyframes fadein {
     from { opacity: 0; }
     to   { opacity: 0.8; }
diff --git a/catalog-ui/src/app/ng2/components/loader/loader.component.ts b/catalog-ui/src/app/ng2/components/loader/loader.component.ts
index 92278d3..f66aa55 100644
--- a/catalog-ui/src/app/ng2/components/loader/loader.component.ts
+++ b/catalog-ui/src/app/ng2/components/loader/loader.component.ts
@@ -21,7 +21,7 @@
 /**
  * Created by rc2122 on 6/6/2017.
  */
-import {Component, Input, ElementRef, Renderer, SimpleChanges} from "@angular/core";
+import { Component, Input, ViewContainerRef, SimpleChanges} from "@angular/core";
 @Component({
     selector: 'loader',
     templateUrl: './loader.component.html',
@@ -29,13 +29,20 @@
 })
 export class LoaderComponent {
 
-    @Input() display:boolean;
-    @Input() size:string;// small || medium || large
-    @Input() relative: boolean;
-    @Input() elementSelector: string; // optional. If is relative is set to true, option to pass in element that loader should be relative to. Otherwise, will be relative to parent element.
+    @Input() display: boolean;
+    @Input() size: string;// small || medium || large
+    @Input() relative: boolean; // If is relative is set to true, loader will appear over parent element. Otherwise, will be fixed over the entire page.
+    @Input() loaderDelay: number; //optional - number of ms to delay loader display.
     
+    private isVisible: boolean = false;
+    private offset : {
+        top: string;
+        left: string;
+        width: string;
+        height: string;
+    };
 
-    constructor (private el: ElementRef, private renderer: Renderer){
+    constructor(private viewContainerRef: ViewContainerRef) { 
     }
 
     ngOnInit() {
@@ -49,46 +56,31 @@
 
     ngOnChanges(changes: SimpleChanges) {
         if(changes.display){
-            if (this.display) {
-                this.changeLoaderDisplay(false); //display is set to true, so loader will appear unless we explicitly tell it not to.
-                window.setTimeout((): void => {
-                    this.display && this.changeLoaderDisplay(true); //only show loader if we still need to display it.
-                }, 500);
-            } else {
-                window.setTimeout(():void => {
-                    this.changeLoaderDisplay(false);
-                }, 0);
-            }
+            this.changeLoaderDisplay(this.display);
         }
     }
 
-    changeLoaderDisplay = (display: boolean): void => {
+    private changeLoaderDisplay = (display: boolean): void => {
         if (display) {
-            this.calculateLoaderPosition();
-            this.renderer.setElementStyle(this.el.nativeElement, 'display', 'block');
+            window.setTimeout((): void => {
+                this.display && this.showLoader(); //only show loader if this.display has not changed in the meanwhile.
+            }, this.loaderDelay || 0);
         } else {
-            this.renderer.setElementStyle(this.el.nativeElement, 'display', 'none');
+            this.isVisible = false;
         }
     }
 
-    calculateLoaderPosition = () => {
-        if (this.relative === true) { // Can change the parent position to relative without causing style issues.
-            let parent = (this.elementSelector) ? angular.element(this.elementSelector).get(0) : this.el.nativeElement.parentElement;
-            this.renderer.setElementStyle(parent, 'position', 'relative');
-            this.setLoaderPosition(0, 0); //will be relative to parent and appear over specified element
-            //TODO: DONT force parent to have position relative; set inner div's style instead of outer element
-            // let parentPos: ClientRect = this.el.nativeElement.parentElement.getBoundingClientRect();
-            // this.setLoaderPosition(parentPos.top, parentPos.left, parentPos.width, parentPos.height);
-        } else {
-            this.setLoaderPosition(0, 0); //will appear over whole page
+    private showLoader = () => {
+        if (this.relative === true) {
+            let parentElement = this.viewContainerRef.element.nativeElement.parentElement;
+            this.offset = {
+                left: (parentElement.offsetLeft) ? parentElement.offsetLeft + "px" : undefined,
+                top: (parentElement.offsetTop) ? parentElement.offsetTop + "px" : undefined,
+                width: (parentElement.offsetWidth) ? parentElement.offsetWidth + "px" : undefined,
+                height: (parentElement.offsetHeight) ? parentElement.offsetHeight + "px" : undefined
+            };
         }
+        this.isVisible = true;
     }
 
-    setLoaderPosition = (top:number, left:number, width?:number, height?:number): void => {
-        this.renderer.setElementStyle(this.el.nativeElement, 'position', 'absolute');
-        this.renderer.setElementStyle(this.el.nativeElement, 'top', top? top.toString() : "0");
-        this.renderer.setElementStyle(this.el.nativeElement, 'left', left? left.toString() : "0");
-        this.renderer.setElementStyle(this.el.nativeElement, 'width', width? width.toString() : "100%");
-        this.renderer.setElementStyle(this.el.nativeElement, 'height', height? height.toString() : "100%");
-    };
 }
diff --git a/catalog-ui/src/app/ng2/components/modal/error-message/error-message.component.html b/catalog-ui/src/app/ng2/components/modal/error-message/error-message.component.html
new file mode 100644
index 0000000..433bd4f
--- /dev/null
+++ b/catalog-ui/src/app/ng2/components/modal/error-message/error-message.component.html
@@ -0,0 +1,5 @@
+<div class="error-message-component">
+    <div>Error code: {{input.messageId}}</div>
+    <div>Status code: {{input.status}}</div>
+    <div class="error-message">{{input.message}}</div>
+</div>
\ No newline at end of file
diff --git a/catalog-ui/src/app/ng2/components/modal/error-message/error-message.component.ts b/catalog-ui/src/app/ng2/components/modal/error-message/error-message.component.ts
new file mode 100644
index 0000000..c0d6673
--- /dev/null
+++ b/catalog-ui/src/app/ng2/components/modal/error-message/error-message.component.ts
@@ -0,0 +1,38 @@
+/*-
+ * ============LICENSE_START=======================================================
+ * SDC
+ * ================================================================================
+ * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.
+ * ================================================================================
+ * 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.
+ * ============LICENSE_END=========================================================
+ */
+
+/**
+ * Created by ngordon on 7/30/2017.
+ */
+import { Component, Input } from '@angular/core';
+import { ServerErrorResponse } from 'app/models';
+
+@Component({
+    selector: 'error-message',
+    templateUrl: './error-message.component.html'
+})
+
+export class ErrorMessageComponent {
+    @Input() input: ServerErrorResponse;
+
+    constructor() {
+    }
+
+}
diff --git a/catalog-ui/src/app/ng2/components/modal/modal.component.html b/catalog-ui/src/app/ng2/components/modal/modal.component.html
index cc411bc..d843867 100644
--- a/catalog-ui/src/app/ng2/components/modal/modal.component.html
+++ b/catalog-ui/src/app/ng2/components/modal/modal.component.html
@@ -1,10 +1,14 @@
 <div class="custom-modal {{input.size}}">
     <div class="ng2-modal-content">
-        <div class="ng2-modal-header">
+        <div class="ng2-modal-header modal-type-{{input.type}}">
             <span class="title">{{ input.title }}</span>
             <span class="close-button" (click)="close()"></span>
         </div>
-        <div class="ng2-modal-body" >{{input.content}}</div>
+        <div class="ng2-modal-body" >
+            <div *ngIf="input.content">{{input.content}}</div>
+            <div #dynamicContentContainer></div>
+        </div>
+        
         <div class="ng2-modal-footer">
             <button *ngFor="let button of input.buttons"
                     class="tlv-btn {{button.cssClass}}"
diff --git a/catalog-ui/src/app/ng2/components/modal/modal.component.less b/catalog-ui/src/app/ng2/components/modal/modal.component.less
index a35f829..c87162a 100644
--- a/catalog-ui/src/app/ng2/components/modal/modal.component.less
+++ b/catalog-ui/src/app/ng2/components/modal/modal.component.less
@@ -37,12 +37,25 @@
                 display: -ms-flexbox;
                 display: flex;
                 text-align: left;
-                border-bottom: solid 1px @main_color_o;
                 -webkit-box-align: center;
                 -ms-flex-align: center;
                 align-items: center;
                 margin: 0px 20px;
+
+                &.modal-type-standard {
+                    border-bottom: solid 3px @main_color_a;
+                }
+
+                &.modal-type-error {
+                    border-bottom: solid 3px @func_color_q;
+                }
+
+                &.modal-type-alert{
+                    border-bottom: solid 3px @main_color_h;
+                }
+
                 .title{
+                    .s_18_m;
                     -webkit-box-flex: 999;
                     -ms-flex-positive: 999;
                     flex-grow: 999;
diff --git a/catalog-ui/src/app/ng2/components/modal/modal.component.ts b/catalog-ui/src/app/ng2/components/modal/modal.component.ts
index 09fb9ab..89db8d1 100644
--- a/catalog-ui/src/app/ng2/components/modal/modal.component.ts
+++ b/catalog-ui/src/app/ng2/components/modal/modal.component.ts
@@ -22,7 +22,7 @@
  * Created by rc2122 on 6/1/2017.
  */
 import { Component, ElementRef, Input, OnInit, OnDestroy } from '@angular/core';
-//import {ViewContainerRef, ViewChild} from '@angular/core';
+import {ViewContainerRef, ViewChild} from '@angular/core';
 import * as $ from 'jquery';
 import { ButtonsModelMap, ModalModel } from 'app/models';
 
@@ -34,9 +34,9 @@
 
 export class ModalComponent implements OnInit, OnDestroy {
     @Input() input: ModalModel;
+    @Input() dynamicContent: any;
+    @ViewChild('dynamicContentContainer', { read: ViewContainerRef }) dynamicContentContainer: ViewContainerRef; //Allows for custom component as body instead of simple message. See ModalService.createActionModal for implementation details, and HttpService's catchError() for example.
     private modalElement: JQuery;
-    //@ViewChild('modalBody', { read: ViewContainerRef }) modalContainer: ViewContainerRef; //TODO: allow for custom component as body instead of simple message
-    
 
     constructor( el: ElementRef ) {
         this.modalElement = $(el.nativeElement);
diff --git a/catalog-ui/src/app/ng2/components/modal/modal.module.ts b/catalog-ui/src/app/ng2/components/modal/modal.module.ts
index d77be2c..892f699 100644
--- a/catalog-ui/src/app/ng2/components/modal/modal.module.ts
+++ b/catalog-ui/src/app/ng2/components/modal/modal.module.ts
@@ -1,16 +1,19 @@
 import { NgModule } from "@angular/core";
 import { CommonModule } from '@angular/common';
 import { ModalService } from 'app/ng2/services/modal.service';
-import { ModalComponent } from "app/ng2/components/modal/modal.component"
+import { ModalComponent } from "app/ng2/components/modal/modal.component";
+import { ErrorMessageComponent } from "./error-message/error-message.component";
 
 @NgModule({
     declarations: [
         ModalComponent,
+        ErrorMessageComponent
     ],
     imports: [CommonModule],
     exports: [],
-    entryComponents: [
-        ModalComponent
+    entryComponents: [ //need to add anything that will be dynamically created
+        ModalComponent,
+        ErrorMessageComponent
     ],
     providers: [ModalService]
 })
diff --git a/catalog-ui/src/app/ng2/components/properties-table/properties-table.component.html b/catalog-ui/src/app/ng2/components/properties-table/properties-table.component.html
index c57998a..a9dc499 100644
--- a/catalog-ui/src/app/ng2/components/properties-table/properties-table.component.html
+++ b/catalog-ui/src/app/ng2/components/properties-table/properties-table.component.html
@@ -1,5 +1,5 @@
 <div class="properties-table">
-    <loader [display]="isLoading" size="large" [relative]="false"></loader>
+    <loader [display]="isLoading" [size]="'large'" [relative]="true" [loaderDelay]="500"></loader>
     <div class="table-header">
         <div class="table-cell col1">Property Name</div>
         <div class="table-cell col2">Type</div>
diff --git a/catalog-ui/src/app/ng2/pages/properties-assignment/properties-assignment.module.ts b/catalog-ui/src/app/ng2/pages/properties-assignment/properties-assignment.module.ts
index 3a5daba..1c6f513 100644
--- a/catalog-ui/src/app/ng2/pages/properties-assignment/properties-assignment.module.ts
+++ b/catalog-ui/src/app/ng2/pages/properties-assignment/properties-assignment.module.ts
@@ -45,7 +45,6 @@
 import {TooltipModule} from "../../components/tooltip/tooltip.module";
 import { ComponentModeService } from "app/ng2/services/component-mode.service"
 import {LoaderComponent} from "app/ng2/components/loader/loader.component"
-import {HttpInterceptor} from "../../services/http.interceptor.service";
 
 @NgModule({
     declarations: [
@@ -81,7 +80,7 @@
         // PopoverContentComponent,
         // PopoverComponent
     ],
-    providers: [PropertiesService, HierarchyNavService, PropertiesUtils, DataTypeService,HttpInterceptor, ContentAfterLastDotPipe, GroupByPipe, KeysPipe, ComponentModeService]
+    providers: [PropertiesService, HierarchyNavService, PropertiesUtils, DataTypeService, ContentAfterLastDotPipe, GroupByPipe, KeysPipe, ComponentModeService]
 })
 export class PropertiesAssignmentModule {
 
diff --git a/catalog-ui/src/app/ng2/pages/properties-assignment/properties-assignment.page.component.html b/catalog-ui/src/app/ng2/pages/properties-assignment/properties-assignment.page.component.html
index 0b50357..be7e03d 100644
--- a/catalog-ui/src/app/ng2/pages/properties-assignment/properties-assignment.page.component.html
+++ b/catalog-ui/src/app/ng2/pages/properties-assignment/properties-assignment.page.component.html
@@ -43,7 +43,7 @@
             <tabs #hierarchyNavTabs tabStyle="simple-tabs">
                 <tab tabTitle="Composition">
                     <div class="hierarchy-nav-container">
-                        <loader [display]="loadingInstances" size="medium" [relative]="true"></loader>
+                        <loader [display]="loadingInstances" [size]="'medium'" [relative]="true" [loaderDelay]="500"></loader>
                         <div class="hierarchy-header white-sub-header">
                             <span tooltip="{{component.name}}">{{component.name}}</span>
                         </div>
diff --git a/catalog-ui/src/app/ng2/pages/properties-assignment/properties-assignment.page.component.less b/catalog-ui/src/app/ng2/pages/properties-assignment/properties-assignment.page.component.less
index 8151d00..03974bf 100644
--- a/catalog-ui/src/app/ng2/pages/properties-assignment/properties-assignment.page.component.less
+++ b/catalog-ui/src/app/ng2/pages/properties-assignment/properties-assignment.page.component.less
@@ -1,5 +1,5 @@
 @import '../../../../assets/styles/variables';
-//@import url('https://fonts.googleapis.com/css?family=Open+Sans');
+@import '../../../../assets/styles/mixins';
 @ng2-shadow-gray: #f8f8f8;
 @ng2-light-gray: #eaeaea;
 @ng2-medium-gray: #d2d2d2;
@@ -36,7 +36,7 @@
         /deep/ .tab {
             padding: 12px;
             flex: 1;
-            font-weight:bold;
+            font-family: @font-opensans-regular;
 
             &.active {
                 color:#009fdb;
@@ -44,6 +44,7 @@
                 border-top: solid 4px #009fdb;
                 background-color: white;
                 padding-top:9px;
+                font-family: @font-opensans-medium;
             }
 
             .tab-indication {
@@ -129,8 +130,12 @@
             flex: none;
             padding: 8px 20px 0;
             font-size: 14px;
-            font-weight:bold;
             line-height:30px;
+            font-family: @font-opensans-regular;
+
+            &.active {
+                font-family: @font-opensans-medium;
+            }
         }
     }
 
@@ -146,8 +151,6 @@
         background-color:  #fffefe;
         box-shadow: 0px 1px 0.99px 0.01px rgba(34, 31, 31, 0.15);
         border-bottom: #d2d2d2 solid 1px;
-        color:#009fdb;
-        font-weight:bold;
         font-size:14px;
         text-align:left;
         flex:0 0 auto;
@@ -155,6 +158,8 @@
         text-overflow: ellipsis;
         white-space: nowrap;
         overflow: hidden;
+        .a_13_r;
+        text-transform: uppercase;
 
         &.hierarchy-header {
             padding-left:20px;
diff --git a/catalog-ui/src/app/ng2/pages/properties-assignment/properties-assignment.page.component.ts b/catalog-ui/src/app/ng2/pages/properties-assignment/properties-assignment.page.component.ts
index 6782b72..82754f1 100644
--- a/catalog-ui/src/app/ng2/pages/properties-assignment/properties-assignment.page.component.ts
+++ b/catalog-ui/src/app/ng2/pages/properties-assignment/properties-assignment.page.component.ts
@@ -105,7 +105,7 @@
                 });
                 this.loadingInputs = false;
 
-            });
+            }, error => {}); //ignore error
         this.componentServiceNg2
             .getComponentResourceInstances(this.component)
             .subscribe(response => {
@@ -120,7 +120,7 @@
                     this.loadingProperties = false;
                 }
                 this.selectFirstInstanceByDefault();
-            });
+            }, error => {}); //ignore error
 
     };
 
@@ -159,7 +159,7 @@
                     this.processInstancePropertiesResponse(instanceBePropertiesMap, true);
                     this.loadingProperties = false;
 
-                });
+                }, error => {}); //ignore error
         } else {
             this.componentInstanceServiceNg2
                 .getComponentInstanceProperties(this.component, resourceInstance.uniqueId)
@@ -167,7 +167,7 @@
                     instanceBePropertiesMap[resourceInstance.uniqueId] = response;
                     this.processInstancePropertiesResponse(instanceBePropertiesMap, false);
                     this.loadingProperties = false;
-                });
+                }, error => {}); //ignore error
         }
 
         if(resourceInstance.componentName === "vnfConfiguration") {
@@ -203,16 +203,16 @@
             this.componentInstanceServiceNg2
                 .updateInstanceInput(this.component, this.selectedInstanceData.uniqueId, inputToUpdate)
                 .subscribe(response => {
-                    console.log("update resource instance input and got this response: ", response);
-                })
+                    console.log("Update resource instance input response: ", response);
+                }, error => {}); //ignore error
         }
         else {
             let propertyBe = new PropertyBEModel(event);
             this.componentInstanceServiceNg2
                 .updateInstanceProperty(this.component, this.selectedInstanceData.uniqueId, propertyBe)
                 .subscribe(response => {
-                    console.log("updated resource instance property and got this response: ", response);
-                });
+                    console.log("Update resource instance property response: ", response);
+                }, error => {}); //ignore error
             console.log(event);
         }
 
@@ -226,7 +226,7 @@
             .updateComponentInput(this.component, inputToUpdate)
             .subscribe(response => {
                 console.log("updated the component input and got this response: ", response);
-            })
+            }, error => {}); //ignore error
     };
 
 
@@ -322,7 +322,7 @@
                     this.inputs.push(newInput);
                     this.updatePropertyValueAfterDeclare(newInput);
                 });
-            });
+            }, error => {}); //ignore error
     };
 
 
@@ -373,7 +373,7 @@
                 //         this.propertiesService.undoDisableRelatedProperties(propToEnable, response.inputPath);
                 //     }
                 // }
-            });
+            }, error => {}); //ignore error
     };
 
 
@@ -391,7 +391,7 @@
                 this.renderer.invokeElementMethod(this.hierarchyNavTabs, 'triggerTabChange', ['Composition']);
                 this.propertiesNavigationData = [];
                 this.displayClearSearch = true;
-            });
+            }, error => {}); //ignore error
 
     };
 
diff --git a/catalog-ui/src/app/ng2/pages/properties-assignment/properties.utils.ts b/catalog-ui/src/app/ng2/pages/properties-assignment/properties.utils.ts
index a04d23a..d8d991d 100644
--- a/catalog-ui/src/app/ng2/pages/properties-assignment/properties.utils.ts
+++ b/catalog-ui/src/app/ng2/pages/properties-assignment/properties.utils.ts
@@ -44,9 +44,7 @@
             let propertyFeArray: Array<PropertyFEModel> = [];
             _.forEach(properties, (property: PropertyBEModel) => {
 
-                if (!this.dataTypeService.getDataTypeByTypeName(property.type)) { // if type not exist in data types remove property from list
-                    console.log("ERROR: missing type " + property.type + " in dataTypes , of property ", property);
-                } else {
+                if (this.dataTypeService.getDataTypeByTypeName(property.type)) { // if type not exist in data types remove property from list
 
                     let newFEProp: PropertyFEModel = new PropertyFEModel(property); //Convert property to FE
 
diff --git a/catalog-ui/src/app/ng2/services/component-instance-services/component-instance.service.ts b/catalog-ui/src/app/ng2/services/component-instance-services/component-instance.service.ts
index 0c499fa..27de59d 100644
--- a/catalog-ui/src/app/ng2/services/component-instance-services/component-instance.service.ts
+++ b/catalog-ui/src/app/ng2/services/component-instance-services/component-instance.service.ts
@@ -25,14 +25,14 @@
 import {PropertyBEModel} from "app/models";
 import {CommonUtils} from "app/utils";
 import {Component, ComponentInstance, InputModel} from "app/models";
-import {InterceptorService} from "ng2-interceptors/index";
+import { HttpService } from '../http.service';
 
 @Injectable()
 export class ComponentInstanceServiceNg2 {
 
     protected baseUrl;
 
-    constructor(private http: InterceptorService) {
+    constructor(private http: HttpService) {
         this.baseUrl = sdc2Config.api.root + sdc2Config.api.component_api_root;
     }
 
diff --git a/catalog-ui/src/app/ng2/services/component-services/component.service.ts b/catalog-ui/src/app/ng2/services/component-services/component.service.ts
index cd593d5..c648711 100644
--- a/catalog-ui/src/app/ng2/services/component-services/component.service.ts
+++ b/catalog-ui/src/app/ng2/services/component-services/component.service.ts
@@ -30,8 +30,8 @@
 import {sdc2Config} from "../../../../main";
 import {InstanceBePropertiesMap} from "../../../models/properties-inputs/property-fe-map";
 import {API_QUERY_PARAMS} from "app/utils";
-import {ComponentType, ServerTypeUrl} from "../../../utils/constants";
-import {InterceptorService} from "ng2-interceptors/index";
+import { ComponentType, ServerTypeUrl } from "../../../utils/constants";
+import { HttpService } from '../http.service';
 
 declare var angular:angular.IAngularStatic;
 
@@ -40,7 +40,7 @@
 
     protected baseUrl;
 
-    constructor(private http:InterceptorService) {
+    constructor(private http:HttpService) {
         this.baseUrl = sdc2Config.api.root + sdc2Config.api.component_api_root;
     }
 
@@ -54,7 +54,7 @@
         return this.http.get(this.baseUrl + this.getServerTypeUrl(componentType) + componentId + '/filteredDataByParams', {search: params})
             .map((res:Response) => {
                 return new ComponentGenericResponse().deserialize(res.json());
-            }).do(error => console.log('server data:', error));
+            });
     }
 
     private getServerTypeUrl = (componentType:string):string => {
diff --git a/catalog-ui/src/app/ng2/services/component-services/service.service.ts b/catalog-ui/src/app/ng2/services/component-services/service.service.ts
index 1f5de18..ec912bb 100644
--- a/catalog-ui/src/app/ng2/services/component-services/service.service.ts
+++ b/catalog-ui/src/app/ng2/services/component-services/service.service.ts
@@ -26,7 +26,7 @@
 import {Service} from "app/models";
 import { downgradeInjectable } from '@angular/upgrade/static';
 import {sdc2Config} from "../../../../main";
-import {InterceptorService} from "ng2-interceptors/index";
+import { HttpService } from '../http.service';
 
 
 @Injectable()
@@ -34,7 +34,7 @@
 
     protected baseUrl = "";
 
-    constructor(private http: InterceptorService) {
+    constructor(private http: HttpService) {
         this.baseUrl = sdc2Config.api.root + sdc2Config.api.component_api_root;
     }
 
diff --git a/catalog-ui/src/app/ng2/services/data-type.service.ts b/catalog-ui/src/app/ng2/services/data-type.service.ts
index 48d32b7..30c02a4 100644
--- a/catalog-ui/src/app/ng2/services/data-type.service.ts
+++ b/catalog-ui/src/app/ng2/services/data-type.service.ts
@@ -38,12 +38,14 @@
     }
 
     public getDataTypeByTypeName(typeName: string): DataTypeModel {
+        if (!this.dataTypes[typeName]) console.log("MISSING Datatype: " + typeName);
         return this.dataTypes[typeName];
     }
 
 
     public getDerivedDataTypeProperties(dataTypeObj: DataTypeModel, propertiesArray: Array<DerivedFEProperty>, parentName: string) {
         //push all child properties to array
+        if (!dataTypeObj) return;
         if (dataTypeObj.properties) {
             dataTypeObj.properties.forEach((derivedProperty) => {
                 if(dataTypeObj.name !== PROPERTY_DATA.OPENECOMP_ROOT || derivedProperty.name !== PROPERTY_DATA.SUPPLEMENTAL_DATA){//The requirement is to not display the property supplemental_data
diff --git a/catalog-ui/src/app/ng2/services/http.interceptor.service.ts b/catalog-ui/src/app/ng2/services/http.interceptor.service.ts
deleted file mode 100644
index c90bfd2..0000000
--- a/catalog-ui/src/app/ng2/services/http.interceptor.service.ts
+++ /dev/null
@@ -1,162 +0,0 @@
-/*-
- * ============LICENSE_START=======================================================
- * SDC
- * ================================================================================
- * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.
- * ================================================================================
- * 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.
- * ============LICENSE_END=========================================================
- */
-
-import 'rxjs/add/operator/map';
-import 'rxjs/add/operator/toPromise';
-import 'rxjs/Rx';
-import {sdc2Config} from './../../../main';
-import {Interceptor, InterceptedRequest, InterceptedResponse} from 'ng2-interceptors';
-import {SharingService} from "../../services/sharing-service";
-import {ReflectiveInjector} from '@angular/core';
-import {Cookie2Service} from "./cookie.service";
-import {UUID} from "angular2-uuid";
-import {Dictionary} from "../../utils/dictionary/dictionary";
-import {SEVERITY} from "../../utils/constants";
-import {IServerMessageModalModel} from "../../view-models/modals/message-modal/message-server-modal/server-message-modal-view-model";
-
-
-export class HttpInterceptor implements Interceptor {
-
-    private cookieService:Cookie2Service;
-    private sharingService:SharingService;
-
-    constructor() {
-        let injector = ReflectiveInjector.resolveAndCreate([Cookie2Service, SharingService]);
-        this.cookieService = injector.get(Cookie2Service);
-        this.sharingService = injector.get(SharingService);
-    }
-
-    public interceptBefore(request:InterceptedRequest):InterceptedRequest {
-        /**
-         * For every request to the server, that the service id, or resource id is sent in the URL, need to pass UUID in the header.
-         * Check if the unique id exists in uuidMap, and if so get the UUID and add it to the header.
-         */
-        request.options.headers.append(this.cookieService.getUserIdSuffix(), this.cookieService.getUserId());
-        request.options.withCredentials = true;
-        var uuidValue = this.getUuidValue(request.url);
-        if (uuidValue != '') {
-            request.options.headers.set('X-ECOMP-ServiceID', uuidValue);
-        }
-        request.options.headers.set('X-ECOMP-RequestID', UUID.UUID());
-        return request;
-    }
-
-    public interceptAfter(response:InterceptedResponse):InterceptedResponse {
-
-        if (response.response.status !== 200 && response.response.status !== 201) {
-            this.responseError(response.response.json());
-            //console.log("Error from BE:",response);
-        }
-        return response;
-    }
-
-    private getUuidValue = (url:string):string => {
-        let map:Dictionary<string, string> = this.sharingService.getUuidMap();
-        if (map && url.indexOf(sdc2Config.api.root) > 0) {
-            map.forEach((key:string) => {
-                if (url.indexOf(key) !== -1) {
-                    return this.sharingService.getUuidValue(key);
-                }
-            });
-        }
-        return '';
-    };
-
-    public formatMessageArrays = (message:string, variables:Array<string>)=> {
-        return message.replace(/\[%(\d+)\]/g, function (_, m) {
-            let tmp = [];
-            let list = variables[--m].split(";");
-            list.forEach(function (item) {
-                tmp.push("<li>" + item + "</li>");
-            });
-            return "<ul>" + tmp.join("") + "</ul>";
-        });
-    };
-
-    public responseError = (rejection:any)=> {
-
-        let text:string;
-        let variables;
-        let messageId:string = "";
-        let isKnownException = false;
-
-        if (rejection && rejection.serviceException) {
-            text = rejection.serviceException.text;
-            variables = rejection.serviceException.variables;
-            messageId = rejection.serviceException.messageId;
-            isKnownException = true;
-        } else if (rejection && rejection.requestError && rejection.requestError.serviceException) {
-            text = rejection.requestError.serviceException.text;
-            variables = rejection.requestError.serviceException.variables;
-            messageId = rejection.requestError.serviceException.messageId;
-            isKnownException = true;
-        } else if (rejection && rejection.requestError && rejection.requestError.policyException) {
-            text = rejection.requestError.policyException.text;
-            variables = rejection.requestError.policyException.variables;
-            messageId = rejection.requestError.policyException.messageId;
-            isKnownException = true;
-        } else if (rejection) {
-            text = 'Wrong error format from server';
-            console.error(text);
-            isKnownException = false;
-        }
-
-        let data:IServerMessageModalModel;
-        if (isKnownException) {
-            // Remove the "Error: " text at the begining
-            if (text.trim().indexOf("Error:") === 0) {
-                text = text.replace("Error:", "").trim();
-            }
-
-            //mshitrit DE199895 bug fix
-            let count:number = 0;
-            variables.forEach(function (item) {
-                variables[count] = item ? item.replace('<', '&lt').replace('>', '&gt') : '';
-                count++;
-            });
-
-            // Format the message in case has array to <ul><li>
-            text = this.formatMessageArrays(text, variables);
-
-            // Format the message %1 %2
-            text = text.format(variables);
-
-            // Need to inject the MessageService manually to prevent circular dependencies (because MessageService use $templateCache that use $http).
-            data = {
-                title: 'Error',
-                message: text,
-                messageId: messageId,
-                status: rejection.status,
-                severity: SEVERITY.ERROR
-            };
-        } else {
-            // Need to inject the MessageService manually to prevent circular dependencies (because MessageService use $templateCache that use $http).
-            data = {
-                title: 'Error',
-                message: rejection.status !== -1 ? rejection.statusText : "Error getting response from server",
-                messageId: messageId,
-                status: rejection.status,
-                severity: SEVERITY.ERROR
-            };
-        }
-
-        console.error('ERROR data',data);
-    }
-}
diff --git a/catalog-ui/src/app/ng2/services/http.service.ts b/catalog-ui/src/app/ng2/services/http.service.ts
index 5cd5a10..21fe090 100644
--- a/catalog-ui/src/app/ng2/services/http.service.ts
+++ b/catalog-ui/src/app/ng2/services/http.service.ts
@@ -24,14 +24,18 @@
 import {UUID} from 'angular2-uuid';
 import 'rxjs/add/operator/map';
 import 'rxjs/add/operator/catch';
+import 'rxjs/add/observable/throw';
 import {Dictionary} from "../../utils/dictionary/dictionary";
 import {SharingService, CookieService} from "app/services";
 import {sdc2Config} from './../../../main';
+import { ModalService } from "app/ng2/services/modal.service";
+import { ServerErrorResponse } from "app/models";
+import { ErrorMessageComponent } from 'app/ng2/components/modal/error-message/error-message.component';
 
 @Injectable()
 export class HttpService extends Http {
 
-    constructor(backend:XHRBackend, options:RequestOptions, private sharingService:SharingService, private cookieService: CookieService) {
+    constructor(backend: XHRBackend, options: RequestOptions, private sharingService: SharingService, private cookieService: CookieService, private modalService: ModalService) {
         super(backend, options);
         this._defaultOptions.withCredentials = true;
         this._defaultOptions.headers.append(cookieService.getUserIdSuffix(), cookieService.getUserId());
@@ -64,7 +68,7 @@
             }
             request.headers.set('X-ECOMP-RequestID', UUID.UUID());
         }
-        return super.request(request, options).catch(this.catchAuthError(this));
+        return super.request(request, options).catch((err) => this.catchError(err));
     }
 
     private getUuidValue = (url: string) :string => {
@@ -79,15 +83,14 @@
         return '';
     }
 
-    private catchAuthError(self:HttpService) {
-        // we have to pass HttpService's own instance here as `self`
-        return (res:Response) => {
-            console.log(res);
-            if (res.status === 401 || res.status === 403) {
-                // if not authenticated
-                console.log(res);
-            }
-            return Observable.throw(res);
-        };
-    }
+    private catchError = (response: Response): Observable<any> => {
+        
+        let modalInstance = this.modalService.createErrorModal("OK");
+        let errorResponse: ServerErrorResponse = new ServerErrorResponse(response);
+        this.modalService.addDynamicContentToModal(modalInstance, ErrorMessageComponent, errorResponse);
+        modalInstance.instance.open();
+        
+        return Observable.throw(response);
+    };
+
 }
diff --git a/catalog-ui/src/app/ng2/services/modal.service.ts b/catalog-ui/src/app/ng2/services/modal.service.ts
index 32192f4..65ff870 100644
--- a/catalog-ui/src/app/ng2/services/modal.service.ts
+++ b/catalog-ui/src/app/ng2/services/modal.service.ts
@@ -11,10 +11,10 @@
     constructor(private componentFactoryResolver: ComponentFactoryResolver, private applicationRef: ApplicationRef) { }
 
     
-    /* Shortcut method to open a simple modal with title, message, and close button that simply closes the modal. */
+    /* Shortcut method to open an alert modal with title, message, and close button that simply closes the modal. */
     public openAlertModal(title: string, message: string, closeButtonText?:string) {
         let closeButton: ButtonModel = new ButtonModel(closeButtonText || 'Close', 'grey', this.closeCurrentModal);
-        let modalModel: ModalModel = new ModalModel('sm', title, message, [closeButton]);
+        let modalModel: ModalModel = new ModalModel('sm', title, message, [closeButton], 'alert');
         this.createCustomModal(modalModel).instance.open();
     }
 
@@ -22,19 +22,28 @@
     /**
      * Shortcut method to open a basic modal with title, message, and an action button with callback, as well as close button.
      * NOTE: To close the modal from within the callback, use modalService.closeCurrentModal() //if you run into zone issues with callbacks see:https://stackoverflow.com/questions/36566698/how-to-dynamically-create-bootstrap-modals-as-angular2-components
+     * NOTE: To add dynamic content to the modal, use modalService.addDynamicContentToModal(). First param is the return value of this function -- componentRef<ModalComponent>.
      * @param title Heading for modal
      * @param message Message for modal
      * @param actionButtonText Blue call to action button
      * @param actionButtonCallback function to invoke when button is clicked
      * @param cancelButtonText text for close/cancel button
      */    
-    public openActionModal = (title:string, message:string, actionButtonText:string, actionButtonCallback:Function, cancelButtonText:string) => {
+    public createActionModal = (title: string, message: string, actionButtonText: string, actionButtonCallback: Function, cancelButtonText: string): ComponentRef<ModalComponent> => {
         let actionButton: ButtonModel = new ButtonModel(actionButtonText, 'blue', actionButtonCallback);
         let cancelButton: ButtonModel = new ButtonModel(cancelButtonText, 'grey', this.closeCurrentModal);
         let modalModel: ModalModel = new ModalModel('sm', title, message, [actionButton, cancelButton]);
-        this.createCustomModal(modalModel).instance.open();
+        let modalInstance: ComponentRef<ModalComponent> = this.createCustomModal(modalModel);
+        return modalInstance;
     }
-    
+
+
+    public createErrorModal = (closeButtonText?: string, errorMessage?: string):ComponentRef<ModalComponent> => {
+        let closeButton: ButtonModel = new ButtonModel(closeButtonText || 'Close', 'grey', this.closeCurrentModal);
+        let modalModel: ModalModel = new ModalModel('sm', 'Error', errorMessage, [closeButton], 'error');
+        let modalInstance: ComponentRef<ModalComponent> = this.createCustomModal(modalModel);
+        return modalInstance;
+    }
 
     /* Use this method to create a modal with title, message, and completely custom buttons. Use response.instance.open() to open */
     public createCustomModal = (customModalData: ModalModel): ComponentRef<ModalComponent> => {
@@ -53,6 +62,14 @@
     }
 
 
+    public addDynamicContentToModal = (modalInstance: ComponentRef<ModalComponent>, dynamicComponentType: Type<any>, dynamicComponentInput: any) => {
+
+        let dynamicContent = this.createDynamicComponent(dynamicComponentType, modalInstance.instance.dynamicContentContainer);
+        dynamicContent.instance.input = dynamicComponentInput;
+        modalInstance.instance.dynamicContent = dynamicContent;
+        return modalInstance;
+    }
+
     //Creates a component dynamically (aka during runtime). If a view container is not specified, it will append the new component to the app root. 
     //To subscribe to an event from invoking component: componentRef.instance.clicked.subscribe((m) => console.log(m.name));
     private createDynamicComponent<T>(componentType: Type<T>, viewContainerRef?:ViewContainerRef): ComponentRef<any> {
diff --git a/catalog-ui/src/app/services/event-listener-service.ts b/catalog-ui/src/app/services/event-listener-service.ts
index 1c79623..96f9e17 100644
--- a/catalog-ui/src/app/services/event-listener-service.ts
+++ b/catalog-ui/src/app/services/event-listener-service.ts
@@ -48,7 +48,7 @@
 
             // Only insert the callback if the callback is different from existing callbacks.
             for (let i = 0; i < callbacks.length; i++) {
-                if (callbacks[i].toString() === callback.toString()) {
+                if (callbacks[i].callback.toString() === callback.toString()) {
                     return; // Do not add this callback.
                 }
             }
diff --git a/catalog-ui/src/app/utils/constants.ts b/catalog-ui/src/app/utils/constants.ts
index ffdf6fd..6ec6a77 100644
--- a/catalog-ui/src/app/utils/constants.ts
+++ b/catalog-ui/src/app/utils/constants.ts
@@ -167,6 +167,12 @@
     static ALERT = 'alert';
 }
 
+export class ServerErrors {
+    static ERROR_TITLE = 'Error';
+    static DEFAULT_ERROR = 'Error getting response from server';
+    static MESSAGE_ERROR = 'Wrong error format from server';
+}
+
 export class GraphColors {
     public static NOT_CERTIFIED_LINK = 'rgb(218,31,61)';
     public static VL_LINK = 'rgb(216,216,216)';
diff --git a/catalog-ui/src/app/view-models/onboard-vendor/onboard-vendor-view-model.ts b/catalog-ui/src/app/view-models/onboard-vendor/onboard-vendor-view-model.ts
index 37b9b9d..f77a29b 100644
--- a/catalog-ui/src/app/view-models/onboard-vendor/onboard-vendor-view-model.ts
+++ b/catalog-ui/src/app/view-models/onboard-vendor/onboard-vendor-view-model.ts
@@ -22,6 +22,7 @@
 import {IUserProperties} from "app/models";
 import {MenuItemGroup, MenuItem} from "app/utils";
 import {CacheService} from "app/services";
+declare var PunchOutRegistry;
 
 export class BreadcrumbsMenuItem {
     key:string;
@@ -48,7 +49,7 @@
     topNavRootMenu:MenuItemGroup;
     user:IUserProperties;
     version:string;
-    isLoading: boolean;
+    isLoading:boolean;
 }
 
 export class OnboardVendorViewModel {
@@ -66,10 +67,13 @@
 
         this.$scope.isLoading = true;
 
-        $.getScript("/onboarding/punch-outs_en.js", () => {
+        PunchOutRegistry.loadOnBoarding(()=> {
             this.$scope.isLoading = false;
         });
+        this.initScope();
 
+    }
+    private initScope = ():void => {
         this.$scope.vendorData = {
             breadcrumbs: {
                 selectedKeys: []
@@ -89,6 +93,7 @@
         this.$scope.topNavMenuModel = [];
 
         this.$scope.user = this.cacheService.get('user');
+
     }
 
     updateBreadcrumbsPath = (selectedKeys:Array<string>):ng.IPromise<boolean> => {
@@ -140,6 +145,7 @@
             let topNavRootMenu = topNavMenuModel[0];
             let onboardItem = topNavRootMenu.menuItems[topNavRootMenu.selectedIndex];
             let originalCallback = onboardItem.callback;
+            //noinspection TypeScriptValidateTypes
             onboardItem.callback = (...args) => {
                 let ret = this.updateBreadcrumbsPath([]);
                 return originalCallback && originalCallback.apply(undefined, args) || ret;
diff --git a/catalog-ui/src/app/view-models/onboard-vendor/onboard-vendor-view.html b/catalog-ui/src/app/view-models/onboard-vendor/onboard-vendor-view.html
index 56a3686..eec7c47 100644
--- a/catalog-ui/src/app/view-models/onboard-vendor/onboard-vendor-view.html
+++ b/catalog-ui/src/app/view-models/onboard-vendor/onboard-vendor-view.html
@@ -1,6 +1,6 @@
 <div class="sdc-catalog-container">
 
-    <loader ng-init="isLoading=true" data-display="isLoading"></loader>
+    <loader data-display="isLoading"></loader>
     <div class="w-sdc-main-container">
         <punch-out name="'onboarding/vendor'" data="vendorData"  user="user" on-event="onVendorEvent"></punch-out>
     </div>
diff --git a/catalog-ui/src/app/view-models/workspace/tabs/activity-log/activity-log.ts b/catalog-ui/src/app/view-models/workspace/tabs/activity-log/activity-log.ts
index f4ce1d8..5d22d65 100644
--- a/catalog-ui/src/app/view-models/workspace/tabs/activity-log/activity-log.ts
+++ b/catalog-ui/src/app/view-models/workspace/tabs/activity-log/activity-log.ts
@@ -54,7 +54,6 @@
         this.initScope();
         this.$scope.setValidState(true);
         this.initSortedTableScope();
-        this.$scope.updateSelectedMenuItem();
 
         // Set default sorting
         this.$scope.sortBy = 'logDate';
diff --git a/catalog-ui/src/app/view-models/workspace/tabs/attributes/attributes-view-model.ts b/catalog-ui/src/app/view-models/workspace/tabs/attributes/attributes-view-model.ts
index ce7296c..312a663 100644
--- a/catalog-ui/src/app/view-models/workspace/tabs/attributes/attributes-view-model.ts
+++ b/catalog-ui/src/app/view-models/workspace/tabs/attributes/attributes-view-model.ts
@@ -53,7 +53,6 @@
                 private ComponentServiceNg2: ComponentServiceNg2) {
 
         this.initComponentAttributes();
-        this.$scope.updateSelectedMenuItem();
     }
 
     private initComponentAttributes = () => {
diff --git a/catalog-ui/src/app/view-models/workspace/tabs/composition/composition-view-model.ts b/catalog-ui/src/app/view-models/workspace/tabs/composition/composition-view-model.ts
index 0e5a5fc..4b9dd6f 100644
--- a/catalog-ui/src/app/view-models/workspace/tabs/composition/composition-view-model.ts
+++ b/catalog-ui/src/app/view-models/workspace/tabs/composition/composition-view-model.ts
@@ -47,6 +47,7 @@
     onBackgroundClick():void;
     setSelectedInstance(componentInstance:ComponentInstance):void;
     printScreen():void;
+    isPNF():boolean;
 
     cacheComponentsInstancesFullData:Component;
 }
@@ -90,7 +91,6 @@
         this.$scope.setValidState(true);
         this.initScope();
         this.initGraphData();
-        this.$scope.updateSelectedMenuItem();
         this.registerGraphEvents(this.$scope);
     }
 
@@ -242,7 +242,10 @@
             this.$scope.setComponent(this.$scope.currentComponent);
             this.$scope.updateSelectedComponent();
         };
-        
+
+        this.$scope.isPNF = (): boolean => {
+            return this.$scope.selectedComponent.isResource() && (<Resource>this.$scope.selectedComponent).resourceType === ResourceType.PNF;
+        };
 
         this.eventListenerService.registerObserverCallback(EVENTS.ON_CHECKOUT, this.$scope.reload);
 
diff --git a/catalog-ui/src/app/view-models/workspace/tabs/composition/tabs/artifacts/artifacts-view-model.ts b/catalog-ui/src/app/view-models/workspace/tabs/composition/tabs/artifacts/artifacts-view-model.ts
index c4c63fa..f0c8b1d 100644
--- a/catalog-ui/src/app/view-models/workspace/tabs/composition/tabs/artifacts/artifacts-view-model.ts
+++ b/catalog-ui/src/app/view-models/workspace/tabs/composition/tabs/artifacts/artifacts-view-model.ts
@@ -249,7 +249,6 @@
 
         this.$scope.isLoading = false;
         this.$scope.artifactType = this.artifactsUtils.getArtifactTypeByState(this.$state.current.name);
-        this.loadArtifacts();
         this.$scope.getTitle = ():string => {
             return this.artifactsUtils.getTitle(this.$scope.artifactType, this.$scope.currentComponent);
         };
@@ -335,5 +334,7 @@
             this.eventListenerService.unRegisterObserver(GRAPH_EVENTS.ON_NODE_SELECTED, this.loadArtifacts);
             this.eventListenerService.unRegisterObserver(GRAPH_EVENTS.ON_GRAPH_BACKGROUND_CLICKED, this.loadArtifacts);
         });
+
+        this.loadArtifacts();
     }
 }
diff --git a/catalog-ui/src/app/view-models/workspace/tabs/deployment-artifacts/deployment-artifacts-view-model.ts b/catalog-ui/src/app/view-models/workspace/tabs/deployment-artifacts/deployment-artifacts-view-model.ts
index 6990ad7..86bc478 100644
--- a/catalog-ui/src/app/view-models/workspace/tabs/deployment-artifacts/deployment-artifacts-view-model.ts
+++ b/catalog-ui/src/app/view-models/workspace/tabs/deployment-artifacts/deployment-artifacts-view-model.ts
@@ -74,7 +74,6 @@
                 private ModalsHandler:ModalsHandler,
                 private ComponentServiceNg2: ComponentServiceNg2) {
         this.initScope();
-        this.$scope.updateSelectedMenuItem();
     }
 
     private initDescriptions = ():void => {
diff --git a/catalog-ui/src/app/view-models/workspace/tabs/deployment/deployment-view-model.ts b/catalog-ui/src/app/view-models/workspace/tabs/deployment/deployment-view-model.ts
index 76be6c1..feda7fe 100644
--- a/catalog-ui/src/app/view-models/workspace/tabs/deployment/deployment-view-model.ts
+++ b/catalog-ui/src/app/view-models/workspace/tabs/deployment/deployment-view-model.ts
@@ -86,7 +86,6 @@
         this.$scope.setValidState(true);
         this.initScope();
         this.initGraphData();
-        this.$scope.updateSelectedMenuItem();
     }
 
 
diff --git a/catalog-ui/src/app/view-models/workspace/tabs/distribution/distribution-view-model.ts b/catalog-ui/src/app/view-models/workspace/tabs/distribution/distribution-view-model.ts
index 1852b6a..663361c 100644
--- a/catalog-ui/src/app/view-models/workspace/tabs/distribution/distribution-view-model.ts
+++ b/catalog-ui/src/app/view-models/workspace/tabs/distribution/distribution-view-model.ts
@@ -48,7 +48,6 @@
                 private ModalsHandler:ModalsHandler) {
         this.initScope();
         this.$scope.setValidState(true);
-        this.$scope.updateSelectedMenuItem();
     }
 
     private initScope = ():void => {
diff --git a/catalog-ui/src/app/view-models/workspace/tabs/general/general-view-model.ts b/catalog-ui/src/app/view-models/workspace/tabs/general/general-view-model.ts
index 1dc326a..98539d6 100644
--- a/catalog-ui/src/app/view-models/workspace/tabs/general/general-view-model.ts
+++ b/catalog-ui/src/app/view-models/workspace/tabs/general/general-view-model.ts
@@ -118,7 +118,6 @@
         this.initScopeValidation();
         this.initScopeMethods();
         this.initScope();
-        this.$scope.updateSelectedMenuItem();
     }
 
 
diff --git a/catalog-ui/src/app/view-models/workspace/tabs/information-artifacts/information-artifacts-view-model.ts b/catalog-ui/src/app/view-models/workspace/tabs/information-artifacts/information-artifacts-view-model.ts
index ceaba3c..b2fd4d6 100644
--- a/catalog-ui/src/app/view-models/workspace/tabs/information-artifacts/information-artifacts-view-model.ts
+++ b/catalog-ui/src/app/view-models/workspace/tabs/information-artifacts/information-artifacts-view-model.ts
@@ -65,7 +65,6 @@
                 private ModalsHandler:ModalsHandler,
                 private ComponentServiceNg2: ComponentServiceNg2) {
         this.initInformationalArtifacts();
-        this.$scope.updateSelectedMenuItem();
     }
 
     private initInformationalArtifacts = ():void => {
diff --git a/catalog-ui/src/app/view-models/workspace/tabs/inputs/resource-input/resource-inputs-view-model.ts b/catalog-ui/src/app/view-models/workspace/tabs/inputs/resource-input/resource-inputs-view-model.ts
index 78865ac..2e871a5 100644
--- a/catalog-ui/src/app/view-models/workspace/tabs/inputs/resource-input/resource-inputs-view-model.ts
+++ b/catalog-ui/src/app/view-models/workspace/tabs/inputs/resource-input/resource-inputs-view-model.ts
@@ -45,7 +45,6 @@
 
     constructor(private $scope:IInputsViewModelScope, private $q:ng.IQService, private ModalsHandler:ModalsHandler) {
         this.initScope();
-        this.$scope.updateSelectedMenuItem();
     }
 
     private initScope = ():void => {
diff --git a/catalog-ui/src/app/view-models/workspace/tabs/inputs/service-input/service-inputs-view-model.ts b/catalog-ui/src/app/view-models/workspace/tabs/inputs/service-input/service-inputs-view-model.ts
index 013a002..00f3347 100644
--- a/catalog-ui/src/app/view-models/workspace/tabs/inputs/service-input/service-inputs-view-model.ts
+++ b/catalog-ui/src/app/view-models/workspace/tabs/inputs/service-input/service-inputs-view-model.ts
@@ -62,7 +62,6 @@
                 private ModalsHandler:ModalsHandler,
                 private DataTypesService:DataTypesService) {
         this.initScope();
-        this.$scope.updateSelectedMenuItem();
         this.$scope.isViewOnly = this.$scope.isViewMode();
     }
 
diff --git a/catalog-ui/src/app/view-models/workspace/tabs/management-workflow/management-workflow-view-model.ts b/catalog-ui/src/app/view-models/workspace/tabs/management-workflow/management-workflow-view-model.ts
index f8b29c4..e44ed12 100644
--- a/catalog-ui/src/app/view-models/workspace/tabs/management-workflow/management-workflow-view-model.ts
+++ b/catalog-ui/src/app/view-models/workspace/tabs/management-workflow/management-workflow-view-model.ts
@@ -18,130 +18,137 @@
  * ============LICENSE_END=========================================================
  */
 
-    'use strict';
-    import {ArtifactType} from "app/utils";
-    import {ArtifactGroupModel} from "app/models";
-    import {participant} from "app/view-models/workspace/tabs/network-call-flow/network-call-flow-view-model";
-    import {IWorkspaceViewModelScope} from "app/view-models/workspace/workspace-view-model";
-    import {ComponentGenericResponse} from "../../../../ng2/services/responses/component-generic-response";
-    import {ComponentServiceNg2} from "../../../../ng2/services/component-services/component.service";
+'use strict';
+import {ArtifactType} from "app/utils";
+import {ArtifactGroupModel} from "app/models";
+import {participant} from "app/view-models/workspace/tabs/network-call-flow/network-call-flow-view-model";
+import {IWorkspaceViewModelScope} from "app/view-models/workspace/workspace-view-model";
+import {ComponentGenericResponse} from "../../../../ng2/services/responses/component-generic-response";
+import {ComponentServiceNg2} from "../../../../ng2/services/component-services/component.service";
+declare var PunchOutRegistry;
 
-    export interface IManagementWorkflowViewModelScope extends IWorkspaceViewModelScope {
-        vendorModel:VendorModel;
+export interface IManagementWorkflowViewModelScope extends IWorkspaceViewModelScope {
+    vendorModel:VendorModel;
+    isLoading: boolean;
+}
+
+export class VendorModel {
+    artifacts:ArtifactGroupModel;
+    serviceID:string;
+    readonly:boolean;
+    sessionID:string;
+    requestID:string;
+    diagramType:string;
+    participants:Array<participant>;
+
+    constructor(artifacts:ArtifactGroupModel, serviceID:string, readonly:boolean, sessionID:string,
+                requestID:string, diagramType:string, participants:Array<participant>) {
+        this.artifacts = artifacts;
+        this.serviceID = serviceID;
+        this.readonly = readonly;
+        this.sessionID = sessionID;
+        this.requestID = requestID;
+        this.diagramType = diagramType;
+        this.participants = participants;
     }
+}
 
-    export class VendorModel {
-        artifacts: ArtifactGroupModel;
-        serviceID: string;
-        readonly: boolean;
-        sessionID: string;
-        requestID: string;
-        diagramType: string;
-        participants:Array<participant>;
+export class ManagementWorkflowViewModel {
 
-        constructor(artifacts: ArtifactGroupModel, serviceID:string, readonly:boolean, sessionID:string,
-                    requestID:string, diagramType:string, participants:Array<participant>){
-            this.artifacts = artifacts;
-            this.serviceID = serviceID;
-            this.readonly = readonly;
-            this.sessionID = sessionID;
-            this.requestID = requestID;
-            this.diagramType = diagramType;
-            this.participants = participants;
-        }
-    }
+    static '$inject' = [
+        '$scope',
+        'uuid4',
+        'ComponentServiceNg2'
+    ];
 
-    export class ManagementWorkflowViewModel {
+    constructor(private $scope:IManagementWorkflowViewModelScope,
+                private uuid4:any,
+                private ComponentServiceNg2:ComponentServiceNg2) {
 
-        static '$inject' = [
-            '$scope',
-            'uuid4',
-            'ComponentServiceNg2'
-        ];
+        this.$scope.isLoading = true;
 
-        constructor(private $scope:IManagementWorkflowViewModelScope,
-                    private uuid4:any,
-                    private ComponentServiceNg2: ComponentServiceNg2) {
-
+        PunchOutRegistry.loadOnBoarding(()=> {
+            this.$scope.isLoading = false;
             this.initInformationalArtifacts();
-            this.$scope.updateSelectedMenuItem();
-        }
+        });
+    }
 
 
-        private initInformationalArtifacts = ():void => {
-            if(!this.$scope.component.artifacts) {
-                this.$scope.isLoading = true;
-                this.ComponentServiceNg2.getComponentInformationalArtifacts(this.$scope.component).subscribe((response:ComponentGenericResponse) => {
-                    this.$scope.component.artifacts = response.artifacts;
-                    this.initScope();
-                    this.$scope.isLoading = false;
-                });
-            } else {
+    private initInformationalArtifacts = ():void => {
+        if (!this.$scope.component.artifacts) {
+            this.$scope.isLoading = true;
+            this.ComponentServiceNg2.getComponentInformationalArtifacts(this.$scope.component).subscribe((response:ComponentGenericResponse) => {
+                this.$scope.component.artifacts = response.artifacts;
                 this.initScope();
-            }
-        }
-
-        private static getParticipants():Array<participant> {
-            return [
-                {
-                    "id": "1",
-                    "name": "Customer"},
-                {
-                    "id": "2",
-                    "name": "CCD"
-                },
-                {
-                    "id": "3",
-                    "name": "Infrastructure"
-                },
-                {
-                    "id": "4",
-                    "name": "MSO"
-                },
-                {
-                    "id": "5",
-                    "name": "SDN-C"
-                },
-                {
-                    "id": "6",
-                    "name": "A&AI"
-                },
-                {
-                    "id": "7",
-                    "name": "APP-C"
-                },
-                {
-                    "id": "8",
-                    "name": "Cloud"
-                },
-                {
-                    "id": "9",
-                    "name": "DCAE"
-                },
-                {
-                    "id": "10",
-                    "name": "ALTS"
-                },
-                {
-                    "id": "11",
-                    "name": "VF"
-                }
-            ]
-        }
-
-
-        private initScope():void {
-            this.$scope.vendorModel = new VendorModel(
-                this.$scope.component.artifacts.filteredByType(ArtifactType.THIRD_PARTY_RESERVED_TYPES.WORKFLOW),
-                this.$scope.component.uniqueId,
-                this.$scope.isViewMode(),
-                this.$scope.user.userId,
-                this.uuid4.generate(),
-                ArtifactType.THIRD_PARTY_RESERVED_TYPES.WORKFLOW,
-                ManagementWorkflowViewModel.getParticipants()
-            );
-
-            this.$scope.thirdParty = true;
-            this.$scope.setValidState(true);
+                this.$scope.isLoading = false;
+            });
+        } else {
+            this.initScope();
         }
     }
+
+    private static getParticipants():Array<participant> {
+        return [
+            {
+                "id": "1",
+                "name": "Customer"
+            },
+            {
+                "id": "2",
+                "name": "CCD"
+            },
+            {
+                "id": "3",
+                "name": "Infrastructure"
+            },
+            {
+                "id": "4",
+                "name": "MSO"
+            },
+            {
+                "id": "5",
+                "name": "SDN-C"
+            },
+            {
+                "id": "6",
+                "name": "A&AI"
+            },
+            {
+                "id": "7",
+                "name": "APP-C"
+            },
+            {
+                "id": "8",
+                "name": "Cloud"
+            },
+            {
+                "id": "9",
+                "name": "DCAE"
+            },
+            {
+                "id": "10",
+                "name": "ALTS"
+            },
+            {
+                "id": "11",
+                "name": "VF"
+            }
+        ]
+    }
+
+
+    private initScope():void {
+        this.$scope.vendorModel = new VendorModel(
+            this.$scope.component.artifacts.filteredByType(ArtifactType.THIRD_PARTY_RESERVED_TYPES.WORKFLOW),
+            this.$scope.component.uniqueId,
+            this.$scope.isViewMode(),
+            this.$scope.user.userId,
+            this.uuid4.generate(),
+            ArtifactType.THIRD_PARTY_RESERVED_TYPES.WORKFLOW,
+            ManagementWorkflowViewModel.getParticipants()
+        );
+
+        this.$scope.thirdParty = true;
+        this.$scope.setValidState(true);
+    }
+}
diff --git a/catalog-ui/src/app/view-models/workspace/tabs/management-workflow/management-workflow-view.html b/catalog-ui/src/app/view-models/workspace/tabs/management-workflow/management-workflow-view.html
index bd196da..df570cc 100644
--- a/catalog-ui/src/app/view-models/workspace/tabs/management-workflow/management-workflow-view.html
+++ b/catalog-ui/src/app/view-models/workspace/tabs/management-workflow/management-workflow-view.html
@@ -1,3 +1,4 @@
-<div class="workspace-management-workflow">
-    <punch-out name="'sequence-diagram'" data="vendorModel"  user="user" on-event="onVendorEvent"></punch-out>
+<loader data-display="isLoading"></loader>
+<div class="workspace-management-workflow" ng-if="vendorModel">
+    <punch-out  name="'sequence-diagram'" data="vendorModel"  user="user" on-event="onVendorEvent"></punch-out>
 </div>
diff --git a/catalog-ui/src/app/view-models/workspace/tabs/network-call-flow/network-call-flow-view-model.ts b/catalog-ui/src/app/view-models/workspace/tabs/network-call-flow/network-call-flow-view-model.ts
index 6c7666d..488e4c7 100644
--- a/catalog-ui/src/app/view-models/workspace/tabs/network-call-flow/network-call-flow-view-model.ts
+++ b/catalog-ui/src/app/view-models/workspace/tabs/network-call-flow/network-call-flow-view-model.ts
@@ -25,9 +25,11 @@
 import {ComponentInstance} from "app/models";
 import {ComponentGenericResponse} from "../../../../ng2/services/responses/component-generic-response";
 import {ComponentServiceNg2} from "../../../../ng2/services/component-services/component.service";
+declare var PunchOutRegistry;
 
 export interface INetworkCallFlowViewModelScope extends IWorkspaceViewModelScope {
     vendorMessageModel:VendorModel;
+    isLoading: boolean;
 }
 
 export class participant {
@@ -53,8 +55,12 @@
                 private uuid4:any,
                 private ComponentServiceNg2: ComponentServiceNg2) {
 
-        this.initComponentInstancesAndInformationalArtifacts();
-        this.$scope.updateSelectedMenuItem();
+        this.$scope.isLoading = true;
+
+        PunchOutRegistry.loadOnBoarding(()=> {
+            this.$scope.isLoading = false;
+            this.initComponentInstancesAndInformationalArtifacts();
+        });
     }
 
     private getVFParticipantsFromInstances(instances:Array<ComponentInstance>):Array<participant> {
diff --git a/catalog-ui/src/app/view-models/workspace/tabs/network-call-flow/network-call-flow-view.html b/catalog-ui/src/app/view-models/workspace/tabs/network-call-flow/network-call-flow-view.html
index 6ce3e8e..bc2d064 100644
--- a/catalog-ui/src/app/view-models/workspace/tabs/network-call-flow/network-call-flow-view.html
+++ b/catalog-ui/src/app/view-models/workspace/tabs/network-call-flow/network-call-flow-view.html
@@ -1,3 +1,4 @@
-<div class="workspace-network-call-flow">
+<loader data-display="isLoading"></loader>
+<div ng-if="vendorMessageModel" class="workspace-network-call-flow">
     <punch-out name="'sequence-diagram'" data="vendorMessageModel"  user="user" on-event="onVendorEvent"></punch-out>
 </div>
diff --git a/catalog-ui/src/app/view-models/workspace/tabs/properties/properties-view-model.ts b/catalog-ui/src/app/view-models/workspace/tabs/properties/properties-view-model.ts
index c9f2d07..3c9c7e9 100644
--- a/catalog-ui/src/app/view-models/workspace/tabs/properties/properties-view-model.ts
+++ b/catalog-ui/src/app/view-models/workspace/tabs/properties/properties-view-model.ts
@@ -52,7 +52,6 @@
                 private ModalsHandler:ModalsHandler,
                 private ComponentServiceNg2:ComponentServiceNg2) {
         this.initComponentProperties();
-        this.$scope.updateSelectedMenuItem();
     }
 
     private initComponentProperties = ():void => {
diff --git a/catalog-ui/src/app/view-models/workspace/tabs/req-and-capabilities/req-and-capabilities-view-model.ts b/catalog-ui/src/app/view-models/workspace/tabs/req-and-capabilities/req-and-capabilities-view-model.ts
index c02900a..b6cbf65 100644
--- a/catalog-ui/src/app/view-models/workspace/tabs/req-and-capabilities/req-and-capabilities-view-model.ts
+++ b/catalog-ui/src/app/view-models/workspace/tabs/req-and-capabilities/req-and-capabilities-view-model.ts
@@ -67,7 +67,6 @@
                 private ComponentServiceNg2: ComponentServiceNg2) {
 
         this.initCapabilitiesAndRequirements();
-        this.$scope.updateSelectedMenuItem();
     }
 
     private initCapabilitiesAndRequirements = (): void => {
diff --git a/catalog-ui/src/app/view-models/workspace/tabs/tosca-artifacts/tosca-artifacts-view-model.ts b/catalog-ui/src/app/view-models/workspace/tabs/tosca-artifacts/tosca-artifacts-view-model.ts
index 5f724c4..77b5ab7 100644
--- a/catalog-ui/src/app/view-models/workspace/tabs/tosca-artifacts/tosca-artifacts-view-model.ts
+++ b/catalog-ui/src/app/view-models/workspace/tabs/tosca-artifacts/tosca-artifacts-view-model.ts
@@ -50,7 +50,6 @@
                 private $filter:ng.IFilterService,
                 private ComponentServiceNg2:ComponentServiceNg2) {
         this.initToscaArtifacts();
-        this.$scope.updateSelectedMenuItem();
     }
 
     private initToscaArtifacts = (): void => {
diff --git a/catalog-ui/src/app/view-models/workspace/workspace-view-model.ts b/catalog-ui/src/app/view-models/workspace/workspace-view-model.ts
index f529e79..97a5840 100644
--- a/catalog-ui/src/app/view-models/workspace/workspace-view-model.ts
+++ b/catalog-ui/src/app/view-models/workspace/workspace-view-model.ts
@@ -87,7 +87,7 @@
     getLatestVersion():void;
     getStatus():string;
     showLifecycleIcon():boolean;
-    updateSelectedMenuItem():void;
+    updateSelectedMenuItem(state:string):void;
     uploadFileChangedInGeneralTab():void;
     updateMenuComponentName(ComponentName:string):void;
     getTabTitle():string;
@@ -136,6 +136,7 @@
 
         this.initScope();
         this.initAfterScope();
+        this.$scope.updateSelectedMenuItem(this.$state.current.name);
     }
 
     private role:string;
@@ -216,6 +217,7 @@
         this.$scope.onMenuItemPressed = (state:string):ng.IPromise<boolean> => {
             let deferred = this.$q.defer();
             let goToState = ():void => {
+                this.$scope.updateSelectedMenuItem(state);
                 this.$state.go(state, {
                     id: this.$scope.component.uniqueId,
                     type: this.$scope.component.componentType.toLowerCase(),
@@ -613,9 +615,9 @@
             return result;
         };
 
-        this.$scope.updateSelectedMenuItem = ():void => {
+        this.$scope.updateSelectedMenuItem = (state:string):void => {
             let selectedItem:MenuItem = _.find(this.$scope.leftBarTabs.menuItems, (item:MenuItem) => {
-                return item.state === this.$state.current.name;
+                return item.state === state;
             });
             this.$scope.leftBarTabs.selectedIndex = selectedItem ? this.$scope.leftBarTabs.menuItems.indexOf(selectedItem) : 0;
         };
diff --git a/catalog-ui/src/assets/styles/app.less b/catalog-ui/src/assets/styles/app.less
index fde4cc8..c19ace5 100644
--- a/catalog-ui/src/assets/styles/app.less
+++ b/catalog-ui/src/assets/styles/app.less
@@ -8,6 +8,7 @@
 @import 'mixins.less';
 @import 'mixins_old.less';
 @import 'global.less';
+@import '../../../node_modules/sdc-ui/css/style.css';
 
 @import 'sprite-old.less';
 @import 'sprite.less';
@@ -33,7 +34,6 @@
 @import 'tooltips.less';
 @import 'welcome-sprite.less';
 @import 'welcome-style.less';
-@import 'sdc-ui.css';
 @import 'notification-template.less';
 
 // Less insides specific files.
diff --git a/catalog-ui/src/assets/styles/sdc-ui.css b/catalog-ui/src/assets/styles/sdc-ui.css
deleted file mode 100644
index ad96e77..0000000
--- a/catalog-ui/src/assets/styles/sdc-ui.css
+++ /dev/null
@@ -1,361 +0,0 @@
-@charset "UTF-8";
-/* Colors */
-.sdc-bc-blue {
-  background-color: #009fdb; }
-
-.sdc-bc-dark-blue {
-  background-color: #0568ae; }
-
-.sdc-bc-light-blue {
-  background-color: #71c5e8; }
-
-.sdc-bc-green {
-  background-color: #4ca90c; }
-
-.sdc-bc-dark-green {
-  background-color: #007a3e; }
-
-.sdc-bc-light-green {
-  background-color: #b5bd00; }
-
-.sdc-bc-orange {
-  background-color: #ea7400; }
-
-.sdc-bc-yellow {
-  background-color: #ffb81c; }
-
-.sdc-bc-dark-purple {
-  background-color: #702f8a; }
-
-.sdc-bc-purple {
-  background-color: #9063cd; }
-
-.sdc-bc-light-purple {
-  background-color: #caa2dd; }
-
-.sdc-bc-black {
-  background-color: #000000; }
-
-.sdc-bc-dark-gray {
-  background-color: #5a5a5a; }
-
-.sdc-bc-gray {
-  background-color: #959595; }
-
-.sdc-bc-light-gray {
-  background-color: #d2d2d2; }
-
-.sdc-bc-white {
-  background-color: #ffffff; }
-
-/* Prefix */
-/* Value Prefix*/
-/* Box sizing */
-/* Borders & Shadows */
-/* Opacity */
-/* Ellipsis */
-/* Vertical placement of multuple lines of text */
-/* transform-rotate */
-/* transform-translate */
-/* transform-scale */
-/**/
-/**/
-/*body {*/
-  /*-webkit-touch-callout: none;*/
-  /*-webkit-user-select: none;*/
-  /*-moz-user-select: none;*/
-  /*-ms-user-select: none;*/
-  /*user-select: none; }*/
-
-html {
-  font-size: 100%;
-  height: 100%; }
-
-body {
-  /* scrollbar styling for Internet Explorer */
-  scrollbar-face-color: #191919;
-  scrollbar-track-color: #191919;
-  height: 100%; }
-
-/* scrollbar styling for Google Chrome | Safari | Opera */
-::-webkit-scrollbar {
-  width: 8px;
-  height: 8px; }
-
-::-webkit-scrollbar-track {
-  background-color: transparent;
-  border-radius: 10px; }
-
-::-webkit-scrollbar-thumb {
-  border-radius: 10px;
-  background-color: #d2d2d2;
-  border-right: 2px solid #ffffff; }
-
-/* Mozilla Firefox currently doesn't support scrollbar styling */
-ul {
-  list-style: none; }
-
-h1, h2, h3, h4, h5, h6, ul {
-  margin: 0;
-  padding: 0; }
-
-.disabled {
-  opacity: 0.7 !important; }
-
-fieldset {
-  border: none; }
-
-fieldset label {
-  display: inline-block; }
-
-.nav-tabs > li > a:focus,
-.btn:focus,
-.btn:active:focus,
-.btn.active:focus {
-  outline: none; }
-
-/* Fonts */
-.text-lowercase {
-  text-transform: lowercase; }
-
-.text-uppercase, .heading-3-light, .heading-3, .heading-3-medium {
-  text-transform: uppercase; }
-
-.text-capitalize {
-  text-transform: capitalize; }
-
-.heading-1 {
-  font-weight: 300;
-  font-size: 36px; }
-
-.heading-2 {
-  font-weight: 300;
-  font-size: 24px; }
-
-.heading-3-light {
-  font-weight: 300;
-  font-size: 20px; }
-
-.heading-3 {
-  font-weight: 400;
-  font-size: 20px; }
-
-.heading-3-medium {
-  font-weight: 600;
-  font-size: 20px; }
-
-.heading-4 {
-  font-weight: 400;
-  font-size: 18px; }
-
-.heading-4-medium {
-  font-weight: 600;
-  font-size: 18px; }
-
-.heading-5 {
-  font-weight: 400;
-  font-size: 16px; }
-
-.heading-5-medium, .catalog-tile .catalog-tile-top .catalog-tile-item-name, .sdc-tile-catalog .sdc-tile-content .sdc-tile-content-info .sdc-tile-content-info-item-name {
-  font-weight: 400;
-  line-height: 16px;
-  font-size: 14px; }
-
-.body-1 {
-  font-weight: 400;
-  font-size: 14px; }
-
-.body-1-medium {
-  font-weight: 600;
-  font-size: 14px; }
-
-.body-1-light {
-  font-weight: 300;
-  font-size: 14px; }
-
-.body-2, .catalog-tile .catalog-tile-top .catalog-tile-entity-details .catalog-tile-version-info .catalog-tile-item-version, .catalog-tile .catalog-tile-content .catalog-tile-locking-user-name, .sdc-tile-catalog .sdc-tile-content .sdc-tile-content-info .sdc-tile-content-info-version-info .sdc-tile-content-info-version-info-text, .sdc-tile-catalog .sdc-tile-footer .sdc-tile-footer-text {
-  font-weight: 400;
-  font-size: 12px; }
-
-.body-2-medium, .catalog-tile .catalog-tile-content {
-  font-weight: 600;
-  font-size: 13px; }
-
-.body-3 {
-  font-weight: 400;
-  font-size: 12px; }
-
-.body-3-medium, .catalog-tile .catalog-tile-top .catalog-tile-entity-details .catalog-tile-vendor-name, .catalog-tile.vendor-type .catalog-tile-top .catalog-tile-vsp-count, .sdc-tile-catalog .sdc-tile-content .sdc-tile-content-info .sdc-tile-content-info-vendor-name {
-  font-weight: 600;
-  font-size: 12px; }
-
-.body-3-light {
-  font-weight: 300;
-  font-size: 12px; }
-
-.circle-icon-text {
-  font-weight: 600;
-  font-size: 14px; }
-
-.sdc-icon {
-  display: inline-block;
-  text-rendering: auto;
-  -webkit-font-smoothing: antialiased;
-  -moz-osx-font-smoothing: grayscale;
-  width: 16px;
-  height: 16px; }
-
-.sdc-icon-locked {
-  background-image: url("data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' width='11' height='15' viewBox='0 0 11 15' id='locked_icon'>  <metadata><?xpacket begin='﻿' id='W5M0MpCehiHzreSzNTczkc9d'?><x:xmpmeta xmlns:x='adobe:ns:meta/' x:xmptk='Adobe XMP Core 5.6-c138 79.159824, 2016/09/14-01:09:01        '>   <rdf:RDF xmlns:rdf='http://www.w3.org/1999/02/22-rdf-syntax-ns#'>      <rdf:Description rdf:about=''/>   </rdf:RDF></x:xmpmeta><?xpacket end='w'?></metadata><defs>    <style>      .cls-1 {        fill: #959595;        fill-rule: evenodd;      }    </style>  </defs>  <path id='Shape_77_copy_10' data-name='Shape 77 copy 10' class='cls-1' d='M445,359a16.71,16.71,0,0,0-2.1-.009c-1.945.045-3.195,0.049-3.9,0.009v-5a1.743,1.743,0,0,1,2-2h1a1.743,1.743,0,0,1,2,2v5c0.474,0.063.343-.073,1,0,0.266,0.029,0,.279,0,0v-5a2.726,2.726,0,0,0-3-3h-1.142c-1.72-.125-2.715,1.562-2.858,3,0.088,0.009,0,7.338,0,5h0a1.891,1.891,0,0,0-2,1.689v3.461A1.823,1.823,0,0,0,437.775,366h7.448A1.823,1.823,0,0,0,447,364.15v-3.461A2.018,2.018,0,0,0,445,359Z' transform='translate(-436 -351)'/></svg>");
-  background-repeat: no-repeat; }
-
-.sdc-icon-plus {
-  background-image: url("data:image/svg+xml;utf8,<?xml version='1.0' encoding='utf-8'?><!-- Generator: Adobe Illustrator 21.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0)  --><svg version='1.1' id='plus_icon' xmlns='http://www.w3.org/2000/svg' xmlns:xlink='http://www.w3.org/1999/xlink' x='0px' y='0px' viewBox='0 0 19 19' style='enable-background:new 0 0 19 19;' xml:space='preserve'><g><rect y='8' width='19' height='3'/><path id='Rectangle_2139_copy' d='M8,19V0h3v19H8z'/></g></svg>");
-  background-repeat: no-repeat; }
-
-.sdc-icon-unlocked {
-  background-image: url("data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' width='11' height='18' viewBox='0 0 11 18' id='unlocked_icon'>  <metadata><?xpacket begin='﻿' id='W5M0MpCehiHzreSzNTczkc9d'?><x:xmpmeta xmlns:x='adobe:ns:meta/' x:xmptk='Adobe XMP Core 5.6-c138 79.159824, 2016/09/14-01:09:01        '>   <rdf:RDF xmlns:rdf='http://www.w3.org/1999/02/22-rdf-syntax-ns#'>      <rdf:Description rdf:about=''/>   </rdf:RDF></x:xmpmeta><?xpacket end='w'?></metadata><defs>    <style>      .cls-1 {        fill: #959595;        fill-rule: evenodd;      }    </style>  </defs>  <path id='Shape_77_copy_16' data-name='Shape 77 copy 16' class='cls-1' d='M663,358a16.723,16.723,0,0,0-2.1-.009c-1.944.045-3.194,0.049-3.9,0.009v-7a1.743,1.743,0,0,1,2-2h1a1.743,1.743,0,0,1,2,2v2c0.474,0.064.343-.073,1,0,0.266,0.029,0,.279,0,0v-2a2.726,2.726,0,0,0-3-3h-1.142c-1.72-.125-2.715,1.562-2.858,3,0.088,0.009,0,9.338,0,7h0a1.891,1.891,0,0,0-2,1.689v4.461a1.823,1.823,0,0,0,1.775,1.85h7.448A1.823,1.823,0,0,0,665,364.15v-4.461A2.018,2.018,0,0,0,663,358Zm1.05,6.15a0.827,0.827,0,0,1-.8.836H655.8a0.827,0.827,0,0,1-.8-0.836l0-4.15a1.164,1.164,0,0,1,.8-1.147h7.448A1.129,1.129,0,0,1,664,360Z' transform='translate(-654 -348)'/></svg>");
-  background-repeat: no-repeat; }
-
-.sdc-icon-vendor {
-  background-image: url("data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 53 47'  id='vendor_icon'><title>vendor</title><g id='Layer_2' data-name='Layer 2'><g id='vlm_icon' data-name='vlm icon'><path d='M49,7,38.5,7V5.92A5.92,5.92,0,0,0,32.58,0H20.42A5.92,5.92,0,0,0,14.5,5.92V7.15L4,7.2a3.8,3.8,0,0,0-4,3.5V43.5C0,45.4,2,47,4.2,47L49,46.8a3.8,3.8,0,0,0,4-3.5V10.5A3.8,3.8,0,0,0,49,7ZM16.5,5.92A3.92,3.92,0,0,1,20.42,2H32.58A3.92,3.92,0,0,1,36.5,5.92V7.06l-20,.09ZM2,10.8A1.9,1.9,0,0,1,4,9l45-.2a1.9,1.9,0,0,1,2,1.8v8.87L32.94,24.18a6.49,6.49,0,0,0-12.89,0L2,19.51V10.8ZM31,25a4.5,4.5,0,1,1-4.5-4.5A4.5,4.5,0,0,1,31,25ZM49,45,4,45.2A1.9,1.9,0,0,1,2,43.4V21.57l18.13,4.73a6.5,6.5,0,0,0,12.74,0L51,21.53V43.21A1.9,1.9,0,0,1,49,45Z'/></g></g></svg>");
-  background-repeat: no-repeat; }
-
-.sdc-icon-vlm {
-  background-image: url("data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 45 53'><title>vlm_new_icon</title><g id='Layer_2' data-name='Layer 2'><g id='vlm_icon' data-name='vlm icon'><path d='M41,2a2,2,0,0,1,2,2l.19,45a2,2,0,0,1-2,2H4a2,2,0,0,1-2-2L1.81,4a2,2,0,0,1,2-2H41m-.15-2H4A4.2,4.2,0,0,0,0,4.24L.19,49a4,4,0,0,0,4,4H41a4,4,0,0,0,4-4L44.81,4a4,4,0,0,0-4-4Z'/><rect x='14' y='11' width='17' height='2'/><rect x='14' y='18' width='10' height='2'/><polygon points='20.56 38.85 13.87 33.14 15.16 31.62 20.39 36.08 29.08 26.63 30.55 27.98 20.56 38.85'/></g></g></svg>");
-  background-repeat: no-repeat; }
-
-.sdc-icon-vsp {
-  background-image: url("data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 59.5 40' id='vsp_icon'><title>vsp_new_icon</title><g id='Layer_2' data-name='Layer 2'><g id='vlm_icon' data-name='vlm icon'><path d='M58.28,30.74c-1.49-1.82-3-2.7-4.67-2.74a8.5,8.5,0,0,0-16.22-2.44,6.93,6.93,0,0,0-4.06.66A7.23,7.23,0,0,0,36.42,40H53.5a6,6,0,0,0,6-6A5.18,5.18,0,0,0,58.28,30.74ZM53.5,38H36.42a5.25,5.25,0,0,1-5.21-5.91,5.32,5.32,0,0,1,3-4.06,5,5,0,0,1,2.21-.53,5.25,5.25,0,0,1,1.35.18l.92.24L39,27A6.5,6.5,0,0,1,51.67,29v1.3l1.17-.2c1-.17,2.17-.17,3.91,2a3.18,3.18,0,0,1,.76,2A4,4,0,0,1,53.5,38Z'/><path d='M49,0,4,.17A3.79,3.79,0,0,0,0,3.69V7.94H0v2H0V36.31C0,38.35,2,40,4.25,40l20.84-.08a1,1,0,0,0,0-1.92L4,38.08a1.89,1.89,0,0,1-2-1.76V10H51v7a1,1,0,0,0,2,0V3.53A3.79,3.79,0,0,0,49,0ZM2,8V3.76A1.89,1.89,0,0,1,4,2l45-.16a1.89,1.89,0,0,1,2,1.76V8Z'/></g></g></svg>");
-  background-repeat: no-repeat; }
-
-.svg-icon.purple {
-  fill: #9063cd; }
-
-.svg-icon.purple-hover {
-  fill: #9063cd; }
-  .svg-icon.purple-hover:hover {
-    fill: #caa2dd; }
-
-.svg-icon.blue {
-  fill: #009fdb; }
-
-.svg-icon.blue-hover {
-  fill: #009fdb; }
-  .svg-icon.blue-hover:hover {
-    fill: #71c5e8; }
-
-.svg-icon.gray {
-  fill: #959595; }
-
-.svg-icon.gray-hover {
-  fill: #000000; }
-  .svg-icon.gray-hover:hover {
-    fill: #d2d2d2; }
-
-.svg-icon.black {
-  fill: #000000; }
-
-.svg-icon.black-hover {
-  fill: #000000; }
-  .svg-icon.black-hover:hover {
-    fill: #d2d2d2; }
-
-.sdc-tile, .sdc-tile-catalog {
-  box-sizing: border-box;
-  background-color: #ffffff;
-  display: flex;
-  flex-direction: column;
-  padding: 10px;
-  cursor: pointer;
-  border: 1px solid #eaeaea;
-  -webkit-box-shadow: 0.5px 0.8px 4px 0 rgba(24, 24, 25, 0.05);
-  -moz-box-shadow: 0.5px 0.8px 4px 0 rgba(24, 24, 25, 0.05);
-  box-shadow: 0.5px 0.8px 4px 0 rgba(24, 24, 25, 0.05); }
-  .sdc-tile:active, .sdc-tile-catalog:active {
-    border: 1px solid #71c5e8; }
-  .sdc-tile:hover, .sdc-tile-catalog:hover {
-    box-shadow: 0.3px 5px 12.8px 1.3px rgba(24, 24, 25, 0.15);
-    border: 1px solid #d2d2d2; }
-  .sdc-tile .sdc-tile-header, .sdc-tile-catalog .sdc-tile-header {
-    position: relative;
-    flex-shrink: 0;
-    display: flex;
-    align-items: flex-start;
-    flex-direction: column; }
-  .sdc-tile .sdc-tile-content, .sdc-tile-catalog .sdc-tile-content {
-    position: relative;
-    flex: 1;
-    display: flex;
-    align-items: flex-start;
-    flex-direction: column;
-    overflow: auto;
-    justify-content: space-between; }
-  .sdc-tile .sdc-tile-footer, .sdc-tile-catalog .sdc-tile-footer {
-    position: relative;
-    flex-shrink: 0;
-    display: flex;
-    align-items: flex-start;
-    flex-direction: column; }
-
-.sdc-tile-catalog {
-  width: 204px;
-  height: 200px; }
-  .sdc-tile-catalog .sdc-tile-header {
-    line-height: 16px; }
-    .sdc-tile-catalog .sdc-tile-header .sdc-tile-header-type {
-      font-size: 14px;
-      text-transform: uppercase; }
-      .sdc-tile-catalog .sdc-tile-header .sdc-tile-header-type.purple {
-        color: #9063cd; }
-      .sdc-tile-catalog .sdc-tile-header .sdc-tile-header-type.blue {
-        color: #009fdb; }
-  .sdc-tile-catalog .sdc-tile-content .sdc-tile-content-icon {
-    align-items: center;
-    display: flex;
-    flex-direction: column;
-    width: 100%;
-    padding-top: 25px; }
-    .sdc-tile-catalog .sdc-tile-content .sdc-tile-content-icon svg {
-      width: 60px;
-      height: 40px; }
-  .sdc-tile-catalog .sdc-tile-content .sdc-tile-content-info {
-    padding-bottom: 4px;
-    width: 180px;
-    overflow: hidden;
-    text-overflow: ellipsis;
-    width: auto;
-    white-space: nowrap;
-    display: inline-block;
-    max-width: 178px; }
-    .sdc-tile-catalog .sdc-tile-content .sdc-tile-content-info .sdc-tile-content-info-vendor-name {
-      color: #959595;
-      line-height: 12px; }
-    .sdc-tile-catalog .sdc-tile-content .sdc-tile-content-info .sdc-tile-content-info-item-name {
-      color: #191919; }
-    .sdc-tile-catalog .sdc-tile-content .sdc-tile-content-info .sdc-tile-content-info-version-info {
-      display: flex;
-      justify-content: space-between; }
-  .sdc-tile-catalog .sdc-tile-footer {
-    display: flex;
-    flex-direction: row;
-    border-top: 1px solid #eaeaea;
-    padding: 0;
-    width: 180px;
-    height: 20px; }
-    .sdc-tile-catalog .sdc-tile-footer .sdc-tile-footer-text {
-      flex: 1;
-      padding-top: 5px;
-      overflow: hidden;
-      text-overflow: ellipsis;
-      width: auto;
-      white-space: nowrap;
-      display: inline-block;
-      max-width: 164px; }
-    .sdc-tile-catalog .sdc-tile-footer .sdc-tile-footer-icon {
-      flex-shrink: 1;
-      overflow: hidden;
-      padding-top: 5px; }
-      .sdc-tile-catalog .sdc-tile-footer .sdc-tile-footer-icon svg {
-        width: 16px;
-        height: 20px; }
diff --git a/catalog-ui/src/index.html b/catalog-ui/src/index.html
index 3a66d4d..044eb37 100644
--- a/catalog-ui/src/index.html
+++ b/catalog-ui/src/index.html
@@ -19,7 +19,7 @@
 <script src="/sdc1/scripts/inline.bundle.js"></script>
 <script src="/sdc1/scripts/polyfills.bundle.js"></script>
 <script src="/sdc1/scripts/vendor.bundle.js"></script>
-<script src="/dcae/dcae-bundle.js" async></script>
+<script src="/dcae/dcae-bundle.js"></script>
 <script id="main-bundle" src="/sdc1/scripts/main.bundle.js"></script>
 <script src="/sdc1/scripts/styles.bundle.js"></script>
 
diff --git a/catalog-ui/src/third-party/PunchOutRegistry.js b/catalog-ui/src/third-party/PunchOutRegistry.js
index db8e687..506a785 100644
--- a/catalog-ui/src/third-party/PunchOutRegistry.js
+++ b/catalog-ui/src/third-party/PunchOutRegistry.js
@@ -18,7 +18,9 @@
  * ============LICENSE_END=========================================================
  */
 
-(function(window) {
+
+
+(function (window) {
     "use strict";
 
     if (window.PunchOutRegistry) {
@@ -29,9 +31,20 @@
     var factoryPromises = new Map();
     var instancePromises = new Map();
 
+    function loadOnBoarding(callback) {
+
+        if (factoryPromises.has("onboarding/vendor") && !queuedFactoryRequests.has("onboarding/vendor")) {
+            callback();
+        }
+        else {
+            console.log("Load OnBoarding");
+            $.getScript("/onboarding/punch-outs_en.js").then(callback);
+        }
+    }
+
     function registerFactory(name, factory) {
         if (factoryPromises.has(name) && !queuedFactoryRequests.has(name)) {
-            console.error("PunchOut \"" + name + "\" has been already registered");
+            // console.error("PunchOut \"" + name + "\" has been already registered");
             return;
         }
         if (queuedFactoryRequests.has(name)) {
@@ -58,7 +71,7 @@
         var factoryPromise;
         var instancePromise = instancePromises.get(element);
         if (!instancePromise) {
-            instancePromise = getFactoryPromise(name).then(function(factory) {
+            instancePromise = getFactoryPromise(name).then(function (factory) {
                 return factory();
             });
             instancePromises.set(element, instancePromise);
@@ -69,7 +82,8 @@
     function renderPunchOut(params, element) {
         var name = params.name;
         var options = params.options || {};
-        var onEvent = params.onEvent || function () {};
+        var onEvent = params.onEvent || function () {
+            };
 
         getInstancePromise(name, element).then(function (punchOut) {
             punchOut.render({options: options, onEvent: onEvent}, element);
@@ -81,7 +95,7 @@
             console.error("There is no PunchOut in element", element);
             return;
         }
-        instancePromises.get(element).then(function(punchOut) {
+        instancePromises.get(element).then(function (punchOut) {
             punchOut.unmount(element);
         });
         instancePromises.delete(element);
@@ -90,7 +104,8 @@
     var PunchOutRegistry = Object.freeze({
         register: registerFactory,
         render: renderPunchOut,
-        unmount: unmountPunchOut
+        unmount: unmountPunchOut,
+        loadOnBoarding: loadOnBoarding
     });
 
     window.PunchOutRegistry = PunchOutRegistry;
diff --git a/catalog-ui/src/third-party/cytoscape.js-edge-editation/CytoscapeEdgeEditation.js b/catalog-ui/src/third-party/cytoscape.js-edge-editation/CytoscapeEdgeEditation.js
index 5731019..0e6ca8b 100644
--- a/catalog-ui/src/third-party/cytoscape.js-edge-editation/CytoscapeEdgeEditation.js
+++ b/catalog-ui/src/third-party/cytoscape.js-edge-editation/CytoscapeEdgeEditation.js
@@ -459,7 +459,8 @@
                         var handle = handles[i];
 
                         var position = this._getHandlePosition(handle, this._hover);
-                        if (VectorMath.distance(position, mousePoisition) < this.HANDLE_SIZE) {
+                        var renderedHandleSize = this.HANDLE_SIZE * this._cy.zoom(); //actual number of pixels that handle uses.
+                        if (VectorMath.distance(position, mousePoisition) < renderedHandleSize) {
                             return {
                                 handle: handle,
                                 position: position
