diff --git a/epsdk-app-onap/src/main/webapp/WEB-INF/conf/system.properties b/epsdk-app-onap/src/main/webapp/WEB-INF/conf/system.properties
index 7a6d5d9..86e1894 100755
--- a/epsdk-app-onap/src/main/webapp/WEB-INF/conf/system.properties
+++ b/epsdk-app-onap/src/main/webapp/WEB-INF/conf/system.properties
@@ -169,7 +169,6 @@
 vid.truststore.filename=/opt/app/vid/etc/vid_keystore.jks
 mso.dme2.client.timeout=30000
 mso.dme2.client.read.timeout=120000
-vid.truststore.filename=vid_keystore.jks
 vid.truststore.passwd.x=OBF:1wgg1wfq1uus1uui1x131x0r1x1v1x1j1uvo1uve1wg81wfi
 scheduler.create.new.vnf.change.instance=/v1/ChangeManagement/schedules/
 scheduler.get.time.slots=/v1/ChangeManagement/schedules/
diff --git a/epsdk-app-onap/src/main/webapp/WEB-INF/fusion/jsp/ds2/footer.jsp b/epsdk-app-onap/src/main/webapp/WEB-INF/fusion/jsp/ds2/footer.jsp
index 33bb38d..9cb6815 100755
--- a/epsdk-app-onap/src/main/webapp/WEB-INF/fusion/jsp/ds2/footer.jsp
+++ b/epsdk-app-onap/src/main/webapp/WEB-INF/fusion/jsp/ds2/footer.jsp
@@ -1,17 +1,34 @@
 <script src="./app/fusion/external/angular-1.5/angular.min.js"></script>
-<script src="app/fusion/external/ds2/js/b2b-angular/b2b-library.min.js"></script>
+<script src="./app/fusion/external/angular-1.5/angular-messages.js"></script>
+<script src="./app/fusion/external/angular-1.5/angular-touch.js"></script>
+<script src="./app/fusion/external/angular-1.5/angular-sanitize.js"></script>
+<script src="./app/fusion/external/angular-1.5/angular-route.min.js"></script>
+<script src="./app/fusion/external/angular-1.5/angular-cookies.min.js"></script>
 <link rel="stylesheet" type="text/css" href="./app/fusion/external/ds2/css/b2b-angular/b2b-angular.css"></style>
+<script src="app/fusion/external/ds2/js/b2b-angular/b2b-library.min.js"></script>
+<!-- b2b-column-switch-footer can only found in b2b-library.min.js -->
+
 
 <div style="position: relative; bottom: 0; left: 0; width: 100%">
-	<footer class="b2b-footer-wrapper" role="contentinfo"
-		aria-label="footer">
+	<footer class="b2b-footer-wrapper" role="contentinfo" 	aria-label="footer">
 		<div class="b2b-footer-container" b2b-column-switch-footer>
-			<!-- footer-link-items='footerItems' -->
-		<!-- 	<hr> -->
 			<div style="margin-top: -25px;" class="divider-bottom-footer">
-				<div class="span12 footerLogo">												
+				<div style="text-align: center;" class="span12 footerLogo">
+					<div class="span8 copyright-text">						
+						<a href="//www.att.com/gen/privacy-policy?pid=2587" target="_blank">&copy; 2017 AT&amp;T Intellectual Property.</a> All rights reserved. AT&T, the AT&T Globe logo and all other AT&T marks contained herein are trademarks of AT&T intellectual property and/or AT&T affiliated companies.
+					</div>
+					<div class="span3" style="margin-left:30px;">
+						<a href="welcome.htm" class="footer-logo"> 
+							<span class="footer-global">
+								<i class="icon-att-globe" >
+									<span class="hidden-spoken">A T &amp; T</span>
+								</i>
+							</span>							
+							<h2 class="logo-title" id="at&amp;t">AT&amp;T</h2>
+						</a>
+					</div>
 				</div>
 			</div>
 		</div>
 	</footer>
