diff --git a/packages/workflow/src/workflow-context.ts b/packages/workflow/src/workflow-context.ts
index a977a065fa0e6eae53639e3df2082a1701c1f70b..bd8bdf2adad8dd89a8de0d875489b581c2b98a89 100644
--- a/packages/workflow/src/workflow-context.ts
+++ b/packages/workflow/src/workflow-context.ts
@@ -397,10 +397,11 @@ export class WorkflowContext<Start = string, Stop = string, Data = unknown>
                             );
                           }
                           const outputs = outputsMap.get(step) ?? [];
-                          const outputEvents = flattenEvents(outputs, [
-                            nextEvent,
-                          ]);
-                          if (outputEvents.length !== outputs.length) {
+                          if (
+                            !outputs.some(
+                              (output) => nextEvent.constructor === output,
+                            )
+                          ) {
                             if (this.#strict) {
                               const error = Error(
                                 `Step ${step.name} returned an unexpected output event ${nextEvent}`,
diff --git a/unit/workflow/workflow.test.ts b/unit/workflow/workflow.test.ts
index c6acf07d57770e58add79ba61014825963796d8c..4cc1d0787bdabc3879360ee08ab689bf37386b91 100644
--- a/unit/workflow/workflow.test.ts
+++ b/unit/workflow/workflow.test.ts
@@ -794,6 +794,21 @@ describe("workflow event loop", () => {
       }
     `);
   });
+
+  test("workflow multiple output", async () => {
+    const myFlow = new Workflow<unknown, string, string>({ verbose: true });
+    myFlow.addStep(
+      {
+        inputs: [StartEvent<string>],
+        outputs: [StopEvent<string>, StopEvent<string>],
+      },
+      async (_context, ev) => {
+        return new StopEvent(`Hello ${ev.data}!`);
+      },
+    );
+    const result = await myFlow.run("world").strict();
+    expect(result.data).toBe("Hello world!");
+  });
 });
 
 describe("snapshot", async () => {