diff --git a/portal-BE/src/main/java/org/onap/portal/controller/UserController.java b/portal-BE/src/main/java/org/onap/portal/controller/UserController.java
new file mode 100644
index 0000000..a679192
--- /dev/null
+++ b/portal-BE/src/main/java/org/onap/portal/controller/UserController.java
@@ -0,0 +1,120 @@
+/*
+ * ============LICENSE_START==========================================
+ * ONAP Portal
+ * ===================================================================
+ * Copyright (C) 2019 AT&T Intellectual Property. All rights reserved.
+ * ===================================================================
+ * Modifications Copyright (c) 2019 Samsung
+ * ===================================================================
+ *
+ * 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, 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, 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, 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.
+ *
+ * ============LICENSE_END============================================
+ *
+ *
+ */
+
+package org.onap.portal.controller;
+
+import java.security.Principal;
+import org.onap.portal.domain.db.fn.FnUser;
+import org.onap.portal.domain.dto.PortalRestResponse;
+import org.onap.portal.domain.dto.PortalRestStatusEnum;
+import org.onap.portal.domain.dto.ProfileDetail;
+import org.onap.portal.service.fn.FnUserService;
+import org.onap.portalsdk.core.logging.logic.EELFLoggerDelegate;
+import org.onap.portalsdk.core.onboarding.util.CipherUtil;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RequestMethod;
+import org.springframework.web.bind.annotation.RestController;
+
+@RestController
+public class UserController {
+
+	private static final String HIDDEN_DEFAULT_PASSWORD = "*****";
+	private EELFLoggerDelegate logger = EELFLoggerDelegate.getLogger(UserController.class);
+
+	private final FnUserService userService;
+
+	@Autowired
+	public UserController(FnUserService userService) {
+		this.userService = userService;
+	}
+
+	@RequestMapping(value = { "/portalApi/loggedinUser" }, method = RequestMethod.GET, produces = "application/json")
+	public PortalRestResponse<ProfileDetail> getLoggedinUser(Principal principal) {
+		PortalRestResponse<ProfileDetail> portalRestResponse = null;
+		try {
+			FnUser user = userService.loadUserByUsername(principal.getName());
+			ProfileDetail profileDetail = new ProfileDetail(user.getFirstName(), user.getLastName(),
+					user.getMiddleName(), user.getEmail(), user.getLoginId(),  HIDDEN_DEFAULT_PASSWORD);
+			portalRestResponse = new PortalRestResponse<>(PortalRestStatusEnum.OK, "success",
+					profileDetail);
+		} catch (Exception e) {
+			portalRestResponse = new PortalRestResponse<>(PortalRestStatusEnum.ERROR, e.getMessage(),
+					null);
+			logger.error(EELFLoggerDelegate.errorLogger, "getLoggedinUser failed", e);
+		}
+		return portalRestResponse;
+	}
+
+	@RequestMapping(value = {
+			"/portalApi/modifyLoggedinUser" }, method = RequestMethod.PUT, produces = "application/json")
+	public PortalRestResponse<String> modifyLoggedinUser(Principal principal,
+			@RequestBody ProfileDetail profileDetail) {
+		PortalRestResponse<String> portalRestResponse = null;
+		try {
+			String errorMsg = "";
+			if (profileDetail.getFirstName().equals("") || profileDetail.getLastName().equals("")
+					|| profileDetail.getEmail().equals("") || profileDetail.getLoginId().equals("")
+					|| profileDetail.getLoginPassword().equals("")) {
+				errorMsg = "Required field(s) is missing";
+				portalRestResponse = new PortalRestResponse<>(PortalRestStatusEnum.ERROR, errorMsg, null);
+				logger.error(EELFLoggerDelegate.errorLogger, "modifyLoggedinUser failed", errorMsg);
+			} else {
+				FnUser user = userService.loadUserByUsername(principal.getName());
+				user.setFirstName(profileDetail.getFirstName());
+				user.setLastName(profileDetail.getLastName());
+				user.setEmail(profileDetail.getEmail());
+				user.setMiddleName(profileDetail.getMiddleName());
+				user.setLoginId(profileDetail.getLoginId());
+				if (!HIDDEN_DEFAULT_PASSWORD.equals(profileDetail.getLoginPassword())){
+					user.setLoginPwd(CipherUtil.encryptPKC(profileDetail.getLoginPassword()));
+				}
+				userService.saveFnUser(principal, user);
+				// Update user info in the session
+				portalRestResponse = new PortalRestResponse<>(PortalRestStatusEnum.OK, "success", null);
+			}
+		} catch (Exception e) {
+			portalRestResponse = new PortalRestResponse<>(PortalRestStatusEnum.ERROR, e.toString(), null);
+			logger.error(EELFLoggerDelegate.errorLogger, "modifyLoggedinUser failed", e);
+		}
+		return portalRestResponse;
+	}
+}
diff --git a/portal-BE/src/main/java/org/onap/portal/domain/dto/ProfileDetail.java b/portal-BE/src/main/java/org/onap/portal/domain/dto/ProfileDetail.java
new file mode 100644
index 0000000..e43c14d
--- /dev/null
+++ b/portal-BE/src/main/java/org/onap/portal/domain/dto/ProfileDetail.java
@@ -0,0 +1,59 @@
+/*-
+ * ============LICENSE_START==========================================
+ * ONAP Portal
+ * ===================================================================
+ * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.
+ * ===================================================================
+ *
+ * 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, 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, 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, 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.
+ *
+ * ============LICENSE_END============================================
+ *
+ *
+ */
+package org.onap.portal.domain.dto;
+
+
+import lombok.AllArgsConstructor;
+import lombok.Getter;
+import lombok.NoArgsConstructor;
+import lombok.Setter;
+
+@Setter
+@Getter
+@NoArgsConstructor
+@AllArgsConstructor
+public class ProfileDetail {
+
+       private String firstName;
+       private String lastName;
+       private String middleName;
+       private String email;
+       private String loginId;
+       private String loginPassword;
+
+}
diff --git a/portal-BE/src/main/java/org/onap/portal/service/fn/FnUserService.java b/portal-BE/src/main/java/org/onap/portal/service/fn/FnUserService.java
index eb40a52..aedac49 100644
--- a/portal-BE/src/main/java/org/onap/portal/service/fn/FnUserService.java
+++ b/portal-BE/src/main/java/org/onap/portal/service/fn/FnUserService.java
@@ -101,7 +101,7 @@
               return fnUserDao.getUsersByOrgUserId(orgIds).orElse(new ArrayList<>());
        }
 
-       List<FnUser> etActiveUsers(){
+       List<FnUser> getActiveUsers(){
               return fnUserDao.findAll().stream().filter(fnUser -> "Y".equals(fnUser.getActiveYn())).collect(Collectors.toList());
        }
 
