diff --git a/jaxrs-api/src/main/java/jakarta/ws/rs/core/HttpHeaders.java b/jaxrs-api/src/main/java/jakarta/ws/rs/core/HttpHeaders.java
index 84cdd4c..999577b 100644
--- a/jaxrs-api/src/main/java/jakarta/ws/rs/core/HttpHeaders.java
+++ b/jaxrs-api/src/main/java/jakarta/ws/rs/core/HttpHeaders.java
@@ -75,7 +75,8 @@
      * (missing comma), or the value {@code no - store} (whitespace within value).
      *
      * @param name the message header.
-     * @param valueSeparatorRegex Separates the header value into single values. {@code null} does not split.
+     * @param valueSeparatorRegex Regular expression that separates the header value into single values. 
+     * {@code null} does not split.
      * @param valuePredicate value must fulfil this predicate.
      * @return {@code true} if and only if a header with the given name exists, having either a whitespace-trimmed value
      * matching the predicate, or having at least one whitespace-trimmed single value in a token-separated list of single values.
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 debf1a1..6f31ef0 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
@@ -864,9 +864,9 @@
   /*
    * @testName: containsHeaderStringTest
    * 
-   * @assertion_ids: JAXRS:JAVADOC:???; 
+   * @assertion_ids:  JAXRS:JAVADOC:1353; JAXRS:JAVADOC:1354; 
    * 
-   * @test_Strategy: Check if the specified headers a specified value.
+   * @test_Strategy: Check if the specified header contains a specified value.
    * 
    * ClientRequestFilter.abortWith
    */
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 45cc716..5ab7ad8 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
@@ -430,9 +430,9 @@
   /*
    * @testName: containsHeaderStringTest
    * 
-   * @assertion_ids: JAXRS:JAVADOC:???; 
+   * @assertion_ids:  JAXRS:JAVADOC:1355; JAXRS:JAVADOC:1356; 
    * 
-   * @test_Strategy: Check if the specified headers a specified value.
+   * @test_Strategy: Check if the specified header contains a specified value.
    * 
    * ClientRequestFilter.abortWith
    */
diff --git a/jaxrs-tck/src/main/java/ee/jakarta/tck/ws/rs/ee/rs/core/headers/HttpHeadersTest.java b/jaxrs-tck/src/main/java/ee/jakarta/tck/ws/rs/ee/rs/core/headers/HttpHeadersTest.java
index 72df7b6..43a7f41 100644
--- a/jaxrs-tck/src/main/java/ee/jakarta/tck/ws/rs/ee/rs/core/headers/HttpHeadersTest.java
+++ b/jaxrs-tck/src/main/java/ee/jakarta/tck/ws/rs/ee/rs/core/headers/HttpHeadersTest.java
@@ -16,6 +16,9 @@
 
 package ee.jakarta.tck.ws.rs.ee.rs.core.headers;
 
+import static org.junit.jupiter.api.Assertions.assertFalse;
+import static org.junit.jupiter.api.Assertions.assertTrue;
+
 import java.util.Arrays;
 import java.util.Date;
 import java.util.Iterator;
@@ -68,6 +71,39 @@
   }
 
   @GET
+  @Path("/contains-headers")
+  public String containsHeadersGet() {
+    sb = new StringBuffer();
+    List<String> myHeaders = Arrays.asList("Accept", "Content-Type", "Header3");
+
+    try {
+        assertTrue(hs.containsHeaderString("accept", "text/html"::equalsIgnoreCase));
+        sb.append("Header: accept contains text/html; ");
+      
+        //Verify Predicate and separator character usage
+        assertTrue(hs.containsHeaderString("Accept", ",", "Text/html;Level=1"::equalsIgnoreCase));
+        sb.append("Header: accept contains text/html;level=1; ");
+        
+        //Verify incorrect separator character fails
+        assertFalse(hs.containsHeaderString("Accept", ";", "text/html;level=1"::equals));
+        sb.append("Incorrect separator character fails as expected; ");
+        
+        //Verify white space in parameter not trimmed
+        assertFalse(hs.containsHeaderString("header3", "**", "value3"::equalsIgnoreCase));
+        sb.append("White space not trimmed from parameter as expected; ");
+        
+        //Verify white space in front and back of value trimmed
+        assertTrue(hs.containsHeaderString("HEADER3", "**", "value2"::equalsIgnoreCase));
+        sb.append("White space trimmed around value as expected; ");  
+    } catch (Throwable ex) {
+      sb.append("Unexpected exception thrown in containsHeadersGet: "
+          + ex.getMessage());
+      ex.printStackTrace();
+    }
+    return sb.toString();
+  }
+
+  @GET
   @Path("/acl")
   public String aclGet() {
     sb = new StringBuffer();
diff --git a/jaxrs-tck/src/main/java/ee/jakarta/tck/ws/rs/ee/rs/core/headers/JAXRSClientIT.java b/jaxrs-tck/src/main/java/ee/jakarta/tck/ws/rs/ee/rs/core/headers/JAXRSClientIT.java
index 5b3cc4d..1a4c8ce 100644
--- a/jaxrs-tck/src/main/java/ee/jakarta/tck/ws/rs/ee/rs/core/headers/JAXRSClientIT.java
+++ b/jaxrs-tck/src/main/java/ee/jakarta/tck/ws/rs/ee/rs/core/headers/JAXRSClientIT.java
@@ -211,6 +211,26 @@
   }
 
   /*
+   * @testName: requestHeadersTest
+   * 
+   * @assertion_ids: JAXRS:JAVADOC:1361; JAXRS:JAVADOC:1362;
+   * 
+   * @test_Strategy: HttpHeaders.containsHeaderString used to confirm that a given header contains
+   * a specified value with the appropriate value separator.
+   */
+  @Test
+  public void containsHeaderStringTest() throws Fault {
+    setProperty(Property.REQUEST_HEADERS,
+        "Accept:text/*, text/html, text/html;level=1, */*");
+    setProperty(Property.REQUEST_HEADERS,
+        "Content-Type:application/xml;charset=utf8");
+    setProperty(Property.REQUEST_HEADERS,
+        "Header3:value1 ** value2 **value 3");
+    setProperty(Property.REQUEST, buildRequest(Request.GET, "contains-headers"));
+    invoke();
+  }
+
+  /*
    * @testName: getDateTest
    * 
    * @assertion_ids: JAXRS:JAVADOC:779;
