diff --git a/program/serializers.py b/program/serializers.py
index bf71dee7646b6df5d1a5e38ec14fd2c874d101fd..9f5ad200f498a43d4fb1d7f5c5635462df089d1c 100644
--- a/program/serializers.py
+++ b/program/serializers.py
@@ -1527,3 +1527,33 @@ class PlaylistSerializer(serializers.ModelSerializer):
             PlaylistEntry.objects.create(playlist=playlist, **entry_data)
 
         return playlist
+
+    def update(self, instance, validated_data):
+        """Update an existing Playlist instance, given the validated data."""
+
+        user = self.context["request"].user
+        user_is_owner = user in instance.show.owners.all()
+
+        # having the update_playlist permission overrules the ownership
+        if not (user.has_perm("program.update_playlist") or user_is_owner):
+            raise exceptions.PermissionDenied(
+                detail="You are not allowed to update this playlist."
+            )
+
+        if "description" in validated_data:
+            instance.description = validated_data.pop("description")
+
+        if "playout_mode" in validated_data:
+            instance.playout_mode = validated_data.pop("playout_mode")
+
+        if "entries" in validated_data:
+            if instance.entries.count() > 0:
+                for entry in instance.entries.all():
+                    entry.delete(keep_parents=True)
+
+            for entry_data in validated_data.get("entries"):
+                PlaylistEntry.objects.create(playlist=instance, **entry_data)
+
+        instance.save()
+
+        return instance