diff --git a/plugins/attachment-resources/src/components/AttachmentStyledBox.svelte b/plugins/attachment-resources/src/components/AttachmentStyledBox.svelte
index a381f0599b..342b7c62ef 100644
--- a/plugins/attachment-resources/src/components/AttachmentStyledBox.svelte
+++ b/plugins/attachment-resources/src/components/AttachmentStyledBox.svelte
@@ -137,8 +137,8 @@
       newAttachments.add(_id)
       attachments = attachments
       saved = false
-      dispatch('attached', _id)
       saveDraft()
+      dispatch('attached', _id)
     } catch (err: any) {
       setPlatformStatus(unknownError(err))
     }
@@ -146,6 +146,7 @@
 
   async function saveAttachment (doc: Attachment, objectId: Ref<Doc> | undefined): Promise<void> {
     if (space === undefined || objectId === undefined || _class === undefined) return
+    newAttachments.delete(doc._id)
     await client.addCollection(attachment.class.Attachment, space, objectId, _class, 'attachments', doc, doc._id)
   }
 
@@ -172,12 +173,13 @@
   async function removeAttachment (attachment: Attachment): Promise<void> {
     removedAttachments.add(attachment)
     attachments.delete(attachment._id)
-    dispatch('detached', attachment._id)
     attachments = attachments
     saveDraft()
+    dispatch('detached', attachment._id)
   }
 
   async function deleteAttachment (attachment: Attachment): Promise<void> {
+    removedAttachments.delete(attachment)
     if (originalAttachments.has(attachment._id)) {
       await client.removeCollection(
         attachment._class,
@@ -218,6 +220,20 @@
     }
   }
 
+  export async function saveNewAttachment (_id: Ref<Attachment>): Promise<void> {
+    const attachment = attachments.get(_id)
+    if (attachment !== undefined) {
+      await saveAttachment(attachment, objectId)
+    }
+  }
+
+  export async function removeAttachmentById (_id: Ref<Attachment>): Promise<void> {
+    const attachment = attachments.get(_id)
+    if (attachment !== undefined) {
+      await removeAttachment(attachment)
+    }
+  }
+
   export async function createAttachments (_id: Ref<Doc> | undefined = objectId): Promise<void> {
     if (saved) {
       return
diff --git a/plugins/tracker-resources/src/components/issues/edit/EditIssue.svelte b/plugins/tracker-resources/src/components/issues/edit/EditIssue.svelte
index 00dffe54ce..bbef924c82 100644
--- a/plugins/tracker-resources/src/components/issues/edit/EditIssue.svelte
+++ b/plugins/tracker-resources/src/components/issues/edit/EditIssue.svelte
@@ -185,8 +185,8 @@
           _class={tracker.class.Issue}
           space={issue.space}
           alwaysEdit
-          on:attached={save}
-          on:detached={save}
+          on:attached={(e) => descriptionBox.saveNewAttachment(e.detail)}
+          on:detached={(e) => descriptionBox.removeAttachmentById(e.detail)}
           showButtons
           on:blur={save}
           on:changeContent={triggerSave}