-</div> 
\ No newline at end of file
+</div>
\ No newline at end of file
diff --git a/epsdk-app-onap/src/main/webapp/WEB-INF/fusion/jsp/ds2/header.jsp b/epsdk-app-onap/src/main/webapp/WEB-INF/fusion/jsp/ds2/header.jsp
index 94213a2..483922f 100755
--- a/epsdk-app-onap/src/main/webapp/WEB-INF/fusion/jsp/ds2/header.jsp
+++ b/epsdk-app-onap/src/main/webapp/WEB-INF/fusion/jsp/ds2/header.jsp
@@ -1 +1,235 @@
-<div ds2-menu id="menuContainer" class="menu-container" ></div>
\ No newline at end of file
+<script src="./app/fusion/external/angular-1.5/angular.min.js"></script>
+<script src="./app/fusion/external/angular-1.5/angular-messages.js"></script>
+<script src="./app/fusion/external/angular-1.5/angular-touch.js"></script>
+<script src="./app/fusion/external/angular-1.5/angular-sanitize.js"></script>
+<script src="./app/fusion/external/angular-1.5/angular-route.min.js"></script>
+<script src="./app/fusion/external/angular-1.5/angular-cookies.min.js"></script>
+<script src="./app/fusion/external/ds2/js/b2b-angular/b2b-library.min.js"></script>
+<script src="./app/fusion/external/ds2/js/digital-ng-library/digital-design-library.js"></script>
+<script src="./app/fusion/scripts/DS2-services/leftMenuServiceDS2.js"></script>
+<link rel="stylesheet" type="text/css" href="./app/fusion/external/ds2/css/b2b-angular/b2b-angular.css">
+<link rel="stylesheet" type="text/css" href="./app/fusion/external/ds2/css/b2b-angular/b2b-angular.css">
+<link rel="stylesheet" type="text/css" href="./app/fusion/external/ds2/css/digital-ng-library/extras/ds2-accordion.css">
+<link rel="stylesheet" type="text/css" href="./app/fusion/external/ds2/css/digital-ng-library/extras/ds2-bootstrap-datepicker.css">
+<link rel="stylesheet" type="text/css" href="./app/fusion/external/ds2/css/digital-ng-library/extras/ds2-cc-input-field.css">
+<link rel="stylesheet" type="text/css" href="./app/fusion/external/ds2/css/digital-ng-library/extras/ds2-tooltip.css">
+<link rel="stylesheet" type="text/css" href="./app/fusion/external/ds2/css/digital-ng-library/extras/x-tabs-pills.css">
+<link rel="stylesheet" type="text/css" href="./app/fusion/external/ds2/css/digital-ng-library/ds2-accordion.css">
+<link rel="stylesheet" type="text/css" href="./app/fusion/external/ds2/css/digital-ng-library/ds2-bootstrap-datepicker.css">
+<link rel="stylesheet" type="text/css" href="./app/fusion/external/ds2/css/digital-ng-library/ds2-c2c.css">
+<link rel="stylesheet" type="text/css" href="./app/fusion/external/ds2/css/digital-ng-library/ds2-cc-input-field.css">
+<link rel="stylesheet" type="text/css" href="./app/fusion/external/ds2/css/digital-ng-library/ds2-filmstrip.css">
+<link rel="stylesheet" type="text/css" href="./app/fusion/external/ds2/css/digital-ng-library/ds2-filters.css">
+<link rel="stylesheet" type="text/css" href="./app/fusion/external/ds2/css/digital-ng-library/ds2-legacynav-fix.css">
+<link rel="stylesheet" type="text/css" href="./app/fusion/external/ds2/css/digital-ng-library/ds2-marquee.css">
+<link rel="stylesheet" type="text/css" href="./app/fusion/external/ds2/css/digital-ng-library/ds2-pagination.css">
+<link rel="stylesheet" type="text/css" href="./app/fusion/external/ds2/css/digital-ng-library/ds2-popover.css">
+<link rel="stylesheet" type="text/css" href="./app/fusion/external/ds2/css/digital-ng-library/ds2-progressbar.css">
+<link rel="stylesheet" type="text/css" href="./app/fusion/external/ds2/css/digital-ng-library/ds2-tooltip.css">
+<link rel="stylesheet" type="text/css" href="./app/fusion/external/ds2/css/digital-ng-library/global.css">
+<link rel="stylesheet" type="text/css" href="./app/fusion/external/ds2/css/digital-ng-library/digital-design-library.css">
+
+<link rel="stylesheet" type="text/css" href="./app/fusion/external/ds2/css/digital-ng-library/ionicons.css">
+<link rel="stylesheet" type="text/css" href="./app/fusion/styles/ecomp.css">
+<script>
+angular.module('att.abs.helper', []);
+angular.module('quantum', []);
+var appDS2=angular.module("abs", ["ngRoute", 'ngAnimate', 'ngTouch', 'ui.bootstrap', 'ngMessages', 'ngCookies', 'b2b.att.tpls', 'ddh.att.tpls', 'ddh.att.switches', 'b2b.att.footer', 'b2b.att.header', 'btorfs.multiselect']);
+</script>
+
+<script src="./app/fusion/scripts/DS2-services/leftMenuServiceDS2.js"></script>
+
+<script>
+appDS2.controller("leftMenuController", ['$scope', '$filter','$http','$timeout','$cookies','LeftMenuServiceDS2', function ($scope, $filter, $http, $timeout, $cookies, LeftMenuServiceDS2) {
+	$scope.menuData = [];
+	$scope.leftChildData=[];
+	$scope.leftParentData=[];
+	$scope.leftMenuItems = [];
+	$scope.app_name = "";
+	$scope.app_name_full;
+	LeftMenuServiceDS2.getLeftMenu().then(function(response){
+	var j = response; 
+		try{
+			if(j && j !== "null" && j!== "undefined"){
+				$scope.leftParentData = JSON.parse(j.data);
+  		    $scope.leftChildData = JSON.parse(j.data2);
+			}else{
+				throw "Get Left Menu respsone is not an object/is empty"; 
+			}  
+	    	try{
+	    		var leftChildItemList = $scope.leftChildData;
+          		var pageUrl = window.location.href.split('/')[window.location.href.split('/').length-1];
+         		var leftParentList =$scope.leftParentData;
+         		
+	    		for (var i = 0; i < leftParentList.length; i++) {
+	    			var parentItem = {};
+	    			parentItem.name = leftParentList[i].label;
+	    			if(parentItem.name == 'Home'){
+	    				parentItem.imageSrc = /*"icon-location-pinpoint"*/ "icon-building-home";
+	    			} else if(parentItem.name == 'Sample Pages'){
+	    				parentItem.imageSrc = "icon-documents-book";
+	    			} else if(parentItem.name == 'Reports'){
+	    				parentItem.imageSrc = "icon-misc-piechart";
+	    			} else if(parentItem.name == 'Profile'){
+	    				parentItem.imageSrc = "icon-people-oneperson";
+	    			} else if(parentItem.name == 'Admin'){
+	    				parentItem.imageSrc = "icon-content-star";
+	    			} else if(parentItem.name == 'Sample Pages'){
+	    				parentItem.imageSrc = "icon-content-searchchannels";
+	    			} else {
+	    				parentItem.imageSrc = "icon-building-door";
+	    			}            		    			
+	    			parentItem.menuItems = [];
+	    			for (var j = 0; j < leftChildItemList[i].length; j++) {
+	    				if(leftChildItemList[i][j].label != null && leftChildItemList[i][j].label.length > 0) {
+		    				var childItem = {};
+		    				childItem.name = leftChildItemList[i][j].label;
+		    				childItem.href = leftChildItemList[i][j].action;
+		    				parentItem.menuItems.push(childItem)
+	    				}
+		    		}
+	    			$scope.menuData.push(parentItem);
+	    		}
+	    		
+  			
+	    	//For Home, add href
+	    	$scope.menuData[0].href = leftParentList[0].action;
+	    		
+     		for (var i = 0; i < leftParentList.length; i++) {
+     			$scope.item = {
+     				parentLabel : leftParentList[i].label,
+     				parentAction : leftParentList[i].action,
+     				parentImageSrc : leftParentList[i].imageSrc,                 				
+     				open:pageUrl==leftParentList[i].action?true:false,
+     				childItemList : leftChildItemList[i]
+     			};
+     		};   
+  		}catch(err){
+  			console.log("error happened while trying to set left menu structure"+err);  					   
+  		}
+		}catch (e) {
+			console.log("error happened while trying to get left menu items"+e);
+			reloadPageOnce();
+			return;
+    }	       
+},function(error){
+	console.log("error happened while calling getLeftMenu"+error);
+});
+
+LeftMenuServiceDS2.getAppName().then(function(response){
+	var j = response; 
+		try{
+			if(j && j !== "null" && j!== "undefined"){
+				console.log("app name is " + $scope.app_name);
+				$scope.app_name_full = j.data;
+				var processed_app_name = j.data;
+				var n = processed_app_name.length;
+				if (n > 15) {
+					n = 15;
+				}
+				$scope.app_name = processed_app_name.substr(0, n);
+			}else{
+				throw "Get app_name respsone is not an object/is empty"; 
+			}  
+		}catch (e) {
+			console.log("error happened while trying to get app name "+e);
+			return;
+    }	       
+},function(error){
+	console.log("error happened while calling getAppName "+error);
+});
+
+$scope.adjustHeader=function() {
+	$scope.showHeader = ($cookies.show_app_header == undefined ? true : $cookies.show_app_header);
+	
+	if($scope.showHeader == true) {
+		$scope.drawer_margin_top = 50;
+		$scope.drawer_custom_top = 54;
+		$scope.toggle_drawer_top = 55;
+	}
+	else  {
+		
+		$scope.drawer_margin_	top = 40;
+		$scope.drawer_custom_top = 0;
+		$scope.toggle_drawer_top = 10;
+	}
+	
+	
+};
+
+$scope.adjustHLeftMenu = function (type){
+	$scope.showHeader = ($cookies.show_app_header == undefined ? true : $cookies.show_app_header);
+	
+	if($scope.showHeader == true) {
+		$scope.drawer_margin_top = 60;
+		$scope.drawer_custom_top = 54;
+		$scope.toggle_drawer_top = 55;
+	}
+	else  {
+		
+		$scope.drawer_margin_top = 50;
+		$scope.drawer_custom_top = 0;
+		$scope.toggle_drawer_top = 10;
+	}
+	if(type=='burgerIcon'){
+		return { "top": $scope.toggle_drawer_top+"px"};
+	}else if(type=='leftMenu'){
+		return { "margin-top": $scope.drawer_margin_top+"px"};
+	}else
+		return;
+}
+$scope.adjustHeader();
+$scope.drawerOpen = true;
+
+$scope.toggleDrawer = function() {
+	$scope.drawerOpen = !($scope.drawerOpen);
+	if ($scope.drawerOpen) {
+	// setCookie('drawerOpen','open',30);
+	$scope.arrowShow = true;
+
+
+	if (document.getElementById('fnMenueContent')!=null)
+	document.getElementById('fnMenueContent').style.marginLeft = "0px";
+	
+	if (document.getElementById('rightContentAdmin')!=null)
+			document.getElementById('rightContentAdmin').style.marginLeft = "210px"; 
+			
+		else if (document.getElementById('rightContentProfile')!=null)
+			document.getElementById('rightContentProfile').style.marginLeft = "210px";
+	} else {
+
+	$scope.arrowShow = false;
+
+	if (document.getElementById('fnMenueContent')!=null)
+	document.getElementById('fnMenueContent').style.marginLeft = "-150px";
+	
+	if (document.getElementById('rightContentAdmin')!=null) {
+				document.getElementById('rightContentAdmin').style.marginLeft = "50px";					
+			}
+			
+	else if (document.getElementById('rightContentProfile')!=null)
+		document.getElementById('rightContentProfile').style.marginLeft = "50px";
+	}
+	};
+	
+$timeout(function() {
+	//detectScrollEvent();
+    	}, 800);
+}]);
+</script>
+
+<style>
+#page-content{
+margin-top:-250px;
+}
+
+#page-content td, th {
+    padding: 0px;
+    border:none;
+}
+</style>
+<div ng-app="abs">
+	<div ng-controller = "leftMenuController">
+		<ddh-left-navigation menu-data="menuData"></ddh-left-navigation>
+	</div>
+</div>
\ No newline at end of file
diff --git a/epsdk-app-onap/src/main/webapp/WEB-INF/fusion/jsp/ebz/ebz_header.jsp b/epsdk-app-onap/src/main/webapp/WEB-INF/fusion/jsp/ebz/ebz_header.jsp
new file mode 100644
index 0000000..ad3201c
--- /dev/null
+++ b/epsdk-app-onap/src/main/webapp/WEB-INF/fusion/jsp/ebz/ebz_header.jsp
@@ -0,0 +1,837 @@
+<%--
+  ================================================================================
+  eCOMP Portal SDK
+  ================================================================================
+  Copyright (C) 2017 AT&T Intellectual Property
+  ================================================================================
+  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.
+  ================================================================================
+  --%>
+<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
+<%@ taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions"%>
+<%@ page isELIgnored="false"%>
+<%@ page import="org.openecomp.portalsdk.core.util.SystemProperties"%>
+<%@ page import="org.openecomp.portalsdk.core.onboarding.util.PortalApiProperties"%>
+<%@ page import="org.openecomp.portalsdk.core.onboarding.util.PortalApiConstants"%>
+<%@ page import="org.openecomp.portalsdk.core.domain.MenuData"%>
+<link rel="stylesheet" type="text/css" href="app/fusion/external/ebz/ebz_header/header.css">
+<link rel="stylesheet" type="text/css" href="app/fusion/external/ebz/ebz_header/portal_ebz_header.css">
+<link rel="stylesheet" type="text/css" href="app/fusion/external/ebz/sandbox/styles/style.css" >
+
+
+<%--<script src= "app/fusion/external/ebz/angular_js/angular.js"></script> --%>
+<script src="app/fusion/external/angular-1.4.8/angular.min.js"></script>
+<script src="app/fusion/external/angular-1.4.8/angular-route.min.js"></script>
+<script src="app/fusion/external/angular-1.4.8/angular-sanitize.min.js"></script>
+<script src="app/fusion/external/angular-1.4.8/angular-cookies.min.js"></script>
+<script src="app/fusion/external/ebz/angular_js/app.js"></script>
+<script src="app/fusion/external/ebz/angular_js/gestures.js"></script>
+<script src="static/js/jquery-1.10.2.js"></script>
+<script src="app/fusion/scripts/modalService.js"></script>
+<script src="static/js/jquery.mask.min.js" type="text/javascript"></script>
+<script src="static/js/jquery-ui.js" type="text/javascript"></script>
+<script src="app/fusion/external/ebz/sandbox/att-abs-tpls.js" type="text/javascript"></script>
+<script src="static/fusion/js/att_angular_gridster/ui-gridster-tpls.js"></script>
+<script src="static/fusion/js/att_angular_gridster/angular-gridster.js"></script>
+<script src= "app/fusion/external/ebz/angular_js/checklist-model.js"></script>
+<script type="text/javascript" src="//cdnjs.cloudflare.com/ajax/libs/lodash.js/0.10.0/lodash.min.js"></script>
+<%--<script src="app/fusion/external/angular-ui/ui-bootstrap-tpls-1.1.2.min.js"></script>--%>
+<script src="app/fusion/external/angular-1.4.8/angular-touch.min.js"></script>
+<script src="app/fusion/external/angular-1.4.8/angular-animate.min.js"></script>
+<script src="app/fusion/external/angular-bootstrap/ui-bootstrap-tpls.min.js"></script>
+<script src="app/fusion/scripts/services/userInfoService.js"></script>
+<script src="app/fusion/scripts/services/leftMenuService.js"></script>
+
+
+<jsp:include page="/WEB-INF/fusion/jsp/ebz/loginSnippet.html" ></jsp:include> 
+
+<c:set var="UserName"	value="<%= session.getAttribute(\"fullName\")%>" />
+<c:set var="UserFirstName"	value="<%= session.getAttribute(\"first_name\")%>" />
+
+<% 
+	String contactUsLink = SystemProperties.getProperty(SystemProperties.CONTACT_US_LINK);
+	String redirectUrl = PortalApiProperties.getProperty(PortalApiConstants.ECOMP_REDIRECT_URL);
+	String portalUrl = redirectUrl.substring(0, redirectUrl.lastIndexOf('/')) + "/process_csp";
+	String getAccessLink = redirectUrl.substring(0, redirectUrl.lastIndexOf('/')) + "/get_access";	
+%>
+<c:set var="returnPortalUrl" value="<%=portalUrl%>" />
+<c:set var="contactUsLink" value="<%=contactUsLink%>" />
+<c:set var="getAccessLink" value="<%=getAccessLink%>" />
+<style>
+.att-drawer{
+	z-index:997 !important;
+}
+
+.secondaryMenuContainer{
+	z-index:1000;
+}
+.megamenu-tabs .megamenu__item {
+	padding: 0 0;
+}
+.megamenu-tabs .megamenu__item span {
+    font-size: 18px;
+}
+
+.submenu-tabs {
+   line-height:50px;
+}
+.submenu-tabs .sub__menu{
+	top:5px;
+}
+
+.top-megamenu .megamenu-tabs ul{
+	width:98%;
+	list-style: none;
+}
+
+</style>
+<%@include  file="/WEB-INF/fusion/jsp/ebz/loginSnippet.html" %>
+
+<div style="position: relative; z-index: 999;">
+	<div ng-controller="headerController">
+	
+		 <div class="headerContainer" id="headerContainer" ng-cloak  ng-show="{{showHeader && false}}">
+			<div id="megaMenuContainer" class="megaMenuContainer" style="margin-top: 0; overflow: visible;">
+				<div>
+					<!--for mega Menu-->
+					<!-- Mega Menu parent-tab directive with three models menu-items, active-sub-menu, active-menu -->
+					<div id="topMenu" class="top-megamenu" ng-mouseleave="activeClickSubMenu.x.active=false; activeClickMenu.x.active=false">
+						<div style="float:left;width:100%;"parent-tab menu-items="megaMenuDataObject" active-sub-menu='activeClickSubMenu.x' active-menu='activeClickMenu.x'>
+			                <div parentmenu-tabs mega-menu="true" menu-items="megaMenuDataObject" style="height:55px;">
+								<div style="float:left">
+									<li class="megamenu__item" style="line-height:55px;" onclick="returnToPortal()">
+										<img src="app/fusion/external/ebz/images/att_logo.png" class="ATTLogo"   ></span>
+<!-- 											<a id='returnPortal' class="primaryMenuOptionLink" style="font-weight: 400 !important; font-family: clearview_att_bold !important; font-size: 18px;">ECOMP</a>
+ -->										<strong	style="font-weight: 400 !important; font-family: clearview_att_bold !important; font-size: 18px;" id='returnPortal' >ECOMP Portal</strong>
+									</li>										
+									<div menu-tabs mega-menu="true" tab-name="item.text" menu-item="item" active-menu="activeClickMenu.x" 
+									ng-repeat="item in megaMenuDataObject" style="font-size: 18px;" ng-mousedown="loadFavorites()" >
+				                        <div parentmenu-tabs sub-menu="true" ng-show="activeClickMenu.x.active && item.active" menu-items="activeClickMenu.x.children">
+							<!-- Second level menu -->
+									<div>
+										<div menu-tabs sub-menu="true" tab-name="subItem.text" 
+											tab-url="subItem.url"  menu-item="subItem" 
+											ng-repeat="subItem in activeClickMenu.x.children | orderBy : 'column'" active-menu="activeClickSubMenu.x" 
+											sub-item-active="{{subItem.active}}" style="float:left;" aria-label="{{subItem.text}}"
+	                                         ng-mouseenter="submenuLevelAction(subItem.text,subItem.column)"
+	                                         ng-mouseleave="submenuLevelAction(subItem.text,subItem.column)"
+                                        	ng-click="submenuLevelAction(subItem.text,subItem.column)"  >
+                                                <i ng-if="subItem.text=='Favorites'" id="favorite-star"
+                                                   class="icon-star favorites-icon-active">
+                                                </i>
+										</div>
+	                                                                                 	
+			                                <div class="sub__menu" ng-mouseleave="activeClickSubMenu.x.active=false" >
+			                                	<ul ng-show="activeClickSubMenu.x.active"  role="menubar" class="columns">
+			               <!-- Third level menu -->					                                	
+				                                    <div menu-tabs menu-item="subItem" 
+				                                    class="columns-div"
+				                                    ng-repeat="subItem in activeClickSubMenu.x.children | orderBy : 'column'" 
+				                                    ng-show="activeClickSubMenu.x.active">
+
+	                                                    <i id="favorite-selector-third-level"
+	                                                       ng-show="isUrlFavorite(subItem.menuId)==false"
+	                                                       class="icon-star favorites-icon-inactive"
+	                                                       ng-if="subItem.url.length > 1">
+	                                                    </i>					                                    
+	                                                    <i id="favorite-selector-third-level"
+	                                                       ng-show="isUrlFavorite(subItem.menuId)"
+	                                                       class="icon-star favorites-icon-active"
+	                                                       ng-if="subItem.url.length > 1">
+	                                                    </i>					                                    
+														<span class="title" aria-label="{{subItem.text}}" 
+														ng-click="goToUrl(subItem)">{{subItem.text}}</span>
+							<!-- Fourth level menus -->	
+				                                        <div att-links-list="">
+                                                            <i id="favorite-selector-fourth-level"
+                                                               class="icon-star favorites-icon-inactive"
+                                                               ng-show="isUrlFavorite(tabValue.menuId)==false"
+                                                               ng-if="tabValue.url.length > 1">
+
+                                                            </i>
+                                                            <i id="favorite-selector-fourth-level"
+                                                               class="icon-star favorites-icon-active"
+                                                               ng-show="isUrlFavorite(tabValue.menuId)"
+                                                               ng-if="tabValue.url.length > 1">
+
+                                                            </i>
+				                                            <span role="menuitem" att-links-list-item="" 
+				                                            ng-repeat="tabValue in subItem.children" 
+				                                            ng-click="goToUrl(tabValue)" 
+				                                            att-accessibility-click="13,32" 
+				                                            ng-class="{'disabled': tabValue.disabled}">{{tabValue.text}}</span>
+				                                        </div>
+				                                        <hr ng-show="!$last"/>
+				                                        
+				                                    </div>
+				                                 </ul>
+			           <!-- Favorites level menu -->
+												<div class="favorites-window" ng-show='favoritesWindow' ng-mouseleave="hideFavoritesWindow()">
+													<div id="favorites-menu-items" ng-show="showFavorites">
+														<div ng-repeat="subItem in favoritesMenuItems" att-links-list="" style='display: inline'>
+																<i id="favorite-selector-favorites-list" class="icon-star favorites-icon-active">
+																</i>
+																<a id="favorites-list" aria-label="{{subItem.text}}"
+																   ng-click="goToUrl(subItem)" 
+																   style="margin-left: 3px; margin-right: 20px; text-decoration: none;  color: #666666;">
+																   {{subItem.text}}
+																</a>
+														</div>
+														<div>
+															<br>
+															<p style='font-weight: 400; font-family: clearview_att_bold !important;
+															font-size: 18px; text-align: center; background-color: lightgray;
+															width: 400px; margin-left: 25%; margin-right: 25%;'>
+																Manage favorites on ECOMP Portal.
+															</p>
+														</div>
+													</div>
+								  <!-- Favorites when empty -->
+														<div id="favorites-empty" ng-show='favoritesWindow' ng-show="emptyFavorites">
+			                                                <div id="favorites-empty" ng-show="emptyFavorites" class="favorites-window-empty">
+			                                                    <div>
+			                                                        <img src="app/fusion/external/ebz/images/no_favorites_star.png">
+			                                                        <p class='favoritesLargeText'>No Favorites</p>
+																	<p class='favoritesNormalText'>Manage favorites on ECOMP Portal.</p>
+			                                                    </div>
+			                                                </div>
+														</div>
+													</div>
+					                                
+				                                </div>
+				                            </div>
+				                        </div> 
+				                    </div >
+				                    <li class="megamenu__item" style="line-height:55px;" ng-if="loadMenufail">
+										<strong	style="font-weight: 400 !important; font-family: clearview_att_bold !important; font-size: 18px;" >Unable to load menus</strong>
+									</li>
+<!-- 										<li class="megamenu__item" style="width: 20%;">&nbsp;</li>
+ -->									</div>
+								<!--  Login Snippet-->
+								<div  style="float:right">
+									<li id="bcLoginSnippet" class="megamenu__item" style="width: 140px;" >
+										<div popover="loginSnippet.html"  aria-label="Login Snippet"	referby="loginSnippet" att-accessibility-click="13,32" popover-style="\" popover-placement="below" style="width: 200px;">
+											<div class="icon-user-small login-snippet-icon"></div>
+											<div class="login-snippet-text" style="display: inline-block; font-size:12px; margin-left:5px;overflow: hidden; max-height: 31px;   max-width:120px; padding-top: 0px; margin-top: 0px; white-space: nowrap;" ng-bind="userProfile.firstName"></div>
+										</div>
+									</li>
+									<li class="megamenu__item" style="width:120px;">&nbsp;</li>
+								</div>
+								
+							</div>		
+						</div>
+						<div style="clear: both"></div>
+					</div>
+					</div>
+				</div>
+			</div>
+		<div class="license-notification" id="license-notification">
+			<a href="javascript:void(0)" style="background-color:#bbb;" class="button button--small" tooltip="Please contact ECOMP Portal team to get the license" tooltip-placement="below" tooltip-style="light"  tooltip-popup-delay="500" >
+				<span style="">{{app_name_full}}</span>
+			</a>									
+		</div>
+		<div style="position: relative; color: black; top: 70px;">
+			<div ng-cloak>		
+				<span ng-style="adjustHLeftMenu('burgerIcon')" style="z-index:998; position:fixed; left:0%; font-size:35px; margin-left:10px;text-decoration:none;">
+					<a ng-click="toggleDrawer();isOpen = !isOpen" href="javascript:void(0);" class="arrow-icon-left" >
+					<span class="icon-hamburger"></span></a>	
+					<span ng-init="isOpen = true" ng-show="isOpen" style="font-size:16px; position:relative; top:-8px; left:-15px;">&nbsp&nbsp&nbsp {{app_name}}</span>
+				</span>
+				<div att-drawer drawer-slide="left" drawer-custom-top="{{drawer_custom_top}}px" drawer-size="200px" drawer-open="drawerOpen" drawer-custom-height="100%" >
+				    <div ng-style="adjustHLeftMenu('leftMenu')">
+					    <div class="attDrawer" style="margin-top:{{drawer_margin_top}}px;">   
+					    	<div style="margin-left:10px; margin-right:10px;">
+						    	<accordion close-others="true" css="att-accordion--no-box">
+				                    <accordion-group ng-repeat="parent in menuItems" heading="{{parent.parentLabel}}" child="{{parent.parentAction}}" parent-link="{{parent.parentAction}}" image-source="{{parent.parentImageSrc}}" child-length="{{parent.childItemList.length}}" is-open="parent.open">
+				                    	<div ng-repeat="subMenu in parent.childItemList" style="font-size:12px; margin-left:10px;">
+				                    		<a href="{{subMenu.action}}" style="font-size:12px; color:#666666;" >{{subMenu.label}}</a>
+				                    	</div>
+				                    </accordion-group>
+				                </accordion>
+							</div>						
+					    </div>
+				    </div>
+				</div>
+			</div>		
+		</div>
+	</div>
+</div>
+<script>    
+	function returnToPortal(){
+		window.location.href = "<c:out value='${returnPortalUrl}'/>";
+	}
+	detectScrollEvent = function() {
+		var footerOff = $('#footerContainer').offset().top;
+		var headOff = $('#headerContainer').offset().top;
+		var winHeight = $(window).height();
+		if ((footerOff - headOff) <= winHeight) {
+			$('.att-drawer').css({
+				"height" : footerOff - headOff - 55
+			});
+		} else {
+			$('.att-drawer').css({
+				"height" : "94vh"
+			});
+		}
+	}
+	$(window).scroll(function() {
+		if ($('.att-drawer').is(':visible')) {
+			detectScrollEvent();
+		}
+	});
+	app.controller("headerController", function($scope, $timeout, $log, $http, UserInfoService, $window, $cookies,LeftMenuService) {
+  		// $log.debug('HeaderController started');
+		$scope.jsonMenuData = [];
+		$scope.loadMenufail=false;
+		$scope.app_name = "";
+		$scope.app_name_full = "";
+		$scope.megaMenuDataObject =[];
+		$scope.activeClickSubMenu = {
+          		x: ''
+        };
+      	$scope.activeClickMenu = {
+      			x: ''
+      	};
+  		$scope.favoritesMenuItems = [];
+        $scope.favoriteItemsCount = 0;
+        $scope.showFavorites = false;
+        $scope.emptyFavorites = false;
+        $scope.favoritesWindow = false;
+        $scope.userProfile={
+    			firstName:'',
+    			lastName:'',
+    			fullName:'',
+    			email:''
+    	}
+      	/*Put user info into fields*/
+    	$scope.inputUserInfo = function(userInfo){
+    		if (typeof(userInfo) != "undefined" && userInfo!=null && userInfo!=''){
+    			if (typeof(userInfo.USER_FIRST_NAME) != "undefined" && userInfo.USER_FIRST_NAME!=null && userInfo.USER_FIRST_NAME!='')
+    				$scope.userProfile.firstName = userInfo.USER_FIRST_NAME;
+    			if (typeof(userInfo.USER_LAST_NAME) != "undefined" && userInfo.USER_LAST_NAME!=null && userInfo.USER_LAST_NAME!='')
+    				$scope.userProfile.lastName = userInfo.USER_LAST_NAME;
+    			if (typeof(userInfo.USER_EMAIL) != "undefined" && userInfo.USER_EMAIL!=null && userInfo.USER_EMAIL!='')  			
+    				$scope.userProfile.email = userInfo.USER_EMAIL;
+    		}		
+    	}
+      	 /*getting user info from session*/
+    	$scope.getUserNameFromSession = function(){
+    		UserInfoService.getFunctionalMenuStaticDetailSession()
+    	  	.then(function (res) {
+  		  		$scope.userProfile.firstName = res.firstName;
+  		  		$scope.redirectUrl = res.portalUrl;
+    	  	});
+        }
+      	$scope.getTopMenuStaticInfo=function() {
+    		var promise = UserInfoService.getFunctionalMenuStaticDetailShareContext();
+    		promise.then(
+				function(res) {   					
+					if(res==null || res==''){
+						$log.info('failed getting static User information');    
+						$scope.getUserNameFromSession();
+					}else{
+						$log.info('Received static User information');
+						var resData = res;						
+						$scope.inputUserInfo(resData);					
+						$scope.userProfile.fullName = $scope.userProfile.firstName+ ' '+ $scope.userProfile.lastName;					
+					}
+				},
+				function(err) {
+					$log.info('failed getting static User information');       				
+				}
+    		);
+  		}
+      			
+		var unflatten = function( array, parent, tree ){
+			tree = typeof tree !== 'undefined' ? tree : [];
+			parent = typeof parent !== 'undefined' ? parent : { menuId: null };
+			var children = _.filter( array, function(child){ return child.parentMenuId == parent.menuId; });
+		
+			if( !_.isEmpty( children )  ){
+				if( parent.menuId === null ){
+						tree = children;
+				}else{
+					parent['children'] = children
+				}
+				_.each( children, function( child ){ unflatten( array, child ) } );
+			}
+
+			return tree;
+		}
+		
+		var menuStructureConvert = function(menuItems) {
+			var megaMenuDataObjectTemp = [
+	                                 {
+	                                	 text: "ECOMP",
+	                                	 children:menuItems
+	                                 },
+	                                 {
+	                                	 text: "Help",
+	                                	 children: [{
+	                                		 text:"Contact Us",
+	                                		 url:"<c:out value='${contactUsLink}'/>"
+	                                	 },
+	                                	 {
+	                                		 text:"Get Access",
+	                                		 url:"<c:out value='${getAccessLink}'/>"
+	                                	 }]
+	                                 }
+	                                 ];
+			return megaMenuDataObjectTemp;
+		}; 
+   		
+		
+		/*Left Menu*/
+		LeftMenuService.getAppName().then(function(response){
+        		var j = response; 
+    	  		try{
+    	  			if(j && j !== "null" && j!== "undefined"){
+    	  				// console.log("app name is " + $scope.app_name);
+    	  				$scope.app_name_full = j.data;
+    	  				var processed_app_name = j.data;
+    	  				var indexOfLic = processed_app_name.indexOf('[');
+    	  				if(indexOfLic>-1) {
+    	  					if (jQuery('.license-notification')!=null)
+    	  						jQuery('.license-notification').css("display", "none"); 
+    	  				}
+    	  				var n = processed_app_name.length;
+    	  				if (n > 15) {
+    	  					n = 15;
+    	  				}
+    	  				if(n > indexOfLic && indexOfLic > 0) {
+    	  					n = indexOfLic;
+    	  				}
+    	  				$scope.app_name_full = $scope.app_name_full.substr(0, n);
+    	  				$scope.app_name = processed_app_name.substr(0, n);
+    	  				
+    	  			}else{
+    	  				throw "Get app_name response is not an object/is empty"; 
+    	  			}  
+    	  		}catch (e) {
+    	  			console.log("error happened while trying to get app name "+e);
+    	  			return;
+    	        }	       
+    		},function(error){
+    			console.log('getAppName failed', error);
+    		});
+
+		
+	    $scope.getTopMenuStaticInfo();      
+    	$scope.getMenu=function() {
+    		
+   		 $http({
+   		        method: "GET",
+   		        url: 'get_functional_menu',
+// TIMEOUT USED FOR LOCAL TESTING ONLY	      		        
+// 		        timeout: 100
+   		 }).success(function (response) {
+			if(response == '101: Timeout') {
+	  			$log.error('Timeout attempting to get_functional_menu');
+	  		// TIMEOUT USED FOR LOCAL TESTING ONLY	      		        
+//	  			$scope.createErrorMenu();
+	  			$scope.megaMenuDataObject = menuStructureConvert('');
+	  		}else {
+ 		   		$log.debug('get_functional_menu success: ' + response); 		   			   		
+				if(typeof response != 'undefined' && response.length!=0 && typeof response[0] != 'undefined' && typeof response[0].error!="undefined"){
+// createErrorMenu() USED FOR LOCAL TESTING ONLY
+//		  			$scope.createErrorMenu();
+					$scope.megaMenuDataObject = menuStructureConvert('');
+		 	   	//	$scope.loadMenufail=true;
+			 	}else{
+		 	   		$scope.jsonMenuData = unflatten( response );
+		 	   		$scope.megaMenuDataObject = menuStructureConvert($scope.jsonMenuData);
+	 	   		}
+			}
+		}).error(function (response){
+// createErrorMenu() USED FOR LOCAL TESTING ONLY	      		        
+//		  		$scope.createErrorMenu();
+
+	 	   		//$scope.loadMenufail=true;
+	 	   		$scope.megaMenuDataObject = menuStructureConvert('');
+		        $log.debug('REST API failed get_functional_menu...'+ response);
+		  });
+  		}
+    	$scope.adjustHLeftMenu = function (type){
+    		$scope.showHeader = ($cookies.show_app_header == undefined ? true : $cookies.show_app_header);
+    		
+    		if($scope.showHeader == true) {
+	    		$scope.drawer_margin_top = 60;
+	    		$scope.drawer_custom_top = 5;
+	    		$scope.toggle_drawer_top = 5;
+    		}
+    		else  {
+    			
+    			$scope.drawer_margin_top = 50;
+        		$scope.drawer_custom_top = 5;
+        		$scope.toggle_drawer_top = 5;
+    		}
+    		if(type=='burgerIcon'){
+    			return { "top": $scope.toggle_drawer_top+"px"};
+    		}else if(type=='leftMenu'){
+    			return { "margin-top": $scope.drawer_margin_top+"px"};
+    		}else
+    			return;
+    	}
+    	$scope.adjustHeader=function() {
+    		$scope.showHeader = ($cookies.show_app_header == undefined ? true : $cookies.show_app_header);
+    		
+    		if($scope.showHeader == true) {
+	    		$scope.drawer_margin_top = 50;
+	    		$scope.drawer_custom_top = 5;
+	    		$scope.toggle_drawer_top = 5;
+    		}
+    		else  {
+    			
+    			$scope.drawer_margin_top = 40;
+        		$scope.drawer_custom_top = 5;
+        		$scope.toggle_drawer_top = 5;
+    		}
+    		
+    		
+    	}
+    	
+    	
+		//$scope.getMenu();
+		$scope.adjustHeader();
+		
+
+		/* **************************************************************************/
+		/* Logic for the favorite menus is here */
+
+            $scope.loadFavorites = function () {
+                $log.debug('loadFavorites has happened.');
+                if ($scope.favoritesMenuItems == '') {
+                    $scope.generateFavoriteItems();
+                    $log.debug('loadFavorites is calling generateFavoriteItems()');
+                } else {
+                    $log.debug('loadFavorites is NOT calling generateFavoriteItems()');
+                }
+            }
+            
+            $scope.goToUrl = function (item) {
+                $log.info("goToUrl called")
+                $log.info(item);
+
+                var url = item.url;
+                var restrictedApp = item.restrictedApp;
+                $log.debug('Restricted app status is: ' + restrictedApp);
+                if (!url) {
+                    $log.info('No url found for this application, doing nothing..');
+                    return;
+                }
+                if (restrictedApp) {
+                    $window.open(url, '_blank');
+                } else {
+                    $window.open(url, '_self');
+                }
+
+            }
+            
+            $scope.submenuLevelAction = function(index, column) {
+                if ($scope.favoritesMenuItems == '') {
+                    $scope.generateFavoriteItems();
+                    $log.debug('submenuLevelAction is calling generateFavoriteItems()');
+                }
+                $log.debug('item hovered/clicked: ' + index + '; column = ' + column);
+                if (column == 2) {  // 2 is Design
+                    $scope.favoritesWindow = false;
+                    $scope.showFavorites = false;
+                    $scope.emptyFavorites = false;
+                }
+                if (index=='Favorites' && $scope.favoriteItemsCount != 0) {
+                    $log.debug('Showing Favorites window');
+                    $scope.favoritesWindow = true;
+                    $scope.showFavorites = true;
+                    $scope.emptyFavorites = false;
+                }
+                if (index=='Favorites' && $scope.favoriteItemsCount == 0) {
+                    $log.debug('Hiding Favorites window in favor of No Favorites Window');
+                    $scope.favoritesWindow = true;
+                    $scope.showFavorites = false;
+                    $scope.emptyFavorites = true;
+                }
+                if (column > 2) {
+                    $scope.favoritesWindow = false;
+                    $scope.showFavorites = false;
+                    $scope.emptyFavorites = false;
+                }
+            };
+            
+            $scope.hideFavoritesWindow = function() {
+                $log.debug('$scope.hideFavoritesWindow has been called');
+                $scope.showFavorites = false;
+                $scope.emptyFavorites = false;
+            }
+            
+            $scope.isUrlFavorite = function (menuId) {
+//                 $log.debug('array objects in menu favorites = ' + $scope.favoriteItemsCount + '; menuId=' + menuId);
+                var jsonMenu =  JSON.stringify($scope.favoritesMenuItems);
+                var isMenuFavorite =  jsonMenu.indexOf('menuId\":' + menuId);
+                if (isMenuFavorite==-1) {
+                    return false;
+                } else {
+                    return true;
+                }
+
+            }
+		            
+            $scope.generateFavoriteItems  = function() {
+            	$http({
+      		        method: "GET",
+      		        url: 'get_favorites',
+		// TIMEOUT USED FOR LOCAL TESTING ONLY	      		        
+//			      		        timeout: 100
+	      		    }).success(function (response) {
+				  		if (response == '101: Timeout') {
+						$log.error('Timeout attempting to get_favorites_menu');
+					} else {
+					 	if(typeof response != 'undefined' && response.length!=0 && typeof response[0] != 'undefined' && typeof response[0].error!="undefined"){
+						    $log.error('REST API failed get_favorites' + response);
+					 	   	}else{
+					 	   		$log.debug('get_favorites = ' + JSON.stringify(response));
+						 	   	$scope.favoritesMenuItems = response;
+		                        $scope.favoriteItemsCount = Object.keys($scope.favoritesMenuItems).length;
+		                        $log.info('number of favorite menus: ' + $scope.favoriteItemsCount);
+	                        }
+				  		}
+					}).error(function (response){
+					    $log.error('REST API failed get_favorites' + response);
+		//createFavoriteErrorMenu() USED FOR LOCAL TESTING ONLY	      		        
+//							$scope.createFavoriteErrorMenu();
+					});
+        	}
+		            
+		        	$scope.createFavoriteErrorMenu=function() {
+		                $scope.favoritesMenuItems = [
+// 		                                             {
+// 		                                         	    "menuId": "93",
+// 		                                         	    "text": "JSONLint",
+// 		                                         	    "url": "http://http://jsonlint.com"
+// 		                                         	  },
+// 		                                         	  {
+// 		                                         	    "menuId": "22",
+// 		                                         	    "text": "ECOMP Wasteland",
+// 		                                         	    "url": "https://ecomp.homer.att.com/ecompportal/applicationsHome"
+// 		                                         	  },
+// 		                                         	  {
+// 		                                         	    "menuId": "94",
+// 		                                         	    "text": "HROneStop",
+// 		                                         	    "url": "http://ebiz.sbc.com/hronestop"
+// 		                                         	  },
+// 		                                         	  {
+// 		                                         	    "menuId": "91",
+// 		                                         	    "text": "Andy and his Astrophotgraphy",
+// 		                                         	    "url": "https://ecomp.homer.att.com/ecompportal/applicationsHome"
+// 		                                         	  }
+		                                         	];
+		                $scope.favoriteItemsCount = Object.keys($scope.favoritesMenuItems).length;
+		                $log.info('number of favorite menus: ' + $scope.favoriteItemsCount);
+		        	}
+		            
+        	/* end of Favorite Menu code */
+	        /* **************************************************************************/
+
+        	
+	        /* **************************************************************************/
+        	// THIS IS USED FOR LOCAL TESTING ONLY
+	        /* **************************************************************************/
+
+			$scope.createErrorMenu=function() {
+    		$scope.jsonMenuData = [
+                                   {
+                               	    "menuId": 1,
+                               	    "column": 2,
+                               	    "text": "Design",
+                               	    "parentMenuId": null,
+                               	    "url": ""
+                               	  },
+                               	  {
+                               	    "menuId": 2,
+                               	    "column": 3,
+                               	    "text": "Infrastructure Ordering",
+                               	    "parentMenuId": null,
+                               	    "url": ""
+                               	  },
+                               	  {
+                               	    "menuId": 3,
+                               	    "column": 4,
+                               	    "text": "Service Creation",
+                               	    "parentMenuId": null,
+                               	    "url": ""
+                               	  },
+                               	  {
+                               	    "menuId": 4,
+                               	    "column": 5,
+                               	    "text": "Service Mgmt",
+                               	    "parentMenuId": null,
+                               	    "url": ""
+                               	  },
+                               	  {
+                               	    "menuId": 90,
+                               	    "column": 1,
+                               	    "text": "Google",
+                               	    "parentMenuId": 1,
+                               	    "url": "http://google.com"
+                               	  },
+                               	  {
+                               	    "menuId": 91,
+                               	    "column": 1,
+                               	    "text": "Mike Little's Coffee Cup",
+                               	    "parentMenuId": 2,
+                               	    "url": "http://coffee.com"
+                               	  },
+                               	  {
+                               	    "menuId": 92,
+                               	    "column": 2,
+                               	    "text": "Andy and his Astrophotgraphy",
+                               	    "parentMenuId": 3,
+                               	    "url": "http://nightskypix.com"
+                               	  },
+                               	  {
+                               	    "menuId": 93,
+                               	    "column": 1,
+                               	    "text": "JSONLint",
+                               	    "parentMenuId": 4,
+                               	    "url": "http://http://jsonlint.com"
+                               	  },
+                               	  {
+                               	    "menuId": 94,
+                               	    "column": 2,
+                               	    "text": "HROneStop",
+                               	    "parentMenuId": 4,
+                               	    "url": "http://ebiz.sbc.com/hronestop"
+                               	  },
+                               	  {
+                               	    "menuId": 95,
+                               	    "column": 2,
+                               	    "text": "4th Level App4a R16",
+                               	    "parentMenuId": 4,
+                               	    "url": "http://www.e-access.att.com/ecomp_portal_ist/ecompportal/widgets"
+                               	  },
+                               	  {
+                               	    "menuId": 96,
+                               	    "column": 3,
+                               	    "text": "3rd Level App1c R200",
+                               	    "parentMenuId": 4,
+                               	    "url": "http://app1c.com"
+                               	  },
+                               	  {
+                               	    "menuId": 97,
+                               	    "column": 1,
+                               	    "text": "3rd Level App4b R16",
+                               	    "parentMenuId": 5,
+                               	    "url": "http://app4b.com"
+                               	  },
+                               	  {
+                               	    "menuId": 98,
+                               	    "column": 2,
+                               	    "text": "3rd Level App2b R16",
+                               	    "parentMenuId": 5,
+                               	    "url": "http://app2b.com"
+                               	  },
+                               	  {
+                               	    "menuId": 99,
+                               	    "column": 1,
+                               	    "text": "Favorites",
+                               	    "parentMenuId": null,
+                               	    "url": ""
+                               	  }
+                               	];
+	  		$scope.jsonMenuData = unflatten( $scope.jsonMenuData );
+ 	   		$scope.megaMenuDataObject = menuStructureConvert($scope.jsonMenuData);
+//	  		$log.debug(JSON.stringify($scope.jsonMenuData));
+    	}
+		var childItemList="";
+		var parentList = "";
+		try{
+			childItemList = ${menu.childItemList};
+			parentList = ${menu.parentList};
+		}catch(err){
+			console.log("ebz_header: failed to get child/parent lists", err);
+		}
+		
+ 		var pageUrl = window.location.href.split('/')[window.location.href.split('/').length-1];
+		
+		$scope.menuItems = [];
+		for (var i = 0; i < parentList.length; i++) {
+			$scope.openCurrentMenu = false;
+		 if(pageUrl==parentList[i].action)
+				$scope.openCurrentMenu = true;
+			$scope.childItemList = childItemList[i];
+			for(chIndex in  $scope.childItemList){
+				if($scope.childItemList.length>0)
+					if($scope.childItemList[chIndex].action!=null){
+						if($scope.childItemList[chIndex].action==pageUrl)
+							$scope.openCurrentMenu = true;
+					}
+			}
+			$scope.item = {
+				parentLabel : parentList[i].label,
+				parentAction : parentList[i].action,
+				parentImageSrc : parentList[i].imageSrc,
+				open:$scope.openCurrentMenu,
+				childItemList : $scope.childItemList
+			}
+			$scope.menuItems.push($scope.item);
+		}
+		$scope.arrowShow = true;
+		$scope.drawerOpen = false;
+		$scope.subMenuContent = false;
+		$scope.toggleSubMenu = function() {
+			$scope.subMenuContent = !$scope.subMenuContent;
+		};
+
+		var drawerOpen = 'open';
+		if (drawerOpen == 'open') {
+			$scope.drawerOpen = true;
+			$scope.arrowShow = true;
+		} else {
+			$scope.arrowShow = false;
+		}
+		$scope.arrowShow = true;
+		$scope.drawerOpen = false;
+		$scope.toggleDrawer = function() {
+			$scope.drawerOpen = !($scope.drawerOpen);
+			if ($scope.drawerOpen) {
+				$scope.arrowShow = true;				
+				if (document.getElementById('mContent')!=null)
+					document.getElementById('mContent').style.marginLeft = "0px"; 			
+			} else {
+				$scope.arrowShow = false;
+				if (document.getElementById('mContent')!=null)
+					document.getElementById('mContent').style.marginLeft = "-150px";
+			}
+		};
+		//var drawerOpen = getCookie('drawerOpen');
+		if (drawerOpen == 'open') {
+			$scope.drawerOpen = true;
+			$scope.arrowShow = true;
+		} else {
+			$scope.arrowShow = false;
+		}
+		$timeout(function() {
+			detectScrollEvent();
+		}, 800);
+		
+	});
+	
+	app.filter("ellipsis", function(){
+	    return function(text, length){
+	        if (text) {
+	            var ellipsis = text.length > length ? "..." : "";
+	            return text.slice(0, length) + ellipsis;
+	        };
+	        return text;        
+	    }
+	});
+</script>
\ No newline at end of file
diff --git a/epsdk-app-onap/src/main/webapp/WEB-INF/jsp/createnewserviceinstance.jsp b/epsdk-app-onap/src/main/webapp/WEB-INF/jsp/createnewserviceinstance.jsp
new file mode 100644
index 0000000..fd2030e
--- /dev/null
+++ b/epsdk-app-onap/src/main/webapp/WEB-INF/jsp/createnewserviceinstance.jsp
@@ -0,0 +1,146 @@
+<script>
+app.controller('createNewSIController',['$scope','$http',function ($scope,$http) { 
+	
+    $scope.searchCategory = "";
+    $scope.searchString = "";
+ 	$scope.tableData=[];
+ 	$scope.displayData=[];
+ 	$scope.selectedSubscriber = $scope.tableData[0]; 
+    $scope.selectedServiceType = "Select Service Type";
+ 	function escapeRegExp(str) {
+ 		return str.replace(/[\-\[\]\/\{\}\(\)\*\+\?\.\\\^\$\|\&]/g, " ");
+ 	}
+ 	$scope.serviceTypes=["Select Service Type", "uCPE-VMS", "SDN-L3-BONDING", "SDN-ETHERNET-INTERNET"];
+ 	
+ 	$scope.getSubscribers = function(refresh){
+ 
+ 		var refreshTxt = 'refresh_subscribers';
+ 		var getTxt = 'get_subscribers';
+ 		var selectedTxt = getTxt;
+ 		if (refresh)
+ 			selectedTxt = refreshTxt;
+		$http.get(selectedTxt).
+			then(function(response){
+				var data = JSON.parse(response.data.result);
+				$scope.tableData = data['customer'];
+				$scope.initSubscriberList();
+			})
+			.catch(function(data,status){
+			console.log("Error: " + status + " : " + data); 					
+			})
+			.finally(function() {
+				
+			});
+ 		
+ 	}
+ 
+
+ 	$scope.initSubscriberList = function () {
+ 		//$scope.selectedSubscriber = $scope.selectedSubscriber['subscriber-name'] || $scope.tableData[0]['subscriber-name'];
+ 		$scope.selectedSubscriber = 'Select Subscriber Name';
+ 	}
+ 	
+ 	$scope.initSrvcTypeList = function () {
+ 		$scope.selectedServiceType = $scope.serviceTypes[0];  
+ 	}
+
+ 	$scope.getSubscriberDetails = function(selectedSubscriber){
+		if (selectedSubscriber == 'Select Subscriber Name')
+			return;
+ 		$http.get('createsubscriber/' + encodeURIComponent(selectedSubscriber)).
+		then(function(response){
+		//	window.location.href = 'createsubscriberdetails.htm';
+		})
+		.catch(function(data,status){
+		console.log("Error: " + status + " : " + data); 					
+		})
+		.finally(function() {
+			
+		});
+	}
+	
+	$scope.disableSubmitBtn = function (subName, svcType) {
+		return (typeof subName === "undefined") && (svcType == 'Select Service Type');
+ 		//return (subName == 'Select Subscriber Name') && (svcType == 'Select Service Type');
+ 	}
+	
+    $scope.cancelCreateSI = function(selectedSubscriber){
+ 		
+		window.location.href = 'welcome.htm';
+		
+	}
+	
+ 	$scope.getSubscribers(false);
+ 	//$scope.initSubscriberList();
+ 	
+}]);
+
+
+</script>
+
+<div ng-controller="createNewSIController">
+     
+     <h1 class="heading1"><center>Create New Service Instance</center></h1>
+	
+
+<BR>
+ <table> <tr>
+   
+   <td width="5%" align="left">
+	<!--  <a ng-click="getSubscriberDetails(selectedSubscriber['global-customer-id']);" ng-disabled="disableSubmitBtn(selectedSubscriber['subscriber-name'], selectedServiceType);" ><img src="static/fusion/images/plus.png"></a>-->
+  <input type="image" ng-click="getSubscriberDetails(selectedSubscriber['global-customer-id']);" ng-disabled="disableSubmitBtn(selectedSubscriber['subscriber-name'], selectedServiceType);" src="static/fusion/images/plus.png"/>
+   </td>
+   
+	<td style="width:10%" align="left"><div class="fn-ebz-container">	
+		<label  class="fn-ebz-text-label">Subscriber:</label>
+		</div> </td>
+	<td style="width:30%"><div class="fn-ebz-container">
+		<select  ng-model="selectedSubscriber"  ng-options="resultdata['subscriber-name'] for resultdata in tableData" required>
+		<option value="">Select Subscriber Name</option>
+		</select>
+	</div></td>
+	 <td width="5%" align="left">
+		  <input type="image" ng-click="getSubscribers(true);" src="static/fusion/images/refresh.jpg"/>
+      </td>
+	
+	<td width="5%"> </td>
+<td style="width:10%" align="left">
+
+    
+	<div class="fn-ebz-container">	
+		<label  class="fn-ebz-text-label">Service Type:</label>
+	</div> </td>
+    <td style="width:32%"><div class="fn-ebz-container">
+		<select  ng-model="selectedServiceType"  ng-options="sType for sType in serviceTypes" ng-init="initSrvcTypeList();" ></select>
+	</div> </td>
+	
+	<td width="5%"> </td>
+	
+    </tr>
+    </table>
+ 
+	<center>
+		<button type="cancel" ng-click="cancelCreateSI();" att-button size="small">Cancel</button>
+	</center>
+	
+
+
+</div>
+<!--  Temporary solution for footer overlapping the men after talking to EComp SDK developer on 06/16/2016 -->
+<br>
+<br>
+<br>
+<br>
+<br>
+<br>
+<br>
+<br>
+<br>
+<br>
+<br>
+<br>
+<br>
+<br>
+<br>
+
+
diff --git a/epsdk-app-onap/src/main/webapp/WEB-INF/jsp/searchexistingsi.jsp b/epsdk-app-onap/src/main/webapp/WEB-INF/jsp/searchexistingsi.jsp
new file mode 100644
index 0000000..ca840e6
--- /dev/null
+++ b/epsdk-app-onap/src/main/webapp/WEB-INF/jsp/searchexistingsi.jsp
@@ -0,0 +1,81 @@
+<link rel="stylesheet" type="text/css" href="app/vid/styles/subscriberSearch.css" />
+
+<script src="app/vid/scripts/controller/VidApp.js"></script>
+<script src="app/vid/scripts/controller/subscriberSearch.js"></script>
+
+<script src="app/vid/scripts/controller/aaiSubscriberController.js"></script>
+<script src="app/vid/scripts/services/utilityService.js"></script>
+<script src="app/vid/scripts/angular-ui-tree.js"></script>
+
+<link rel="stylesheet" type="text/css" href="app/vid/styles/dialogs.css" />
+
+<script src="app/vid/test/testAaiData.js"></script>
+
+<script src="app/vid/scripts/controller/creationDialogController.js"></script>
+<script src="app/vid/scripts/controller/deleteResumeDialogController.js"></script>
+<script src="app/vid/scripts/controller/detailsDialogController.js"></script>
+<script src="app/vid/scripts/controller/statusDialogController.js"></script>
+<script src="app/vid/scripts/controller/msoCommitController.js"></script>
+
+<script src="app/vid/scripts/services/aaiService.js"></script>
+<script src="app/vid/scripts/services/asdcService.js"></script>
+<script src="app/vid/scripts/services/creationService.js"></script>
+<script src="app/vid/scripts/services/dataService.js"></script>
+<script src="app/vid/scripts/services/deleteResumeService.js"></script>
+<script src="app/vid/scripts/services/detailsService.js"></script>
+<script src="app/vid/scripts/services/statusService.js"></script>
+<script src="app/vid/scripts/services/componentService.js"></script>
+<script src="app/vid/scripts/services/msoService.js"></script>
+<script src="app/vid/scripts/services/propertyService.js"></script>
+<script src="app/vid/scripts/services/utilityService.js"></script>
+
+<script src="app/vid/scripts/directives/extensionsDirective.js"></script>
+<script src="app/vid/scripts/directives/parameterBlockDirective.js"></script>
+<script src="app/vid/scripts/directives/popupWindowDirective.js"></script>
+<script src="app/vid/scripts/directives/progressBarDirective.js"></script>
+
+<script src="app/vid/scripts/constants/componentConstants.js"></script>
+<script src="app/vid/scripts/constants/fieldConstants.js"></script>
+<script src="app/vid/scripts/constants/parameterConstants.js"></script>
+
+<link rel="stylesheet" type="text/css" href="app/vid/styles/aaiGetSubs.css" />
+<link rel="stylesheet" type="text/css" href="app/vid/styles/aaiSubDetails.css" />
+<link rel="stylesheet" type="text/css" href="app/vid/styles/angular-ui-tree.css" />
+<link rel="stylesheet" type="text/css" href="app/vid/styles/vidTree.css" />
+
+<%@ page import="org.openecomp.vid.mso.*"%>
+<%@ page import="org.openecomp.portalsdk.core.util.SystemProperties"%>
+<%
+	String properties = "{msoMaxPolls:" + SystemProperties.getProperty(MsoProperties.MSO_MAX_POLLS)
+			+ ",msoMaxPollingIntervalMsec:"
+			+ SystemProperties.getProperty(MsoProperties.MSO_POLLING_INTERVAL_MSECS) + "}";
+%>
+
+<div ng-controller="aaiSubscriberSearchController"
+	ng-init="init(<%=properties%>);" ng-cloak>
+
+
+ 
+	<div ng-view></div>
+	
+</div>
+
+<!--  Temporary solution for footer overlapping the men after talking to EComp SDK developer on 06/16/2016 -->
+
+<br>
+<br>
+<br>
+<br>
+<br>
+<br>
+<br>
+<br>
+<br>
+<br>
+<br>
+<br>
+<br>
+<br>
+<br>
+
+		
\ No newline at end of file
diff --git a/epsdk-app-onap/src/main/webapp/WEB-INF/jsp/serviceModels.jsp b/epsdk-app-onap/src/main/webapp/WEB-INF/jsp/serviceModels.jsp
index d0c36d4..88131c5 100755
--- a/epsdk-app-onap/src/main/webapp/WEB-INF/jsp/serviceModels.jsp
+++ b/epsdk-app-onap/src/main/webapp/WEB-INF/jsp/serviceModels.jsp
@@ -1,3 +1,4 @@
+<link rel="stylesheet" type="text/css" href="app/vid/external/bootstrap/css/bootstrap.min.css" />
 <link rel="stylesheet" type="text/css" href="app/vid/styles/aaiGetSubs.css" />
 <link rel="stylesheet" type="text/css" href="app/vid/styles/aaiSubDetails.css" />
 <link rel="stylesheet" type="text/css" href="app/vid/styles/aaiSubViewEdit.css" />
