diff --git a/jaxrs-tck/src/main/java/ee/jakarta/tck/ws/rs/api/client/clientrequestcontext/JAXRSClientIT.java b/jaxrs-tck/src/main/java/ee/jakarta/tck/ws/rs/api/client/clientrequestcontext/JAXRSClientIT.java
index 12f1fb2..65087cd 100644
--- a/jaxrs-tck/src/main/java/ee/jakarta/tck/ws/rs/api/client/clientrequestcontext/JAXRSClientIT.java
+++ b/jaxrs-tck/src/main/java/ee/jakarta/tck/ws/rs/api/client/clientrequestcontext/JAXRSClientIT.java
@@ -874,24 +874,14 @@
     ContextProvider provider = new ContextProvider() {
       @Override
       protected void checkFilterContext(ClientRequestContext context) throws Fault {
-          boolean testCacheControlSingle = context.containsHeaderString("cache-control", "no-store"::equalsIgnoreCase);
-          boolean testCacheControlMultiple = context.containsHeaderString("CACHE-CONTROL", ",", "no-transform"::equalsIgnoreCase);
-          boolean testCacheControlWhiteSpaceFail = !(context.containsHeaderString("CACHE-CONTROL", ",", "Max-Age"::equalsIgnoreCase));
-          boolean testCacheControlCaseFail = !(context.containsHeaderString("cache-control", ",", "no-transform"::equals));
-          boolean testCacheControlSeparator = context.containsHeaderString("cache-control2", ";", "no-transform"::equalsIgnoreCase);
-          boolean testCacheControlSeparatorFail = !(context.containsHeaderString("cache-control2", ",", "no-transform"::equalsIgnoreCase));
-          String entity = "testCache-control-single = " +
-                  testCacheControlSingle +
-                  ", testCache-control-multiple = " +
-                  testCacheControlMultiple +
-                  ", testCache-control-fail-white-space = " +
-                  testCacheControlWhiteSpaceFail +
-                  ", testCache-control-fail-case = " +
-                  testCacheControlCaseFail +
-                   ", testCache-control-separator = " +
-                  testCacheControlSeparator +
-                  ", testCache-control-fail-separator = " +
-                  testCacheControlSeparatorFail;
+          assertTrue(context.containsHeaderString("cache-control", "no-store"::equalsIgnoreCase));
+          assertTrue(context.containsHeaderString("CACHE-CONTROL", ",", "no-transform"::equalsIgnoreCase));
+          assertTrue(!(context.containsHeaderString("CACHE-CONTROL", ",", "Max-Age"::equalsIgnoreCase)));
+          assertTrue(!(context.containsHeaderString("cache-control", ",", "no-transform"::equals)));
+          assertTrue(context.containsHeaderString("cache-control2", ";", "no-transform"::equalsIgnoreCase));
+          assertTrue(!(context.containsHeaderString("cache-control2", ",", 
+                  "no-transform"::equalsIgnoreCase)));
+          String entity = "Success";
           Response r = Response.ok(entity).build();
           context.abortWith(r);
       }
@@ -904,12 +894,7 @@
     Response response = invoke(invocation);
 
     String entity = response.readEntity(String.class);
-    assertTrue(entity.contains("testCache-control-single =  true"));
-    assertTrue(entity.contains("testCache-control-multiple =  true"));
-    assertTrue(entity.contains("testCache-control-fail-white-space =  true"));
-    assertTrue(entity.contains("testCache-control-fail-case =  true"));
-    assertTrue(entity.contains("testCache-control-separator =  true"));
-    assertTrue(entity.contains("testCache-control-fail-separator =  true"));
+    assertTrue(entity.contains("Sucess"));
   }
 
   
diff --git a/jaxrs-tck/src/main/java/ee/jakarta/tck/ws/rs/api/client/clientresponsecontext/JAXRSClientIT.java b/jaxrs-tck/src/main/java/ee/jakarta/tck/ws/rs/api/client/clientresponsecontext/JAXRSClientIT.java
index 4b4d5d4..50bea0f 100644
--- a/jaxrs-tck/src/main/java/ee/jakarta/tck/ws/rs/api/client/clientresponsecontext/JAXRSClientIT.java
+++ b/jaxrs-tck/src/main/java/ee/jakarta/tck/ws/rs/api/client/clientresponsecontext/JAXRSClientIT.java
@@ -427,6 +427,45 @@
   }
 
   /*
+   * @testName: containsHeaderStringTest
+   * 
+   * @assertion_ids: JAXRS:JAVADOC:???; 
+   * 
+   * @test_Strategy: Check if the specified headers a specified value.
+   * 
+   * ClientRequestFilter.abortWith
+   */
+  @Test
+  public void containsHeaderStringTest() throws Fault {
+      final String header1 = "cache-control";
+      final String value1 = "no-store";
+      final String value2 = "{Max - Age, no-transform}";
+      final String header2 = "header2";
+      final String value3 = "{no-store;no-transform}";
+      
+      ContextProvider in = new ContextProvider() {
+          @Override
+          protected void checkFilterContext(ClientRequestContext requestContext,
+                  ClientResponseContext responseContext) throws Fault {
+              assertTrue(responseContext.containsHeaderString("cache-control", "no-store"::equalsIgnoreCase));
+              assertTrue(responseContext.containsHeaderString("CACHE-CONTROL", ",", "no-transform"::equalsIgnoreCase));
+              assertTrue(!(responseContext.containsHeaderString("CACHE-CONTROL", ",", "Max-Age"::equalsIgnoreCase)));
+              assertTrue(!(responseContext.containsHeaderString("cache-control", ",", "no-transform"::equals)));
+              assertTrue(responseContext.containsHeaderString("header2", ";", "no-transform"::equalsIgnoreCase));
+              assertTrue(!(responseContext.containsHeaderString("Header2", ",", "no-transform"::equalsIgnoreCase)));
+          }
+      };
+      Response response = Response.ok()
+              .header(header1, value1)
+              .header(header1, value2)
+              .header(header2, value3)
+              .build();
+      invokeWithResponseAndAssertStatus(response, Status.OK, in);
+  }
+
+
+  
+  /*
    * @testName: getLanguageTest
    * 
    * @assertion_ids: JAXRS:JAVADOC:464; JAXRS:JAVADOC:479; JAXRS:JAVADOC:480;
