diff --git a/johnzon-core/src/main/java/org/apache/johnzon/core/JohnzonJsonParserImpl.java b/johnzon-core/src/main/java/org/apache/johnzon/core/JohnzonJsonParserImpl.java
index 977aa31..af0e9cf 100644
--- a/johnzon-core/src/main/java/org/apache/johnzon/core/JohnzonJsonParserImpl.java
+++ b/johnzon-core/src/main/java/org/apache/johnzon/core/JohnzonJsonParserImpl.java
@@ -72,7 +72,7 @@
             throw new IllegalStateException(current + " doesn't support getObject()");
         }
 
-        JsonReaderImpl jsonReader = new JsonReaderImpl(this, true, getCharArrayProvider(), DuplicateKeysMode.LAST, provider);
+        JsonReaderImpl jsonReader = new JsonReaderImpl(this, true, getCharArrayProvider(), RejectDuplicateKeysMode.DEFAULT, provider);
         return jsonReader.readObject();
     }
 
@@ -84,7 +84,7 @@
             throw new IllegalStateException(current + " doesn't support getArray()");
         }
 
-        JsonReaderImpl jsonReader = new JsonReaderImpl(this, true, getCharArrayProvider(), DuplicateKeysMode.LAST, provider);
+        JsonReaderImpl jsonReader = new JsonReaderImpl(this, true, getCharArrayProvider(), RejectDuplicateKeysMode.DEFAULT, provider);
         return jsonReader.readArray();
     }
 