@@ -7,20 +8,22 @@
 <link rel="stylesheet" type="text/css" href="app/vid/styles/vidTree.css" />
 <link rel="stylesheet" type="text/css" href="app/vid/styles/dialogs.css" />
 <link rel="stylesheet" type="text/css" href="app/vid/styles/angularjs-datetime-picker.css"></link>
-<link rel="stylesheet" type="text/css" href="app/vid/external/bootstrap/css/bootstrap.min.css" />
 <link rel="stylesheet" type="text/css" href="app/vid/styles/common.css" />
+<link rel="stylesheet" type="text/css" href="app/vid/styles/messageViewer.css" />
 
 	
 	<script>
 	
 	var appDS2 = app;
 </script>
+
 	<script src="app/vid/scripts/controller/VidApp.js"></script>
 	
 <!-- Latest compiled and minified JavaScript -->
 
-<script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/js/bootstrap.min.js" integrity="sha384-Tc5IQib027qvyjSMfHjOMaLkfuWVxZxUPnCJA7l2mCWNIpG9mGCD8wGNIcPD7Txa" crossorigin="anonymous"></script>
+<script src="app/vid/external/bootstrap/js/bootstrap.min.js"></script>
 <script src="app/vid/external/multiselect/angular-bootstrap-multiselect.min.js"></script>
