diff --git a/perun-oidc-server/src/main/java/cz/muni/ics/oidc/server/userInfo/PerunUserInfoCacheLoader.java b/perun-oidc-server/src/main/java/cz/muni/ics/oidc/server/userInfo/PerunUserInfoCacheLoader.java
index bb8340173837640c53e5bede2fbb4ef19aa45fbf..faff1d902cf73efa994f5b477a14e2a04e2b3539 100644
--- a/perun-oidc-server/src/main/java/cz/muni/ics/oidc/server/userInfo/PerunUserInfoCacheLoader.java
+++ b/perun-oidc-server/src/main/java/cz/muni/ics/oidc/server/userInfo/PerunUserInfoCacheLoader.java
@@ -303,18 +303,22 @@ public class PerunUserInfoCacheLoader extends CacheLoader<UserInfoCacheKey, User
             return TextNode.valueOf(modifier.modify(claimInJson.asText()));
         } else if (claimInJson.isArray()) {
             ArrayNode arrayNode = (ArrayNode) claimInJson;
-            ArrayNode newArrayNode = JsonNodeFactory.instance.arrayNode();
+            Set<TextNode> uniqueValues = new HashSet<>();
             for (int i = 0; i < arrayNode.size(); i++) {
                 JsonNode item = arrayNode.get(i);
                 if (item.isTextual()) {
                     String original = item.asText();
                     String modified = modifier.modify(original);
                     if (!modifier.isReplaceOldValue()) {
-                        newArrayNode.add(TextNode.valueOf(original));
+                        uniqueValues.add(TextNode.valueOf(original));
                     }
-                    newArrayNode.add(TextNode.valueOf(modified));
+                    uniqueValues.add(TextNode.valueOf(modified));
                 }
             }
+            ArrayNode newArrayNode = JsonNodeFactory.instance.arrayNode();
+            for (TextNode child : uniqueValues) {
+                newArrayNode.add(child);
+            }
             return newArrayNode;
         } else {
             log.warn("Original value is neither string nor array of strings - cannot modify values");