diff --git a/fixtures/program/show.json b/fixtures/program/show.json
index 429f422c32df80a2cef1a002465abb0c0d33b8b8..597026872db92c22c309727ae0f7671cf6eccacc 100644
--- a/fixtures/program/show.json
+++ b/fixtures/program/show.json
@@ -9,7 +9,7 @@
       "name": "Musikprogramm",
       "slug": "musikprogramm",
       "image": null,
-      "logo": "",
+      "logo": null,
       "short_description": "Unmoderiertes Musikprogramm",
       "description": "Unmoderiertes Musikprogramm",
       "email": "musikredaktion@helsinki.at",
diff --git a/program/migrations/0051_remove_show_logo.py b/program/migrations/0051_remove_show_logo.py
new file mode 100644
index 0000000000000000000000000000000000000000..9130f374d3cd8df948d146b08e325c698d3befe2
--- /dev/null
+++ b/program/migrations/0051_remove_show_logo.py
@@ -0,0 +1,17 @@
+# Generated by Django 3.2.18 on 2023-04-11 15:44
+
+from django.db import migrations
+
+
+class Migration(migrations.Migration):
+
+    dependencies = [
+        ('program', '0050_auto_20230404_0037'),
+    ]
+
+    operations = [
+        migrations.RemoveField(
+            model_name='show',
+            name='logo',
+        ),
+    ]
diff --git a/program/migrations/0052_show_logo.py b/program/migrations/0052_show_logo.py
new file mode 100644
index 0000000000000000000000000000000000000000..ba7a4c67358e11a8b341cc714d325a4bba3bbf4d
--- /dev/null
+++ b/program/migrations/0052_show_logo.py
@@ -0,0 +1,19 @@
+# Generated by Django 3.2.18 on 2023-04-11 15:46
+
+from django.db import migrations, models
+import django.db.models.deletion
+
+
+class Migration(migrations.Migration):
+
+    dependencies = [
+        ('program', '0051_remove_show_logo'),
+    ]
+
+    operations = [
+        migrations.AddField(
+            model_name='show',
+            name='logo',
+            field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, related_name='logo_shows', to='program.image'),
+        ),
+    ]
diff --git a/program/models.py b/program/models.py
index a089ab54d148d2078234037475655cc6dba3081a..64c6780defab93f6e977242ddbb8b125c2a3fff1 100644
--- a/program/models.py
+++ b/program/models.py
@@ -239,7 +239,14 @@ class Show(ModelWithCreatedUpdatedFields):
     is_active = models.BooleanField(default=True)
     is_public = models.BooleanField(default=False)
     language = models.ManyToManyField(Language, blank=True, related_name="shows")
-    logo = models.ImageField(blank=True, null=True, upload_to="show_images")
+    # TODO: is this really necessary?
+    logo = models.ForeignKey(
+        Image,
+        blank=True,
+        null=True,
+        on_delete=models.CASCADE,
+        related_name="logo_shows",
+    )
     music_focus = models.ManyToManyField(MusicFocus, blank=True, related_name="shows")
     name = models.CharField(max_length=255)
     owners = models.ManyToManyField(User, blank=True, related_name="shows")
diff --git a/program/serializers.py b/program/serializers.py
index 7620b4c32bd3eeddfc24510819108cf898a6c028..3da89cc2c513342e3f0ad2c60d5f96f15174aeef 100644
--- a/program/serializers.py
+++ b/program/serializers.py
@@ -383,6 +383,11 @@ class ShowSerializer(serializers.HyperlinkedModelSerializer):
     image = serializers.PrimaryKeyRelatedField(queryset=Image.objects.all(), required=False)
     language = serializers.PrimaryKeyRelatedField(queryset=Language.objects.all(), many=True)
     links = HostLinkSerializer(many=True, required=False)
+    logo = serializers.PrimaryKeyRelatedField(
+        allow_null=True,
+        queryset=Image.objects.all(),
+        required=False,
+    )
     music_focus = serializers.PrimaryKeyRelatedField(queryset=MusicFocus.objects.all(), many=True)
     owners = serializers.PrimaryKeyRelatedField(queryset=User.objects.all(), many=True)
     predecessor = serializers.PrimaryKeyRelatedField(