+<script src="app/vid/external/upload-file/ng-file-upload.min.js"></script>
 
 <script src="app/vid/scripts/angular-ui-tree.js"></script>
 
@@ -33,40 +36,56 @@
 <script src="app/vid/scripts/filters/date.filter.js"></script>
 <script src="app/vid/scripts/modals/change-management-manual-tasks-controller/change-management-manual-tasks.controller.js"></script>
 <script src="app/vid/scripts/modals/new-change-management/new-change-management.controller.js"></script>
-<script src="app/vid/scripts/modals/new-scheduler/new-scheduler.controller.js"></script>
+
+<script src="app/vid/scripts/modals/new-test-environment/new-test-environment.controller.js"></script>
+<script src="app/vid/scripts/modals/alert-modal/alert-modal.controller.js"></script>
 <script src="app/vid/scripts/controller/aaiSubscriberController.js"></script>
 <script src="app/vid/scripts/controller/creationDialogController.js"></script>
-<script src="app/vid/scripts/controller/deletionDialogController.js"></script>
+<script src="app/vid/scripts/controller/deleteResumeDialogController.js"></script>
 <script src="app/vid/scripts/controller/detailsDialogController.js"></script>
 <script src="app/vid/scripts/controller/statusDialogController.js"></script>
 <script src="app/vid/scripts/controller/InstantiationController.js"></script>
 <script src="app/vid/scripts/controller/msoCommitController.js"></script>
