diff --git a/src/main/java/org/onap/clamp/clds/config/DefaultUserConfiguration.java b/src/main/java/org/onap/clamp/clds/config/DefaultUserConfiguration.java
index a8ff120..9d4e7d0 100644
--- a/src/main/java/org/onap/clamp/clds/config/DefaultUserConfiguration.java
+++ b/src/main/java/org/onap/clamp/clds/config/DefaultUserConfiguration.java
@@ -75,8 +75,10 @@
     protected void configure(HttpSecurity http) {
         try {
             http.csrf().disable().httpBasic().and().authorizeRequests().antMatchers("/restservices/clds/v1/user/**")
-            .authenticated().anyRequest().permitAll().and().logout().and().sessionManagement().maximumSessions(1)
-            .and().invalidSessionUrl("/designer/timeout.html");
+                    .authenticated().anyRequest().permitAll().and().logout()
+                    .logoutUrl("/restservices/clds/v1/user/logout").logoutSuccessUrl("/index.html")
+                    .invalidateHttpSession(true).deleteCookies("JSESSIONID").and().sessionManagement()
+                    .maximumSessions(1);
 
         } catch (Exception e) {
             logger.error(SETUP_WEB_USERS_EXCEPTION_MSG, e);
@@ -105,7 +107,7 @@
             }
             for (CldsUser user : usersList) {
                 auth.inMemoryAuthentication().withUser(user.getUser()).password(user.getPassword())
-                .authorities(user.getPermissionsString()).and().passwordEncoder(passwordEncoder);
+                        .authorities(user.getPermissionsString()).and().passwordEncoder(passwordEncoder);
             }
         } catch (Exception e) {
             logger.error(SETUP_WEB_USERS_EXCEPTION_MSG, e);
@@ -118,8 +120,7 @@
      * CldsUser.
      *
      * @return The array of CldsUser
-     * @throws IOException
-     *         In case of the file is not found
+     * @throws IOException In case of the file is not found
      */
     private CldsUser[] loadUsers() throws IOException {
         logger.info("Load from clds-users.properties");
@@ -134,7 +135,7 @@
             return new BCryptPasswordEncoder(cldsBcryptEncoderStrength);
         } else {
             throw new CldsConfigException(
-                "Invalid clamp.config.security.encoder value. 'bcrypt' is the only option at this time.");
+                    "Invalid clamp.config.security.encoder value. 'bcrypt' is the only option at this time.");
         }
     }
 }
\ No newline at end of file
diff --git a/src/main/resources/application-noaaf.properties b/src/main/resources/application-noaaf.properties
index 52f79be..cec0257 100644
--- a/src/main/resources/application-noaaf.properties
+++ b/src/main/resources/application-noaaf.properties
@@ -2,7 +2,7 @@
 # ============LICENSE_START=======================================================
 # ONAP CLAMP
 # ================================================================================
-# Copyright (C) 2017-2018 AT&T Intellectual Property. All rights
+# Copyright (C) 2017-2019 AT&T Intellectual Property. All rights
 #                             reserved.
 # ================================================================================
 # Licensed under the Apache License, Version 2.0 (the "License");
@@ -51,7 +51,21 @@
 ### server.ssl.key-store=file:/tmp/mykey.jks
 ### server.ssl.key-store-password=mypass
 ### server.ssl.key-password=mypass
-server.port=8080
+server.port=8443
+## Config part for Server certificates
+# Can be a classpath parameter instead of file:/
+server.ssl.key-store=classpath:/clds/aaf/org.onap.clamp.p12
+server.ssl.key-store-password=China in the Spring
+server.ssl.key-password=China in the Spring
+server.ssl.key-store-type=PKCS12
+server.ssl.key-alias=clamp@clamp.onap.org
+
+## Config part for Client certificates
+server.ssl.client-auth=want
+server.ssl.trust-store=classpath:/clds/aaf/truststoreONAPall.jks
+server.ssl.trust-store-password=changeit
+
+#server.http-to-https-redirection.port=8080
 
 server.servlet.context-path=/
 #Modified engine-rest applicationpath
@@ -141,6 +155,7 @@
 clamp.config.policy.pap.url=http4://policy.api.simpledemo.onap.org:6969
 clamp.config.policy.pap.userName=healthcheck
 clamp.config.policy.pap.password=zb!XztG34
+
 clamp.config.policy.pdpUrl1=http://policy.api.simpledemo.onap.org:8081/pdp/ , testpdp, alpha123
 clamp.config.policy.pdpUrl2=http://policy.api.simpledemo.onap.org:8081/pdp/ , testpdp, alpha123
 clamp.config.policy.papUrl=http://policy.api.simpledemo.onap.org:8081/pap/ , testpap, alpha123
diff --git a/ui-react/package.json b/ui-react/package.json
index 358152b..65608be 100644
--- a/ui-react/package.json
+++ b/ui-react/package.json
@@ -1,6 +1,6 @@
 {
   "name": "onap-clamp-ui",
-  "version": "4.1.0-SNAPSHOT",
+  "version": "4.1.1-SNAPSHOT",
   "description": "ONAP Clamp Loop Designer UI",
   "author": "ONAP Clamp Team",
   "license": "Apache-2.0",
@@ -9,7 +9,7 @@
     "registry": "https://nexus3.onap.org/repository/npm.snapshot/"
   },
   "main": "index.js",
