diff --git a/program/serializers.py b/program/serializers.py
index 6b4b37672ea024ccd9d27c85afc96d99cc101825..b17d3681c987072f06814f40240228d0962149ef 100644
--- a/program/serializers.py
+++ b/program/serializers.py
@@ -693,18 +693,25 @@ class NoteLinkSerializer(serializers.ModelSerializer):
         fields = ("type", "url")
 
 
-class NoteSerializer(ThumbnailsMixin, serializers.ModelSerializer):
+class NoteSerializer(serializers.ModelSerializer):
+    contributors = serializers.PrimaryKeyRelatedField(queryset=Host.objects.all(), many=True)
+    image = serializers.PrimaryKeyRelatedField(queryset=Image.objects.all(), required=False)
     links = NoteLinkSerializer(many=True, required=False)
     timeslot = serializers.PrimaryKeyRelatedField(queryset=TimeSlot.objects.all())
-    contributors = serializers.PrimaryKeyRelatedField(queryset=Host.objects.all(), many=True)
-    thumbnails = serializers.SerializerMethodField()
 
     class Meta:
         model = Note
+        read_only_fields = (
+            "created_at",
+            "created_by",
+            "updated_at",
+            "updated_by",
+        )
         fields = (
             "cba_id",
             "content",
             "contributors",
+            "image",
             "links",
             "owner",
             "playlist",
@@ -714,35 +721,18 @@ class NoteSerializer(ThumbnailsMixin, serializers.ModelSerializer):
             "thumbnails",
             "timeslot",
             "title",
-            # 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",
-        )
+        ) + read_only_fields
 
     def create(self, validated_data):
         """Create and return a new Note instance, given the validated data."""
+
         links_data = validated_data.pop("links", [])
         contributors = validated_data.pop("contributors", [])
 
         # the creator of the note is the owner
         validated_data["owner"] = self.context["user_id"]
 
-        note = Note.objects.create(**validated_data)
+        note = Note.objects.create(**validated_data | self.context)  # created_by
 
         note.contributors.set(contributors)
 
@@ -769,32 +759,29 @@ class NoteSerializer(ThumbnailsMixin, serializers.ModelSerializer):
     def update(self, instance, validated_data):
         """Update and return an existing Note instance, given the validated data."""
 
+        instance.cba_id = validated_data.get("cba_id", instance.cba_id)
+        instance.content = validated_data.get("content", instance.content)
+        instance.image = validated_data.get("image", instance.image)
         instance.show = validated_data.get("show", instance.show)
-        instance.timeslot = validated_data.get("timeslot", instance.timeslot)
-        instance.title = validated_data.get("title", instance.title)
         instance.slug = validated_data.get("slug", instance.slug)
         instance.summary = validated_data.get("summary", instance.summary)
-        instance.content = validated_data.get("content", instance.content)
-        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.cba_id = validated_data.get("cba_id", instance.cba_id)
+        instance.timeslot = validated_data.get("timeslot", instance.timeslot)
+        instance.title = validated_data.get("title", instance.title)
 
         instance.contributors.set(validated_data.get("contributors", instance.contributors))
 
-        if instance.links.count() > 0:
-            for link in instance.links.all():
-                link.delete(keep_parents=True)
-
         if cba_id := validated_data.get("cba_id"):
             if audio_url := get_audio_url(cba_id):
                 NoteLink.objects.create(note=instance, type="CBA", url=audio_url)
 
         if links_data := validated_data.get("links"):
+            instance = delete_links(instance)
+
             for link_data in links_data:
                 NoteLink.objects.create(note=instance, **link_data)
 
+        instance.updated_by = self.context.get("updated_by")
+
         instance.save()
 
         # Remove existing note connections from timeslots