+<script src="app/vid/scripts/controller/pnfSearchAssociationController.js"></script>
 <script src="app/vid/scripts/controller/ServiceModelController.js"></script>
 <script src="app/vid/scripts/controller/previousVersionDialogController.js"></script>
 <script src="app/vid/scripts/controller/previousVersionContoller.js"></script>
+<script src="app/vid/scripts/controller/AddNetworkNodeController.js"></script>
 <script src="app/vid/scripts/controller/change-management.controller.js"></script>
+<script src="app/vid/scripts/controller/testEnvironmentsController.js"></script>
+<script src="app/vid/scripts/modals/attach-test-env-manifest/attach-test-env-manifest.controller.js"></script>
+<script src="app/vid/scripts/controller/ServiceProxyConfigController.js"></script>
 
 <script src="app/vid/scripts/directives/angularjs-datetime-picker.js"></script>
+<script src="app/vid/scripts/controller/msoCommitModalController.js"></script>
 
-
+<script src="app/vid/scripts/directives/messageViewer.js"></script>
 <script src="app/vid/scripts/directives/extensionsDirective.js"></script>
 <script src="app/vid/scripts/directives/parameterBlockDirective.js"></script>
 <script src="app/vid/scripts/directives/popupWindowDirective.js"></script>
 <script src="app/vid/scripts/directives/progressBarDirective.js"></script>
