diff --git a/kypo2-api-user-and-group/src/main/java/cz/muni/ics/kypo/userandgroup/api/facade/UserFacade.java b/kypo2-api-user-and-group/src/main/java/cz/muni/ics/kypo/userandgroup/api/facade/UserFacade.java
index 8ffeb25fc1d9985fa06cbb4b7419bcdc8a4d228b..62f5c33cc6d4ac7910e2dd23a940652a89fb515f 100644
--- a/kypo2-api-user-and-group/src/main/java/cz/muni/ics/kypo/userandgroup/api/facade/UserFacade.java
+++ b/kypo2-api-user-and-group/src/main/java/cz/muni/ics/kypo/userandgroup/api/facade/UserFacade.java
@@ -129,6 +129,14 @@ public interface UserFacade {
      */
     PageResultResource<UserDTO> getUsersWithGivenIds(Set<Long> ids, Pageable pageable);
 
+
+    /**
+     * Gets users with given ids.
+     *
+     * @param ids ids of users.
+     * @return set of {@link UserDTO}s with given ids wrapped up in {@link PageResultResource}.
+     */
+    PageResultResource<UserDTO> getUsersWithGivenIds(Set<Long> ids, Pageable pageable, Predicate predicate);
     /**
      *  Returns a page of users specified by given role type and not with given ids.
      *
@@ -137,4 +145,14 @@ public interface UserFacade {
      * @return set of {@link UserDTO}s with given role type and not with given ids wrapped up in {@link PageResultResource}.
      */
     PageResultResource<UserDTO> getUsersWithGivenRoleAndNotWithGivenIds(String roleType, Set<Long> ids, Pageable pageable);
+
+
+    /**
+     * Gets a page of users specified by given predicate and pageable.
+     *
+     * @param predicate specifies query to database.
+     * @param pageable  pageable parameter with information about pagination.
+     * @return a list of the {@link UserDTO}s wrapped up in {@link PageResultResource}.
+     */
+    PageResultResource<UserDTO> getUsers(Predicate predicate, Pageable pageable, String roleType, Set<Long> userIds);
 }
