diff --git a/ecomp-portal-BE-common/src/main/java/org/onap/portalapp/portal/scheduler/client/HttpsBasicClient.java b/ecomp-portal-BE-common/src/main/java/org/onap/portalapp/portal/scheduler/client/HttpsBasicClient.java
index d618a6e..c79d6c0 100644
--- a/ecomp-portal-BE-common/src/main/java/org/onap/portalapp/portal/scheduler/client/HttpsBasicClient.java
+++ b/ecomp-portal-BE-common/src/main/java/org/onap/portalapp/portal/scheduler/client/HttpsBasicClient.java
@@ -77,8 +77,7 @@
 	public static Client getClient() throws Exception {
 		String methodName = "getClient";
 		ClientConfig config = new ClientConfig();
-		//config.getFeatures().put(JSONConfiguration.FEATURE_POJO_MAPPING, Boolean.TRUE);
-		//config.getClasses().add(org.onap.aai.util.CustomJacksonJaxBJsonProvider.class);
+
 	
 		SSLContext ctx = null;
 		
@@ -87,17 +86,17 @@
 			SimpleDateFormat dateFormat = DateUtil.getDateFormat();
 			config.property(ClientProperties.SUPPRESS_HTTP_COMPLIANCE_VALIDATION, true);
 			
-			String truststore_path = SchedulerProperties.getProperty(SchedulerProperties.VID_TRUSTSTORE_FILENAME);
+			String truststorePath = SchedulerProperties.getProperty(SchedulerProperties.VID_TRUSTSTORE_FILENAME);
 			logger.debug(EELFLoggerDelegate.debugLogger, dateFormat.format(new Date()) + " " + methodName + " "
 				+ "truststore_path=" +
-				truststore_path);
-			String truststore_password = SchedulerProperties.getProperty(SchedulerProperties.VID_TRUSTSTORE_PASSWD_X);
+				truststorePath);
+			String truststorePassword = SchedulerProperties.getProperty(SchedulerProperties.VID_TRUSTSTORE_PASSWD_X);
 			
 			
-			String decrypted_truststore_password = Password.deobfuscate(truststore_password);
+			String decryptedTruststorePassword = Password.deobfuscate(truststorePassword);
 			//logger.debug(dateFormat.format(new Date()) + " " + methodName + " decrypted_truststore_password=" + decrypted_truststore_password);
 			
-			File tr = new File (truststore_path);
+			File tr = new File (truststorePath);
 			logger.debug(EELFLoggerDelegate.debugLogger, dateFormat.format(new Date()) + " " + methodName + " absolute "
 				+ "truststore path=" + tr.getAbsolutePath());
 			
@@ -105,8 +104,8 @@
 			//String keystore_password = SystemProperties.getProperty(AAIProperties.AAI_KEYSTORE_PASSWD_X);
 			//String decrypted_keystore_password = EncryptedPropValue.decryptTriple(keystore_password);
 			