+<script src="app/vid/scripts/directives/serviceMetadata.js"></script>
+<script src="app/vid/scripts/directives/search.js"></script>
 <script src="app/vid/scripts/services/aaiService.js"></script>
 <script src="app/vid/scripts/services/schedulerService.js"></script>
 <script src="app/vid/scripts/services/asdcService.js"></script>
 <script src="app/vid/scripts/services/componentService.js"></script>
 <script src="app/vid/scripts/services/creationService.js"></script>
 <script src="app/vid/scripts/services/dataService.js"></script>
-<script src="app/vid/scripts/services/deletionService.js"></script>
+<script src="app/vid/scripts/services/deleteResumeService.js"></script>
 <script src="app/vid/scripts/services/detailsService.js"></script>
 <script src="app/vid/scripts/services/statusService.js"></script>
 <script src="app/vid/scripts/services/msoService.js"></script>
 <script src="app/vid/scripts/services/propertyService.js"></script>
 <script src="app/vid/scripts/services/utilityService.js"></script>
 <script src="app/vid/scripts/services/vnfService.js"></script>
+<script src="app/vid/scripts/services/pnfService.js"></script>
 <script src="app/vid/scripts/services/change-management.service.js"></script>
+<script src="app/vid/scripts/modals/cancel-pending-workflow/cancel-pending-workflow.controller.js"></script>
+<script src="app/vid/scripts/services/OwningEntityService.js"></script>
+<script src="app/vid/scripts/services/testEnvironmentsService.js"></script>
+
+
 
 <%@ page import="org.openecomp.vid.mso.*"%>
 <%@ page import="org.openecomp.portalsdk.core.util.SystemProperties"%>
