diff --git a/jaxrs-tck/src/main/java/ee/jakarta/tck/ws/rs/jaxrs21/ee/sse/ssebroadcaster/JAXRSClientIT.java b/jaxrs-tck/src/main/java/ee/jakarta/tck/ws/rs/jaxrs21/ee/sse/ssebroadcaster/JAXRSClientIT.java
index 0df09ad..677e895 100644
--- a/jaxrs-tck/src/main/java/ee/jakarta/tck/ws/rs/jaxrs21/ee/sse/ssebroadcaster/JAXRSClientIT.java
+++ b/jaxrs-tck/src/main/java/ee/jakarta/tck/ws/rs/jaxrs21/ee/sse/ssebroadcaster/JAXRSClientIT.java
@@ -17,6 +17,7 @@
 package ee.jakarta.tck.ws.rs.jaxrs21.ee.sse.ssebroadcaster;
 
 import java.util.List;
+import java.util.ArrayList;
 import java.io.InputStream;
 import java.io.IOException;
 
@@ -46,7 +47,6 @@
 import org.jboss.shrinkwrap.api.spec.WebArchive;
 
 import static org.junit.jupiter.api.Assertions.assertTrue;
-import org.junit.jupiter.api.Disabled;
 import org.junit.jupiter.api.Test;
 import org.junit.jupiter.api.extension.ExtendWith;
 import org.junit.jupiter.api.TestInfo;
@@ -144,7 +144,6 @@
    * @test_Strategy:
    */
   @Test
-  @Disabled
   public void sseBroadcastTest() throws Fault {
     int MSG_MAX = 7;
     int wait = 25;
@@ -190,17 +189,20 @@
       }
     }
 
-    for (int i = 0; i != CLIENTS; i++) {
-      List<String> events = clients[i].getEvents();
-      assertEquals(events.size(), MSG_MAX + 1,
-          "Received unexpected number of events", events.size());
-      assertTrue(events.get(0).contains("WELCOME"),
-          "Received unexpected message"+ events.get(0));
-      for (int j = 0; j != MSG_MAX; j++)
-        assertEquals(events.get(j + 1), SSEMessage.MESSAGE + j,
-            "Received unexpected message", events.get(j + 1));
+    List<String> expectedEvents = new ArrayList<String>();
+    for (int j = 0; j != MSG_MAX; j++) {
+        expectedEvents.add(SSEMessage.MESSAGE + j);
     }
 
+    for (int i = 0; i != CLIENTS; i++) {
+        List<String> events = clients[i].getEvents();
+        assertEquals(events.size(), MSG_MAX + 1,
+            "Received unexpected number of events", events.size());
+        assertTrue(events.get(0).contains("WELCOME"),
+            "Received unexpected message"+ events.get(0));
+        assertTrue(events.containsAll(expectedEvents), "An expected message was not received");
+    }
+    
     setProperty(Property.REQUEST, buildRequest(Request.GET, "broadcast/check"));
     invoke();
     String response = getResponseBody();
