diff --git a/impl-tck/tck-tests/pom.xml b/impl-tck/tck-tests/pom.xml
index 136181f..e2508ed 100644
--- a/impl-tck/tck-tests/pom.xml
+++ b/impl-tck/tck-tests/pom.xml
@@ -61,34 +61,6 @@
                 <artifactId>maven-dependency-plugin</artifactId>
                 <version>3.2.0</version>
                 <executions>
-                    <execution>
-                        <id>copy-jsonp-tck-signature-files</id>
-                        <phase>generate-test-sources</phase>
-                        <goals>
-                            <goal>unpack</goal>
-                        </goals>
-                        <configuration>
-                        <artifactItems>
-                            <artifactItem>
-                                <groupId>jakarta.json</groupId>
-                                <artifactId>jakarta.json-tck-tests</artifactId>
-                                <version>${jsonp-tck.version}</version>
-                                <type>jar</type>
-                                <overWrite>true</overWrite>
-                            </artifactItem>
-                      </artifactItems>
-                      <!-- We need the signature file, mapping file and package list file -->
-                      <includes>**/*sig-test*,**/*jakarta.json.sig_*,**/*sig-test-pkg-list.txt</includes>
-                      <outputDirectory>${project.build.directory}/signaturedirectory</outputDirectory>
-                      </configuration>
-                    </execution>
-                </executions>
-            </plugin> 
-            <plugin>
-                <groupId>org.apache.maven.plugins</groupId>
-                <artifactId>maven-dependency-plugin</artifactId>
-                <version>3.2.0</version>
-                <executions>
                   <execution>
                     <id>copy</id>
                     <phase>generate-test-sources</phase>
@@ -120,9 +92,6 @@
                     <dependenciesToScan>jakarta.json:jakarta.json-tck-tests</dependenciesToScan>
                     <systemPropertyVariables>
                         <jimage.dir>${project.build.directory}/jdk11-bundle</jimage.dir>
-                        <signature.mapfile>${project.build.directory}/signaturedirectory/jakarta/jsonp/tck/signaturetest/sig-test.map</signature.mapfile>
-                        <signature.repositoryDir>${project.build.directory}/signaturedirectory/jakarta/jsonp/tck/signaturetest</signature.repositoryDir>
-                        <signature.packagelist>${project.build.directory}/signaturedirectory/jakarta/jsonp/tck/signaturetest/sig-test-pkg-list.txt</signature.packagelist>
                         <signature.sigTestClasspath>${project.build.directory}/signaturedirectory/jakarta.json-api.jar:${project.build.directory}/jdk11-bundle/java.base:${project.build.directory}/jdk11-bundle/java.rmi:${project.build.directory}/jdk11-bundle/java.sql:${project.build.directory}/jdk11-bundle/java.naming</signature.sigTestClasspath>
                     </systemPropertyVariables>
                   </configuration>
@@ -149,9 +118,6 @@
                             </includes>
                             <systemPropertyVariables>
                                 <jimage.dir>${project.build.directory}/jdk11-bundle</jimage.dir>
-                                <signature.mapfile>${project.build.directory}/signaturedirectory/jakarta/jsonp/tck/signaturetest/sig-test.map</signature.mapfile>
-                                <signature.repositoryDir>${project.build.directory}/signaturedirectory/jakarta/jsonp/tck/signaturetest</signature.repositoryDir>
-                                <signature.packagelist>${project.build.directory}/signaturedirectory/jakarta/jsonp/tck/signaturetest/sig-test-pkg-list.txt</signature.packagelist>
                                 <signature.sigTestClasspath>${project.build.directory}/signaturedirectory/jakarta.json-api.jar:${project.build.directory}/jdk11-bundle/java.base:${project.build.directory}/jdk11-bundle/java.rmi:${project.build.directory}/jdk11-bundle/java.sql:${project.build.directory}/jdk11-bundle/java.naming</signature.sigTestClasspath>
                             </systemPropertyVariables>
                         </configuration>
diff --git a/tck/tck-tests/src/main/java/jakarta/jsonp/tck/signaturetest/README b/tck/tck-tests/src/main/java/jakarta/jsonp/tck/signaturetest/README
index 1cc412c..9c061a9 100644
--- a/tck/tck-tests/src/main/java/jakarta/jsonp/tck/signaturetest/README
+++ b/tck/tck-tests/src/main/java/jakarta/jsonp/tck/signaturetest/README
@@ -30,67 +30,21 @@
 
       The signature file name expected is jakarta.json.sig_${version} , where version is the api version for which the signature is generated.
 
-  2. Place the required files in the TCK folder :
-
-    All the below files has to be placed in the folder tck/tck-tests/src/main/java/jakarta/jsonp/tck/signaturetest, so they are included as part of the TCK jar during the build.
-
-    -The signature file generated from above of the name jakarta.json.sig_${version}
-    -The mapping file will be named sig-test.map, it contains the api to version mapping. This file will be used to pick the right signature file when running the signature test.
-    -The package list file will be named sig-test-pkg-list.txt, contains the list of packages tested.
-
-
 
 For TCK users (to run the signature test as a Junit test) :-
 
-  1. The signature test related files will need to be extracted from the jar to a known location to be used for running the test.
-For eg: in maven we can use the below code to extract the signature file, mapping file and package list file to ${project.build.directory}/signaturedirectory.
-
-  <plugin>
-    <groupId>org.apache.maven.plugins</groupId>
-    <artifactId>maven-dependency-plugin</artifactId>
-    <version>3.2.0</version>
-    <executions>
-        <execution>
-            <id>copy-jsonp-tck-signature-files</id>
-            <phase>generate-test-sources</phase>
-            <goals>
-                <goal>unpack</goal>
-            </goals>
-            <configuration>
-            <artifactItems>
-                <artifactItem>
-                    <groupId>jakarta.json</groupId>
-                    <artifactId>jakarta.json-tck-tests</artifactId>
-                    <version>${jsonp-tck.version}</version>
-                    <type>jar</type>
-                    <overWrite>true</overWrite>
-                </artifactItem>
-          </artifactItems>
-          <!-- We need the signature file, mapping file and package list file -->
-          <includes>**/*sig-test*,**/*jakarta.json.sig_*,**/*sig-test-pkg-list.txt</includes>
-          <outputDirectory>${project.build.directory}/signaturedirectory</outputDirectory>
-          </configuration>
-        </execution>
-    </executions>
-  </plugin> 
-  2. Set the below system properties correctly :
+  1.Set the below system properties correctly :
 
     jimage.dir //The jdk9+(jdk11 for this release) will be extracted to this location as to use the Java modules in the path.
     optional.tech.packages.to.ignore // The optional package that should be ignored while running the signature test