@@ -81,18 +100,20 @@
 	<div ng-view></div>
 </div>
 <!--  Temporary solution for footer overlapping the men after talking to EComp SDK developer on 06/16/2016 -->
-<br>
-<br>
-<br>
-<br>
-<br>
-<br>
-<br>
-<br>
-<br>
-<br>
-<br>
-<br>
-<br>
-<br>
-<br>
+<div class="temporary-solution">
+	<br>
+	<br>
+	<br>
+	<br>
+	<br>
+	<br>
+	<br>
+	<br>
+	<br>
+	<br>
+	<br>
+	<br>
+	<br>
+	<br>
+	<br>
+</div>
diff --git a/epsdk-app-onap/src/main/webapp/WEB-INF/jsp/subscriberdetails.jsp b/epsdk-app-onap/src/main/webapp/WEB-INF/jsp/subscriberdetails.jsp
new file mode 100644
index 0000000..ca92b15
--- /dev/null
+++ b/epsdk-app-onap/src/main/webapp/WEB-INF/jsp/subscriberdetails.jsp
@@ -0,0 +1,184 @@
+<%@ include file="/WEB-INF/fusion/jsp/popup_modal.html" %>
+<div ng-controller="subscriberDetailsController">
+	<div>
+		<h1 class="heading1" style="margin-top:20px;">Selected Subscriber's Service Instance Details:</h1>
+		<div style="margin-top:30px">
+		 	<table att-table table-data="tableData">
+
+			    <thead  att-table-row type="header">
+					<tr>
+					    <th att-table-header key="viewSubDetails">View/Edit</th>
+						<th att-table-header key="global-customer-id">Global Customer ID</th>
+			            <th att-table-header key="subscriber-name">Subscriber Name</th>        
+			            <th att-table-header key="service-type">Service Type</th>    
+			            <th att-table-header key="service-instance-id">Service Instance ID</th>
+			        </tr>
+			    </thead>
+			    <tbody att-table-row type="body" row-repeat="disData in displayData">
+			        <tr>
+			        <td att-table-body>
+			         <div ng-controller="viewEditSubController">
+    	              <a href="#" ng-click="postsubscriberID(disData.subscriberName)" alt="View/Edit">
+                  	     View/Edit
+	                  </a>
+            	   </div>
+            	   </td>
+		            	<td att-table-body >{{disData.globalCustomerId}}</td>
+		            	<td att-table-body >{{disData.subscriberName}}</td>
+		            	<td att-table-body >{{disData.serviceType}}</td>
+		            	<td att-table-body >{{disData.serviceInstanceId}}</td>
+			        </tr>     
+			    </tbody>	  
+			</table> 
+		</div>
+	</div>	
+	<table><tr>
+	<td>
+	<div ng-controller="searchExistingSIController" align="left" >
+		<button type="submit" ng-click="cancelSubDetails();" att-button
+			btn-type="primary" size="small">Cancel</button>
+	</div>
+	</td></tr>
+	
+	</table>
+	
+</div>
+<!--  Temporary solution for footer overlapping the men after talking to EComp SDK developer on 06/25/2016 -->
+
+<br>
+<br>
+<br>
+<br>
+<br>
+<br>
+<br>
+<br>
+<br>
+<br>
+<br>
+<br>
+<br>
+<br>
+<br>
+		
+<script>
+app.controller("subscriberDetailsController", function ($scope,$http,modalService, $modal) { 
+	$scope.tableData=${model.customerInfo};
+	$scope.displayData= [];
+	$scope.subscriberData=[];
+	$scope.serviceInstanceData= new Array();
+	$scope.globalcustomerid = $scope.tableData['global-customer-id'];
+	$scope.subscriberName = $scope.tableData['subscriber-name'];
+	$scope.subscriberData = $scope.tableData['service-subscriptions'];
+	   
+	 $scope.setDisplaynoSTSI = function(){
+    	 $scope.displayData.push({
+				globalCustomerId : $scope.globalcustomerid,
+			    subscriberName   :  $scope.subscriberName,
+			    serviceType : "No Service Subscription Found",
+			    serviceInstanceId : "No Service Instance Found"
+			});
+     }
+	 
+	 $scope.setDisplaynoSI = function(servcType){
+    	 $scope.displayData.push({
+				globalCustomerId : $scope.globalcustomerid,
+			    subscriberName   :  $scope.subscriberName,
+			    serviceType : servcType,
+			    serviceInstanceId : "No Service Instance Found"
+			});
+     }
+	 
+	if ($scope.subscriberData != null)
+		{
+		    if ($scope.numberofSubscribers = $scope.subscriberData['service-subscription'] != null)
+		    	{
+					$scope.numberofSubscribers = $scope.subscriberData['service-subscription'].length;
+					if ($scope.numberofSubscribers > 0)
+						{
+						    var index = 0;
+							for(i=0; i < $scope.numberofSubscribers; i++) {
+								$scope.serviceInstanceData[i] = new Array();
+								var servicesubscription = $scope.subscriberData['service-subscription'][i]; 
+								$scope.serviceInstanceData[i] = servicesubscription['service-instances'];
+								if ($scope.serviceInstanceData[i] != null)
+									{
+									    if ($scope.serviceInstanceData[i]['service-instance'] != null)
+									    	{
+												var numberofserviceInstance = $scope.serviceInstanceData[i]['service-instance'].length;
+												if (numberofserviceInstance > 0)
+													{
+														for(j=0; j < numberofserviceInstance; j++)
+														{
+															$scope.displayData.push({
+																globalCustomerId : $scope.globalcustomerid,
+															    subscriberName   :  $scope.subscriberName,
+															    serviceType : servicesubscription['service-type'],
+															    serviceInstanceId : $scope.serviceInstanceData[i]['service-instance'][j]['service-instance-id']
+															});
+														}
+													}
+												else
+													{
+													   $scope.setDisplaynoSI(servicesubscription['service-type']);
+													}
+									    	}
+									    else
+										{
+									    	$scope.setDisplaynoSI(servicesubscription['service-type']);
+										}
+									}
+								else
+									{
+									   $scope.setDisplaynoSI(servicesubscription['service-type']);
+									}
+					        }
+						}
+					else
+						{
+						  $scope.setDisplaynoSTSI();
+						}
+		    	}
+		    else
+				{
+		    	   $scope.setDisplaynoSTSI();
+				}
+			}
+		else
+		{
+			 $scope.setDisplaynoSTSI();
+		}
+	
+	
+});
+
+app.controller('viewEditSubController',['$scope','$http',function ($scope,$http) { 
+	
+	$scope.postsubscriberID = function(subID){
+		   $.ajax({
+		            url: "vieweditsub/subedit?"+"subscriberID="+encodeURIComponent(subID),
+	                type : "POST",
+	                success:function (response){
+	                    window.location.href = 'instantiate.htm';
+	                },
+	                error:function( jqXHR, status,error ){
+	                	$("#errorInfo").show();
+	                }
+	                
+	        });
+		}
+	
+}]);
+
+app.controller('searchExistingSIController',['$scope','$http',function ($scope,$http) { 
+	
+	$scope.cancelSubDetails = function(selectedSubscriber){
+ 		
+		window.location.href = 'searchexistingsi.htm';
+		
+	}
+	
+}]);
+</script>
+
+    
diff --git a/epsdk-app-onap/src/main/webapp/WEB-INF/jsp/testViewEdit.jsp b/epsdk-app-onap/src/main/webapp/WEB-INF/jsp/testViewEdit.jsp
index 59c8a31..2c80222 100755
--- a/epsdk-app-onap/src/main/webapp/WEB-INF/jsp/testViewEdit.jsp
+++ b/epsdk-app-onap/src/main/webapp/WEB-INF/jsp/testViewEdit.jsp
@@ -7,7 +7,7 @@
 <link rel="stylesheet" type="text/css" href="app/vid/styles/dialogs.css" />
 
 <script src="app/vid/scripts/controller/creationDialogController.js"></script>
