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 0cf291d..12f1fb2 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
@@ -861,6 +861,59 @@
   }
 
   /*
+   * @testName: containsHeaderStringTest
+   * 
+   * @assertion_ids: JAXRS:JAVADOC:???; 
+   * 
+   * @test_Strategy: Check if the specified headers a specified value.
+   * 
+   * ClientRequestFilter.abortWith
+   */
+  @Test
+  public void containsHeaderStringTest() throws Fault {
+    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;
+          Response r = Response.ok(entity).build();
+          context.abortWith(r);
+      }
+    };
+    Invocation invocation = buildBuilder(provider)
+        .header("cache-control", "no-store")
+        .header("cache-control", "{Max - Age, no-transform}")
+        .header("cache-control2", "{no-store;no-transform}")
+        .buildGet();
+    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"));
+  }
+
+  
+  /*
    * @testName: getHeaderStringTest
    * 
    * @assertion_ids: JAXRS:JAVADOC:440; JAXRS:JAVADOC:455; JAXRS:JAVADOC:456;
