diff --git a/impl-tck/pom.xml b/impl-tck/pom.xml
index f832873..8591ede 100644
--- a/impl-tck/pom.xml
+++ b/impl-tck/pom.xml
@@ -33,8 +33,8 @@
     </modules>
 
     <properties>
-        <jsonp-api.version>2.0.2-SNAPSHOT</jsonp-api.version>
-        <jsonp-impl.version>2.0.2-SNAPSHOT</jsonp-impl.version>
+        <jsonp-api.version>2.0.1-SNAPSHOT</jsonp-api.version>
+        <jsonp-impl.version>1.0.1-SNAPSHOT</jsonp-impl.version>
         <jsonp-tck.version>2.0.0-SNAPSHOT</jsonp-tck.version>
     </properties>
 
@@ -47,8 +47,8 @@
             <scope>test</scope>
         </dependency>-->
         <dependency>
-            <groupId>org.eclipse.jsonp</groupId>
-            <artifactId>jakarta.json</artifactId>
+            <groupId>org.eclipse.parsson</groupId>
+            <artifactId>parsson</artifactId>
             <version>${jsonp-impl.version}</version>
             <scope>test</scope>
         </dependency>
diff --git a/tck/pom.xml b/tck/pom.xml
index dd7e80d..e4dd267 100644
--- a/tck/pom.xml
+++ b/tck/pom.xml
@@ -1,7 +1,7 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <!--
 
-    Copyright (c) 2020 Oracle and/or its affiliates. All rights reserved.
+    Copyright (c) 2020, 2021 Oracle and/or its affiliates. All rights reserved.
 
     This program and the accompanying materials are made available under the
     terms of the Eclipse Public License v. 2.0, which is available at
@@ -62,7 +62,7 @@
         <dependency>
             <groupId>jakarta.json</groupId>
             <artifactId>jakarta.json-api</artifactId>
-            <version>2.0.0-RC1</version>
+            <version>2.0.1-SNAPSHOT</version>
             <scope>provided</scope>
         </dependency>
         <dependency>
diff --git a/tck/tck-tests/src/main/java/jakarta/jsonp/tck/api/jsonvaluetests/ClientTests.java b/tck/tck-tests/src/main/java/jakarta/jsonp/tck/api/jsonvaluetests/ClientTests.java
index 7f60a54..ee74557 100644
--- a/tck/tck-tests/src/main/java/jakarta/jsonp/tck/api/jsonvaluetests/ClientTests.java
+++ b/tck/tck-tests/src/main/java/jakarta/jsonp/tck/api/jsonvaluetests/ClientTests.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2020 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2020, 2021 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0, which is available at
@@ -19,11 +19,7 @@
  */
 package jakarta.jsonp.tck.api.jsonvaluetests;
 
-import jakarta.jsonp.tck.api.common.TestResult;
-import jakarta.jsonp.tck.common.*;
-import jakarta.jsonp.tck.lib.harness.Fault;
-
-import java.util.*;
+import static org.junit.Assert.assertEquals;
 
 import org.jboss.arquillian.container.test.api.Deployment;
 import org.jboss.arquillian.junit.Arquillian;
@@ -32,7 +28,11 @@
 import org.junit.Test;
 import org.junit.runner.RunWith;
 
-import jakarta.json.*;
+import jakarta.json.Json;
+import jakarta.json.JsonValue;
+import jakarta.jsonp.tck.api.common.TestResult;
+import jakarta.jsonp.tck.common.JSONP_Util;
+import jakarta.jsonp.tck.lib.harness.Fault;
 
 @RunWith(Arquillian.class)
 public class ClientTests {
@@ -351,4 +351,62 @@
     result.eval();
   }
 
+  /*
+   * @testName: jsonNumber21Test
+   * 
+   * @test_Strategy: Tests Json.createValue(Number) API method added in JSON-P 2.1.
+   */
+  @Test
+  public void jsonNumber21Test() {
+      assertEquals(Json.createValue(1), Json.createValue(Byte.valueOf((byte) 1)));
+      assertEquals(Json.createValue(1).toString(), Json.createValue(Byte.valueOf((byte) 1)).toString());
+      assertEquals(Json.createValue(1), Json.createValue(Short.valueOf((short) 1)));
+      assertEquals(Json.createValue(1).toString(), Json.createValue(Short.valueOf((short) 1)).toString());
+      assertEquals(Json.createValue(1), Json.createValue(Integer.valueOf(1)));
+      assertEquals(Json.createValue(1).toString(), Json.createValue(Integer.valueOf(1)).toString());
+      assertEquals(Json.createValue(1L), Json.createValue(Long.valueOf(1)));
+      assertEquals(Json.createValue(1L).toString(), Json.createValue(Long.valueOf(1)).toString());
+      assertEquals(Json.createValue(1D), Json.createValue(Float.valueOf(1)));
+      assertEquals(Json.createValue(1D).toString(), Json.createValue(Float.valueOf(1)).toString());
+      assertEquals(Json.createValue(1D), Json.createValue(Double.valueOf(1)));
+      assertEquals(Json.createValue(1D).toString(), Json.createValue(Double.valueOf(1)).toString());
+      assertEquals(Json.createValue(1), Json.createValue(new CustomNumber(1)));
+      assertEquals(Json.createValue(1).toString(), Json.createValue(new CustomNumber(1)).toString());
+  }
+  
+  private static class CustomNumber extends Number {
+
+      private static final long serialVersionUID = 1L;
+      private final int num;
+
+      private CustomNumber(int num) {
+          this.num = num;
+      }
+
+      @Override
+      public int intValue() {
+          return num;
+      }
+
+      @Override
+      public long longValue() {
+          return num;
+      }
+
+      @Override
+      public float floatValue() {
+          return num;
+      }
+
+      @Override
+      public double doubleValue() {
+          return num;
+      }
+
+      @Override
+      public String toString() {
+          return Integer.toString(num);
+      }
+
+  }
 }