-    signature.mapfile //The full path of the signature mapping file
-    signature.repositoryDir // The directory where the signature file is placed.
-    signature.packagelist //The full path of the list of packages that will be tested.
     signature.sigTestClasspath // the sigTestClasspath that will contain the implementation jar that needs to be tested along with dependent jars.
 
     For eg:
 
     <jimage.dir>${project.build.directory}/jdk11-bundle</jimage.dir>
     <optional.tech.packages.to.ignore>jakarta.xml.bind</optional.tech.packages.to.ignore>
-    <signature.mapfile>${project.build.directory}/signaturedirectory/jakarta/jsonp/tck/signaturetest/sig-test.map</signature.mapfile>
-    <signature.repositoryDir>${project.build.directory}/signaturedirectory/jakarta/jsonp/tck/signaturetest</signature.repositoryDir>
-    <signature.packagelist>${project.build.directory}/signaturedirectory/jakarta/jsonp/tck/signaturetest/sig-test-pkg-list.txt</signature.packagelist>
     <signature.sigTestClasspath>${project.build.directory}/signaturedirectory/jakarta.json-api.jar:${project.build.directory}/jdk11-bundle/java.base:${project.build.directory}/jdk11-bundle/java.rmi:${project.build.directory}/jdk11-bundle/java.sql:${project.build.directory}/jdk11-bundle/java.naming</signature.sigTestClasspath>
 
