diff --git a/program/serializers.py b/program/serializers.py
index 0d97654d1dc923a829d43b78217efb913f823de4..11d72b42d79e07ef6996206874efbf9b62856c82 100644
--- a/program/serializers.py
+++ b/program/serializers.py
@@ -324,8 +324,11 @@ class HostSerializer(serializers.ModelSerializer):
         Create and return a new Host instance, given the validated data.
         """
 
+        # optional inline
         links_data = validated_data.pop("links", [])
+        # optional many-to-many
         owners = validated_data.pop("owners", [])
+        # optional foreign key
         validated_data["image"] = validated_data.pop("image_id", None)
 
         host = Host.objects.create(
@@ -358,7 +361,8 @@ class HostSerializer(serializers.ModelSerializer):
             for link_data in links_data:
                 HostLink.objects.create(host=instance, **link_data)
 
-        instance.owners.set(validated_data.get("owners", instance.owners))
+        if owners := validated_data.get("owners", []):
+            instance.owners.set(owners)
 
         instance.updated_by = self.context.get("request").user.username
 
@@ -476,19 +480,22 @@ class ShowSerializer(serializers.HyperlinkedModelSerializer):
         Create and return a new Show instance, given the validated data.
         """
 
-        owners = validated_data.pop("owners")
+        # required many-to-many
         category = validated_data.pop("category")
         hosts = validated_data.pop("hosts")
         language = validated_data.pop("language")
-        topic = validated_data.pop("topic")
         music_focus = validated_data.pop("music_focus")
+        owners = validated_data.pop("owners")
+        topic = validated_data.pop("topic")
+
+        # optional many-to-many
         links_data = validated_data.pop("links", [])
 
-        # required
+        # required foreign key
         validated_data["funding_category"] = validated_data.pop("funding_category_id")
         validated_data["type"] = validated_data.pop("type_id")
 
-        # optional
+        # optional foreign key
         validated_data["image"] = validated_data.pop("image_id", None)
         validated_data["logo"] = validated_data.pop("logo_id", None)
         validated_data["predecessor"] = validated_data.pop("predecessor_id", None)
@@ -499,12 +506,12 @@ class ShowSerializer(serializers.HyperlinkedModelSerializer):
         )
 
         # Save many-to-many relationships
-        show.owners.set(owners)
         show.category.set(category)
         show.hosts.set(hosts)
         show.language.set(language)
-        show.topic.set(topic)
         show.music_focus.set(music_focus)
+        show.owners.set(owners)
+        show.topic.set(topic)
 
         for link_data in links_data:
             ShowLink.objects.create(show=show, **link_data)
@@ -540,12 +547,23 @@ 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.category))
-        instance.hosts.set(validated_data.get("hosts", instance.hosts))
-        instance.language.set(validated_data.get("language", instance.language))
-        instance.music_focus.set(validated_data.get("music_focus", instance.music_focus))
-        instance.owners.set(validated_data.get("owners", instance.owners))
-        instance.topic.set(validated_data.get("topic", instance.topic))
+        if category := validated_data.get("category"):
+            instance.category.set(category)
+
+        if hosts := validated_data.get("hosts"):
+            instance.hosts.set(hosts)
+
+        if language := validated_data.get("language"):
+            instance.language.set(language)
+
+        if music_focus := validated_data.get("music_focus"):
+            instance.music_focus.set(music_focus)
+
+        if owners := validated_data.get("owners"):
+            instance.owners.set(owners)
+
+        if topic := validated_data.get("topic"):
+            instance.topic.set(topic)
 
         if links_data := validated_data.get("links"):
             instance = delete_links(instance)
@@ -772,8 +790,11 @@ class TimeSlotSerializer(serializers.ModelSerializer):
         instance.repetition_of = validated_data.get("repetition_of_id", instance.repetition_of)
         instance.playlist_id = validated_data.get("playlist_id", instance.playlist_id)
 
-        instance.language.set(validated_data.get("language", []))
-        instance.topic.set(validated_data.get("topic", []))
+        if language := validated_data.get("language", []):
+            instance.language.set(language)
+
+        if topic := validated_data.get("topic", []):
+            instance.topic.set(topic)
 
         instance.save()
         return instance
@@ -794,6 +815,7 @@ class NoteSerializer(serializers.ModelSerializer):
     )
     links = NoteLinkSerializer(many=True, required=False)
     playlist_id = serializers.IntegerField(required=False)
+    tags = serializers.JSONField(default=[], required=False)
     timeslot_id = serializers.PrimaryKeyRelatedField(
         queryset=TimeSlot.objects.all(), required=False
     )
@@ -868,11 +890,12 @@ class NoteSerializer(serializers.ModelSerializer):
         instance.image = validated_data.get("image_id", instance.image)
         instance.slug = validated_data.get("slug", instance.slug)
         instance.summary = validated_data.get("summary", instance.summary)
-        instance.tags = validated_data.get("tags", instance.tags)
         instance.timeslot = validated_data.get("timeslot_id", instance.timeslot)
+        instance.tags = validated_data.get("tags", instance.tags)
         instance.title = validated_data.get("title", instance.title)
 
-        instance.contributors.set(validated_data.get("contributors", instance.contributors))
+        if contributors := validated_data.get("contributors", []):
+            instance.contributors.set(contributors)
 
         if cba_id := validated_data.get("cba_id"):
             if audio_url := get_audio_url(cba_id):