diff --git a/mobile/lib/domain/services/device_sync.service.dart b/mobile/lib/domain/services/device_sync.service.dart
index 2e524b7a6e..f6049dce34 100644
--- a/mobile/lib/domain/services/device_sync.service.dart
+++ b/mobile/lib/domain/services/device_sync.service.dart
@@ -16,7 +16,7 @@ class DeviceSyncService {
   final ILocalAlbumRepository _localAlbumRepository;
   final Platform _platform;
   final platform.ImHostService _hostService;
-  final Logger _log = Logger("SyncService");
+  final Logger _log = Logger("DeviceSyncService");
 
   DeviceSyncService({
     required IAlbumMediaRepository albumMediaRepository,
@@ -29,6 +29,7 @@ class DeviceSyncService {
         _hostService = hostService;
 
   Future<void> sync() async {
+    final Stopwatch stopwatch = Stopwatch()..start();
     try {
       if (await _hostService.shouldFullSync()) {
         _log.fine("Cannot use partial sync. Performing full sync");
@@ -57,6 +58,8 @@ class DeviceSyncService {
     } catch (e, s) {
       _log.severe("Error performing device sync", e, s);
     }
+    stopwatch.stop();
+    _log.info("Device sync took - ${stopwatch.elapsedMilliseconds}ms");
   }
 
   Future<void> fullSync() async {
@@ -91,7 +94,7 @@ class DeviceSyncService {
 
   Future<void> addAlbum(LocalAlbum newAlbum) async {
     try {
-      _log.info("Adding device album ${newAlbum.name}");
+      _log.fine("Adding device album ${newAlbum.name}");
       final album = await _albumMediaRepository.refresh(newAlbum.id);
 
       final assets = album.assetCount > 0
@@ -106,7 +109,7 @@ class DeviceSyncService {
   }
 
   Future<void> removeAlbum(LocalAlbum a) async {
-    _log.info("Removing device album ${a.name}");
+    _log.fine("Removing device album ${a.name}");
     try {
       // Asset deletion is handled in the repository
       await _localAlbumRepository.delete(a.id);
@@ -118,7 +121,7 @@ class DeviceSyncService {
   // The deviceAlbum is ignored since we are going to refresh it anyways
   FutureOr<bool> updateAlbum(LocalAlbum dbAlbum, LocalAlbum _) async {
     try {
-      _log.info("Syncing device album ${dbAlbum.name}");
+      _log.fine("Syncing device album ${dbAlbum.name}");
 
       final deviceAlbum = await _albumMediaRepository.refresh(dbAlbum.id);
 
@@ -131,7 +134,7 @@ class DeviceSyncService {
         return false;
       }
 
-      _log.info("Device album ${dbAlbum.name} has changed. Syncing...");
+      _log.fine("Device album ${dbAlbum.name} has changed. Syncing...");
 
       // Faster path - only new assets added
       if (await checkAddition(dbAlbum, deviceAlbum)) {
diff --git a/mobile/lib/platform/messages.g.dart b/mobile/lib/platform/messages.g.dart
index c6e593912b..decf8384eb 100644
--- a/mobile/lib/platform/messages.g.dart
+++ b/mobile/lib/platform/messages.g.dart
@@ -14,21 +14,22 @@ PlatformException _createConnectionError(String channelName) {
     message: 'Unable to establish connection on channel: "$channelName".',
   );
 }
+
 bool _deepEquals(Object? a, Object? b) {
   if (a is List && b is List) {
     return a.length == b.length &&
         a.indexed
-        .every(((int, dynamic) item) => _deepEquals(item.$2, b[item.$1]));
+            .every(((int, dynamic) item) => _deepEquals(item.$2, b[item.$1]));
   }
   if (a is Map && b is Map) {
-    return a.length == b.length && a.entries.every((MapEntry<Object?, Object?> entry) =>
-        (b as Map<Object?, Object?>).containsKey(entry.key) &&
-        _deepEquals(entry.value, b[entry.key]));
+    return a.length == b.length &&
+        a.entries.every((MapEntry<Object?, Object?> entry) =>
+            (b as Map<Object?, Object?>).containsKey(entry.key) &&
+            _deepEquals(entry.value, b[entry.key]));
   }
   return a == b;
 }
 
-
 class PlatformAsset {
   PlatformAsset({
     required this.id,
@@ -67,7 +68,8 @@ class PlatformAsset {
   }
 
   Object encode() {
-    return _toList();  }
+    return _toList();
+  }
 
   static PlatformAsset decode(Object result) {
     result as List<Object?>;
@@ -96,8 +98,7 @@ class PlatformAsset {
 
   @override
   // ignore: avoid_equals_and_hash_code_on_mutable_classes
-  int get hashCode => Object.hashAll(_toList())
-;
+  int get hashCode => Object.hashAll(_toList());
 }
 
 class SyncDelta {
@@ -122,7 +123,8 @@ class SyncDelta {
   }
 
   Object encode() {
-    return _toList();  }
+    return _toList();
+  }
 
   static SyncDelta decode(Object result) {
     result as List<Object?>;
@@ -147,11 +149,9 @@ class SyncDelta {
 
   @override
   // ignore: avoid_equals_and_hash_code_on_mutable_classes
-  int get hashCode => Object.hashAll(_toList())
-;
+  int get hashCode => Object.hashAll(_toList());
 }
 
-
 class _PigeonCodec extends StandardMessageCodec {
   const _PigeonCodec();
   @override
@@ -159,10 +159,10 @@ class _PigeonCodec extends StandardMessageCodec {
     if (value is int) {
       buffer.putUint8(4);
       buffer.putInt64(value);
-    }    else if (value is PlatformAsset) {
+    } else if (value is PlatformAsset) {
       buffer.putUint8(129);
       writeValue(buffer, value.encode());
-    }    else if (value is SyncDelta) {
+    } else if (value is SyncDelta) {
       buffer.putUint8(130);
       writeValue(buffer, value.encode());
     } else {
@@ -173,9 +173,9 @@ class _PigeonCodec extends StandardMessageCodec {
   @override
   Object? readValueOfType(int type, ReadBuffer buffer) {
     switch (type) {
-      case 129: 
+      case 129:
         return PlatformAsset.decode(readValue(buffer)!);
-      case 130: 
+      case 130:
         return SyncDelta.decode(readValue(buffer)!);
       default:
         return super.readValueOfType(type, buffer);
@@ -187,9 +187,11 @@ class ImHostService {
   /// Constructor for [ImHostService].  The [binaryMessenger] named argument is
   /// available for dependency injection.  If it is left null, the default
   /// BinaryMessenger will be used which routes to the host platform.
-  ImHostService({BinaryMessenger? binaryMessenger, String messageChannelSuffix = ''})
+  ImHostService(
+      {BinaryMessenger? binaryMessenger, String messageChannelSuffix = ''})
       : pigeonVar_binaryMessenger = binaryMessenger,
-        pigeonVar_messageChannelSuffix = messageChannelSuffix.isNotEmpty ? '.$messageChannelSuffix' : '';
+        pigeonVar_messageChannelSuffix =
+            messageChannelSuffix.isNotEmpty ? '.$messageChannelSuffix' : '';
   final BinaryMessenger? pigeonVar_binaryMessenger;
 
   static const MessageCodec<Object?> pigeonChannelCodec = _PigeonCodec();
@@ -197,8 +199,10 @@ class ImHostService {
   final String pigeonVar_messageChannelSuffix;
 
   Future<bool> shouldFullSync() async {
-    final String pigeonVar_channelName = 'dev.flutter.pigeon.immich_mobile.ImHostService.shouldFullSync$pigeonVar_messageChannelSuffix';
-    final BasicMessageChannel<Object?> pigeonVar_channel = BasicMessageChannel<Object?>(
+    final String pigeonVar_channelName =
+        'dev.flutter.pigeon.immich_mobile.ImHostService.shouldFullSync$pigeonVar_messageChannelSuffix';
+    final BasicMessageChannel<Object?> pigeonVar_channel =
+        BasicMessageChannel<Object?>(
       pigeonVar_channelName,
       pigeonChannelCodec,
       binaryMessenger: pigeonVar_binaryMessenger,
@@ -225,8 +229,10 @@ class ImHostService {
   }
 
   Future<SyncDelta> getMediaChanges() async {
-    final String pigeonVar_channelName = 'dev.flutter.pigeon.immich_mobile.ImHostService.getMediaChanges$pigeonVar_messageChannelSuffix';
-    final BasicMessageChannel<Object?> pigeonVar_channel = BasicMessageChannel<Object?>(
+    final String pigeonVar_channelName =
+        'dev.flutter.pigeon.immich_mobile.ImHostService.getMediaChanges$pigeonVar_messageChannelSuffix';
+    final BasicMessageChannel<Object?> pigeonVar_channel =
+        BasicMessageChannel<Object?>(
       pigeonVar_channelName,
       pigeonChannelCodec,
       binaryMessenger: pigeonVar_binaryMessenger,
@@ -253,8 +259,10 @@ class ImHostService {
   }
 
   Future<void> checkpointSync() async {
-    final String pigeonVar_channelName = 'dev.flutter.pigeon.immich_mobile.ImHostService.checkpointSync$pigeonVar_messageChannelSuffix';
-    final BasicMessageChannel<Object?> pigeonVar_channel = BasicMessageChannel<Object?>(
+    final String pigeonVar_channelName =
+        'dev.flutter.pigeon.immich_mobile.ImHostService.checkpointSync$pigeonVar_messageChannelSuffix';
+    final BasicMessageChannel<Object?> pigeonVar_channel =
+        BasicMessageChannel<Object?>(
       pigeonVar_channelName,
       pigeonChannelCodec,
       binaryMessenger: pigeonVar_binaryMessenger,
@@ -276,8 +284,10 @@ class ImHostService {
   }
 
   Future<void> clearSyncCheckpoint() async {
-    final String pigeonVar_channelName = 'dev.flutter.pigeon.immich_mobile.ImHostService.clearSyncCheckpoint$pigeonVar_messageChannelSuffix';
-    final BasicMessageChannel<Object?> pigeonVar_channel = BasicMessageChannel<Object?>(
+    final String pigeonVar_channelName =
+        'dev.flutter.pigeon.immich_mobile.ImHostService.clearSyncCheckpoint$pigeonVar_messageChannelSuffix';
+    final BasicMessageChannel<Object?> pigeonVar_channel =
+        BasicMessageChannel<Object?>(
       pigeonVar_channelName,
       pigeonChannelCodec,
       binaryMessenger: pigeonVar_binaryMessenger,
@@ -299,13 +309,16 @@ class ImHostService {
   }
 
   Future<List<String>> getAssetIdsForAlbum(String albumId) async {
-    final String pigeonVar_channelName = 'dev.flutter.pigeon.immich_mobile.ImHostService.getAssetIdsForAlbum$pigeonVar_messageChannelSuffix';
-    final BasicMessageChannel<Object?> pigeonVar_channel = BasicMessageChannel<Object?>(
+    final String pigeonVar_channelName =
+        'dev.flutter.pigeon.immich_mobile.ImHostService.getAssetIdsForAlbum$pigeonVar_messageChannelSuffix';
+    final BasicMessageChannel<Object?> pigeonVar_channel =
+        BasicMessageChannel<Object?>(
       pigeonVar_channelName,
       pigeonChannelCodec,
       binaryMessenger: pigeonVar_binaryMessenger,
     );
-    final Future<Object?> pigeonVar_sendFuture = pigeonVar_channel.send(<Object?>[albumId]);
+    final Future<Object?> pigeonVar_sendFuture =
+        pigeonVar_channel.send(<Object?>[albumId]);
     final List<Object?>? pigeonVar_replyList =
         await pigeonVar_sendFuture as List<Object?>?;
     if (pigeonVar_replyList == null) {
diff --git a/mobile/lib/widgets/common/immich_app_bar.dart b/mobile/lib/widgets/common/immich_app_bar.dart
index 77081e0f30..09f81b9e1a 100644
--- a/mobile/lib/widgets/common/immich_app_bar.dart
+++ b/mobile/lib/widgets/common/immich_app_bar.dart
@@ -179,7 +179,7 @@ class ImmichAppBar extends ConsumerWidget implements PreferredSizeWidget {
               child: action,
             ),
           ),
-        if (kDebugMode)
+        if (kDebugMode || kProfileMode)
           IconButton(
             icon: const Icon(Icons.science_rounded),
             onPressed: () => context.pushRoute(const FeatInDevRoute()),