diff --git a/mobile/lib/shared/models/asset.dart b/mobile/lib/shared/models/asset.dart
index 0ed69dea75..10761616af 100644
--- a/mobile/lib/shared/models/asset.dart
+++ b/mobile/lib/shared/models/asset.dart
@@ -34,7 +34,10 @@ class Asset {
         isTrashed = remote.isTrashed,
         isReadOnly = remote.isReadOnly,
         isOffline = remote.isOffline,
-        stackParentId = remote.stackParentId,
+        // workaround to nullify stackParentId for the parent asset until we refactor the mobile app
+        // stack handling to properly handle it
+        stackParentId =
+            remote.stackParentId == remote.id ? null : remote.stackParentId,
         stackCount = remote.stackCount;
 
   Asset.local(AssetEntity local, List<int> hash)
@@ -290,7 +293,6 @@ class Asset {
           width: a.width ?? width,
           height: a.height ?? height,
           exifInfo: a.exifInfo?.copyWith(id: id) ?? exifInfo,
-          stackCount: a.stackCount ?? stackCount,
         );
       } else if (isRemote) {
         return _copyWith(
@@ -305,7 +307,9 @@ class Asset {
           id: id,
           remoteId: remoteId,
           livePhotoVideoId: livePhotoVideoId,
-          stackParentId: stackParentId,
+          // workaround to nullify stackParentId for the parent asset until we refactor the mobile app
+          // stack handling to properly handle it
+          stackParentId: stackParentId == remoteId ? null : stackParentId,
           stackCount: stackCount,
           isFavorite: isFavorite,
           isArchived: isArchived,
@@ -323,8 +327,10 @@ class Asset {
           width: a.width,
           height: a.height,
           livePhotoVideoId: a.livePhotoVideoId,
-          stackParentId: a.stackParentId,
-          stackCount: a.stackCount ?? stackCount,
+          // workaround to nullify stackParentId for the parent asset until we refactor the mobile app
+          // stack handling to properly handle it
+          stackParentId: a.stackParentId == a.remoteId ? null : a.stackParentId,
+          stackCount: a.stackCount,
           // isFavorite + isArchived are not set by device-only assets
           isFavorite: a.isFavorite,
           isArchived: a.isArchived,
diff --git a/server/src/immich/api-v1/asset/asset.service.ts b/server/src/immich/api-v1/asset/asset.service.ts
index 6a96bf531b..b0ff311c51 100644
--- a/server/src/immich/api-v1/asset/asset.service.ts
+++ b/server/src/immich/api-v1/asset/asset.service.ts
@@ -113,7 +113,7 @@ export class AssetService {
     const userId = dto.userId || auth.user.id;
     await this.access.requirePermission(auth, Permission.TIMELINE_READ, userId);
     const assets = await this.assetRepositoryV1.getAllByUserId(userId, dto);
-    return assets.map((asset) => mapAsset(asset));
+    return assets.map((asset) => mapAsset(asset, { withStack: true }));
   }
 
   async serveThumbnail(auth: AuthDto, assetId: string, dto: GetAssetThumbnailDto): Promise<ImmichFileResponse> {