-<script src="app/vid/scripts/controller/deletionDialogController.js"></script>
+<script src="app/vid/scripts/controller/deleteResumeDialogController.js"></script>
 <script src="app/vid/scripts/controller/detailsDialogController.js"></script>
 <script src="app/vid/scripts/controller/statusDialogController.js"></script>
 <script src="app/vid/scripts/controller/msoCommitController.js"></script>
@@ -16,7 +16,7 @@
 <script src="app/vid/scripts/services/asdcService.js"></script>
 <script src="app/vid/scripts/services/creationService.js"></script>
 <script src="app/vid/scripts/services/dataService.js"></script>
-<script src="app/vid/scripts/services/deletionService.js"></script>
+<script src="app/vid/scripts/services/deleteResumeService.js"></script>
 <script src="app/vid/scripts/services/detailsService.js"></script>
 <script src="app/vid/scripts/services/statusService.js"></script>
 <script src="app/vid/scripts/services/componentService.js"></script>
@@ -54,7 +54,7 @@
 	<div popup-window class="popupContents" ngx-show="{{popup.isVisible}}"
 		ng-cloak>
 		<div ng-include="'app/vid/scripts/view-models/creationDialog.htm'"></div>
-		<div ng-include="'app/vid/scripts/view-models/deletionDialog.htm'"></div>
+		<div ng-include="'app/vid/scripts/view-models/deleteResumeDialog.htm'"></div>
 		<div ng-include="'app/vid/scripts/view-models/detailsDialog.htm'"
 			onload="autoStartTest();"></div>
 	</div>
diff --git a/epsdk-app-onap/src/main/webapp/WEB-INF/jsp/welcome.jsp b/epsdk-app-onap/src/main/webapp/WEB-INF/jsp/welcome.jsp
index ad5331d..b505909 100755
--- a/epsdk-app-onap/src/main/webapp/WEB-INF/jsp/welcome.jsp
+++ b/epsdk-app-onap/src/main/webapp/WEB-INF/jsp/welcome.jsp
@@ -1,23 +1,27 @@
 <script src="app/vid/external/multiselect/angular-bootstrap-multiselect.min.js"></script>
+<script src="app/vid/external/upload-file/ng-file-upload.min.js"></script>
 <div>
-     <h1 class="heading1">ONAP</h1>
+     <h1 class="heading1">AT&T Domain 2.0 Network</h1>
      <br>
      <h1 class="heading1"><u>Welcome to VID</u></h1>
      <br>
    The Virtual Infrastructure Deployment (VID) application allows infrastructure service deployment operators 
    to instantiate service instances and their constituent parts for Distributed service models required by the 
-   ONAP service operations that manage them, such as Mobility Network Services, etc. 
-   The models are defined by ONAP component SDC. The service 
+   internal AT&T service operations organizations that manage them, such as Mobility Network Services, 
+   Netbond Services, or FlexReach Services. The models are defined by ECOMP component ASDC. The service 
    deployment operator selects the service operations owner and model that they wish to instantiate. After 
-   entry of appropriate data, the operator instructs VID to direct another ONAP component, MSO, to instantiate 
+   entry of appropriate data, the operator instructs VID to direct another ECOMP component, MSO, to instantiate 
    the selected service model. Once the service instance has been instantiated, the service operator can instruct 
    VID to direct MSO to instantiate the service instance's component VNFs, VF Modules, Networks and Volume Groups. 
    The VID user can also search for, and display, existing service instances and direct the instantiation of 
    subsequent instance components.
      <br><br>
-  
-    <h1 class="heading1"><a href="mailto:portal@lists.onap.org" target="_top">Contact Us</a></h1>
-    <a href="mailto:portal@lists.onap.org" target="_top">Please click here to contact us.</a>
+   <h1 class="heading1"><u>About VID</u></h1>
+    VID was originally developed for the October 2016 release by an integrated IT and Labs team, under the 
+      direction of Steve Smokowski and Vivian Pressley.
+      <br><br>
+    <h1 class="heading1"><a href="mailto:VID-Tier4@ist.att.com" target="_top">Contact Us</a></h1>
+    <a href="mailto:VID-Tier4@ist.att.com" target="_top">Please click here to contact us.</a>
 
 	
 
@@ -26,6 +30,7 @@
 
 
 </div>
+<!--  Temporary solution for footer overlapping the men after talking to EComp SDK developer on 06/16/2016 -->
 <br>
 <br>
 <br>
