diff --git a/api/funkwhale_api/manage/serializers.py b/api/funkwhale_api/manage/serializers.py
index d8cab97312b2a4a396363fabc69eb7c2b1019563..de7d7d63bef7769ce5562b212a10674de4032f2c 100644
--- a/api/funkwhale_api/manage/serializers.py
+++ b/api/funkwhale_api/manage/serializers.py
@@ -443,8 +443,12 @@ class ManageAlbumSerializer(
             "artist",
             "attributed_to",
             "tags",
+            "tracks_count",
         ]
 
+    def get_tracks_count(self, o):
+        return len(o.tracks.all())
+
     def get_tags(self, obj):
         tagged_items = getattr(obj, "_prefetched_tagged_items", [])
         return [ti.tag.name for ti in tagged_items]
diff --git a/api/funkwhale_api/manage/views.py b/api/funkwhale_api/manage/views.py
index bc3908daee90e1c37a1b0810a4786e91e77eda71..52bdfaf244cc58163568da39ff8c328ee77e5442 100644
--- a/api/funkwhale_api/manage/views.py
+++ b/api/funkwhale_api/manage/views.py
@@ -128,7 +128,7 @@ class ManageAlbumViewSet(
         music_models.Album.objects.all()
         .order_by("-id")
         .select_related("attributed_to", "artist", "attachment_cover")
-        .with_tracks_count()
+        .prefetch_related("tracks")
     )
     serializer_class = serializers.ManageAlbumSerializer
     filterset_class = filters.ManageAlbumFilterSet
diff --git a/api/funkwhale_api/music/serializers.py b/api/funkwhale_api/music/serializers.py
index 7dfef3bcace680ba646ab00849d18a9692249ca7..7d894b5eda66d793804c34d7d22f899ee8141902 100644
--- a/api/funkwhale_api/music/serializers.py
+++ b/api/funkwhale_api/music/serializers.py
@@ -101,7 +101,7 @@ class ArtistAlbumSerializer(serializers.Serializer):
         return o.artist_id
 
     def get_tracks_count(self, o):
-        return o._tracks_count
+        return len(o.tracks.all())
 
     def get_is_playable(self, obj):
         try:
@@ -210,7 +210,7 @@ class AlbumSerializer(OptionalDescriptionMixin, serializers.Serializer):
         return serialize_artist_simple(o.artist)
 
     def get_tracks_count(self, o):
-        return getattr(o, "_tracks_count", None)
+        return len(o.tracks.all())
 
     def get_is_playable(self, obj):
         try:
diff --git a/api/funkwhale_api/music/views.py b/api/funkwhale_api/music/views.py
index 5a4e81da4b1404f601c021e777b3dd76a9aaef7a..2b4af7ae644fabde78b392cd4cbe97015e30fda1 100644
--- a/api/funkwhale_api/music/views.py
+++ b/api/funkwhale_api/music/views.py
@@ -152,8 +152,10 @@ class ArtistViewSet(
 
     def get_queryset(self):
         queryset = super().get_queryset()
-        albums = models.Album.objects.with_tracks_count().select_related(
-            "attachment_cover"
+        albums = (
+            models.Album.objects.with_tracks_count()
+            .select_related("attachment_cover")
+            .prefetch_related("tracks")
         )
         albums = albums.annotate_playable_by_actor(
             utils.get_actor_from_request(self.request)
@@ -179,10 +181,10 @@ class AlbumViewSet(
     viewsets.ReadOnlyModelViewSet,
 ):
     queryset = (
-        models.Album.objects.all()
-        .order_by("-creation_date")
-        .with_tracks_count()
-        .prefetch_related("artist", "attributed_to", "attachment_cover")
+        models.Album.objects.all().order_by("-creation_date")
+        # we do a prefetech related on tracks instead of a count because it's more efficient
+        # db-wise
+        .prefetch_related("artist", "attributed_to", "attachment_cover", "tracks")
     )
     serializer_class = serializers.AlbumSerializer
     permission_classes = [oauth_permissions.ScopePermission]
@@ -759,7 +761,7 @@ class Search(views.APIView):
                     "album",
                     queryset=models.Album.objects.select_related(
                         "artist", "attachment_cover", "attributed_to"
-                    ),
+                    ).prefetch_related("tracks"),
                 ),
             )
         )
diff --git a/api/tests/manage/test_serializers.py b/api/tests/manage/test_serializers.py
index d6de65a47e61ad2a90971179c4ad55d81edc1fb6..6ba29897ef2a07cb078ad62b3f8ed1264265620e 100644
--- a/api/tests/manage/test_serializers.py
+++ b/api/tests/manage/test_serializers.py
@@ -373,6 +373,7 @@ def test_manage_nested_artist_serializer(factories, now, to_api_date):
 
 def test_manage_album_serializer(factories, now, to_api_date):
     album = factories["music.Album"](attributed=True, with_cover=True)
+    factories["music.Track"](album=album)
     setattr(album, "_tracks_count", 42)
     expected = {
         "id": album.id,
@@ -389,7 +390,7 @@ def test_manage_album_serializer(factories, now, to_api_date):
             album.attributed_to
         ).data,
         "tags": [],
-        "tracks_count": 42,
+        "tracks_count": 1,
     }
     s = serializers.ManageAlbumSerializer(album)
 
diff --git a/front/src/views/admin/library/AlbumDetail.vue b/front/src/views/admin/library/AlbumDetail.vue
index d1a07da37e3e90a8151140ab4de0a60592f9515b..8f106007341cb753ca7035ac823b2c687dc88fb9 100644
--- a/front/src/views/admin/library/AlbumDetail.vue
+++ b/front/src/views/admin/library/AlbumDetail.vue
@@ -276,7 +276,7 @@
                       </router-link>
                     </td>
                     <td>
-                      {{ object.tracks.length }}
+                      {{ object.tracks_count }}
                     </td>
                   </tr>
                 </tbody>