diff --git a/portal-BE/src/main/java/org/onap/portal/controller/LanguageController.java b/portal-BE/src/main/java/org/onap/portal/controller/LanguageController.java
index 8f2e50e..90ea068 100644
--- a/portal-BE/src/main/java/org/onap/portal/controller/LanguageController.java
+++ b/portal-BE/src/main/java/org/onap/portal/controller/LanguageController.java
@@ -107,7 +107,7 @@
                             response.setStatus(PortalRestStatusEnum.OK);
                      } else {
                             response.setMessage("FAILURE");
-                            response.setResponse("User for id:" + userId + " do not exist");
+                            response.setResponse("User for id: " + userId + " do not exist");
                             response.setStatus(PortalRestStatusEnum.ERROR);
                      }
               } catch (Exception e) {
@@ -120,11 +120,11 @@
        }
 
        @GetMapping(value = "/languageSetting/user/{loginId}", produces = MediaType.APPLICATION_JSON_VALUE)
-       public FnLanguage getUserLanguage(@PathVariable("loginId") final Long loginId) {
-              if (fnUserService.getUser(loginId).isPresent()) {
-                     return Optional.of(fnUserService.getUser(loginId).get().getLanguageId()).orElse(new FnLanguage());
+       public FnLanguageDto getUserLanguage(final Principal principal, @PathVariable("loginId") final Long loginId) {
+              if (fnUserService.existById(loginId)) {
+                     return fnLanguageMapper.fnLanguageToDto(Optional.of(fnUserService.getUser(loginId).get().getLanguageId()).orElse(new FnLanguage()));
               }
-              return new FnLanguage();
+              return new FnLanguageDto();
        }
 
        @PostMapping(value = "/language", consumes = MediaType.APPLICATION_JSON_VALUE, produces = MediaType.APPLICATION_JSON_VALUE)
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
index d514dfa..d339e45 100644
--- a/portal-BE/src/main/java/org/onap/portal/controller/UserController.java
+++ b/portal-BE/src/main/java/org/onap/portal/controller/UserController.java
@@ -111,7 +111,7 @@
                             user.setMiddleName(profileDetail.getMiddleName());
                             user.setLoginId(profileDetail.getLoginId());
                             if (!HIDDEN_DEFAULT_PASSWORD.equals(profileDetail.getLoginPassword())) {
-                                   user.setLoginPwd(CipherUtil.encryptPKC(profileDetail.getLoginPassword()));
+                                   user.setLoginPwd(CipherUtil.encryptPKC(profileDetail.getLoginPassword(), "AGLDdG4D04BKm2IxIWEr8o==!"));
                             }
                             userService.saveFnUser(principal, user);
                             // Update user info in the session
diff --git a/portal-BE/src/main/java/org/onap/portal/dao/fn/FnUserDao.java b/portal-BE/src/main/java/org/onap/portal/dao/fn/FnUserDao.java
index 458cc66..8dbfb70 100644
--- a/portal-BE/src/main/java/org/onap/portal/dao/fn/FnUserDao.java
+++ b/portal-BE/src/main/java/org/onap/portal/dao/fn/FnUserDao.java
@@ -58,5 +58,12 @@
        FnUser getOne(Long integer);
 
        @Query
-       Optional<List<FnUser>> getUsersByOrgUserId(@Param("orgIds") String orgIds);
+       Optional<List<FnUser>> getUserWithOrgUserId(final @Param("orgId") String orgId);
+
+       @Query
+       Optional<List<FnUser>> getUsersByOrgIds(final @Param("orgIds") List<String> orgIds);
+
+       @Query
+       Optional<List<FnUser>> getActiveUsers();
+
 }
diff --git a/portal-BE/src/main/java/org/onap/portal/domain/db/fn/FnUser.java b/portal-BE/src/main/java/org/onap/portal/domain/db/fn/FnUser.java
index cbca44c..1399dd5 100644
--- a/portal-BE/src/main/java/org/onap/portal/domain/db/fn/FnUser.java
+++ b/portal-BE/src/main/java/org/onap/portal/domain/db/fn/FnUser.java
@@ -43,7 +43,6 @@
 import java.time.LocalDateTime;
 import java.util.Collection;
 import java.util.Set;
-import java.util.UUID;
 import java.util.stream.Collectors;
 import javax.persistence.CascadeType;
 import javax.persistence.Column;
@@ -58,6 +57,8 @@
 import javax.persistence.ManyToOne;
 import javax.persistence.NamedNativeQueries;
 import javax.persistence.NamedNativeQuery;
+import javax.persistence.NamedQueries;
+import javax.persistence.NamedQuery;
 import javax.persistence.OneToMany;
 import javax.persistence.SequenceGenerator;
 import javax.persistence.Table;
@@ -72,7 +73,6 @@
 import lombok.NoArgsConstructor;
 import lombok.Setter;
 import org.hibernate.annotations.DynamicUpdate;
-import org.hibernate.annotations.GenericGenerator;
 import org.hibernate.validator.constraints.SafeHtml;
 import org.onap.portal.domain.db.cr.CrReportFileHistory;
 import org.onap.portal.domain.db.ep.EpPersUserWidgetPlacement;
@@ -148,13 +148,18 @@
         )
 */
 
