diff --git a/tck/tck-tests/src/main/java/jakarta/jsonp/tck/api/jsonreadertests/ClientTests.java b/tck/tck-tests/src/main/java/jakarta/jsonp/tck/api/jsonreadertests/ClientTests.java
index 8a1b988..b532084 100644
--- a/tck/tck-tests/src/main/java/jakarta/jsonp/tck/api/jsonreadertests/ClientTests.java
+++ b/tck/tck-tests/src/main/java/jakarta/jsonp/tck/api/jsonreadertests/ClientTests.java
@@ -20,6 +20,9 @@
 import jakarta.jsonp.tck.common.*;
 import jakarta.jsonp.tck.lib.harness.Fault;
 
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.fail;
+
 import java.io.*;
 import java.util.*;
 
@@ -3229,4 +3232,71 @@
     result.eval();
   }
 
+  /*
+   * @testName: testDuplicateKeysDefault
+   * 
+   * @test_Strategy: Tests key strategy added in JSON-P 2.1.
+   */
+  @Test
+  public void testDuplicateKeysDefault() {
+      Map<String, Object> config = new HashMap<>();
+      JsonReaderFactory factory = Json.createReaderFactory(config);
+      String json = "{\"val1\":\"A\",\"val1\":\"B\"}";
+      JsonReader reader = factory.createReader(new StringReader(json));
+      JsonObject object = reader.readObject();
+      reader.close();
+      assertEquals("B", object.getString("val1"));
+  }
+
+  /*
+   * @testName: testDuplicateKeysNone
+   * 
+   * @test_Strategy: Tests key strategy added in JSON-P 2.1.
+   */
+  @Test
+  public void testDuplicateKeysNone() {
+      Map<String, Object> config = new HashMap<>();
+      config.put(JsonConfig.KEY_STRATEGY, JsonConfig.KeyStrategy.NONE);
+      JsonReaderFactory factory = Json.createReaderFactory(config);
+      String json = "{\"val1\":\"A\",\"val1\":\"B\"}";
+      JsonReader reader = factory.createReader(new StringReader(json));
+      try {
+          reader.readObject();
+          fail("It is expected a JsonException");
+      } catch (JsonException e) {}
+  }
+
+  /*
+   * @testName: testDuplicateKeysFirst
+   * 
+   * @test_Strategy: Tests key strategy added in JSON-P 2.1.
+   */
+  @Test
+  public void testDuplicateKeysFirst() {
+      Map<String, Object> config = new HashMap<>();
+      config.put(JsonConfig.KEY_STRATEGY, JsonConfig.KeyStrategy.FIRST);
+      JsonReaderFactory factory = Json.createReaderFactory(config);
+      String json = "{\"val1\":\"A\",\"val1\":\"B\"}";
+      JsonReader reader = factory.createReader(new StringReader(json));
+      JsonObject object = reader.readObject();
+      reader.close();
+      assertEquals("A", object.getString("val1"));
+  }
+
+  /*
+   * @testName: testDuplicateKeysLast
+   * 
+   * @test_Strategy: Tests key strategy added in JSON-P 2.1.
+   */
+  @Test
+  public void testDuplicateKeysLast() {
+      Map<String, Object> config = new HashMap<>();
+      config.put(JsonConfig.KEY_STRATEGY, JsonConfig.KeyStrategy.LAST);
+      JsonReaderFactory factory = Json.createReaderFactory(config);
+      String json = "{\"val1\":\"A\",\"val1\":\"B\"}";
+      JsonReader reader = factory.createReader(new StringReader(json));
+      JsonObject object = reader.readObject();
+      reader.close();
+      assertEquals("B", object.getString("val1"));
+  }
 }