-		    System.setProperty("javax.net.ssl.trustStore", truststore_path);
-		    System.setProperty("javax.net.ssl.trustStorePassword", decrypted_truststore_password);
+		    System.setProperty("javax.net.ssl.trustStore", truststorePath);
+		    System.setProperty("javax.net.ssl.trustStorePassword", decryptedTruststorePassword);
 			HttpsURLConnection.setDefaultHostnameVerifier( new HostnameVerifier(){
 			    public boolean verify(String string,SSLSession ssls) {
 			        return true;
@@ -134,9 +133,7 @@
 			ctx.init(kmf.getKeyManagers(), null, null);
 			*/
 			ctx.init(null, null, null);
-			//config.getProperties().put(HTTPSProperties.PROPERTY_HTTPS_PROPERTIES, 
-			//							new HTTPSProperties( , ctx));
-			
+
 			return ClientBuilder.newBuilder()
 				.sslContext(ctx)
 				.hostnameVerifier(new HostnameVerifier() {
@@ -148,17 +145,9 @@
 				.build()
 				.register(CustomJacksonJaxBJsonProvider.class);
 			
-		} catch (Exception e) {
-			logger.debug(EELFLoggerDelegate.debugLogger, "Error setting up config: exiting");
-			//System.out.println("Error setting up config: exiting");
-			e.printStackTrace();
-			return null;
-		}
-			
-		//Client client = ClientBuilder.newClient(config);
-		// uncomment this line to get more logging for the request/response
-		// client.addFilter(new LoggingFilter(System.out));
-		
-		//return client;
-	}
-}  
+        } catch (Exception e) {
+            logger.debug(EELFLoggerDelegate.debugLogger, "Error setting up config: exiting", e);
+            return null;
+        }
+    }
+}
diff --git a/ecomp-portal-BE-common/src/main/java/org/onap/portalapp/portal/service/ApplicationsRestClientServiceImpl.java b/ecomp-portal-BE-common/src/main/java/org/onap/portalapp/portal/service/ApplicationsRestClientServiceImpl.java
index 18dabfb..09d7804 100644
--- a/ecomp-portal-BE-common/src/main/java/org/onap/portalapp/portal/service/ApplicationsRestClientServiceImpl.java
+++ b/ecomp-portal-BE-common/src/main/java/org/onap/portalapp/portal/service/ApplicationsRestClientServiceImpl.java
@@ -133,7 +133,7 @@
 		logger.debug(EELFLoggerDelegate.debugLogger, "http response status=" + status);
 		MDC.put(EPCommonSystemProperties.EXTERNAL_API_RESPONSE_CODE, Integer.toString(status));
 		if (!isHttpSuccess(status)) {
-			String errMsg = "Failed. Status=" + status + restPath +"; [" + ((ResponseImpl)response).getStatusInfo().getReasonPhrase().toString()
+			String errMsg = "Failed. Status=" + status + restPath +"; [" + ((ResponseImpl)response).getStatusInfo().getReasonPhrase()
 					+ "]";
 			URL url = null;
 			try {
@@ -255,7 +255,6 @@
 		Response response = getResponse(appId, restPath);
 
 		if (response != null) {
-			//verifyResponse(response);
 			verifyResponse(response,restPath);
 			/* It is not recommendable to use the implementation class org.apache.cxf.jaxrs.impl.ResponseImpl in the code, 
 			but had to force this in-order to prevent conflict with the ResponseImpl class of Jersey Client which 
@@ -278,13 +277,11 @@
 		Response response = getResponse(appId, restPath);
 
 		if (response != null) {
-			//verifyResponse(response);
 			verifyResponse(response,restPath);
 			/* It is not recommendable to use the implementation class org.apache.cxf.jaxrs.impl.ResponseImpl in the code, 
 			but had to force this in-order to prevent conflict with the ResponseImpl class of Jersey Client which 
 			doesn't work as expected. Created Portal-253 for tracking  */
-			String incomingJson = ((ResponseImpl)response).readEntity(String.class);
-			return incomingJson;
+			return ((ResponseImpl)response).readEntity(String.class);
 		}
 		
 		return "";
@@ -308,7 +305,6 @@
 		Response response = getResponse(appId, restPath);
 
 		if (response != null) {
-			//verifyResponse(response);
 			verifyResponse(response,restPath);
 			String str = ((ResponseImpl)response).readEntity(String.class);
 			EcompPortalUtils.logAndSerializeObject(logger, restPath, "GET result =", str);
@@ -316,7 +312,6 @@
 			try {
 				t = mapper.readValue(str, clazz);
 			} catch (Exception e) {
-				e.printStackTrace();
 				EPLogUtil.logEcompError(logger, EPAppMessagesEnum.BeInvalidJsonInput, e);
 			}
 		}
@@ -373,16 +368,12 @@
 		}
 
 		if (response != null) {
-			//verifyResponse(response);
 			verifyResponse(response,restPath);
-			// String contentType = response.getHeaderString("Content-Type");
 			if (clazz != null) {
 				String str = ((ResponseImpl)response).readEntity(String.class);
 				EcompPortalUtils.logAndSerializeObject(logger, restPath, "POST result =", str);
 				try {
 					t = (T) gson.fromJson(str, clazz);
-
-					//t = gson.fromJson(str, clazz);
 				} catch (Exception e) {
 					EPLogUtil.logEcompError(logger, EPAppMessagesEnum.BeInvalidJsonInput, e);
 				}
@@ -430,7 +421,6 @@
 		}
 
 		if (response != null) {
-			//verifyResponse(response);
 			verifyResponse(response,restPath);
 			String str = ((ResponseImpl)response).readEntity(String.class);
 			EcompPortalUtils.logAndSerializeObject(logger, restPath, "PUT result =", str);
diff --git a/ecomp-portal-BE-common/src/main/java/org/onap/portalapp/portal/service/MicroserviceServiceImpl.java b/ecomp-portal-BE-common/src/main/java/org/onap/portalapp/portal/service/MicroserviceServiceImpl.java
index b41d898..451500d 100644
--- a/ecomp-portal-BE-common/src/main/java/org/onap/portalapp/portal/service/MicroserviceServiceImpl.java
+++ b/ecomp-portal-BE-common/src/main/java/org/onap/portalapp/portal/service/MicroserviceServiceImpl.java
@@ -136,7 +136,6 @@
 			dataAccessService.executeNamedQuery("deleteMicroservice", params, null);
 
 		} catch (Exception e) {
-			e.printStackTrace();
 			logger.error(EELFLoggerDelegate.errorLogger, "deleteMicroservice failed", e);
 			throw e;
 		}
diff --git a/ecomp-portal-BE-os/pom.xml b/ecomp-portal-BE-os/pom.xml
index e8c8d5b..7ab6cc4 100644
--- a/ecomp-portal-BE-os/pom.xml
+++ b/ecomp-portal-BE-os/pom.xml
@@ -231,6 +231,11 @@
 			<artifactId>spring-tx</artifactId>
 			<version>${springframework.version}</version>
 		</dependency>
+		<dependency> 
+			<groupId>org.springframework</groupId> 
+			<artifactId>spring-expression</artifactId> 
+			<version>${springframework.version}</version> 
+		</dependency>
 		<dependency>
 			<groupId>org.springframework</groupId>
 			<artifactId>spring-context-support</artifactId>
diff --git a/ecomp-portal-BE-os/src/main/webapp/WEB-INF/jsp/login.jsp b/ecomp-portal-BE-os/src/main/webapp/WEB-INF/jsp/login.jsp
index 99c5af4..2fc9ed3 100644
--- a/ecomp-portal-BE-os/src/main/webapp/WEB-INF/jsp/login.jsp
+++ b/ecomp-portal-BE-os/src/main/webapp/WEB-INF/jsp/login.jsp
@@ -45,7 +45,7 @@
 	value="<%=(SystemProperties.getProperty(SystemProperties.MOBILE_ENABLE)!= null && SystemProperties.getProperty(SystemProperties.MOBILE_ENABLE).trim().equals(\"true\"))%>" />
 
 <!DOCTYPE html>
-<html ng-app="abs">
+<html>
 	<head>
 		<link rel="shortcut icon" href="assets/images/1cc621d2.ecomp_logo.png">
 	    <title>
@@ -54,11 +54,8 @@
 		<meta charset="utf-8">
 		<meta http-equiv="X-UA-Compatible" content="IE=edge">
 		<meta name="viewport" content="width=device-width, initial-scale=1"> 
-	<!-- The above 3 meta tags *must* come first in the head; any other head content must come *after* these tags -->
+		<!-- The above 3 meta tags *must* come first in the head; any other head content must come *after* these tags -->
 		<script src="static/js/jquery-1.10.2.js" type="text/javascript"></script>
-		<script src= "static/ebz/angular_js/angular.js"></script> 
-		<script src= "static/ebz/angular_js/angular-sanitize.js"></script>
-		<script src= "static/ebz/angular_js/gestures.js"></script>
 		<style>
 			.terms {
 				font-family: Verdana,Arial,Helvetica, sans-serif;
@@ -103,7 +100,7 @@
 	<% 
        String frontUrl = SystemProperties.getProperty(EPSystemProperties.FE_URL);
     %>
-	<div ng-controller="externalLoginController">
+	<div>
 		<div class="centered style="-webkit-transform: translateZ(0);background:white, z-index:0;">
 			<div align="center" id="errorInfo" style="display:none; float:left; font-family: Arial; font-size:12px; margin-left:5px">
 				<span style="color:red">Invalid username or password. Please try again.</span>
@@ -119,7 +116,7 @@
 								<label class="login-txt">Login ID:</label>
 							</td>
 							<td>
-								<input type="text" class="login-input-text" ng-model="loginId" maxlength="30" />
+								<input type="text" class="login-input-text" id="loginId" maxlength="30" />
 							</td>
 						</tr>
 						<tr>
@@ -127,13 +124,13 @@
 								<label class="login-txt">Password:</label>
 							</td>
 							<td>
-								<input type="password" class="login-input-text" ng-model="password" maxlength="30" 
+								<input type="password" class="login-input-text" id="password" maxlength="30" 
 									onkeydown="if (event.keyCode == 13) document.getElementById('loginBtn').click()"/>
 							</td>
 						</tr>
 					</table> 
 					<br />
-					<a class="login-btn" id="loginBtn" ng-click="loginExternal();">LOGIN</a>
+					<a class="login-btn" id="loginBtn">LOGIN</a>
 				</div>
 				<br>
 			</div>
@@ -141,55 +138,36 @@
 		<br/><br/><br/><br/><br/><br/><br/>
     </div>
     </body>
-<script>
-var app=angular.module("abs", []);
-app.controller("externalLoginController", function ($scope) { 
-	// Table Data
 	
-	$scope.viewPerPage = 200;
-	$scope.currentPage = 2;
-	$scope.totalPage;
-	$scope.searchCategory = "";
-	$scope.searchString = "";
-	$scope.loginId="";
-	$scope.password="";
-	$scope.loginError=true;
-	$scope.viewPerPage = 200;
-	$scope.currentPage = 2;
-	$scope.totalPage;
-	$scope.searchCategory = "";
-	$scope.searchString = "";
-	$scope.loginId="";
-	$scope.password="";
-	$scope.loginUrl = "";
-	
-	$scope.loginExternal = function() {
-		var postData={loginId:$scope.loginId,password:$scope.password};
-		$.ajax({
-	            url: "open_source/login?",
-                type : "POST",
-		  		 dataType: 'json',
-		  		 contentType: 'application/json',
-		  		 data: JSON.stringify(postData),                
-                success:function (response){
-                  if(response.success=="success"){
-                    //window.location.href = 'applicationsHome';
-                    window.location.href= "<%=frontUrl%>",
-                    sessionStorage.setItem('userId',$scope.loginId)
-                  }else{
-                	$("#errorInfo span").text(response);
-                	//$("#errorInfo").text = response;
-                	$("#errorInfo").show();
-                  }
-                },
-                error:function( jqXHR, status,error ){
-                	$("#errorInfo").show();
-                }
-                
-        });
-
-    };
-});
-</script>
-	
+	<script>
+		$( document ).ready(function() {
+			$(".login-btn").click(function(){
+				var loginIdVal = $("#loginId").val();
+				var passwordVal = $("#password").val();
+				var postData={loginId:loginIdVal,password:passwordVal};
+				$.ajax({
+					url: "open_source/login?",
+					type : "POST",
+					dataType: 'json',
+					contentType: 'application/json',
+					data: JSON.stringify(postData),                
+					success:function (response){
+					  if(response.success=="success"){
+						//window.location.href = 'applicationsHome';
+						window.location.href= "<%=frontUrl%>",
+						sessionStorage.setItem('userId',loginIdVal)
+					  }else{
+						$("#errorInfo span").text(response);
+						//$("#errorInfo").text = response;
+						$("#errorInfo").show();
+					  }
+					},
+					error:function( jqXHR, status,error ){
+						$("#errorInfo").show();
+					}
+						
+				});
+			});
+		});
+	</script>
 </html>
diff --git a/pom.xml b/pom.xml
index 3fe2b71..e26a406 100644
--- a/pom.xml
+++ b/pom.xml
@@ -41,6 +41,7 @@
 		<!-- <sonar.exclusions>**/scripts/**/*,**.js</sonar.exclusions>  -->
 		<sonar.test.exclusions>**/test/**/*,**/tests/**/*</sonar.test.exclusions>
 		<enforcer.skip>false</enforcer.skip>
+		<sonar.scm.exclusions.disabled>true</sonar.scm.exclusions.disabled>
 	</properties>
 
 	<!-- Specify the repositories here to avoid coordination of ~/.m2/settings.xml 
diff --git a/portal-FE-common/src/app/layout/components/footer/footer.component.html b/portal-FE-common/src/app/layout/components/footer/footer.component.html
index 6caf2dd..47a53cd 100644
--- a/portal-FE-common/src/app/layout/components/footer/footer.component.html
+++ b/portal-FE-common/src/app/layout/components/footer/footer.component.html
@@ -41,6 +41,8 @@
             <a class="footer-link" href="{{footerLink}}" target="_blank">
             {{footerLinkText}}</a> {{footerMessage}}
             {{brandName}} Version: {{buildVersion}}
-      <h2 style="color:white; text-align: center;" class="logo-title"> <img src="{{footerLogoImagePath}}"> {{footerLogoText}}</h2>
+      <h2 style="color:white; text-align: center;" class="logo-title"> 
+        <img *ngIf="(footerLogoImagePath !='')" src="{{footerLogoImagePath}}"> {{footerLogoText}}
+      </h2>
       </div>	
 </footer>
\ No newline at end of file
diff --git a/portal-FE-common/src/app/layout/components/footer/footer.component.ts b/portal-FE-common/src/app/layout/components/footer/footer.component.ts
index 9d7559e..422a673 100644
--- a/portal-FE-common/src/app/layout/components/footer/footer.component.ts
+++ b/portal-FE-common/src/app/layout/components/footer/footer.component.ts
@@ -69,7 +69,6 @@
     this.footerLink = this.api.footerLink;
     this.footerLinkText = this.api.footerLinkText;
     this.footerMessage= this.api.footerMessage;
-    this.footerLogoImagePath = "assets/images/global.logo"
     if(this.api.footerLogoImagePath !=''){
       this.footerLogoImagePath= this.api.footerLogoImagePath;
     }
diff --git a/portal-FE-common/src/app/pages/widget-onboarding/widget-onboarding.component.spec.ts b/portal-FE-common/src/app/pages/widget-onboarding/widget-onboarding.component.spec.ts
index e0df154..1ecba2c 100644
--- a/portal-FE-common/src/app/pages/widget-onboarding/widget-onboarding.component.spec.ts
+++ b/portal-FE-common/src/app/pages/widget-onboarding/widget-onboarding.component.spec.ts
@@ -42,17 +42,59 @@
 import { FormsModule } from '@angular/forms';
 import { NgMaterialModule } from 'src/app/ng-material-module';
 import { BrowserAnimationsModule } from '@angular/platform-browser/animations';
+import { WidgetOnboardingService } from 'src/app/shared/services/widget-onboarding/widget-onboarding.service';
+import { Observable } from 'rxjs';
+import { HttpClientModule } from '@angular/common/http';
 
 describe('WidgetOnboardingComponent', () => {
   let component: WidgetOnboardingComponent;
   let fixture: ComponentFixture<WidgetOnboardingComponent>;
+  let widgetList = [{"id" :"1",
+    "name":"ONAP-A",
+    "desc" :"desc",
+    "fileLocation" : "fileLocation",
+    "allowAllUser" : "allowAllUser",
+    "serviceId" : "serviceId",
+    "serviceURL" : "serviceURL",
+    "sortOrder" : "sortOrder",
+    "statusCode" : "statusCode",
+    "widgetRoles": "widgetRoles",
+    "appContent" : "appContent",
+    "appName" : "appName",
+    "file"  : "file",
+    "allUser": false,
+    "saving": "saving"},{"id" :"1",
+    "name":"ONAP-B",
+    "desc" :"desc",
+    "fileLocation" : "fileLocation",
+    "allowAllUser" : "allowAllUser",
+    "serviceId" : "serviceId",
+    "serviceURL" : "serviceURL",
+    "sortOrder" : "sortOrder",
+    "statusCode" : "statusCode",
+    "widgetRoles": "widgetRoles",
+    "appContent" : "appContent",
+    "appName" : "appName",
+    "file"  : "file",
+    "allUser": false,
+    "saving": "saving"}]
+
 
   beforeEach(async(() => {
+    let widgetOnboardingService: WidgetOnboardingService;
+    
+   // widgetOnboardingService = jasmine.createSpyObj('WidgetOnboardingService', ['getManagedWidgets']);
+    //widgetOnboardingService.getManagedWidgets.and.returnValue(Observable.of(widgetList));
     TestBed.configureTestingModule({
       declarations: [ WidgetOnboardingComponent ],
-      imports:[HttpClientTestingModule,FormsModule,NgMaterialModule,BrowserAnimationsModule],
+      imports:[HttpClientModule,FormsModule,NgMaterialModule,BrowserAnimationsModule],
+      providers:[WidgetOnboardingService]
     })
     .compileComponents();
+
+
+    widgetOnboardingService = TestBed.get(WidgetOnboardingService);
+    spyOn(widgetOnboardingService, 'getManagedWidgets').and.returnValue(Observable.of(widgetList));
   }));
 
   beforeEach(() => {
@@ -61,7 +103,14 @@
     fixture.detectChanges();
   });
 
+  
+
   it('should create', () => {
     expect(component).toBeTruthy();
   });
+  it('getOnboardingWidgets should return stubbed value', () => {
+    spyOn(component, 'getOnboardingWidgets').and.callThrough();
+    component.getOnboardingWidgets();
+    expect(component.getOnboardingWidgets).toHaveBeenCalledWith();
+  });
 });
diff --git a/portal-FE-common/src/app/shared/model/widget-onboarding/widget.ts b/portal-FE-common/src/app/shared/model/widget-onboarding/widget.ts
index ba1842f..930d598 100644
--- a/portal-FE-common/src/app/shared/model/widget-onboarding/widget.ts
+++ b/portal-FE-common/src/app/shared/model/widget-onboarding/widget.ts
@@ -5,29 +5,29 @@
  * Copyright © 2019 AT&T Intellectual Property. All rights reserved.
  * ===================================================================
  *
- * Unless otherwise specified?: any; all software contained herein is licensed
- * under the Apache License?: any; Version 2.0 (the "License");
+ * Unless otherwise specified, all software contained herein is licensed
+ * under the Apache License, Version 2.0 (the "License");
  * you may not use this software 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?: any; software
- * distributed under the License is distributed on an "AS IS" BASIS?: any;
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND?: any; either express or implied.
+ * 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.
  *
- * Unless otherwise specified?: any; all documentation contained herein is licensed
- * under the Creative Commons License?: any; Attribution 4.0 Intl. (the "License");
+ * Unless otherwise specified, all documentation contained herein is licensed
+ * under the Creative Commons License, Attribution 4.0 Intl. (the "License");
  * you may not use this documentation except in compliance with the License.
  * You may obtain a copy of the License at
  *
  *             https://creativecommons.org/licenses/by/4.0/
  *
- * Unless required by applicable law or agreed to in writing?: any; documentation
- * distributed under the License is distributed on an "AS IS" BASIS?: any;
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND?: any; either express or implied.
+ * Unless required by applicable law or agreed to in writing, documentation
+ * 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.
  *
@@ -51,4 +51,4 @@
     file  ?: any;
     allUser ?: boolean;
     saving ?: any
-}
\ No newline at end of file
+}
diff --git a/portal-FE-os/package.json b/portal-FE-os/package.json
index 77cef69..4371bc4 100644
--- a/portal-FE-os/package.json
+++ b/portal-FE-os/package.json
@@ -61,11 +61,13 @@
     "jasmine-core": "~2.99.1",
     "jasmine-spec-reporter": "~4.2.1",
     "karma": "~3.0.0",
-    "karma-chrome-launcher": "~2.2.0",
+    "karma-chrome-launcher": "^2.2.0",
     "karma-coverage-istanbul-reporter": "~2.0.1",
     "karma-jasmine": "~1.1.2",
     "karma-jasmine-html-reporter": "^0.2.2",
+    "karma-phantomjs-launcher": "^1.0.4",
     "protractor": "~5.4.0",
+    "puppeteer": "^2.1.1",
     "sonar-scanner": "^3.1.0",
     "ts-node": "~7.0.0",
     "tslint": "~5.11.0",
diff --git a/portal-FE-os/pom.xml b/portal-FE-os/pom.xml
index 21bdd50..fd497e1 100644
--- a/portal-FE-os/pom.xml
+++ b/portal-FE-os/pom.xml
@@ -4,7 +4,7 @@
 
 	<groupId>org.onap.portal</groupId>
 	<artifactId>portal-FE-os</artifactId>
-	<version>3.1.0</version>
+	<version>3.2.0</version>
 
 	<properties>
 		<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
@@ -18,6 +18,7 @@
 		<sonar.test.inclusions>**/*.spec.ts</sonar.test.inclusions>
 		<sonar.tests>src</sonar.tests>
 		<sonar.sourceEncoding>UTF-8</sonar.sourceEncoding>
+		<sonar.nodejs.executable>${project.basedir}\node\</sonar.nodejs.executable>
 	</properties>
 
 	<build>
diff --git a/portal-FE-os/src/karma.conf.js b/portal-FE-os/src/karma.conf.js
index b6e0042..154ad58 100644
--- a/portal-FE-os/src/karma.conf.js
+++ b/portal-FE-os/src/karma.conf.js
@@ -1,6 +1,7 @@
 // Karma configuration file, see link for more information
 // https://karma-runner.github.io/1.0/config/configuration-file.html
 
+process.env.CHROME_BIN = require('puppeteer').executablePath()
 module.exports = function (config) {
   config.set({
     basePath: '',
@@ -10,6 +11,7 @@
       require('karma-chrome-launcher'),
       require('karma-jasmine-html-reporter'),
       require('karma-coverage-istanbul-reporter'),
+      require('karma-phantomjs-launcher'),
       require('@angular-devkit/build-angular/plugins/karma')
     ],
     client: {
@@ -25,7 +27,7 @@
     colors: true,
     logLevel: config.LOG_INFO,
     autoWatch: true,
-    browsers: ['Chrome'],
+    browsers: ['ChromeHeadless'],
     singleRun: false
   });
 };
\ No newline at end of file