-@NamedNativeQueries({
-        @NamedNativeQuery(
-                name = "getUsersByOrgUserId",
-                query = "SELECT * FROM FnUser WHERE where org_user_id in :orgIds"
+@NamedQueries({
+        @NamedQuery(
+                name = "FnUser.getUserWithOrgUserId",
+                query = "FROM FnUser WHERE orgUserId = :orgId"),
+        @NamedQuery(
+                name = "FnUser.getActiveUsers",
+                query = "FROM FnUser WHERE activeYn = 'Y'"),
+        @NamedQuery(
+                name = "FnUser.getUsersByOrgIds",
+                query = "FROM FnUser WHERE orgUserId IN :orgIds"
         )
 })
-
 @Table(name = "fn_user", indexes = {
         @Index(name = "fn_user_address_id", columnList = "address_id"),
         @Index(name = "fn_user_alert_method_cd", columnList = "alert_method_cd"),
@@ -350,7 +355,7 @@
        private boolean guest;
        @ManyToMany(cascade = CascadeType.ALL, fetch = FetchType.LAZY, mappedBy = "fnUserList")
        private Set<CrReportFileHistory> crReportFileHistorie;
-       @ManyToMany(cascade = CascadeType.ALL, fetch = FetchType.LAZY)
+       @ManyToMany(cascade = CascadeType.ALL, fetch = FetchType.EAGER)
        private Set<FnRole> fnRoles;
        @ManyToMany(cascade = CascadeType.ALL, fetch = FetchType.LAZY)
        private Set<FnMenuFunctional> fnRoleList;
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 aedac49..8c5806e 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
@@ -59,7 +59,7 @@
 @Transactional
 public class FnUserService implements UserDetailsService {
 
-       private final FnUserDao fnUserDao;
+       private FnUserDao fnUserDao;
 
        @Autowired
        public FnUserService(FnUserDao fnUserDao) {
@@ -71,7 +71,7 @@
        }
 
        @Override
-       public FnUser loadUserByUsername(String username) throws UsernameNotFoundException {
+       public FnUser loadUserByUsername(final String username) throws UsernameNotFoundException {
               Optional<FnUser> fnUser = fnUserDao.findByLoginId(username);
               if (fnUser.isPresent()) {
                      return fnUser.get();
@@ -80,36 +80,29 @@
               }
        }
 
-       public Optional<FnUser> getUser(Long id) {
+       public Optional<FnUser> getUser(final Long id) {
               return Optional.of(fnUserDao.getOne(id));
        }
 
        List<FnUser> getUserWithOrgUserId(final String orgUserIdValue){
-              Optional<List<FnUser>> fnUsers =  Optional.of(fnUserDao.findAll()
-                      .stream()
-                      .filter(fnUser -> orgUserIdValue.equals(fnUser.getOrgUserId()))
-                      .collect(Collectors.toList()));
-              return fnUsers.orElse(new ArrayList<>());
+              return fnUserDao.getUserWithOrgUserId(orgUserIdValue).orElse(new ArrayList<>());
        }
 
-       List<FnUser> getUsersByOrgIdsNotificationsResult(List<String> orgIds){
+       List<FnUser> getUsersByOrgIds(final List<String> orgIds){
               String ids = "(" + orgIds.stream().map(s -> "'" + s + "'").collect(Collectors.joining()) + ")";
-              return fnUserDao.getUsersByOrgUserId(ids).orElse(new ArrayList<>());
+              return fnUserDao.getUsersByOrgIds(orgIds).orElse(new ArrayList<>());
        }
 
-       List<FnUser> getUsersByOrgIdsNotificationsResult(String orgIds){
-              return fnUserDao.getUsersByOrgUserId(orgIds).orElse(new ArrayList<>());
-       }
 
        List<FnUser> getActiveUsers(){
-              return fnUserDao.findAll().stream().filter(fnUser -> "Y".equals(fnUser.getActiveYn())).collect(Collectors.toList());
+              return fnUserDao.getActiveUsers().orElse(new ArrayList<>());
        }
 
-       public void deleteUser(FnUser fnUser){
+       public void deleteUser(final FnUser fnUser){
               fnUserDao.delete(fnUser);
        }
 
-       public boolean existById(Long userId) {
+       public boolean existById(final Long userId) {
               return fnUserDao.existsById(userId);
        }
 }
diff --git a/portal-BE/src/test/java/org/onap/portal/controller/LanguageControllerTest.java b/portal-BE/src/test/java/org/onap/portal/controller/LanguageControllerTest.java
index 0f9f09a..0977f28 100644
--- a/portal-BE/src/test/java/org/onap/portal/controller/LanguageControllerTest.java
+++ b/portal-BE/src/test/java/org/onap/portal/controller/LanguageControllerTest.java
@@ -41,6 +41,7 @@
 package org.onap.portal.controller;
 
 import static org.junit.jupiter.api.Assertions.assertEquals;
+import static org.junit.jupiter.api.Assertions.assertNull;
 
 import org.junit.jupiter.api.Test;
 import org.junit.runner.RunWith;
@@ -49,6 +50,7 @@
 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.fn.FnLanguageDto;
 import org.onap.portal.service.fn.FnUserService;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.boot.test.context.SpringBootTest;
@@ -139,6 +141,50 @@
               fnLanguageDao.delete(fnLanguage);
        }
 
+       @Test
+       void setUpUserLanguageWrongUserId(){
+              //Given
+              FnLanguage fnLanguage = new FnLanguage();
+              fnLanguage.setLanguageName("Polish");
+              fnLanguage.setLanguageAlias("PL");
+
+              PortalRestResponse<String> expected = new PortalRestResponse<>();
+              expected.setMessage("FAILURE");
+              expected.setStatus(PortalRestStatusEnum.ERROR);
+              expected.setResponse("User for id: 345 do not exist");
+
+              languageController.saveLanguage(principal, fnLanguage);
+              PortalRestResponse<String> actual = languageController.setUpUserLanguage(principal, fnLanguage, 345L);
+
+              assertEquals(expected.getMessage(), actual.getMessage());
+              assertEquals(expected.getStatus(), actual.getStatus());
+              assertEquals(expected.getResponse(), actual.getResponse());
 
 
+              //Clean up
+              fnLanguageDao.delete(fnLanguage);
+       }
+
+
+       @Test
+       void getUserLanguage() {
+              FnLanguageDto expected = new FnLanguageDto();
+              expected.setLanguageAlias("EN");
+              expected.setLanguageName("English");
+
+              FnLanguageDto actual = languageController.getUserLanguage(principal, 1L);
+
+              assertEquals(expected.getLanguageAlias(), actual.getLanguageAlias());
+              assertEquals(expected.getLanguageName(), actual.getLanguageName());
+       }
+
+       @Test
+       void getUserLanguageNotExistingUser() {
+              FnLanguageDto expected = new FnLanguageDto();
+
+              FnLanguageDto actual = languageController.getUserLanguage(principal, 456L);
+
+              assertNull(actual.getLanguageAlias());
+              assertNull(actual.getLanguageName());
+       }
 }
\ No newline at end of file
diff --git a/portal-BE/src/test/java/org/onap/portal/controller/UserControllerTest.java b/portal-BE/src/test/java/org/onap/portal/controller/UserControllerTest.java
index b216799..e3f1f7b 100644
--- a/portal-BE/src/test/java/org/onap/portal/controller/UserControllerTest.java
+++ b/portal-BE/src/test/java/org/onap/portal/controller/UserControllerTest.java
@@ -39,13 +39,17 @@
 package org.onap.portal.controller;
 
 import static org.junit.jupiter.api.Assertions.assertEquals;
+import static org.junit.jupiter.api.Assertions.assertNotEquals;
 
-import lombok.AllArgsConstructor;
 import org.junit.jupiter.api.Test;
 import org.junit.runner.RunWith;
+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.onboarding.exception.CipherUtilException;
+import org.onap.portalsdk.core.onboarding.util.CipherUtil;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.boot.test.context.SpringBootTest;
 import org.springframework.security.authentication.UsernamePasswordAuthenticationToken;
@@ -54,14 +58,18 @@
 
 @RunWith(SpringRunner.class)
 @SpringBootTest
-@TestPropertySource(locations="classpath:test.properties")
+@TestPropertySource(locations = "classpath:test.properties")
 class UserControllerTest {
-       private UsernamePasswordAuthenticationToken principal = new UsernamePasswordAuthenticationToken("demo", "XZa6pS1vC0qKXWtn9wcZWdLx61L0=");
 
+       private UsernamePasswordAuthenticationToken principal = new UsernamePasswordAuthenticationToken("demo",
+               "XZa6pS1vC0qKXWtn9wcZWdLx61L0=");
+
+       private final FnUserService userService;
        private final UserController userController;
 
        @Autowired
-       UserControllerTest(UserController userController) {
+       UserControllerTest(final FnUserService userService, final UserController userController) {
+              this.userService = userService;
               this.userController = userController;
        }
 
@@ -73,7 +81,8 @@
               expectedDetails.setEmail("demo@openecomp.org");
               expectedDetails.setLoginId("demo");
               expectedDetails.setLoginPassword("*****");
-              PortalRestResponse<ProfileDetail> expected = new PortalRestResponse<>(PortalRestStatusEnum.OK, "success", expectedDetails);
+              PortalRestResponse<ProfileDetail> expected = new PortalRestResponse<>(PortalRestStatusEnum.OK, "success",
+                      expectedDetails);
 
               PortalRestResponse<ProfileDetail> actual = userController.getLoggedinUser(principal);
 
@@ -92,7 +101,8 @@
               expectedDetails.setLoginPassword("*****");
 
               PortalRestResponse<String> actual = userController.modifyLoggedinUser(principal, expectedDetails);
-              PortalRestResponse<String> expected = new PortalRestResponse<>(PortalRestStatusEnum.ERROR, "lastName must not be blank", null);
+              PortalRestResponse<String> expected = new PortalRestResponse<>(PortalRestStatusEnum.ERROR,
+                      "lastName must not be blank", null);
               assertEquals(expected, actual);
        }
 
@@ -109,4 +119,26 @@
               PortalRestResponse<String> expected = new PortalRestResponse<>(PortalRestStatusEnum.OK, "success", null);
               assertEquals(expected, actual);
        }
+
+       @Test
+       void modifyLoggedinUserChangePassword() throws CipherUtilException {
+              ProfileDetail expectedDetails = new ProfileDetail();
+              expectedDetails.setFirstName("Demo");
+              expectedDetails.setLastName("User");
+              expectedDetails.setEmail("demo@openecomp.org");
+              expectedDetails.setLoginId("demo");
+              expectedDetails.setLoginPassword("123password");
+
+              FnUser user = userService.loadUserByUsername(principal.getName());
+              String oldPassword = user.getLoginPwd();
+
+              PortalRestResponse<String> actual = userController.modifyLoggedinUser(principal, expectedDetails);
+              PortalRestResponse<String> expected = new PortalRestResponse<>(PortalRestStatusEnum.OK, "success", null);
+
+              FnUser user2 = userService.loadUserByUsername(principal.getName());
+              String newPassword = user2.getLoginPwd();
+
+              assertEquals(expected, actual);
+              assertNotEquals(oldPassword, newPassword);
+       }
 }
\ No newline at end of file
diff --git a/portal-BE/src/test/java/org/onap/portal/service/fn/FnUserServiceTest.java b/portal-BE/src/test/java/org/onap/portal/service/fn/FnUserServiceTest.java
index 3f242fb..26731ea 100644
--- a/portal-BE/src/test/java/org/onap/portal/service/fn/FnUserServiceTest.java
+++ b/portal-BE/src/test/java/org/onap/portal/service/fn/FnUserServiceTest.java
@@ -43,6 +43,10 @@
 import static org.junit.jupiter.api.Assertions.*;
 
 import java.time.LocalDateTime;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.Collections;
+import java.util.List;
 import org.junit.jupiter.api.Test;
 import org.junit.runner.RunWith;
 import org.onap.portal.domain.db.fn.FnLanguage;
@@ -167,4 +171,21 @@
               assertEquals(expected.getSiloStatus(), actual.getSiloStatus());
               assertEquals(expected.getLanguageId(), actual.getLanguageId());
        }
+
+       @Test
+       void getActiveUsers() {
+              assertEquals(12, fnUserService.getActiveUsers().size());
+       }
+
+       @Test
+       void getUserWithOrgUserId() {
+              assertEquals(1, fnUserService.getUserWithOrgUserId("cs0008").size());
+       }
+
+       @Test
+       void getUserWithOrgUserIds() {
+              List<String> ids = new ArrayList<>(Arrays.asList("cs0008", "op0001"));
+              assertEquals(2, fnUserService.getUsersByOrgIds(ids).size());
+       }
+
 }
\ No newline at end of file