-  "proxy": "https://localhost:8080",
+  "proxy": "https://localhost:8443",
   "scripts": {
     "start": "react-scripts start",
     "build": "react-scripts build",
diff --git a/ui-react/src/LoopUI.js b/ui-react/src/LoopUI.js
index 9389ad6..fb595de 100644
--- a/ui-react/src/LoopUI.js
+++ b/ui-react/src/LoopUI.js
@@ -106,6 +106,7 @@
 	constructor() {
 		super();
 		this.getUser = this.getUser.bind(this);
+		this.logout = this.logout.bind(this);
 		this.updateLoopCache = this.updateLoopCache.bind(this);
 		this.loadLoop = this.loadLoop.bind(this);
 		this.closeLoop = this.closeLoop.bind(this);
@@ -120,6 +121,14 @@
 			this.setState({ userName: user })
 		});
 	}
+	
+	logout() {
+		UserService.logout().then(user => {
+			this.setState({ userName: user });
+			window.location.reload();
+		});
+		
+	}
 
 	renderMenuNavBar() {
 		return (
@@ -205,8 +214,8 @@
 		this.setState({ loopCache: new LoopCache({}), loopName: LoopUI.defaultLoopName });
 		this.props.history.push('/');
 	}
-	
- render() {
+
+	render() {
 		return (
 				<StyledMainDiv id="main_div">
 				<Route path="/operationalPolicyModal"
@@ -223,7 +232,8 @@
 				<Route path="/undeploy" render={(routeProps) => (<PerformAction {...routeProps} loopAction="undeploy" loopCache={this.getLoopCache()} updateLoopFunction={this.updateLoopCache}/>)} />
 				<Route path="/deploy" render={(routeProps) => (<DeployLoop {...routeProps} loopCache={this.getLoopCache()} updateLoopFunction={this.updateLoopCache}/>)} />
 				<Route path="/refreshStatus" render={(routeProps) => (<RefreshStatus {...routeProps} loopCache={this.getLoopCache()} updateLoopFunction={this.updateLoopCache}/>)} />
-					<GlobalClampStyle />
+				<Route path="/logout" render={this.logout} />
+				<GlobalClampStyle />
 					{this.renderNavBar()}
 					{this.renderLoopViewer()}
 				</StyledMainDiv>
diff --git a/ui-react/src/api/UserService.js b/ui-react/src/api/UserService.js
index be21e69..37ec73d 100644
--- a/ui-react/src/api/UserService.js
+++ b/ui-react/src/api/UserService.js
@@ -47,6 +47,31 @@
 			return UserService.notLoggedUserName;
 		});
 	}
+	
+	static logout() {
+		return fetch('/restservices/clds/v1/user/logout', {
+			method: 'POST',
+			credentials: 'same-origin',
+		})
+		.then(function (response) {
+			console.debug("logout response received, status code:", response.status);
+			if (response.ok) {
+				return response.text();
+			} else {
+				console.error("logout response is nok");
+				return UserService.notLoggedUserName;
+			}
+		})
+		.then(function (data) {
+			console.info ("User disconnected:",data)
+			return data;
+		})
+		.catch(function(error) {
+			console.warn("logout error received, user set to: ",UserService.notLoggedUserName);
+			console.error("logout error:",error);
+			return UserService.notLoggedUserName;
+		});
+	}
 
 	static getUserInfo() {
 		return fetch('/restservices/clds/v1/clds/cldsInfo', {
diff --git a/ui-react/src/components/dialogs/UserInfo.js b/ui-react/src/components/dialogs/UserInfo.js
index b8d68b8..7d81b38 100644
--- a/ui-react/src/components/dialogs/UserInfo.js
+++ b/ui-react/src/components/dialogs/UserInfo.js
@@ -39,7 +39,6 @@
 		super(props, context);
 
 		this.handleClose = this.handleClose.bind(this);
-		this.initialValues = this.initialValues.bind(this);
 		this.renderReadTemplatePermission = this.renderReadTemplatePermission.bind(this);
 		this.renderReadModelPermission = this.renderReadModelPermission.bind(this);
 		this.renderReadToscaPermission = this.renderReadToscaPermission.bind(this);
@@ -49,23 +48,15 @@
 		this.renderUserName = this.renderUserName.bind(this);
 		this.state = {
 			show: true,
-			userInfo: {permissionReadTemplate: true,
-						permissionReadCl: true,
-						permissionReadTosca: true,
-						permissionUpdateCl: true,
-						permissionUpdateTemplate: true,
-						permissionUpdateTosca: true,
-						userName: 'admin',
-						cldsVersion: '1.0.0'
-						}
+			userInfo: {}
 		};
-
 	}
-	initialValues() {
+	componentWillMount() {
 		UserService.getUserInfo().then(userInfo => {
 			this.setState({ userInfo: userInfo })
 		});
 	}
+
 	handleClose() {
 			this.props.history.push('/');
 	}
@@ -127,7 +118,7 @@
 	}
 	render() {
 		return (
-			<ModalStyled size="lg"  show={this.state.show} onHide={this.handleClose} onEntered={this.initialValues}>
+			<ModalStyled size="lg"  show={this.state.show} onHide={this.handleClose}>
 				<Modal.Header closeButton>
 					<Modal.Title>User Info</Modal.Title>
 				</Modal.Header>
diff --git a/ui-react/src/index.js b/ui-react/src/index.js
index cbbdc65..dd83096 100644
--- a/ui-react/src/index.js
+++ b/ui-react/src/index.js
@@ -23,13 +23,13 @@
 import React from 'react';
 import ReactDOM from 'react-dom';
 import OnapClamp from './OnapClamp';
-import { Route, BrowserRouter } from 'react-router-dom'
+import { Route, MemoryRouter } from 'react-router-dom'
 
 
 const routing = (
-	<BrowserRouter forceRefresh={false}>
+	<MemoryRouter forceRefresh={false}>
 		<Route path="/" component={OnapClamp}/>
-	</BrowserRouter>
+	</MemoryRouter>
 );
 
 export var mainClamp = ReactDOM.render(