-  3. The signature test alone can be run using below command within jersey-tck/ directory.
+  2. The signature test alone can be run using below command within impl-tck/ directory.
 
-  mvn clean verify -Dit.test=jakarta.jsonp.tck.signaturetest.**
+    mvn clean test -Dtest=jakarta.jsonp.tck.signaturetest.jsonp.JSONPSigTest#signatureTest
diff --git a/tck/tck-tests/src/main/java/jakarta/jsonp/tck/signaturetest/jsonp/JSONPSigTest.java b/tck/tck-tests/src/main/java/jakarta/jsonp/tck/signaturetest/jsonp/JSONPSigTest.java
index e09f542..042db22 100644
--- a/tck/tck-tests/src/main/java/jakarta/jsonp/tck/signaturetest/jsonp/JSONPSigTest.java
+++ b/tck/tck-tests/src/main/java/jakarta/jsonp/tck/signaturetest/jsonp/JSONPSigTest.java
@@ -31,12 +31,7 @@
 import jakarta.jsonp.tck.signaturetest.SigTestResult;
 
 
-import java.io.BufferedReader;
-import java.io.File;
-import java.io.InputStreamReader;
-import java.io.IOException;
-import java.io.PrintWriter;
-import java.io.PrintStream;
+import java.io.*;
 
 import java.util.ArrayList;
 import java.util.Properties;
@@ -72,6 +67,62 @@
 
   }
 
+
+  public File writeStreamToTempFile(InputStream inputStream, String tempFilePrefix, String tempFileSuffix) throws IOException {
+    FileOutputStream outputStream = null;
+
+    try {
+        File file = File.createTempFile(tempFilePrefix, tempFileSuffix);
+        outputStream = new FileOutputStream(file);
+        byte[] buffer = new byte[1024];
+        while (true) {
+            int bytesRead = inputStream.read(buffer);
+            if (bytesRead == -1) {
+                break;
+            }
+            outputStream.write(buffer, 0, bytesRead);
+        }
+        return file;
+    }
+
+    finally {
+        if (outputStream != null) {
+            outputStream.close();
+        }
+    }
+  }
+
+  public File writeStreamToSigFile(InputStream inputStream, String packageVersion) throws IOException {
+    FileOutputStream outputStream = null;
+    String tmpdir = System.getProperty("java.io.tmpdir");
+    try {
+        File sigfile = new File(tmpdir+File.separator+"jakarta.json.sig_"+packageVersion);
+        if(sigfile.exists()){
+          sigfile.delete();
+          System.out.println("Existing signature file deleted to create new one");
+        }
+        if(!sigfile.createNewFile()){
+          System.out.println("signature file is not created");
+        }
+        outputStream = new FileOutputStream(sigfile);
+        byte[] buffer = new byte[1024];
+        while (true) {
+            int bytesRead = inputStream.read(buffer);
+            if (bytesRead == -1) {
+                break;
+            }
+            outputStream.write(buffer, 0, bytesRead);
+        }
+        return sigfile;
+    }
+
+    finally {
+        if (outputStream != null) {
+            outputStream.close();
+        }
+    }
+  }
+
   /***** Boilerplate Code *****/
 
 