@@ -94,7 +94,7 @@
         switch (current) {
             case START_ARRAY:
             case START_OBJECT:
-                JsonReaderImpl jsonReader = new JsonReaderImpl(this, true, getCharArrayProvider(), DuplicateKeysMode.LAST, provider);
+                JsonReaderImpl jsonReader = new JsonReaderImpl(this, true, getCharArrayProvider(), RejectDuplicateKeysMode.DEFAULT, provider);
                 return jsonReader.readValue();
             case VALUE_TRUE:
                 return JsonValue.TRUE;
diff --git a/johnzon-core/src/main/java/org/apache/johnzon/core/JsonArrayBuilderImpl.java b/johnzon-core/src/main/java/org/apache/johnzon/core/JsonArrayBuilderImpl.java
index f98c14a..b1ad933 100644
--- a/johnzon-core/src/main/java/org/apache/johnzon/core/JsonArrayBuilderImpl.java
+++ b/johnzon-core/src/main/java/org/apache/johnzon/core/JsonArrayBuilderImpl.java
@@ -35,7 +35,7 @@
 import org.apache.johnzon.core.util.ArrayUtil;
 
 class JsonArrayBuilderImpl implements JsonArrayBuilder, Serializable {
-    private DuplicateKeysMode duplicateKeysMode;
+    private RejectDuplicateKeysMode rejectDuplicateKeysMode;
     private JsonProviderImpl jsonProvider;
     private List<JsonValue> tmpList;
     private BufferStrategy.BufferProvider<char[]> bufferProvider;
@@ -46,18 +46,18 @@
 
     public JsonArrayBuilderImpl(final JsonArray initialData,
                                 final BufferStrategy.BufferProvider<char[]> provider,
-                                final DuplicateKeysMode duplicateKeysMode,
+                                final RejectDuplicateKeysMode rejectDuplicateKeysMode,
                                 final JsonProviderImpl jsonProvider) {
         this.tmpList = new ArrayList<>(initialData);
         this.bufferProvider = provider;
-        this.duplicateKeysMode = duplicateKeysMode;
+        this.rejectDuplicateKeysMode = rejectDuplicateKeysMode;
         this.jsonProvider = jsonProvider;
     }
 
     public JsonArrayBuilderImpl(final Collection<?> initialData, final BufferStrategy.BufferProvider<char[]> provider,
-                                final DuplicateKeysMode duplicateKeysMode, final JsonProviderImpl jsonProvider) {
+                                final RejectDuplicateKeysMode rejectDuplicateKeysMode, final JsonProviderImpl jsonProvider) {
         this.bufferProvider = provider;
-        this.duplicateKeysMode = duplicateKeysMode;
+        this.rejectDuplicateKeysMode = rejectDuplicateKeysMode;
         this.tmpList = new ArrayList<>();
         if (!initialData.isEmpty()) {
             for (Object initialValue : initialData) {
@@ -229,12 +229,12 @@
         } else if (value instanceof String) {
             add((String) value);
         } else if (value instanceof Map) {
-            add(new JsonObjectBuilderImpl(Map.class.cast(value), bufferProvider, duplicateKeysMode, jsonProvider).build());
+            add(new JsonObjectBuilderImpl(Map.class.cast(value), bufferProvider, rejectDuplicateKeysMode, jsonProvider).build());
         } else if (value instanceof Collection) {
-            add(new JsonArrayBuilderImpl(Collection.class.cast(value), bufferProvider, duplicateKeysMode, jsonProvider).build());
+            add(new JsonArrayBuilderImpl(Collection.class.cast(value), bufferProvider, rejectDuplicateKeysMode, jsonProvider).build());
         } else if (value.getClass().isArray()) {
             final Collection<Object> collection = ArrayUtil.newCollection(value);
-            add(new JsonArrayBuilderImpl(collection, bufferProvider, duplicateKeysMode, jsonProvider).build());
+            add(new JsonArrayBuilderImpl(collection, bufferProvider, rejectDuplicateKeysMode, jsonProvider).build());
         } else {
             throw new JsonException("Illegal JSON type! type=" + value.getClass());
         }
diff --git a/johnzon-core/src/main/java/org/apache/johnzon/core/JsonBuilderFactoryImpl.java b/johnzon-core/src/main/java/org/apache/johnzon/core/JsonBuilderFactoryImpl.java
index 93d8fe8..8323a1a 100644
--- a/johnzon-core/src/main/java/org/apache/johnzon/core/JsonBuilderFactoryImpl.java
+++ b/johnzon-core/src/main/java/org/apache/johnzon/core/JsonBuilderFactoryImpl.java
@@ -36,19 +36,19 @@
 
 class JsonBuilderFactoryImpl implements JsonBuilderFactory, Serializable {
     private final Map<String, Object> internalConfig = new HashMap<String, Object>();
-    private DuplicateKeysMode duplicateKeysMode;
+    private RejectDuplicateKeysMode rejectDuplicateKeysMode;
     private JsonProviderImpl provider;
     private BufferStrategy.BufferProvider<char[]> bufferProvider;
-    private static final List<String> SUPPORTED_CONFIG_KEYS = DuplicateKeysMode.CONFIG_KEYS;
+    private static final List<String> SUPPORTED_CONFIG_KEYS = RejectDuplicateKeysMode.CONFIG_KEYS;
 
     protected JsonBuilderFactoryImpl() {
         // no-op: serialization
     }
 
     JsonBuilderFactoryImpl(final Map<String, ?> config, final BufferStrategy.BufferProvider<char[]> bufferProvider,
-                           final DuplicateKeysMode duplicateKeysMode, final JsonProviderImpl provider) {
+                           final RejectDuplicateKeysMode rejectDuplicateKeysMode, final JsonProviderImpl provider) {
         this.bufferProvider = bufferProvider;
-        this.duplicateKeysMode = duplicateKeysMode;
+        this.rejectDuplicateKeysMode = rejectDuplicateKeysMode;
         this.provider = provider;
         if (config != null && !config.isEmpty()) {
             for (String configKey : config.keySet()) {
@@ -64,28 +64,28 @@
 
     @Override
     public JsonObjectBuilder createObjectBuilder() {
-        return new JsonObjectBuilderImpl(emptyMap(), bufferProvider, duplicateKeysMode, provider);
+        return new JsonObjectBuilderImpl(emptyMap(), bufferProvider, rejectDuplicateKeysMode, provider);
     }
 
     @Override
     public JsonObjectBuilder createObjectBuilder(JsonObject initialData) {
-        return new JsonObjectBuilderImpl(initialData, bufferProvider, duplicateKeysMode, provider);
+        return new JsonObjectBuilderImpl(initialData, bufferProvider, rejectDuplicateKeysMode, provider);
     }
 
     @Override
     public JsonArrayBuilder createArrayBuilder() {
-        return new JsonArrayBuilderImpl(emptyList(), bufferProvider, duplicateKeysMode, provider);
+        return new JsonArrayBuilderImpl(emptyList(), bufferProvider, rejectDuplicateKeysMode, provider);
     }
 
 
     @Override
     public JsonArrayBuilder createArrayBuilder(JsonArray initialData) {
-        return new JsonArrayBuilderImpl(initialData, bufferProvider, duplicateKeysMode, provider);
+        return new JsonArrayBuilderImpl(initialData, bufferProvider, rejectDuplicateKeysMode, provider);
     }
 
     @Override
     public JsonArrayBuilder createArrayBuilder(Collection<?> initialData) {
-        return new JsonArrayBuilderImpl(initialData, bufferProvider, duplicateKeysMode, provider);
+        return new JsonArrayBuilderImpl(initialData, bufferProvider, rejectDuplicateKeysMode, provider);
     }
 
     @Override
@@ -95,7 +95,7 @@
 
     @Override
     public JsonObjectBuilder createObjectBuilder(Map<String, Object> initialValues) {
-        return new JsonObjectBuilderImpl(initialValues, bufferProvider, duplicateKeysMode, provider);
+        return new JsonObjectBuilderImpl(initialValues, bufferProvider, rejectDuplicateKeysMode, provider);
     }
 
 }
diff --git a/johnzon-core/src/main/java/org/apache/johnzon/core/JsonMergePatchDiff.java b/johnzon-core/src/main/java/org/apache/johnzon/core/JsonMergePatchDiff.java
index ddf6a91..221f55d 100644
--- a/johnzon-core/src/main/java/org/apache/johnzon/core/JsonMergePatchDiff.java
+++ b/johnzon-core/src/main/java/org/apache/johnzon/core/JsonMergePatchDiff.java
@@ -48,7 +48,7 @@
     }
 
     private JsonValue diff(JsonValue source, JsonValue target) {
-        JsonObjectBuilder builder = new JsonObjectBuilderImpl(emptyMap(), bufferProvider, DuplicateKeysMode.LAST, provider);
+        JsonObjectBuilder builder = new JsonObjectBuilderImpl(emptyMap(), bufferProvider, RejectDuplicateKeysMode.DEFAULT, provider);
 
         if (isJsonObject(source) && isJsonObject(target)) {
             JsonObject srcObj = source.asJsonObject();
diff --git a/johnzon-core/src/main/java/org/apache/johnzon/core/JsonMergePatchImpl.java b/johnzon-core/src/main/java/org/apache/johnzon/core/JsonMergePatchImpl.java
index 8ad4919..a974cca 100644
--- a/johnzon-core/src/main/java/org/apache/johnzon/core/JsonMergePatchImpl.java
+++ b/johnzon-core/src/main/java/org/apache/johnzon/core/JsonMergePatchImpl.java
@@ -61,7 +61,7 @@
     }
 
     private JsonValue applyJsonObjectPatch(JsonObject jsonObject, JsonObject patch) {
-        JsonObjectBuilder builder = new JsonObjectBuilderImpl(jsonObject, bufferProvider, DuplicateKeysMode.LAST, provider);
+        JsonObjectBuilder builder = new JsonObjectBuilderImpl(jsonObject, bufferProvider, RejectDuplicateKeysMode.DEFAULT, provider);
 
         for (Map.Entry<String, JsonValue> patchAttrib : patch.entrySet()) {
             String attribName = patchAttrib.getKey();
diff --git a/johnzon-core/src/main/java/org/apache/johnzon/core/JsonObjectBuilderImpl.java b/johnzon-core/src/main/java/org/apache/johnzon/core/JsonObjectBuilderImpl.java
index 6ec1e21..59b9cdd 100644
--- a/johnzon-core/src/main/java/org/apache/johnzon/core/JsonObjectBuilderImpl.java
+++ b/johnzon-core/src/main/java/org/apache/johnzon/core/JsonObjectBuilderImpl.java
@@ -36,7 +36,7 @@
 import org.apache.johnzon.core.util.ArrayUtil;
 
 class JsonObjectBuilderImpl implements JsonObjectBuilder, Serializable {
-    private DuplicateKeysMode duplicateKeysMode;
+    private RejectDuplicateKeysMode rejectDuplicateKeysMode;
     private JsonProviderImpl provider;
     private BufferStrategy.BufferProvider<char[]> bufferProvider;
     private Map<String, JsonValue> attributeMap = new LinkedHashMap<>();
@@ -47,20 +47,20 @@
 
     public JsonObjectBuilderImpl(final JsonObject initialData,
                                  final BufferStrategy.BufferProvider<char[]> bufferProvider,
-                                 final DuplicateKeysMode duplicateKeysMode,
+                                 final RejectDuplicateKeysMode rejectDuplicateKeysMode,
                                  final JsonProviderImpl provider) {
         this.bufferProvider = bufferProvider;
-        this.duplicateKeysMode = duplicateKeysMode;
+        this.rejectDuplicateKeysMode = rejectDuplicateKeysMode;
         this.provider = provider;
         this.attributeMap = new LinkedHashMap<>(initialData);
     }
 
     public JsonObjectBuilderImpl(final Map<String, Object> initialValues,
                                  final BufferStrategy.BufferProvider<char[]> bufferProvider,
-                                 final DuplicateKeysMode duplicateKeysMode,
+                                 final RejectDuplicateKeysMode rejectDuplicateKeysMode,
                                  final JsonProviderImpl provider) {
         this.bufferProvider = bufferProvider;
-        this.duplicateKeysMode = duplicateKeysMode;
+        this.rejectDuplicateKeysMode = rejectDuplicateKeysMode;
         this.provider = provider;
         if (!initialValues.isEmpty()) {
             for (Map.Entry<String, Object> entry : initialValues.entrySet()) {
@@ -93,12 +93,12 @@
         } else if (value == null) {
             addNull(name);
         } else if (value instanceof Map) {
-            add(name, new JsonObjectBuilderImpl(Map.class.cast(value), bufferProvider, duplicateKeysMode, provider).build());
+            add(name, new JsonObjectBuilderImpl(Map.class.cast(value), bufferProvider, rejectDuplicateKeysMode, provider).build());
         } else if (value instanceof Collection) {
-            add(name, new JsonArrayBuilderImpl(Collection.class.cast(value), bufferProvider, duplicateKeysMode, provider).build());
+            add(name, new JsonArrayBuilderImpl(Collection.class.cast(value), bufferProvider, rejectDuplicateKeysMode, provider).build());
         } else if (value.getClass().isArray()) {
             final Collection<Object> collection = ArrayUtil.newCollection(value);
-            add(name, new JsonArrayBuilderImpl(collection, bufferProvider, duplicateKeysMode, provider).build());
+            add(name, new JsonArrayBuilderImpl(collection, bufferProvider, rejectDuplicateKeysMode, provider).build());
         } else {
             throw new JsonException("Illegal JSON type! name=" + name + " type=" + value.getClass());
         }
@@ -189,7 +189,7 @@
         if(value == null) {
             throw new NullPointerException("value/builder must not be null for name: " + name);
         }
-        duplicateKeysMode.put().put(attributeMap, name, value);
+        rejectDuplicateKeysMode.put().put(attributeMap, name, value);
     }
 
 
diff --git a/johnzon-core/src/main/java/org/apache/johnzon/core/JsonProviderImpl.java b/johnzon-core/src/main/java/org/apache/johnzon/core/JsonProviderImpl.java
index 158562a..fce0fac 100644
--- a/johnzon-core/src/main/java/org/apache/johnzon/core/JsonProviderImpl.java
+++ b/johnzon-core/src/main/java/org/apache/johnzon/core/JsonProviderImpl.java
@@ -62,7 +62,7 @@
     private final JsonGeneratorFactory generatorFactory = new JsonGeneratorFactoryImpl(null);
     private final JsonWriterFactory writerFactory = new JsonWriterFactoryImpl(null);
     private final Supplier<JsonBuilderFactory> builderFactory = new Cached<>(() ->
-            new JsonBuilderFactoryImpl(null, bufferProvider.get(), DuplicateKeysMode.LAST, this));
+            new JsonBuilderFactoryImpl(null, bufferProvider.get(), RejectDuplicateKeysMode.DEFAULT, this));
     private int maxBigDecimalScale = Integer.getInteger("johnzon.max-big-decimal-scale", 1_000);
     @Override
     public JsonParser createParser(final InputStream in) {
@@ -193,7 +193,7 @@
     public JsonBuilderFactory createBuilderFactory(final Map<String, ?> config) {
         final JsonBuilderFactory builderFactory = this.builderFactory.get();
         return (config == null || config.isEmpty()) ?
-                builderFactory : new JsonBuilderFactoryImpl(config, bufferProvider.get(), DuplicateKeysMode.from(config), this);
+                builderFactory : new JsonBuilderFactoryImpl(config, bufferProvider.get(), RejectDuplicateKeysMode.from(config), this);
     }
 
     @Override
diff --git a/johnzon-core/src/main/java/org/apache/johnzon/core/JsonReaderFactoryImpl.java b/johnzon-core/src/main/java/org/apache/johnzon/core/JsonReaderFactoryImpl.java
index 050a4b8..cd1081e 100644
--- a/johnzon-core/src/main/java/org/apache/johnzon/core/JsonReaderFactoryImpl.java
+++ b/johnzon-core/src/main/java/org/apache/johnzon/core/JsonReaderFactoryImpl.java
@@ -30,20 +30,20 @@
 import jakarta.json.stream.JsonParser;
 
 class JsonReaderFactoryImpl extends AbstractJsonFactory implements JsonReaderFactory {
-    static final Collection<String> SUPPORTED_CONFIG_KEYS = DuplicateKeysMode.CONFIG_KEYS;
+    static final Collection<String> SUPPORTED_CONFIG_KEYS = RejectDuplicateKeysMode.CONFIG_KEYS;
 
     private final JsonParserFactoryImpl parserFactory;
-    private final DuplicateKeysMode rejectDuplicateKeys;
+    private final RejectDuplicateKeysMode rejectDuplicateKeys;
     private JsonProviderImpl provider;
 
     JsonReaderFactoryImpl(final Map<String, ?> config, final JsonProviderImpl provider) {
         super(config, SUPPORTED_CONFIG_KEYS, JsonParserFactoryImpl.SUPPORTED_CONFIG_KEYS);
         this.provider = provider;
         if (!internalConfig.isEmpty()) {
-            DuplicateKeysMode.CONFIG_KEYS.forEach(internalConfig::remove);
+            RejectDuplicateKeysMode.CONFIG_KEYS.forEach(internalConfig::remove);
         }
         this.parserFactory = new JsonParserFactoryImpl(internalConfig, provider);
-        this.rejectDuplicateKeys = DuplicateKeysMode.from(config);
+        this.rejectDuplicateKeys = RejectDuplicateKeysMode.from(config);
     }
 
     @Override
diff --git a/johnzon-core/src/main/java/org/apache/johnzon/core/JsonReaderImpl.java b/johnzon-core/src/main/java/org/apache/johnzon/core/JsonReaderImpl.java
index a8c70ee..b615892 100644
--- a/johnzon-core/src/main/java/org/apache/johnzon/core/JsonReaderImpl.java
+++ b/johnzon-core/src/main/java/org/apache/johnzon/core/JsonReaderImpl.java
@@ -37,14 +37,14 @@
     private final JohnzonJsonParser parser;
     private final BufferStrategy.BufferProvider<char[]> bufferProvider;
     private JsonProviderImpl provider;
-    private final DuplicateKeysMode duplicateKeysMode;
+    private final RejectDuplicateKeysMode rejectDuplicateKeysMode;
     private boolean closed = false;
 
     private boolean subStreamReader;
 
     public JsonReaderImpl(final JsonParser parser, final BufferStrategy.BufferProvider<char[]> bufferProvider,
-                          final DuplicateKeysMode duplicateKeysMode, final JsonProviderImpl provider) {
-        this(parser, false, bufferProvider, duplicateKeysMode, provider);
+                          final RejectDuplicateKeysMode rejectDuplicateKeysMode, final JsonProviderImpl provider) {
+        this(parser, false, bufferProvider, rejectDuplicateKeysMode, provider);
     }
 
     /**
@@ -55,7 +55,7 @@
      */
     public JsonReaderImpl(final JsonParser parser, boolean subStreamReader,
                           final BufferStrategy.BufferProvider<char[]> bufferProvider,
-                          final DuplicateKeysMode rejectDuplicateKeys, final JsonProviderImpl provider) {
+                          final RejectDuplicateKeysMode rejectDuplicateKeys, final JsonProviderImpl provider) {
         this.bufferProvider = bufferProvider;
         this.provider = provider;
         if (parser instanceof JohnzonJsonParser) {
@@ -65,7 +65,7 @@
         }
 
         this.subStreamReader = subStreamReader;
-        this.duplicateKeysMode = rejectDuplicateKeys;
+        this.rejectDuplicateKeysMode = rejectDuplicateKeys;
     }
 
     @Override
@@ -91,14 +91,14 @@
 
         switch (next) {
             case START_OBJECT:
-                final JsonObjectBuilder objectBuilder = new JsonObjectBuilderImpl(emptyMap(), bufferProvider, duplicateKeysMode, provider);
+                final JsonObjectBuilder objectBuilder = new JsonObjectBuilderImpl(emptyMap(), bufferProvider, rejectDuplicateKeysMode, provider);
                 parseObject(objectBuilder);
                 if (!subStreamReader && parser.hasNext()) {
                     throw new JsonParsingException("Expected end of file", parser.getLocation());
                 }
                 return objectBuilder.build();
             case START_ARRAY:
-                final JsonArrayBuilder arrayBuilder = new JsonArrayBuilderImpl(emptyList(), bufferProvider, duplicateKeysMode, provider);
+                final JsonArrayBuilder arrayBuilder = new JsonArrayBuilderImpl(emptyList(), bufferProvider, rejectDuplicateKeysMode, provider);
                 parseArray(arrayBuilder);
                 if (!subStreamReader && parser.hasNext()) {
                     throw new JsonParsingException("Expected end of file", parser.getLocation());
@@ -184,13 +184,13 @@
                     break;
 
                 case START_OBJECT:
-                    JsonObjectBuilder subObject = new JsonObjectBuilderImpl(emptyMap(), bufferProvider, duplicateKeysMode, provider);
+                    JsonObjectBuilder subObject = new JsonObjectBuilderImpl(emptyMap(), bufferProvider, rejectDuplicateKeysMode, provider);
                     parseObject(subObject);
                     builder.add(key, subObject);
                     break;
 
                 case START_ARRAY:
-                    JsonArrayBuilder subArray = new JsonArrayBuilderImpl(emptyList(), bufferProvider, duplicateKeysMode, provider);
+                    JsonArrayBuilder subArray = new JsonArrayBuilderImpl(emptyList(), bufferProvider, rejectDuplicateKeysMode, provider);
                     parseArray(subArray);
                     builder.add(key, subArray);
                     break;
@@ -244,14 +244,14 @@
                     break;
 
                 case START_OBJECT:
-                    JsonObjectBuilder subObject = new JsonObjectBuilderImpl(emptyMap(), bufferProvider, duplicateKeysMode, provider);
+                    JsonObjectBuilder subObject = new JsonObjectBuilderImpl(emptyMap(), bufferProvider, rejectDuplicateKeysMode, provider);
                     parseObject(subObject);
                     builder.add(subObject);
                     break;
 
                 case START_ARRAY:
                     JsonArrayBuilder subArray = null;
-                    parseArray(subArray = new JsonArrayBuilderImpl(emptyList(), bufferProvider, duplicateKeysMode, provider));
+                    parseArray(subArray = new JsonArrayBuilderImpl(emptyList(), bufferProvider, rejectDuplicateKeysMode, provider));
                     builder.add(subArray);
                     break;
 
diff --git a/johnzon-core/src/main/java/org/apache/johnzon/core/DuplicateKeysMode.java b/johnzon-core/src/main/java/org/apache/johnzon/core/RejectDuplicateKeysMode.java
similarity index 62%
rename from johnzon-core/src/main/java/org/apache/johnzon/core/DuplicateKeysMode.java
rename to johnzon-core/src/main/java/org/apache/johnzon/core/RejectDuplicateKeysMode.java
index ab34110..0d9f754 100644
--- a/johnzon-core/src/main/java/org/apache/johnzon/core/DuplicateKeysMode.java
+++ b/johnzon-core/src/main/java/org/apache/johnzon/core/RejectDuplicateKeysMode.java
@@ -21,19 +21,22 @@
 import jakarta.json.JsonConfig;
 import jakarta.json.JsonException;
 import jakarta.json.JsonValue;
+
 import java.util.List;
+import java.util.Locale;
 import java.util.Map;
+import java.util.Objects;
 
 import static java.util.Arrays.asList;
 
-public enum DuplicateKeysMode {
-    NONE((map, k, v) -> {
+public enum RejectDuplicateKeysMode {
+    DEFAULT(Map::put),
+    TRUE((map, k, v) -> {
         if (map.put(k, v) != null) {
             throw new JsonException("Rejected key: '" + k + "', already present");
         }
     }),
-    FIRST(Map::putIfAbsent),
-    LAST(Map::put);
+    FIRST(Map::putIfAbsent);
 
     static final List<String> CONFIG_KEYS = asList(
             JsonConfig.KEY_STRATEGY, // jsonp 2.1 spec
@@ -41,45 +44,25 @@
             "org.glassfish.json.rejectDuplicateKeys" // the spec includes it (yes :facepalm:)
     );
 
-    public static DuplicateKeysMode from(final Map<String, ?> config) {
+    public static RejectDuplicateKeysMode from(final Map<String, ?> config) {
         if (config == null) {
-            return LAST;
+            return DEFAULT;
         }
 
-        for (String configKey : CONFIG_KEYS) {
-            Object value = config.get(configKey);
-            if (value == null) {
-                continue;
-            }
-
-            if (configKey.equals(JsonConfig.KEY_STRATEGY)) {
-                JsonConfig.KeyStrategy specKeyStrategy = (JsonConfig.KeyStrategy) value;
-
-                switch (specKeyStrategy) {
-                    case NONE:
-                        return NONE;
-
-                    case FIRST:
-                        return FIRST;
-
-                    default:
-                    case LAST:
-                        return LAST;
-                }
-            }
-
-            String valueAsString = String.valueOf(value);
-            if ("true".equals(valueAsString)) {
-                return NONE;
-            }
-        }
-
-        return LAST;
+        return CONFIG_KEYS.stream()
+                .map(config::get)
+                .filter(Objects::nonNull)
+                .findFirst()
+                .map(String::valueOf)
+                .map(it -> "false".equalsIgnoreCase(it) || "LAST".equalsIgnoreCase(it) ? "DEFAULT" : it) // aliases to avoid to add an enum value for nothing
+                .map(it -> "NONE".equalsIgnoreCase(it) ? "true" : it)
+                .map(it -> valueOf(it.toUpperCase(Locale.ROOT).trim()))
+                .orElse(TRUE);
     }
 
     private final Put put;
 
-    DuplicateKeysMode(final Put put) {
+    RejectDuplicateKeysMode(final Put put) {
         this.put = put;
     }
 
diff --git a/johnzon-core/src/test/java/org/apache/johnzon/core/JsonStreamParserImplTest.java b/johnzon-core/src/test/java/org/apache/johnzon/core/JsonStreamParserImplTest.java
index 596f362..bf767ab 100644
--- a/johnzon-core/src/test/java/org/apache/johnzon/core/JsonStreamParserImplTest.java
+++ b/johnzon-core/src/test/java/org/apache/johnzon/core/JsonStreamParserImplTest.java
@@ -68,7 +68,7 @@
         final String json = new JsonObjectBuilderImpl(
             emptyMap(),
             BufferStrategyFactory.valueOf("QUEUE").newCharProvider(100),
-            DuplicateKeysMode.NONE, (JsonProviderImpl) JsonProviderImpl.provider())
+            RejectDuplicateKeysMode.TRUE, (JsonProviderImpl) JsonProviderImpl.provider())
                 .add("content", "{\"foo\":\"barbar\\barbarbar\"}")
                 .build()
                 .toString();
