diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/generic/server/task/UserManager.java b/server-application-server/source/java/ch/systemsx/cisd/openbis/generic/server/task/UserManager.java
index cae9fb1c4b6aba0749e5af5397454d45da72dd4d..fd1ef85d3a9711ef825790b5290237b4f4278534 100644
--- a/server-application-server/source/java/ch/systemsx/cisd/openbis/generic/server/task/UserManager.java
+++ b/server-application-server/source/java/ch/systemsx/cisd/openbis/generic/server/task/UserManager.java
@@ -1553,6 +1553,41 @@ public class UserManager
             }
             if (roleCreations.isEmpty() == false)
             {
+                // Filter out already existing roles to not repeat creations
+                // This is to manage a corner case when a user role has been added manually unnecessarily.
+                List<RoleAssignmentCreation> filteredRoleCreations = new ArrayList<>();
+                for (RoleAssignmentCreation roleAssignmentCreationToCheck : roleCreations)
+                {
+                    PersonPermId userId = (PersonPermId) roleAssignmentCreationToCheck.getUserId();
+                    SpacePermId spaceId = (SpacePermId) roleAssignmentCreationToCheck.getSpaceId();
+                    RoleAssignmentSearchCriteria roleAssignmentSearchCriteria =
+                            new RoleAssignmentSearchCriteria();
+                    roleAssignmentSearchCriteria.withUser().withUserId()
+                            .thatEquals(userId.getPermId());
+                    roleAssignmentSearchCriteria.withSpace().withCode()
+                            .thatEquals(spaceId.getPermId());
+                    SearchResult<RoleAssignment> roleAssignmentSearchResult =
+                            service.searchRoleAssignments(sessionToken,
+                                    roleAssignmentSearchCriteria, new RoleAssignmentFetchOptions());
+
+                    boolean found = false;
+                    if (!roleAssignmentSearchResult.getObjects().isEmpty())
+                    {
+                        Role role = roleAssignmentCreationToCheck.getRole();
+                        for (RoleAssignment roleAssignment : roleAssignmentSearchResult.getObjects())
+                        {
+                            if (roleAssignment.getRole().equals(role))
+                            {
+                                found = true;
+                            }
+                        }
+                    }
+                    if (!found)
+                    {
+                        filteredRoleCreations.add(roleAssignmentCreationToCheck);
+                    }
+                }
+                roleCreations = filteredRoleCreations;
                 operations.add(new CreateRoleAssignmentsOperation(roleCreations));
             }
             if (roleDeletions.isEmpty() == false)