diff --git a/scipost_django/finances/models.py b/scipost_django/finances/models.py
index a90ba3e00b7380def73d8204aa8ccb4b0bc43e27..67e1bed4706bded9a18b5f62aa1d0dda79fd452e 100644
--- a/scipost_django/finances/models.py
+++ b/scipost_django/finances/models.py
@@ -285,12 +285,22 @@ class SubsidyAttachment(models.Model):
 # Delete attachment files with same name if they exist, allowing replacement without name change
 @receiver(pre_save, sender=SubsidyAttachment)
 def delete_old_attachment_file(sender, instance, **kwargs):
-    if instance.pk:
-        old_attachment = SubsidyAttachment.objects.get(pk=instance.pk)
-        old_filename = old_attachment.attachment.name.split("/")[-1]
+    """
+    Replace existing file on update if a new one is provided.
+    """
+    if instance.pk and instance.attachment:
+        old = SubsidyAttachment.objects.get(pk=instance.pk)
+        if old.attachment and old.attachment != instance.attachment:
+            old.attachment.delete(save=False)
+
 
-        if old_attachment.attachment and old_filename == instance.attachment.name:
-            old_attachment.attachment.delete(save=False)
+@receiver(models.signals.post_delete, sender=SubsidyAttachment)
+def auto_delete_file_on_delete(sender, instance, **kwargs):
+    """
+    Deletes file from filesystem when its object is deleted.
+    """
+    if instance.attachment:
+        instance.attachment.delete(save=False)
 
 
 ###########################