diff --git a/perun-oidc-server/src/main/java/cz/muni/ics/oidc/server/claims/ClaimModifier.java b/perun-oidc-server/src/main/java/cz/muni/ics/oidc/server/claims/ClaimModifier.java
index 11a823bf3eeba30132858cfe9e178989680ed3e8..4e4b7397c6521005870f35548f6a6c1b448dce6b 100644
--- a/perun-oidc-server/src/main/java/cz/muni/ics/oidc/server/claims/ClaimModifier.java
+++ b/perun-oidc-server/src/main/java/cz/muni/ics/oidc/server/claims/ClaimModifier.java
@@ -1,5 +1,6 @@
 package cz.muni.ics.oidc.server.claims;
 
+import lombok.Getter;
 import lombok.extern.slf4j.Slf4j;
 
 /**
@@ -15,9 +16,13 @@ public abstract class ClaimModifier {
 	private final String claimName;
 	private final String modifierName;
 
+	@Getter
+	private final boolean replaceOldValue;
+
 	public ClaimModifier(ClaimModifierInitContext ctx) {
 		this.claimName = ctx.getClaimName();
 		this.modifierName = ctx.getModifierName();
+		this.replaceOldValue = ctx.isReplaceOldValue();
 		log.debug("{} - claim modifier initialized", ctx.getClaimName());
 	}
 
diff --git a/perun-oidc-server/src/main/java/cz/muni/ics/oidc/server/claims/ClaimModifierInitContext.java b/perun-oidc-server/src/main/java/cz/muni/ics/oidc/server/claims/ClaimModifierInitContext.java
index e86643074720052acc8c2c0bd321842917a4e498..d51a3d8c164619ebf259a8a9f0c3e90d89af3a92 100644
--- a/perun-oidc-server/src/main/java/cz/muni/ics/oidc/server/claims/ClaimModifierInitContext.java
+++ b/perun-oidc-server/src/main/java/cz/muni/ics/oidc/server/claims/ClaimModifierInitContext.java
@@ -15,12 +15,13 @@ import java.util.Properties;
 public class ClaimModifierInitContext extends ClaimInitContext {
 
 	private final String modifierName;
+	private final boolean replaceOldValue;
 
 	public ClaimModifierInitContext(String propertyPrefix, Properties properties, String claimName, String modifierName) {
 		super(propertyPrefix, properties, claimName);
 
 		this.modifierName = modifierName;
-
+		this.replaceOldValue = Boolean.parseBoolean(getProperty("replaceOldValue", "true"));
 		log.debug("{}:{} - context: property prefix for modifier configured to '{}'",
 				claimName, modifierName, propertyPrefix);
 	}
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 7a7ca29108ca02d0852ea76304a7b1a61935aff1..bb8340173837640c53e5bede2fbb4ef19aa45fbf 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,15 +303,19 @@ 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();
             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);
-                    arrayNode.set(i, TextNode.valueOf(modified));
+                    if (!modifier.isReplaceOldValue()) {
+                        newArrayNode.add(TextNode.valueOf(original));
+                    }
+                    newArrayNode.add(TextNode.valueOf(modified));
                 }
             }
-            return arrayNode;
+            return newArrayNode;
         } else {
             log.warn("Original value is neither string nor array of strings - cannot modify values");
             return orig;