@@ -96,8 +147,8 @@
   /*
    * @testName: signatureTest
    * 
-   * @assertion: A JSONB container must implement the required classes and APIs
-   * specified in the JSONB Specification.
+   * @assertion: A JSONP container must implement the required classes and APIs
+   * specified in the JSONP Specification.
    * 
    * @test_Strategy: Using reflection, gather the implementation specific
    * classes and APIs. Compare these results with the expected (required)
@@ -106,13 +157,40 @@
    */
   @Test
   public void signatureTest() throws Fault {
-    System.out.println("$$$ JSONBSigTest.signatureTest() called");
+    System.out.println("$$$ JSONPSigTest.signatureTest() called");
     SigTestResult results = null;
-    String mapFile = System.getProperty("signature.mapfile");
-    String repositoryDir = System.getProperty("signature.repositoryDir");
+    String mapFile = null;
+    String packageFile = null;
+    String repositoryDir = null;
+    Properties mapFileAsProps = null;
+    try {
+
+    InputStream inStreamMapfile = JSONPSigTest.class.getClassLoader().getResourceAsStream("jakarta/jsonp/tck/signaturetest/sig-test.map");
+    File mFile = writeStreamToTempFile(inStreamMapfile, "sig-test", ".map");
+    mapFile = mFile.getCanonicalPath();
+    System.out.println("mapFile location is :"+mapFile);
+
+    InputStream inStreamPackageFile = JSONPSigTest.class.getClassLoader().getResourceAsStream("jakarta/jsonp/tck/signaturetest/sig-test-pkg-list.txt");
+    File pFile = writeStreamToTempFile(inStreamPackageFile, "sig-test-pkg-list", ".txt");
+    packageFile = pFile.getCanonicalPath();
+    System.out.println("packageFile location is :"+packageFile);
+  
+    mapFileAsProps = getSigTestDriver().loadMapFile(mapFile);
+    String packageVersion = mapFileAsProps.getProperty("jakarta.json");
+    System.out.println("Package version from mapfile :"+ packageVersion);
+
+    InputStream inStreamSigFile = JSONPSigTest.class.getClassLoader().getResourceAsStream("jakarta/jsonp/tck/signaturetest/jakarta.json.sig_"+packageVersion);
+    File sigFile = writeStreamToSigFile(inStreamSigFile, packageVersion);
+    System.out.println("signature File location is :"+sigFile.getCanonicalPath());
+    repositoryDir = System.getProperty("java.io.tmpdir");
+
+
+    } catch(IOException ex){
+        System.out.println("Exception while creating temp files :"+ex);
+    }
+
     String[] packages = getPackages(testInfo.getVehicle());
     String[] classes = getClasses(testInfo.getVehicle());
-    String packageFile = System.getProperty("signature.packagelist");
     String testClasspath = System.getProperty("signature.sigTestClasspath");
     String optionalPkgToIgnore = testInfo.getOptionalTechPackagesToIgnore();
 
@@ -168,10 +246,9 @@
       // Call verifyJtaJarTest based on some conditions, please check the
       // comment for verifyJtaJarTest.
       if ("standalone".equalsIgnoreCase(testInfo.getVehicle())) {
-        Properties mapFileAsProps = getSigTestDriver().loadMapFile(mapFile);
         if (mapFileAsProps == null || mapFileAsProps.size() == 0) {
           // empty signature file, something unusual
-          System.out.println("JSONBSigTest.signatureTest() returning, " +
+          System.out.println("JSONPSigTest.signatureTest() returning, " +
               "as signature map file is empty.");
           return;
         }
@@ -182,7 +259,7 @@
         // jakarta.transaction
         String jtaVersion = mapFileAsProps.getProperty("jakarta.transaction");
         if (jtaVersion == null || "".equals(jtaVersion.trim())) {
-          System.out.println("JSONBSigTest.signatureTest() returning, " +
+          System.out.println("JSONPSigTest.signatureTest() returning, " +
               "as this is neither JTA TCK run, not Java EE CTS run.");
           return;
         }
@@ -198,10 +275,10 @@
           verifyJtaJarTest();
         }
       }
-      System.out.println("$$$ JSONBSigTest.signatureTest() returning");
+      System.out.println("$$$ JSONPSigTest.signatureTest() returning");
     } catch (Exception e) {
       if (results != null && !results.passed()) {
-        throw new Fault("JSONBSigTest.signatureTest() failed!, diffs found");
+        throw new Fault("JSONPSigTest.signatureTest() failed!, diffs found");
       } else {
         System.out.println("Unexpected exception " + e.getMessage());
         throw new Fault("signatureTest failed with an unexpected exception", e);
@@ -209,5 +286,9 @@
     }
   }
 
+  /*
+   * Call the parent class's cleanup method.
+   */
 
-} // end class JSONBSigTest
+
+} // end class JSONPSigTest
