diff --git a/src/hooks/room/useRoomCall.ts b/src/hooks/room/useRoomCall.ts
index 308c1dc5cb..852804aa9d 100644
--- a/src/hooks/room/useRoomCall.ts
+++ b/src/hooks/room/useRoomCall.ts
@@ -282,7 +282,7 @@ export const useRoomCall = (
         url.pathname = "/room/";
         // Set params for the sharable url
         url.searchParams.set("roomId", room.roomId);
-        url.searchParams.set("perParticipantE2EE", "true");
+        if (room.hasEncryptionStateEvent()) url.searchParams.set("perParticipantE2EE", "true");
         for (const server of calculateRoomVia(room)) {
             url.searchParams.set("viaServers", server);
         }
diff --git a/src/models/Call.ts b/src/models/Call.ts
index d970499ef6..c7d53284cc 100644
--- a/src/models/Call.ts
+++ b/src/models/Call.ts
@@ -778,7 +778,10 @@ export class ElementCall extends Call {
         overwriteData: IWidgetData,
     ): IWidgetData {
         let perParticipantE2EE = false;
-        if (client.isRoomEncrypted(roomId) && !SettingsStore.getValue("feature_disable_call_per_sender_encryption"))
+        if (
+            client.getRoom(roomId)?.hasEncryptionStateEvent() &&
+            !SettingsStore.getValue("feature_disable_call_per_sender_encryption")
+        )
             perParticipantE2EE = true;
         return {
             ...currentData,
diff --git a/test/components/views/rooms/RoomHeader-test.tsx b/test/components/views/rooms/RoomHeader-test.tsx
index 55506bae49..dfe361c17c 100644
--- a/test/components/views/rooms/RoomHeader-test.tsx
+++ b/test/components/views/rooms/RoomHeader-test.tsx
@@ -563,9 +563,10 @@ describe("RoomHeader", () => {
             const { container } = render(<RoomHeader room={room} />, getWrapper());
             expect(getByLabelText(container, _t("voip|get_call_link"))).toBeInTheDocument();
         });
-        it("opens the share dialog with the correct share link", () => {
+        it("opens the share dialog with the correct share link in an encrypted room", () => {
             jest.spyOn(room, "getJoinRule").mockReturnValue(JoinRule.Public);
             jest.spyOn(SdkContextClass.instance.roomViewStore, "isViewingCall").mockReturnValue(true);
+            jest.spyOn(room, "hasEncryptionStateEvent").mockReturnValue(true);
 
             const { container } = render(<RoomHeader room={room} />, getWrapper());
             const modalSpy = jest.spyOn(Modal, "createDialog");
@@ -583,6 +584,20 @@ describe("RoomHeader", () => {
             });
             expect(arg1.target.toString()).toEqual(target);
         });
+
+        it("share dialog has correct link in an unencrypted room", () => {
+            jest.spyOn(room, "getJoinRule").mockReturnValue(JoinRule.Public);
+            jest.spyOn(room, "hasEncryptionStateEvent").mockReturnValue(false);
+            jest.spyOn(SdkContextClass.instance.roomViewStore, "isViewingCall").mockReturnValue(true);
+
+            const { container } = render(<RoomHeader room={room} />, getWrapper());
+            const modalSpy = jest.spyOn(Modal, "createDialog");
+            fireEvent.click(getByLabelText(container, _t("voip|get_call_link")));
+            const target =
+                "https://guest_spa_url.com/room/#/!1:example.org?roomId=%211%3Aexample.org&viaServers=example.org";
+            const arg1 = modalSpy.mock.calls[0][1] as any;
+            expect(arg1.target.toString()).toEqual(target);
+        });
     });
 
     describe("public room", () => {
diff --git a/test/models/Call-test.ts b/test/models/Call-test.ts
index 1b2fa5a2c5..5748b507ac 100644
--- a/test/models/Call-test.ts
+++ b/test/models/Call-test.ts
@@ -1039,7 +1039,7 @@ describe("ElementCall", () => {
             call.destroy();
             const addWidgetSpy = jest.spyOn(WidgetStore.instance, "addVirtualWidget");
             // If a room is not encrypted we will never add the perParticipantE2EE flag.
-            client.isRoomEncrypted.mockReturnValue(true);
+            const roomSpy = jest.spyOn(room, "hasEncryptionStateEvent").mockReturnValue(true);
 
             // should create call with perParticipantE2EE flag
             ElementCall.create(room);
@@ -1049,8 +1049,7 @@ describe("ElementCall", () => {
             enabledSettings.add("feature_disable_call_per_sender_encryption");
             expect(Call.get(room)?.widget?.data?.perParticipantE2EE).toBe(false);
             enabledSettings.delete("feature_disable_call_per_sender_encryption");
-
-            client.isRoomEncrypted.mockClear();
+            roomSpy.mockRestore();
             addWidgetSpy.mockRestore();
         });
 
diff --git a/test/test-utils/test-utils.ts b/test/test-utils/test-utils.ts
index dbbfff30b9..75778dbbe7 100644
--- a/test/test-utils/test-utils.ts
+++ b/test/test-utils/test-utils.ts
@@ -624,6 +624,7 @@ export function mkStubRoom(
         isElementVideoRoom: jest.fn().mockReturnValue(false),
         isSpaceRoom: jest.fn().mockReturnValue(false),
         isCallRoom: jest.fn().mockReturnValue(false),
+        hasEncryptionStateEvent: jest.fn().mockReturnValue(false),
         loadMembersIfNeeded: jest.fn(),
         maySendMessage: jest.fn().mockReturnValue(true),
         myUserId: client?.getUserId(),