diff --git a/kypo2-rest-user-and-group/src/main/java/cz/muni/ics/kypo/userandgroup/rest/controllers/RolesRestController.java b/kypo2-rest-user-and-group/src/main/java/cz/muni/ics/kypo/userandgroup/rest/controllers/RolesRestController.java
index 45bb399b2a52717c210075170c05e78a57d7e8d3..d855cf1edfea92b8900f49d4c6e58f4f3097f36d 100644
--- a/kypo2-rest-user-and-group/src/main/java/cz/muni/ics/kypo/userandgroup/rest/controllers/RolesRestController.java
+++ b/kypo2-rest-user-and-group/src/main/java/cz/muni/ics/kypo/userandgroup/rest/controllers/RolesRestController.java
@@ -237,9 +237,7 @@ public class RolesRestController {
             throw new BadRequestException("Choose page size lower than 1000");
         }
         try {
-            Predicate usersWithRoles = QUser.user.groups.any().roles.any().roleType.eq(roleType);
-            Predicate finalPredicate = QUser.user.id.notIn(userIds).and(usersWithRoles).and(predicate);
-            PageResultResource<UserDTO> userDTOs = userFacade.getUsers(finalPredicate, pageable);
+            PageResultResource<UserDTO> userDTOs = userFacade.getUsers(predicate, pageable, roleType, userIds);
             Squiggly.init(objectMapper, fields);
             return new ResponseEntity<>(SquigglyUtils.stringify(objectMapper, userDTOs), HttpStatus.OK);
         } catch (UserAndGroupFacadeException e) {
diff --git a/kypo2-rest-user-and-group/src/main/java/cz/muni/ics/kypo/userandgroup/rest/controllers/UsersRestController.java b/kypo2-rest-user-and-group/src/main/java/cz/muni/ics/kypo/userandgroup/rest/controllers/UsersRestController.java
index 8d4c982afc84c35575adf2a49d2ee006da99c4eb..d6525cf1523c918c06bd2516589675840867eeac 100644
--- a/kypo2-rest-user-and-group/src/main/java/cz/muni/ics/kypo/userandgroup/rest/controllers/UsersRestController.java
+++ b/kypo2-rest-user-and-group/src/main/java/cz/muni/ics/kypo/userandgroup/rest/controllers/UsersRestController.java
@@ -333,8 +333,7 @@ public class UsersRestController {
         if (ids.isEmpty()) {
             userDTOs = new PageResultResource<>(Collections.emptyList(), new PageResultResource.Pagination(0, 0, 0, 0, 0 ));
         } else {
-            Predicate finalPredicate = QUser.user.id.in(ids).and(predicate);
-            userDTOs = userFacade.getUsers(finalPredicate, pageable);
+            userDTOs = userFacade.getUsersWithGivenIds(ids, pageable, predicate);
         }
         Squiggly.init(objectMapper, fields);
         return new ResponseEntity<>(SquigglyUtils.stringify(objectMapper, userDTOs), HttpStatus.OK);
diff --git a/kypo2-service-user-and-group/src/main/java/cz/muni/ics/kypo/userandgroup/facade/UserFacadeImpl.java b/kypo2-service-user-and-group/src/main/java/cz/muni/ics/kypo/userandgroup/facade/UserFacadeImpl.java
index 1a060ad5ffb080215160640f7f4c79393d6b1b5c..d41aec88ca16c886dc72b2e9b8271b542b896058 100644
--- a/kypo2-service-user-and-group/src/main/java/cz/muni/ics/kypo/userandgroup/facade/UserFacadeImpl.java
+++ b/kypo2-service-user-and-group/src/main/java/cz/muni/ics/kypo/userandgroup/facade/UserFacadeImpl.java
@@ -60,6 +60,12 @@ public class UserFacadeImpl implements UserFacade {
         return  userMapper.mapToPageResultResource(userService.getAllUsers(predicate, pageable));
     }
 
+    @Override
+    @TransactionalRO
+    public PageResultResource<UserDTO> getUsers(Predicate predicate, Pageable pageable, String roleType, Set<Long> userIds) {
+        return  userMapper.mapToPageResultResource(userService.getAllUsers(predicate, pageable, roleType, userIds));
+    }
+
     @Override
     @TransactionalRO
     public UserDTO getUser(Long id) {
@@ -195,6 +201,17 @@ public class UserFacadeImpl implements UserFacade {
     }
 
     @Override
+    public PageResultResource<UserDTO> getUsersWithGivenIds(Set<Long> ids, Pageable pageable, Predicate predicate) {
+        try {
+            return userMapper.mapToPageResultResource(userService.getUsersWithGivenIds(ids, pageable, predicate));
+
+        } catch (UserAndGroupServiceException ex) {
+            throw new UserAndGroupFacadeException(ex.getLocalizedMessage());
+        }
+    }
+
+    @Override
+    @TransactionalRO
     public PageResultResource<UserDTO> getUsersWithGivenRoleAndNotWithGivenIds(String roleType, Set<Long> ids, Pageable pageable) {
         try {
             return userMapper.mapToPageResultResource(userService.getUsersWithGivenRoleAndNotWithGivenIds(roleType, ids, pageable));
diff --git a/kypo2-service-user-and-group/src/main/java/cz/muni/ics/kypo/userandgroup/service/impl/UserServiceImpl.java b/kypo2-service-user-and-group/src/main/java/cz/muni/ics/kypo/userandgroup/service/impl/UserServiceImpl.java
index 23f969f5ff0ff6dd540be66d6110975617fbfa3b..240f06b51a24726c1a883eda76e5810a5659f7e5 100644
--- a/kypo2-service-user-and-group/src/main/java/cz/muni/ics/kypo/userandgroup/service/impl/UserServiceImpl.java
+++ b/kypo2-service-user-and-group/src/main/java/cz/muni/ics/kypo/userandgroup/service/impl/UserServiceImpl.java
@@ -5,6 +5,7 @@ import cz.muni.ics.kypo.userandgroup.annotations.security.IsAdmin;
 import cz.muni.ics.kypo.userandgroup.api.dto.enums.UserDeletionStatusDTO;
 import cz.muni.ics.kypo.userandgroup.exceptions.UserAndGroupServiceException;
 import cz.muni.ics.kypo.userandgroup.model.IDMGroup;
+import cz.muni.ics.kypo.userandgroup.model.QUser;
 import cz.muni.ics.kypo.userandgroup.model.Role;
 import cz.muni.ics.kypo.userandgroup.model.User;
 import cz.muni.ics.kypo.userandgroup.model.enums.UserAndGroupStatus;
@@ -135,6 +136,13 @@ public class UserServiceImpl implements UserService {
         return userRepository.findAll(predicate, pageable);
     }
 
+    @Override
+    public Page<User> getAllUsers(Predicate predicate, Pageable pageable, String roleType, Set<Long> userIds) {
+        Predicate usersWithRoles = QUser.user.groups.any().roles.any().roleType.eq(roleType);
+        Predicate finalPredicate = QUser.user.id.notIn(userIds).and(usersWithRoles).and(predicate);
+        return userRepository.findAll(finalPredicate, pageable);
+    }
+
     @Override
     @IsAdmin
     public Page<User> getAllUsersNotInGivenGroup(Long groupId, Pageable pageable) {
@@ -214,6 +222,12 @@ public class UserServiceImpl implements UserService {
         return userRepository.findAllWithGivenIds(ids, pageable);
     }
 
+    @Override
+    public Page<User> getUsersWithGivenIds(Set<Long> ids, Pageable pageable, Predicate predicate) {
+        Predicate finalPredicate = QUser.user.id.in(ids).and(predicate);
+        return userRepository.findAll(finalPredicate, pageable);
+    }
+
     @Override
     public Page<User> getUsersWithGivenRoleAndNotWithGivenIds(String roleType, Set<Long> ids, Pageable pageable) {
         Assert.notNull(roleType, "Role type must not be null");
diff --git a/kypo2-service-user-and-group/src/main/java/cz/muni/ics/kypo/userandgroup/service/interfaces/UserService.java b/kypo2-service-user-and-group/src/main/java/cz/muni/ics/kypo/userandgroup/service/interfaces/UserService.java
index eee1b1c8f9c70d4bd4db1900cecbd06a9a5e01b1..71420e6c8daba745f5e2f40b594730f01e44a354 100644
--- a/kypo2-service-user-and-group/src/main/java/cz/muni/ics/kypo/userandgroup/service/interfaces/UserService.java
+++ b/kypo2-service-user-and-group/src/main/java/cz/muni/ics/kypo/userandgroup/service/interfaces/UserService.java
@@ -82,6 +82,15 @@ public interface UserService {
      */
     Page<User> getAllUsers(Predicate predicate, Pageable pageable);
 
+    /**
+     * Gets all users from the database.
+     *
+     * @param predicate represents a predicate (boolean-valued function) of one argument.
+     * @param pageable  pageable parameter with information about pagination.
+     * @return list of {@link User}s wrapped up in {@link Page}.
+     */
+    Page<User> getAllUsers(Predicate predicate, Pageable pageable, String roleType, Set<Long> userIds);
+
     /**
      * Gets all users, not in a given IDMGroup with the given ID.
      *
@@ -165,6 +174,15 @@ public interface UserService {
      */
     Page<User> getUsersWithGivenIds(Set<Long> ids, Pageable pageable);
 
+    /**
+     * Gets users with a given set of ids.
+     *
+     * @param ids set of ids.
+     * @return set of {@link User}s with ids wrapped up in {@link Page}.
+     */
+    Page<User> getUsersWithGivenIds(Set<Long> ids, Pageable pageable, Predicate predicate);
+
+
     /**
      *  Returns a page of users specified by given role type and not with given ids.
      *