diff --git a/program/serializers.py b/program/serializers.py
index 764a3cd2a598ec607737b00ef36a7bf87bda2d2b..a5383bff21b2e531d97da4425282db95b7d60cfa 100644
--- a/program/serializers.py
+++ b/program/serializers.py
@@ -548,12 +548,24 @@ class ShowSerializer(serializers.HyperlinkedModelSerializer):
         instance.slug = validated_data.get("slug", instance.slug)
         instance.type = validated_data.get("type_id", instance.type)
 
-        instance.category.set(validated_data.get("category", []))
-        instance.hosts.set(validated_data.get("hosts", []))
-        instance.language.set(validated_data.get("language", []))
-        instance.music_focus.set(validated_data.get("music_focus", []))
-        instance.owners.set(validated_data.get("owners", []))
-        instance.topic.set(validated_data.get("topic", []))
+        # optional many-to-many in PATCH requests
+        if (category := validated_data.get("category")) is not None:
+            instance.category.set(category)
+
+        if (hosts := validated_data.get("hosts")) is not None:
+            instance.hosts.set(hosts)
+
+        if (language := validated_data.get("language")) is not None:
+            instance.language.set(language)
+
+        if (music_focus := validated_data.get("music_focus")) is not None:
+            instance.music_focus.set(music_focus)
+
+        if (owners := validated_data.get("owners")) is not None:
+            instance.owners.set(owners)
+
+        if (topic := validated_data.get("topic")) is not None:
+            instance.topic.set(topic)
 
         if links_data := validated_data.get("links"):
             instance = delete_links(instance)
@@ -892,9 +904,15 @@ class NoteSerializer(serializers.ModelSerializer):
         instance.tags = validated_data.get("tags", instance.tags)
         instance.title = validated_data.get("title", instance.title)
 
-        instance.contributors.set(validated_data.get("contributors", []))
-        instance.language.set(validated_data.get("language", []))
-        instance.topic.set(validated_data.get("topic", []))
+        # optional many-to-many in PATCH requests
+        if (contributors := validated_data.get("contributors")) is not None:
+            instance.contributors.set(contributors)
+
+        if (language := validated_data.get("language")) is not None:
+            instance.language.set(language)
+
+        if (topic := validated_data.get("topic")) is not None:
+            instance.topic.set(topic)
 
         if cba_id := validated_data.get("cba_id"):
             if audio_url := get_audio_url(cba_id):