diff --git a/packages/desktop-client/src/components/Modals.tsx b/packages/desktop-client/src/components/Modals.tsx
index 824a59460bf84a4343f4cac9dea6c594ac43d598..39926082aa8a446b296dc8b9770996bb2b6c3f6b 100644
--- a/packages/desktop-client/src/components/Modals.tsx
+++ b/packages/desktop-client/src/components/Modals.tsx
@@ -95,12 +95,17 @@ export function Modals() {
       switch (name) {
         case 'import-transactions':
           return (
-            <ImportTransactions modalProps={modalProps} options={options} />
+            <ImportTransactions
+              key={name}
+              modalProps={modalProps}
+              options={options}
+            />
           );
 
         case 'add-account':
           return (
             <CreateAccount
+              key={name}
               modalProps={modalProps}
               syncServerStatus={syncServerStatus}
               upgradingAccountId={options?.upgradingAccountId}
@@ -109,12 +114,17 @@ export function Modals() {
 
         case 'add-local-account':
           return (
-            <CreateLocalAccount modalProps={modalProps} actions={actions} />
+            <CreateLocalAccount
+              key={name}
+              modalProps={modalProps}
+              actions={actions}
+            />
           );
 
         case 'close-account':
           return (
             <CloseAccountModal
+              key={name}
               modalProps={modalProps}
               account={options.account}
               balance={options.balance}
@@ -125,6 +135,7 @@ export function Modals() {
         case 'select-linked-accounts':
           return (
             <SelectLinkedAccounts
+              key={name}
               modalProps={modalProps}
               externalAccounts={options.accounts}
               requisitionId={options.requisitionId}
@@ -136,6 +147,7 @@ export function Modals() {
         case 'confirm-category-delete':
           return (
             <ConfirmCategoryDelete
+              key={name}
               modalProps={modalProps}
               category={options.category}
               group={options.group}
@@ -146,6 +158,7 @@ export function Modals() {
         case 'confirm-unlink-account':
           return (
             <ConfirmUnlinkAccount
+              key={name}
               modalProps={modalProps}
               accountName={options.accountName}
               onUnlink={options.onUnlink}
@@ -155,6 +168,7 @@ export function Modals() {
         case 'confirm-transaction-edit':
           return (
             <ConfirmTransactionEdit
+              key={name}
               modalProps={modalProps}
               onConfirm={options.onConfirm}
               confirmReason={options.confirmReason}
@@ -164,6 +178,7 @@ export function Modals() {
         case 'load-backup':
           return (
             <LoadBackup
+              key={name}
               watchUpdates
               budgetId={options.budgetId}
               modalProps={modalProps}
@@ -175,6 +190,7 @@ export function Modals() {
         case 'manage-rules':
           return (
             <ManageRulesModal
+              key={name}
               modalProps={modalProps}
               payeeId={options?.payeeId}
             />
@@ -183,6 +199,7 @@ export function Modals() {
         case 'edit-rule':
           return (
             <EditRule
+              key={name}
               modalProps={modalProps}
               defaultRule={options.rule}
               onSave={options.onSave}
@@ -192,6 +209,7 @@ export function Modals() {
         case 'merge-unused-payees':
           return (
             <MergeUnusedPayees
+              key={name}
               modalProps={modalProps}
               payeeIds={options.payeeIds}
               targetPayeeId={options.targetPayeeId}
@@ -201,6 +219,7 @@ export function Modals() {
         case 'plaid-external-msg':
           return (
             <PlaidExternalMsg
+              key={name}
               modalProps={modalProps}
               onMoveExternal={options.onMoveExternal}
               onClose={() => {
@@ -214,6 +233,7 @@ export function Modals() {
         case 'gocardless-init':
           return (
             <GoCardlessInitialise
+              key={name}
               modalProps={modalProps}
               onSuccess={options.onSuccess}
             />
@@ -222,6 +242,7 @@ export function Modals() {
         case 'simplefin-init':
           return (
             <SimpleFinInitialise
+              key={name}
               modalProps={modalProps}
               onSuccess={options.onSuccess}
             />
@@ -230,6 +251,7 @@ export function Modals() {
         case 'gocardless-external-msg':
           return (
             <GoCardlessExternalMsg
+              key={name}
               modalProps={modalProps}
               onMoveExternal={options.onMoveExternal}
               onClose={() => {
@@ -316,6 +338,7 @@ export function Modals() {
         case 'new-category':
           return (
             <SingleInputModal
+              key={name}
               modalProps={modalProps}
               title={<ModalTitle title="New Category" shrinkOnOverflow />}
               inputPlaceholder="Category name"
@@ -328,6 +351,7 @@ export function Modals() {
         case 'new-category-group':
           return (
             <SingleInputModal
+              key={name}
               modalProps={modalProps}
               title={<ModalTitle title="New Category Group" shrinkOnOverflow />}
               inputPlaceholder="Category group name"
@@ -560,6 +584,7 @@ export function Modals() {
         case 'transfer':
           return (
             <TransferModal
+              key={name}
               modalProps={modalProps}
               title={options.title}
               amount={options.amount}
@@ -571,6 +596,7 @@ export function Modals() {
         case 'cover':
           return (
             <CoverModal
+              key={name}
               modalProps={modalProps}
               categoryId={options.categoryId}
               onSubmit={options.onSubmit}
@@ -580,6 +606,7 @@ export function Modals() {
         case 'scheduled-transaction-menu':
           return (
             <ScheduledTransactionMenuModal
+              key={name}
               modalProps={modalProps}
               transactionId={options.transactionId}
               onPost={options.onPost}
diff --git a/upcoming-release-notes/2609.md b/upcoming-release-notes/2609.md
new file mode 100644
index 0000000000000000000000000000000000000000..5435b67b92aadd630d72a4259dd3f23ba321cc0b
--- /dev/null
+++ b/upcoming-release-notes/2609.md
@@ -0,0 +1,6 @@
+---
+category: Maintenance
+authors: [joel-jeremy]
+---
+
+Add key prop to all modals.