diff --git a/scipost_django/journals/admin.py b/scipost_django/journals/admin.py
index 830637dbcdce5f99b87090f58b12a3a6a200aa3f..d21521abbf64c2b7e69c25385f55d65ae93315a3 100644
--- a/scipost_django/journals/admin.py
+++ b/scipost_django/journals/admin.py
@@ -45,7 +45,17 @@ class JournalAdmin(admin.ModelAdmin):
         AutogeneratedFileContentTemplateInline,
     ]
 
-
+    # Filter `alternative_journals` to include only ones:
+    # - in the same academic field as the current journal
+    # - that are active
+    def formfield_for_manytomany(self, db_field, request, **kwargs):
+        if db_field.name == "alternative_journals":
+            journal_id = request.resolver_match.kwargs["object_id"]
+            journal = Journal.objects.get(pk=journal_id)
+            kwargs["queryset"] = Journal.objects.filter(
+                active=True, college__acad_field=journal.college.acad_field
+            ).exclude(pk=journal_id)
+        return super().formfield_for_manytomany(db_field, request, **kwargs)
 
 
 @admin.register(Volume)
@@ -53,8 +63,6 @@ class VolumeAdmin(admin.ModelAdmin):
     list_display = ["__str__", "doi_string"]
 
 
-
-
 @admin.register(Issue)
 class IssueAdmin(admin.ModelAdmin):
     list_display = ["__str__", "doi_string"]
@@ -65,8 +73,6 @@ class IssueAdmin(admin.ModelAdmin):
     ]
 
 
-
-
 class ReferenceInline(admin.TabularInline):
     model = Reference
     extra = 0
@@ -122,8 +128,6 @@ class PublicationAdmin(admin.ModelAdmin):
     ]
 
 
-
-
 class PublicationProxyMetadata(Publication):
     search_fields = ["title", "author_list", "doi_label"]
     list_display = [
@@ -155,8 +159,6 @@ class PublicationProxyMetadataAdmin(admin.ModelAdmin):
     ]
 
 
-
-
 @admin.register(Deposit)
 class DepositAdmin(admin.ModelAdmin):
     list_display = (
@@ -183,8 +185,6 @@ class DepositAdmin(admin.ModelAdmin):
         return False
 
 
-
-
 @admin.register(DOAJDeposit)
 class DOAJDepositAdmin(admin.ModelAdmin):
     autocomplete_fields = [
@@ -192,8 +192,6 @@ class DOAJDepositAdmin(admin.ModelAdmin):
     ]
 
 
-
-
 admin.site.register(GenericDOIDeposit)
 
 
diff --git a/scipost_django/journals/migrations/0134_journal_alternative_journals.py b/scipost_django/journals/migrations/0134_journal_alternative_journals.py
new file mode 100644
index 0000000000000000000000000000000000000000..787bab5db6e16eda78314fb8d7bb7e4283286e2f
--- /dev/null
+++ b/scipost_django/journals/migrations/0134_journal_alternative_journals.py
@@ -0,0 +1,17 @@
+# Generated by Django 4.2.10 on 2024-08-05 12:37
+
+from django.db import migrations, models
+
+
+class Migration(migrations.Migration):
+    dependencies = [
+        ("journals", "0133_alter_volume_doi_label"),
+    ]
+
+    operations = [
+        migrations.AddField(
+            model_name="journal",
+            name="alternative_journals",
+            field=models.ManyToManyField(to="journals.journal"),
+        ),
+    ]
diff --git a/scipost_django/journals/models/journal.py b/scipost_django/journals/models/journal.py
index 173775b2f05ceb58bc4b134c7473a15430475a12..8a34188b7534950c18c69ded6e5e0a4bd79ea718 100644
--- a/scipost_django/journals/models/journal.py
+++ b/scipost_django/journals/models/journal.py
@@ -145,6 +145,8 @@ class Journal(models.Model):
         blank=True,
     )
 
+    alternative_journals = models.ManyToManyField("self")
+
     # Cost per publication information
     cost_info = models.JSONField(default=cost_default_value)