diff --git a/lib/use_case/add_to_album.dart b/lib/use_case/add_to_album.dart
index edc0d23e..01a60c81 100644
--- a/lib/use_case/add_to_album.dart
+++ b/lib/use_case/add_to_album.dart
@@ -3,7 +3,7 @@ import 'package:nc_photos/account.dart';
 import 'package:nc_photos/entity/album.dart';
 import 'package:nc_photos/entity/album/item.dart';
 import 'package:nc_photos/entity/album/provider.dart';
-import 'package:nc_photos/use_case/resync_album.dart';
+import 'package:nc_photos/use_case/preprocess_album.dart';
 import 'package:nc_photos/use_case/update_album.dart';
 import 'package:nc_photos/use_case/update_album_with_actual_items.dart';
 
@@ -16,7 +16,7 @@ class AddToAlbum {
     _log.info("[call] Add ${items.length} items to album '${album.name}'");
     assert(album.provider is AlbumStaticProvider);
     // resync is needed to work out album cover and latest item
-    final oldItems = await ResyncAlbum()(account, album);
+    final oldItems = await PreProcessAlbum()(account, album);
     final newItems = makeDistinctAlbumItems([
       ...items,
       ...oldItems,
diff --git a/lib/use_case/preprocess_album.dart b/lib/use_case/preprocess_album.dart
new file mode 100644
index 00000000..b4334674
--- /dev/null
+++ b/lib/use_case/preprocess_album.dart
@@ -0,0 +1,24 @@
+import 'package:nc_photos/account.dart';
+import 'package:nc_photos/entity/album.dart';
+import 'package:nc_photos/entity/album/item.dart';
+import 'package:nc_photos/entity/album/provider.dart';
+import 'package:nc_photos/use_case/populate_album.dart';
+import 'package:nc_photos/use_case/resync_album.dart';
+
+/// Pre-process an album such that it's ready to be displayed
+///
+/// Internally, it'll dispatch the work depending on the album:
+/// - with AlbumStaticProvider: [ResyncAlbum]
+/// - with AlbumDirProvider: [PopulateAlbum]
+class PreProcessAlbum {
+  Future<List<AlbumItem>> call(Account account, Album album) {
+    if (album.provider is AlbumStaticProvider) {
+      return ResyncAlbum()(account, album);
+    } else if (album.provider is AlbumDynamicProvider) {
+      return PopulateAlbum()(account, album);
+    } else {
+      throw ArgumentError(
+          "Unknown album provider: ${album.provider.runtimeType}");
+    }
+  }
+}
diff --git a/lib/use_case/remove_from_album.dart b/lib/use_case/remove_from_album.dart
index d51e89dc..9dde6758 100644
--- a/lib/use_case/remove_from_album.dart
+++ b/lib/use_case/remove_from_album.dart
@@ -5,7 +5,7 @@ import 'package:nc_photos/entity/album/item.dart';
 import 'package:nc_photos/entity/album/provider.dart';
 import 'package:nc_photos/entity/file.dart';
 import 'package:nc_photos/iterable_extension.dart';
-import 'package:nc_photos/use_case/resync_album.dart';
+import 'package:nc_photos/use_case/preprocess_album.dart';
 import 'package:nc_photos/use_case/update_album.dart';
 import 'package:nc_photos/use_case/update_album_with_actual_items.dart';
 
@@ -34,7 +34,7 @@ class RemoveFromAlbum {
         element.file.bestDateTime == album.provider.latestItemTime)) {
       _log.info("[call] Resync as latest item is being removed");
       // need to update the album properties
-      final newItemsSynced = await ResyncAlbum()(account, newAlbum);
+      final newItemsSynced = await PreProcessAlbum()(account, newAlbum);
       newAlbum = await UpdateAlbumWithActualItems(null)(
         account,
         newAlbum,
diff --git a/lib/widget/album_browser.dart b/lib/widget/album_browser.dart
index 3d38ce2b..a8bfcb66 100644
--- a/lib/widget/album_browser.dart
+++ b/lib/widget/album_browser.dart
@@ -23,8 +23,8 @@ import 'package:nc_photos/session_storage.dart';
 import 'package:nc_photos/share_handler.dart';
 import 'package:nc_photos/snack_bar_manager.dart';
 import 'package:nc_photos/theme.dart';
+import 'package:nc_photos/use_case/preprocess_album.dart';
 import 'package:nc_photos/use_case/remove_from_album.dart';
-import 'package:nc_photos/use_case/resync_album.dart';
 import 'package:nc_photos/use_case/update_album.dart';
 import 'package:nc_photos/use_case/update_album_with_actual_items.dart';
 import 'package:nc_photos/widget/album_browser_mixin.dart';
@@ -655,7 +655,7 @@ class _AlbumBrowserState extends State<AlbumBrowser>
 
   Future<void> _setAlbum(Album album) async {
     assert(album.provider is AlbumStaticProvider);
-    final items = await ResyncAlbum()(widget.account, album);
+    final items = await PreProcessAlbum()(widget.account, album);
     album = album.copyWith(
       provider: AlbumStaticProvider.of(album).copyWith(
         items: items,
diff --git a/lib/widget/album_importer.dart b/lib/widget/album_importer.dart
index f90ccdd4..9007872b 100644
--- a/lib/widget/album_importer.dart
+++ b/lib/widget/album_importer.dart
@@ -17,7 +17,7 @@ import 'package:nc_photos/k.dart' as k;
 import 'package:nc_photos/snack_bar_manager.dart';
 import 'package:nc_photos/theme.dart';
 import 'package:nc_photos/use_case/create_album.dart';
-import 'package:nc_photos/use_case/populate_album.dart';
+import 'package:nc_photos/use_case/preprocess_album.dart';
 import 'package:nc_photos/use_case/update_album_with_actual_items.dart';
 import 'package:nc_photos/widget/processing_dialog.dart';
 import 'package:path/path.dart' as path;
@@ -235,7 +235,7 @@ class _AlbumImporterState extends State<AlbumImporter> {
         );
         _log.info("[_createAllAlbums] Creating dir album: $album");
 
-        final items = await PopulateAlbum()(widget.account, album);
+        final items = await PreProcessAlbum()(widget.account, album);
         album = await UpdateAlbumWithActualItems(null)(
             widget.account, album, items);
 
diff --git a/lib/widget/dynamic_album_browser.dart b/lib/widget/dynamic_album_browser.dart
index cd885878..b186fb5a 100644
--- a/lib/widget/dynamic_album_browser.dart
+++ b/lib/widget/dynamic_album_browser.dart
@@ -25,7 +25,7 @@ import 'package:nc_photos/platform/k.dart' as platform_k;
 import 'package:nc_photos/share_handler.dart';
 import 'package:nc_photos/snack_bar_manager.dart';
 import 'package:nc_photos/theme.dart';
-import 'package:nc_photos/use_case/populate_album.dart';
+import 'package:nc_photos/use_case/preprocess_album.dart';
 import 'package:nc_photos/use_case/remove.dart';
 import 'package:nc_photos/use_case/update_album.dart';
 import 'package:nc_photos/use_case/update_album_with_actual_items.dart';
@@ -161,7 +161,7 @@ class _DynamicAlbumBrowserState extends State<DynamicAlbumBrowser>
 
   Future<void> _initAlbum() async {
     assert(widget.album.provider is AlbumDynamicProvider);
-    final items = await PopulateAlbum()(widget.account, widget.album);
+    final items = await PreProcessAlbum()(widget.account, widget.album);
     final album = await _updateAlbumPostPopulate(widget.album, items);
     if (mounted) {
       setState(() {