diff --git a/api/funkwhale_api/playlists/models.py b/api/funkwhale_api/playlists/models.py
index 5106203341168e4c3200c80f8bca39ff118c3b4b..ac86b97a00848a97718db737ed6bab1be796c02b 100644
--- a/api/funkwhale_api/playlists/models.py
+++ b/api/funkwhale_api/playlists/models.py
@@ -147,13 +147,11 @@ class Playlist(models.Model):
 
 
 class PlaylistTrackQuerySet(models.QuerySet):
-    def for_nested_serialization(self):
-        return (
-            self.select_related()
-            .select_related("track__album__artist")
-            .prefetch_related(
-                "track__tags", "track__uploads", "track__artist__albums__tracks__tags"
-            )
+    def for_nested_serialization(self, actor=None):
+        tracks = music_models.Track.objects.annotate_playable_by_actor(actor)
+        tracks = tracks.select_related("artist", "album__artist")
+        return self.prefetch_related(
+            models.Prefetch("track", queryset=tracks, to_attr="_prefetched_track")
         )
 
     def annotate_playable_by_actor(self, actor):
diff --git a/api/funkwhale_api/playlists/serializers.py b/api/funkwhale_api/playlists/serializers.py
index 40a1c62b5115a375f37a1d402a066794c08ef59d..c1ca84e15be2708b6b328f582eadedd3aed08ce1 100644
--- a/api/funkwhale_api/playlists/serializers.py
+++ b/api/funkwhale_api/playlists/serializers.py
@@ -10,18 +10,16 @@ from . import models
 
 
 class PlaylistTrackSerializer(serializers.ModelSerializer):
-    track = TrackSerializer()
-    is_playable = serializers.SerializerMethodField()
+    # track = TrackSerializer()
+    track = serializers.SerializerMethodField()
 
     class Meta:
         model = models.PlaylistTrack
-        fields = ("id", "track", "playlist", "index", "creation_date", "is_playable")
+        fields = ("id", "track", "playlist", "index", "creation_date")
 
-    def get_is_playable(self, obj):
-        try:
-            return bool(obj.is_playable_by_actor)
-        except AttributeError:
-            return None
+    def get_track(self, o):
+        track = o._prefetched_track if hasattr(o, "_prefetched_track") else o.track
+        return TrackSerializer(track).data
 
 
 class PlaylistTrackWriteSerializer(serializers.ModelSerializer):
diff --git a/api/funkwhale_api/playlists/views.py b/api/funkwhale_api/playlists/views.py
index 0c90335a927e1f4f98b1ee72475f03b5c8edfb91..4934b92a019529542702796d4de71d40144885f8 100644
--- a/api/funkwhale_api/playlists/views.py
+++ b/api/funkwhale_api/playlists/views.py
@@ -39,7 +39,9 @@ class PlaylistViewSet(
     @detail_route(methods=["get"])
     def tracks(self, request, *args, **kwargs):
         playlist = self.get_object()
-        plts = playlist.playlist_tracks.all().for_nested_serialization()
+        plts = playlist.playlist_tracks.all().for_nested_serialization(
+            music_utils.get_actor_from_request(request)
+        )
         serializer = serializers.PlaylistTrackSerializer(plts, many=True)
         data = {"count": len(plts), "results": serializer.data}
         return Response(data, status=200)
@@ -59,7 +61,7 @@ class PlaylistViewSet(
         plts = (
             models.PlaylistTrack.objects.filter(pk__in=ids)
             .order_by("index")
-            .for_nested_serialization()
+            .for_nested_serialization(music_utils.get_actor_from_request(request))
         )
         serializer = serializers.PlaylistTrackSerializer(plts, many=True)
         data = {"count": len(plts), "results": serializer.data}
@@ -97,7 +99,7 @@ class PlaylistTrackViewSet(
 ):
 
     serializer_class = serializers.PlaylistTrackSerializer
-    queryset = models.PlaylistTrack.objects.all().for_nested_serialization()
+    queryset = models.PlaylistTrack.objects.all()
     permission_classes = [
         permissions.ConditionalAuthentication,
         permissions.OwnerPermission,
@@ -118,7 +120,7 @@ class PlaylistTrackViewSet(
                 lookup_field="playlist__privacy_level",
                 user_field="playlist__user",
             )
-        ).annotate_playable_by_actor(music_utils.get_actor_from_request(self.request))
+        ).for_nested_serialization(music_utils.get_actor_from_request(self.request))
 
     def perform_destroy(self, instance):
         instance.delete(update_indexes=True)
diff --git a/api/tests/playlists/test_views.py b/api/tests/playlists/test_views.py
index 1c2b0f19eea43fce59dcf0ed166badd8e5603265..1256347f3e379322020838e7504263703fbe267a 100644
--- a/api/tests/playlists/test_views.py
+++ b/api/tests/playlists/test_views.py
@@ -145,7 +145,7 @@ def test_can_list_tracks_from_playlist(level, factories, logged_in_api_client):
     url = reverse("api:v1:playlists-tracks", kwargs={"pk": plt.playlist.pk})
     response = logged_in_api_client.get(url)
     serialized_plt = serializers.PlaylistTrackSerializer(plt).data
-
+    serialized_plt["track"]["is_playable"] = False
     assert response.data["count"] == 1
     assert response.data["results"][0] == serialized_plt
 
diff --git a/front/src/App.vue b/front/src/App.vue
index d96e91d92a6ddedecebc26fc7c4d700818d8622c..f4ec3b3f831016e86779f0c168a65cd27be09259 100644
--- a/front/src/App.vue
+++ b/front/src/App.vue
@@ -306,7 +306,7 @@ html, body {
     left: 350px;
     right: 0px;
     top: 0px;
-    z-index: 2000;
+    z-index: 99;
   }
   background-color: white;
   .item {
diff --git a/front/src/views/playlists/Detail.vue b/front/src/views/playlists/Detail.vue
index 5e69f4dd1eae989fe4c12a8c7dc031884b196ea3..c1a08a7d1c51e5995c495e08cd48d495fbab8a50 100644
--- a/front/src/views/playlists/Detail.vue
+++ b/front/src/views/playlists/Detail.vue
@@ -21,7 +21,7 @@
           </div>
         </h2>
         <div class="ui hidden divider"></div>
-        <play-button class="orange" :tracks="tracks"><translate>Play all</translate></play-button>
+        <play-button class="orange" :is-playable="playlist.is_playable" :tracks="tracks"><translate>Play all</translate></play-button>
         <button
           class="ui icon button"
           v-if="$store.state.auth.profile && playlist.user.id === $store.state.auth.profile.id"