diff --git a/program/serializers.py b/program/serializers.py
index 21f4b476a61245ad29cb7a1d4d3782a2b0982b5b..6b4b37672ea024ccd9d27c85afc96d99cc101825 100644
--- a/program/serializers.py
+++ b/program/serializers.py
@@ -46,7 +46,7 @@ from program.models import (
     Type,
     UserProfile,
 )
-from program.utils import get_audio_url
+from program.utils import delete_links, get_audio_url
 from steering.settings import THUMBNAIL_SIZES
 
 SOLUTION_CHOICES = {
@@ -259,45 +259,42 @@ class ImageSerializer(serializers.ModelSerializer):
         return instance
 
 
-class HostSerializer(ThumbnailsMixin, serializers.ModelSerializer):
+class HostSerializer(serializers.ModelSerializer):
+    image = serializers.PrimaryKeyRelatedField(queryset=Image.objects.all(), required=False)
     links = HostLinkSerializer(many=True, required=False)
-    thumbnails = serializers.SerializerMethodField()
 
     class Meta:
         model = Host
-        fields = (
-            "biography",
-            "email",
-            "is_active",
-            "links",
-            "name",
-            "thumbnails",
-            # ModelWithImageFields
-            "image",
-            "image_alt_text",
-            "image_credits",
-            "image_height",
-            "image_ppoi",
-            "image_width",
-            # ModelWithCreatedUpdatedFields
-            "created_at",
-            "created_by",
-            "updated_at",
-            "updated_by",
-        )
         read_only_fields = (
             "created_at",
             "created_by",
             "updated_at",
             "updated_by",
         )
+        fields = (
+            "biography",
+            "email",
+            "id",
+            "image",
+            "is_active",
+            "links",
+            "name",
+        ) + read_only_fields
 
     def create(self, validated_data):
+        """
+        Create and return a new Host instance, given the validated data.
+        """
+
         links_data = validated_data.pop("links", [])
-        host = Host.objects.create(**validated_data | self.context)
+
+        host = Host.objects.create(**validated_data | self.context)  # created_by
+
         for link_data in links_data:
             HostLink.objects.create(host=host, **link_data)
+
         host.save()
+
         return host
 
     def update(self, instance, validated_data):
@@ -305,24 +302,20 @@ class HostSerializer(ThumbnailsMixin, serializers.ModelSerializer):
         Update and return an existing Host instance, given the validated data.
         """
 
-        instance.name = validated_data.get("name", instance.name)
-        instance.is_active = validated_data.get("is_active", instance.is_active)
-        instance.email = validated_data.get("email", instance.email)
         instance.biography = validated_data.get("biography", instance.biography)
+        instance.email = validated_data.get("email", instance.email)
         instance.image = validated_data.get("image", instance.image)
-        instance.image_ppoi = validated_data.get("image_ppoi", instance.image_ppoi)
-        instance.image_credits = validated_data.get("image_credits", instance.image_credits)
-        instance.image_alt_text = validated_data.get("image_alt_text", instance.image_alt_text)
-        instance.updated_by = self.context.get("updated_by")
-
-        if instance.links.count() > 0:
-            for link in instance.links.all():
-                link.delete(keep_parents=True)
+        instance.is_active = validated_data.get("is_active", instance.is_active)
+        instance.name = validated_data.get("name", instance.name)
 
         if links_data := validated_data.get("links"):
+            instance = delete_links(instance)
+
             for link_data in links_data:
                 HostLink.objects.create(host=instance, **link_data)
 
+        instance.updated_by = self.context.get("updated_by")
+
         instance.save()
 
         return instance
diff --git a/program/utils.py b/program/utils.py
index d21eaaf81ea9f1e66d2b4551d59a190fdd1cc262..1c4196bf0e4fe21b531dc2e9ab5204d380bf6115 100644
--- a/program/utils.py
+++ b/program/utils.py
@@ -19,6 +19,7 @@
 #
 
 import json
+import typing
 from datetime import date, datetime, time
 from typing import Dict, Optional, Tuple, Union
 
@@ -28,6 +29,9 @@ from rest_framework import exceptions
 from django.utils import timezone
 from steering.settings import CBA_AJAX_URL, CBA_API_KEY, DEBUG
 
+if typing.TYPE_CHECKING:
+    from program.models import Host, Note, Show
+
 
 def parse_datetime(date_string: str) -> datetime:
     """
@@ -110,6 +114,16 @@ def get_values(
         return int_if_digit(values[0])
 
 
+def delete_links(instance: Union["Host", "Note", "Show"]) -> Union["Host", "Note", "Show"]:
+    """Delete the links associated with the instance."""
+
+    if instance.links.count() > 0:
+        for link in instance.links.all():
+            link.delete(keep_parents=True)
+
+    return instance
+
+
 class DisabledObjectPermissionCheckMixin:
     """
     At the time of writing permission checks were entirely circumvented by manual