diff --git a/.metadata b/.metadata
index d2765fc..cbf1dc0 100644
--- a/.metadata
+++ b/.metadata
@@ -4,7 +4,7 @@
 # This file should be version controlled and should not be manually edited.
 
 version:
-  revision: "54e66469a933b60ddf175f858f82eaeb97e48c8d"
+  revision: "a14f74ff3a1cbd521163c5f03d68113d50af93d3"
   channel: "stable"
 
 project_type: app
@@ -13,26 +13,26 @@ project_type: app
 migration:
   platforms:
     - platform: root
-      create_revision: 54e66469a933b60ddf175f858f82eaeb97e48c8d
-      base_revision: 54e66469a933b60ddf175f858f82eaeb97e48c8d
+      create_revision: a14f74ff3a1cbd521163c5f03d68113d50af93d3
+      base_revision: a14f74ff3a1cbd521163c5f03d68113d50af93d3
     - platform: android
-      create_revision: 54e66469a933b60ddf175f858f82eaeb97e48c8d
-      base_revision: 54e66469a933b60ddf175f858f82eaeb97e48c8d
+      create_revision: a14f74ff3a1cbd521163c5f03d68113d50af93d3
+      base_revision: a14f74ff3a1cbd521163c5f03d68113d50af93d3
     - platform: ios
-      create_revision: 54e66469a933b60ddf175f858f82eaeb97e48c8d
-      base_revision: 54e66469a933b60ddf175f858f82eaeb97e48c8d
+      create_revision: a14f74ff3a1cbd521163c5f03d68113d50af93d3
+      base_revision: a14f74ff3a1cbd521163c5f03d68113d50af93d3
     - platform: linux
-      create_revision: 54e66469a933b60ddf175f858f82eaeb97e48c8d
-      base_revision: 54e66469a933b60ddf175f858f82eaeb97e48c8d
+      create_revision: a14f74ff3a1cbd521163c5f03d68113d50af93d3
+      base_revision: a14f74ff3a1cbd521163c5f03d68113d50af93d3
     - platform: macos
-      create_revision: 54e66469a933b60ddf175f858f82eaeb97e48c8d
-      base_revision: 54e66469a933b60ddf175f858f82eaeb97e48c8d
+      create_revision: a14f74ff3a1cbd521163c5f03d68113d50af93d3
+      base_revision: a14f74ff3a1cbd521163c5f03d68113d50af93d3
     - platform: web
-      create_revision: 54e66469a933b60ddf175f858f82eaeb97e48c8d
-      base_revision: 54e66469a933b60ddf175f858f82eaeb97e48c8d
+      create_revision: a14f74ff3a1cbd521163c5f03d68113d50af93d3
+      base_revision: a14f74ff3a1cbd521163c5f03d68113d50af93d3
     - platform: windows
-      create_revision: 54e66469a933b60ddf175f858f82eaeb97e48c8d
-      base_revision: 54e66469a933b60ddf175f858f82eaeb97e48c8d
+      create_revision: a14f74ff3a1cbd521163c5f03d68113d50af93d3
+      base_revision: a14f74ff3a1cbd521163c5f03d68113d50af93d3
 
   # User provided section
 
diff --git a/android/app/build.gradle b/android/app/build.gradle
index 27b7994..0344e4a 100644
--- a/android/app/build.gradle
+++ b/android/app/build.gradle
@@ -1,65 +1,64 @@
 plugins {
     id "com.android.application"
-    // START: FlutterFire Configuration
     id 'com.google.gms.google-services'
-    // END: FlutterFire Configuration
     id "kotlin-android"
     id "dev.flutter.flutter-gradle-plugin"
 }
 
 def localProperties = new Properties()
-def localPropertiesFile = rootProject.file('local.properties')
+def localPropertiesFile = rootProject.file("local.properties")
 if (localPropertiesFile.exists()) {
-    localPropertiesFile.withReader('UTF-8') { reader ->
+    localPropertiesFile.withReader("UTF-8") { reader ->
         localProperties.load(reader)
     }
 }
 
-def flutterVersionCode = localProperties.getProperty('flutter.versionCode')
+def flutterVersionCode = localProperties.getProperty("flutter.versionCode")
 if (flutterVersionCode == null) {
-    flutterVersionCode = '1'
+    flutterVersionCode = "1"
 }
 
-def flutterVersionName = localProperties.getProperty('flutter.versionName')
+def flutterVersionName = localProperties.getProperty("flutter.versionName")
 if (flutterVersionName == null) {
-    flutterVersionName = '1.0'
+    flutterVersionName = "1.0"
 }
 
 android {
-    namespace "dev.solsynth.solian"
-    compileSdk flutter.compileSdkVersion
-    ndkVersion flutter.ndkVersion
+    namespace = "dev.solsynth.solian"
+    compileSdk = flutter.compileSdkVersion
+    ndkVersion = flutter.ndkVersion
+
+    defaultConfig {
+        multiDexEnabled true
+    }
 
     compileOptions {
-        sourceCompatibility JavaVersion.VERSION_1_8
-        targetCompatibility JavaVersion.VERSION_1_8
-    }
-
-    kotlinOptions {
-        jvmTarget = '1.8'
-    }
-
-    sourceSets {
-        main.java.srcDirs += 'src/main/kotlin'
+        coreLibraryDesugaringEnabled true
+        sourceCompatibility = JavaVersion.VERSION_1_8
+        targetCompatibility = JavaVersion.VERSION_1_8
     }
 
     defaultConfig {
-        applicationId "dev.solsynth.solian"
-        minSdkVersion flutter.minSdkVersion
-        targetSdkVersion flutter.targetSdkVersion
-        versionCode flutterVersionCode.toInteger()
-        versionName flutterVersionName
+        applicationId = "dev.solsynth.solian"
+        // You can update the following values to match your application needs.
+        // For more information, see: https://docs.flutter.dev/deployment/android#reviewing-the-gradle-build-configuration.
+        minSdk = flutter.minSdkVersion
+        targetSdk = flutter.targetSdkVersion
+        versionCode = flutterVersionCode.toInteger()
+        versionName = flutterVersionName
     }
 
     buildTypes {
         release {
-            signingConfig signingConfigs.debug
+            signingConfig = signingConfigs.debug
         }
     }
 }
 
-flutter {
-    source '../..'
+dependencies {
+    coreLibraryDesugaring 'com.android.tools:desugar_jdk_libs:2.0.4'
 }
 
-dependencies {}
+flutter {
+    source = "../.."
+}
diff --git a/android/app/src/main/AndroidManifest.xml b/android/app/src/main/AndroidManifest.xml
index cfe8185..82924ff 100644
--- a/android/app/src/main/AndroidManifest.xml
+++ b/android/app/src/main/AndroidManifest.xml
@@ -13,21 +13,33 @@
     
     
 
-    
-    
-
     
+        android:icon="@mipmap/launcher_icon"
+        android:supportsRtl="true">
+        
+        
+            
+                
+                
+                
+                
+            
+        
+
+        
+        
+
         
             
+              android:name="io.flutter.embedding.android.NormalTheme"
+              android:resource="@style/NormalTheme"
+              />
             
-                
-                
+                
+                
             
         
         
     
         
-            
-            
+            
+            
         
     
-
\ No newline at end of file
+
diff --git a/android/app/src/main/kotlin/com/example/solian/MainActivity.kt b/android/app/src/main/java/dev/solsynth/solian/MainActivity.kt
similarity index 76%
rename from android/app/src/main/kotlin/com/example/solian/MainActivity.kt
rename to android/app/src/main/java/dev/solsynth/solian/MainActivity.kt
index 745469d..ff71ab7 100644
--- a/android/app/src/main/kotlin/com/example/solian/MainActivity.kt
+++ b/android/app/src/main/java/dev/solsynth/solian/MainActivity.kt
@@ -1,4 +1,4 @@
-package com.example.solian
+package dev.solsynth.solian
 
 import io.flutter.embedding.android.FlutterActivity
 
diff --git a/android/build.gradle b/android/build.gradle
index bc157bd..d2ffbff 100644
--- a/android/build.gradle
+++ b/android/build.gradle
@@ -5,12 +5,12 @@ allprojects {
     }
 }
 
-rootProject.buildDir = '../build'
+rootProject.buildDir = "../build"
 subprojects {
     project.buildDir = "${rootProject.buildDir}/${project.name}"
 }
 subprojects {
-    project.evaluationDependsOn(':app')
+    project.evaluationDependsOn(":app")
 }
 
 tasks.register("clean", Delete) {
diff --git a/android/gradle.properties b/android/gradle.properties
index 598d13f..5f5d39d 100644
--- a/android/gradle.properties
+++ b/android/gradle.properties
@@ -1,3 +1,6 @@
-org.gradle.jvmargs=-Xmx4G
+org.gradle.jvmargs=-Xmx4G -XX:+HeapDumpOnOutOfMemoryError
 android.useAndroidX=true
 android.enableJetifier=true
+android.defaults.buildfeatures.buildconfig=true
+android.nonTransitiveRClass=false
+android.nonFinalResIds=false
diff --git a/android/gradle/wrapper/gradle-wrapper.properties b/android/gradle/wrapper/gradle-wrapper.properties
index e1ca574..5d6560a 100644
--- a/android/gradle/wrapper/gradle-wrapper.properties
+++ b/android/gradle/wrapper/gradle-wrapper.properties
@@ -2,4 +2,4 @@ distributionBase=GRADLE_USER_HOME
 distributionPath=wrapper/dists
 zipStoreBase=GRADLE_USER_HOME
 zipStorePath=wrapper/dists
-distributionUrl=https\://services.gradle.org/distributions/gradle-7.6.3-all.zip
+distributionUrl=https\://services.gradle.org/distributions/gradle-8.6-all.zip
diff --git a/android/settings.gradle b/android/settings.gradle
index 816dbe0..cf727f4 100644
--- a/android/settings.gradle
+++ b/android/settings.gradle
@@ -5,10 +5,9 @@ pluginManagement {
         def flutterSdkPath = properties.getProperty("flutter.sdk")
         assert flutterSdkPath != null, "flutter.sdk not set in local.properties"
         return flutterSdkPath
-    }
-    settings.ext.flutterSdkPath = flutterSdkPath()
+    }()
 
-    includeBuild("${settings.ext.flutterSdkPath}/packages/flutter_tools/gradle")
+    includeBuild("$flutterSdkPath/packages/flutter_tools/gradle")
 
     repositories {
         google()
@@ -19,10 +18,8 @@ pluginManagement {
 
 plugins {
     id "dev.flutter.flutter-plugin-loader" version "1.0.0"
-    id "com.android.application" version "7.3.0" apply false
-    // START: FlutterFire Configuration
+    id "com.android.application" version '8.4.0' apply false
     id "com.google.gms.google-services" version "4.3.15" apply false
-    // END: FlutterFire Configuration
     id "org.jetbrains.kotlin.android" version "1.7.10" apply false
 }
 
diff --git a/ios/Podfile.lock b/ios/Podfile.lock
index b1b5f76..9fea52b 100644
--- a/ios/Podfile.lock
+++ b/ios/Podfile.lock
@@ -2,8 +2,6 @@ PODS:
   - connectivity_plus (0.0.1):
     - Flutter
     - FlutterMacOS
-  - device_info (0.0.1):
-    - Flutter
   - device_info_plus (0.0.1):
     - Flutter
   - DKImagePickerController/Core (4.3.9):
@@ -111,7 +109,7 @@ PODS:
     - GoogleUtilities/Privacy
   - image_picker_ios (0.0.1):
     - Flutter
-  - livekit_client (2.1.5):
+  - livekit_client (2.1.6):
     - Flutter
     - WebRTC-SDK (= 114.5735.10)
   - nanopb (2.30910.0):
@@ -126,8 +124,6 @@ PODS:
     - FlutterMacOS
   - permission_handler_apple (9.3.0):
     - Flutter
-  - platform_device_id (0.0.1):
-    - Flutter
   - PromisesObjC (2.4.0)
   - SDWebImage (5.19.2):
     - SDWebImage/Core (= 5.19.2)
@@ -152,7 +148,6 @@ PODS:
 
 DEPENDENCIES:
   - connectivity_plus (from `.symlinks/plugins/connectivity_plus/darwin`)
-  - device_info (from `.symlinks/plugins/device_info/ios`)
   - device_info_plus (from `.symlinks/plugins/device_info_plus/ios`)
   - file_picker (from `.symlinks/plugins/file_picker/ios`)
   - firebase_core (from `.symlinks/plugins/firebase_core/ios`)
@@ -166,7 +161,6 @@ DEPENDENCIES:
   - package_info_plus (from `.symlinks/plugins/package_info_plus/ios`)
   - path_provider_foundation (from `.symlinks/plugins/path_provider_foundation/darwin`)
   - permission_handler_apple (from `.symlinks/plugins/permission_handler_apple/ios`)
-  - platform_device_id (from `.symlinks/plugins/platform_device_id/ios`)
   - sentry_flutter (from `.symlinks/plugins/sentry_flutter/ios`)
   - sqflite (from `.symlinks/plugins/sqflite/darwin`)
   - url_launcher_ios (from `.symlinks/plugins/url_launcher_ios/ios`)
@@ -194,8 +188,6 @@ SPEC REPOS:
 EXTERNAL SOURCES:
   connectivity_plus:
     :path: ".symlinks/plugins/connectivity_plus/darwin"
-  device_info:
-    :path: ".symlinks/plugins/device_info/ios"
   device_info_plus:
     :path: ".symlinks/plugins/device_info_plus/ios"
   file_picker:
@@ -222,8 +214,6 @@ EXTERNAL SOURCES:
     :path: ".symlinks/plugins/path_provider_foundation/darwin"
   permission_handler_apple:
     :path: ".symlinks/plugins/permission_handler_apple/ios"
-  platform_device_id:
-    :path: ".symlinks/plugins/platform_device_id/ios"
   sentry_flutter:
     :path: ".symlinks/plugins/sentry_flutter/ios"
   sqflite:
@@ -237,7 +227,6 @@ EXTERNAL SOURCES:
 
 SPEC CHECKSUMS:
   connectivity_plus: ddd7f30999e1faaef5967c23d5b6d503d10434db
-  device_info: d7d233b645a32c40dfdc212de5cf646ca482f175
   device_info_plus: 97af1d7e84681a90d0693e63169a5d50e0839a0d
   DKImagePickerController: 946cec48c7873164274ecc4624d19e3da4c1ef3c
   DKPhotoGallery: b3834fecb755ee09a593d7c9e389d8b5d6deed60
@@ -256,12 +245,11 @@ SPEC CHECKSUMS:
   GoogleDataTransport: 6c09b596d841063d76d4288cc2d2f42cc36e1e2a
   GoogleUtilities: ea963c370a38a8069cc5f7ba4ca849a60b6d7d15
   image_picker_ios: c560581cceedb403a6ff17f2f816d7fea1421fc1
-  livekit_client: e6adadd527ee8e52fff579498467ee89921d99f6
+  livekit_client: 72da4281bddb8bda3d275f49b46e9a2046d57c58
   nanopb: 438bc412db1928dac798aa6fd75726007be04262
   package_info_plus: 58f0028419748fad15bf008b270aaa8e54380b1c
   path_provider_foundation: 2b6b4c569c0fb62ec74538f866245ac84301af46
   permission_handler_apple: 9878588469a2b0d0fc1e048d9f43605f92e6cec2
-  platform_device_id: 81b3e2993881f87d0c82ef151dc274df4869aef5
   PromisesObjC: f5707f49cb48b9636751c5b2e7d227e43fba9f47
   SDWebImage: dfe95b2466a9823cf9f0c6d01217c06550d7b29a
   Sentry: 51b056d96914a741f63eca774d118678b1eb05a1
diff --git a/ios/Runner/AppDelegate.swift b/ios/Runner/AppDelegate.swift
index 70693e4..915bf79 100644
--- a/ios/Runner/AppDelegate.swift
+++ b/ios/Runner/AppDelegate.swift
@@ -3,11 +3,15 @@ import Flutter
 
 @UIApplicationMain
 @objc class AppDelegate: FlutterAppDelegate {
-  override func application(
-    _ application: UIApplication,
-    didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?
-  ) -> Bool {
-    GeneratedPluginRegistrant.register(with: self)
-    return super.application(application, didFinishLaunchingWithOptions: launchOptions)
-  }
+    override func application(
+        _ application: UIApplication,
+        didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?
+    ) -> Bool {
+        GeneratedPluginRegistrant.register(with: self)
+        return super.application(application, didFinishLaunchingWithOptions: launchOptions)
+    }
+    
+    override func applicationDidBecomeActive(_ application: UIApplication) {
+        application.applicationIconBadgeNumber = 0;
+    }
 }
diff --git a/lib/exts.dart b/lib/exts.dart
index c41acec..5f15dde 100644
--- a/lib/exts.dart
+++ b/lib/exts.dart
@@ -9,22 +9,12 @@ extension SolianExtenions on BuildContext {
   }
 
   Future showErrorDialog(dynamic exception) {
-    String formatMessage(dynamic exception) {
-      final message = exception.toString();
-      if (message.trim().isEmpty) return '';
-      return message
-          .split(' ')
-          .map((element) =>
-              '${element[0].toUpperCase()}${element.substring(1).toLowerCase()}')
-          .join(' ');
-    }
-
     return showDialog(
       useRootNavigator: true,
       context: this,
       builder: (ctx) => AlertDialog(
         title: Text('errorHappened'.tr),
-        content: Text(formatMessage(exception)),
+        content: Text(exception.toString().capitalize!),
         actions: [
           TextButton(
             onPressed: () => Navigator.pop(ctx),
diff --git a/lib/models/notification.dart b/lib/models/notification.dart
index 4fa12ac..f08e81e 100755
--- a/lib/models/notification.dart
+++ b/lib/models/notification.dart
@@ -6,8 +6,6 @@ class Notification {
   String subject;
   String content;
   List? links;
-  bool isImportant;
-  bool isRealtime;
   DateTime? readAt;
   int? senderId;
   int recipientId;
@@ -20,8 +18,6 @@ class Notification {
     required this.subject,
     required this.content,
     required this.links,
-    required this.isImportant,
-    required this.isRealtime,
     required this.readAt,
     required this.senderId,
     required this.recipientId,
@@ -41,8 +37,6 @@ class Notification {
         links: json['links'] != null
             ? List.from(json['links'].map((x) => Link.fromJson(x)))
             : List.empty(),
-        isImportant: json['is_important'],
-        isRealtime: json['is_realtime'],
         readAt: json['read_at'],
         senderId: json['sender_id'],
         recipientId: json['recipient_id'],
@@ -58,8 +52,6 @@ class Notification {
         'links': links != null
             ? List.from(links!.map((x) => x.toJson()))
             : List.empty(),
-        'is_important': isImportant,
-        'is_realtime': isRealtime,
         'read_at': readAt,
         'sender_id': senderId,
         'recipient_id': recipientId,
diff --git a/lib/providers/account.dart b/lib/providers/account.dart
index 1daf41d..ea62352 100644
--- a/lib/providers/account.dart
+++ b/lib/providers/account.dart
@@ -1,11 +1,12 @@
+import 'dart:async';
 import 'dart:convert';
+import 'dart:developer';
 import 'dart:io';
 import 'dart:math' as math;
 
+import 'package:device_info_plus/device_info_plus.dart';
 import 'package:firebase_messaging/firebase_messaging.dart';
 import 'package:get/get.dart';
-import 'package:permission_handler/permission_handler.dart';
-import 'package:platform_device_id/platform_device_id.dart';
 import 'package:solian/models/notification.dart';
 import 'package:solian/models/packet.dart';
 import 'package:solian/models/pagination.dart';
@@ -30,7 +31,14 @@ class AccountProvider extends GetxController {
 
   @override
   onInit() {
-    Permission.notification.request().then((status) {
+    FirebaseMessaging.instance
+        .requestPermission(
+            alert: true,
+            announcement: true,
+            carPlay: true,
+            badge: true,
+            sound: true)
+        .then((status) {
       notifyInitialization();
       notifyPrefetch();
     });
@@ -94,7 +102,7 @@ class AccountProvider extends GetxController {
       },
       onDone: () {
         isConnected.value = false;
-        Future.delayed(const Duration(seconds: 3), () => connect());
+        Future.delayed(const Duration(seconds: 1), () => connect());
       },
       onError: (err) {
         isConnected.value = false;
@@ -175,7 +183,11 @@ class AccountProvider extends GetxController {
 
     late final String? token;
     late final String provider;
-    final deviceUuid = await PlatformDeviceId.getDeviceId;
+    final deviceUuid = await _getDeviceUuid();
+
+    if (deviceUuid == null) {
+      log("Unable to active push notifications, couldn't get device uuid");
+    }
 
     if (PlatformInfo.isIOS || PlatformInfo.isMacOS) {
       provider = "apple";
@@ -196,4 +208,31 @@ class AccountProvider extends GetxController {
       throw Exception(resp.bodyString);
     }
   }
+
+  Future _getDeviceUuid() async {
+    DeviceInfoPlugin deviceInfo = DeviceInfoPlugin();
+    if (PlatformInfo.isWeb) {
+      final WebBrowserInfo webInfo = await deviceInfo.webBrowserInfo;
+      return webInfo.vendor! +
+          webInfo.userAgent! +
+          webInfo.hardwareConcurrency.toString();
+    }
+    if (PlatformInfo.isAndroid) {
+      final AndroidDeviceInfo androidInfo = await deviceInfo.androidInfo;
+      return androidInfo.id;
+    }
+    if (PlatformInfo.isIOS) {
+      final IosDeviceInfo iosInfo = await deviceInfo.iosInfo;
+      return iosInfo.identifierForVendor!;
+    }
+    if (PlatformInfo.isLinux) {
+      final LinuxDeviceInfo linuxInfo = await deviceInfo.linuxInfo;
+      return linuxInfo.machineId!;
+    }
+    if (PlatformInfo.isWindows) {
+      final WindowsDeviceInfo windowsInfo = await deviceInfo.windowsInfo;
+      return windowsInfo.deviceId;
+    }
+    return null;
+  }
 }
diff --git a/lib/providers/chat.dart b/lib/providers/chat.dart
index a5c1e96..8239fa6 100644
--- a/lib/providers/chat.dart
+++ b/lib/providers/chat.dart
@@ -63,7 +63,7 @@ class ChatProvider extends GetxController {
       },
       onDone: () {
         isConnected.value = false;
-        Future.delayed(const Duration(seconds: 3), () => connect());
+        Future.delayed(const Duration(seconds: 1), () => connect());
       },
       onError: (err) {
         isConnected.value = false;
diff --git a/lib/providers/content/call.dart b/lib/providers/content/call.dart
index 42e4f0b..9f9b6da 100644
--- a/lib/providers/content/call.dart
+++ b/lib/providers/content/call.dart
@@ -1,7 +1,6 @@
 import 'dart:async';
 
 import 'package:flutter/material.dart';
-import 'package:flutter_background/flutter_background.dart';
 import 'package:get/get.dart';
 import 'package:livekit_client/livekit_client.dart';
 import 'package:permission_handler/permission_handler.dart';
@@ -44,9 +43,6 @@ class ChatCallProvider extends GetxController {
     if (lkPlatformIs(PlatformType.macOS) || lkPlatformIs(PlatformType.linux)) {
       return;
     }
-    if (lkPlatformIs(PlatformType.android)) {
-      FlutterBackground.enableBackgroundExecution();
-    }
 
     await Permission.camera.request();
     await Permission.microphone.request();
diff --git a/lib/screens/account.dart b/lib/screens/account.dart
index ec4d939..f2d06ad 100644
--- a/lib/screens/account.dart
+++ b/lib/screens/account.dart
@@ -78,9 +78,9 @@ class _AccountScreenState extends State {
               );
             }
 
-            return Column(
+            return ListView(
               children: [
-                const AccountHeading().paddingOnly(bottom: 8),
+                const AccountHeading().paddingOnly(bottom: 8, top: 16),
                 ...(actionItems.map(
                   (x) => ListTile(
                     contentPadding: const EdgeInsets.symmetric(horizontal: 34),
diff --git a/lib/screens/account/notification.dart b/lib/screens/account/notification.dart
index 30b3d83..ad04e25 100644
--- a/lib/screens/account/notification.dart
+++ b/lib/screens/account/notification.dart
@@ -27,7 +27,7 @@ class _NotificationScreenState extends State {
 
     List markList = List.empty(growable: true);
     for (final element in provider.notifications) {
-      if (element.isRealtime) continue;
+      if (element.id <= 0) continue;
       markList.add(element.id);
     }
 
@@ -48,7 +48,7 @@ class _NotificationScreenState extends State {
 
     final AccountProvider provider = Get.find();
 
-    if (element.isRealtime) {
+    if (element.id <= 0) {
       provider.notifications.removeAt(index);
       return;
     }
diff --git a/lib/screens/channel/channel_chat.dart b/lib/screens/channel/channel_chat.dart
index 71a8ec1..c822ba7 100644
--- a/lib/screens/channel/channel_chat.dart
+++ b/lib/screens/channel/channel_chat.dart
@@ -1,5 +1,5 @@
 import 'dart:async';
-import 'dart:math' as math;
+import 'dart:ui';
 
 import 'package:flutter/material.dart';
 import 'package:get/get.dart';
@@ -337,37 +337,45 @@ class _ChannelChatScreenState extends State {
             children: [
               Expanded(
                 child: PagedListView(
+                  clipBehavior: Clip.none,
                   reverse: true,
                   pagingController: _pagingController,
                   builderDelegate: PagedChildBuilderDelegate(
                     itemBuilder: buildHistory,
                     noItemsFoundIndicatorBuilder: (_) => Container(),
                   ),
-                ).paddingOnly(bottom: 64),
+                ).paddingOnly(bottom: 56),
               ),
             ],
           ),
           Positioned(
-            bottom: math.max(MediaQuery.of(context).padding.bottom, 16),
+            bottom: 0,
             left: 0,
             right: 0,
-            child: ChatMessageInput(
-              edit: _messageToEditing,
-              reply: _messageToReplying,
-              realm: widget.realm,
-              placeholder: placeholder,
-              channel: _channel!,
-              onSent: (Message item) {
-                setState(() {
-                  _pagingController.itemList?.insert(0, item);
-                });
-              },
-              onReset: () {
-                setState(() {
-                  _messageToReplying = null;
-                  _messageToEditing = null;
-                });
-              },
+            child: ClipRect(
+              child: BackdropFilter(
+                filter: ImageFilter.blur(sigmaX: 50, sigmaY: 50),
+                child: SafeArea(
+                  child: ChatMessageInput(
+                    edit: _messageToEditing,
+                    reply: _messageToReplying,
+                    realm: widget.realm,
+                    placeholder: placeholder,
+                    channel: _channel!,
+                    onSent: (Message item) {
+                      setState(() {
+                        _pagingController.itemList?.insert(0, item);
+                      });
+                    },
+                    onReset: () {
+                      setState(() {
+                        _messageToReplying = null;
+                        _messageToEditing = null;
+                      });
+                    },
+                  ),
+                ),
+              ),
             ),
           ),
           if (_ongoingCall != null)
diff --git a/lib/screens/channel/channel_detail.dart b/lib/screens/channel/channel_detail.dart
index 67fc906..525d7ed 100644
--- a/lib/screens/channel/channel_detail.dart
+++ b/lib/screens/channel/channel_detail.dart
@@ -72,7 +72,7 @@ class _ChannelDetailScreenState extends State {
       ListTile(
         leading: const Icon(Icons.edit),
         trailing: const Icon(Icons.chevron_right),
-        title: Text('channelAdjust'.tr),
+        title: Text('channelAdjust'.tr.capitalize!),
         onTap: () async {
           AppRouter.instance
               .pushNamed(
@@ -129,12 +129,12 @@ class _ChannelDetailScreenState extends State {
               ListTile(
                 leading: const Icon(Icons.settings),
                 trailing: const Icon(Icons.chevron_right),
-                title: Text('channelSettings'.tr),
+                title: Text('channelSettings'.tr.capitalize!),
               ),
               ListTile(
                 leading: const Icon(Icons.supervisor_account),
                 trailing: const Icon(Icons.chevron_right),
-                title: Text('channelMembers'.tr),
+                title: Text('channelMembers'.tr.capitalize!),
                 onTap: () => showMemberList(),
               ),
               ...(_isOwned ? ownerActions : List.empty()),
diff --git a/lib/screens/realms/realm_detail.dart b/lib/screens/realms/realm_detail.dart
index 91badae..72b1cee 100644
--- a/lib/screens/realms/realm_detail.dart
+++ b/lib/screens/realms/realm_detail.dart
@@ -69,7 +69,7 @@ class _RealmDetailScreenState extends State {
       ListTile(
         leading: const Icon(Icons.edit),
         trailing: const Icon(Icons.chevron_right),
-        title: Text('realmAdjust'.tr),
+        title: Text('realmAdjust'.tr.capitalize!),
         onTap: () async {
           AppRouter.instance
               .pushNamed(
@@ -122,12 +122,12 @@ class _RealmDetailScreenState extends State {
               ListTile(
                 leading: const Icon(Icons.settings),
                 trailing: const Icon(Icons.chevron_right),
-                title: Text('realmSettings'.tr),
+                title: Text('realmSettings'.tr.capitalize!),
               ),
               ListTile(
                 leading: const Icon(Icons.supervisor_account),
                 trailing: const Icon(Icons.chevron_right),
-                title: Text('realmMembers'.tr),
+                title: Text('realmMembers'.tr.capitalize!),
                 onTap: () => showMemberList(),
               ),
               ...(_isOwned ? ownerActions : List.empty()),
diff --git a/lib/services.dart b/lib/services.dart
index 3579500..97b49da 100644
--- a/lib/services.dart
+++ b/lib/services.dart
@@ -14,7 +14,10 @@ abstract class ServiceFinder {
 
   static GetConnect configureClient(String service,
       {timeout = const Duration(seconds: 5)}) {
-    final client = GetConnect(timeout: timeout, allowAutoSignedCert: true);
+    final client = GetConnect(
+      timeout: timeout,
+      allowAutoSignedCert: true,
+    );
     client.httpClient.baseUrl = ServiceFinder.services[service];
 
     return client;
diff --git a/lib/translations.dart b/lib/translations.dart
index 77dd152..8f391a7 100644
--- a/lib/translations.dart
+++ b/lib/translations.dart
@@ -116,7 +116,7 @@ class SolianMessages extends Translations {
           'realmMembers': 'Realm members',
           'realmMembersAdd': 'Add realm members',
           'realmMembersAddHint': 'Into @realm',
-          'realmAdjust': 'Realm Adjustment',
+          'realmAdjust': 'Realm adjustment',
           'realmSettings': 'Realm settings',
           'realmEditingNotify': 'You\'re editing realm @realm',
           'realmDeletionConfirm': 'Confirm realm deletion',
@@ -142,9 +142,9 @@ class SolianMessages extends Translations {
           'channelType': 'Channel type',
           'channelTypeCommon': 'Regular',
           'channelTypeDirect': 'DM',
-          'channelAdjust': 'Channel Adjustment',
-          'channelDetail': 'Channel Detail',
-          'channelSettings': 'Channel Settings',
+          'channelAdjust': 'Channel adjustment',
+          'channelDetail': 'Channel detail',
+          'channelSettings': 'Channel settings',
           'channelDeletionConfirm': 'Confirm channel deletion',
           'channelDeletionConfirmCaption':
               'Are you sure to delete channel @channel? This action cannot be undone!',
diff --git a/lib/widgets/chat/call/call_controls.dart b/lib/widgets/chat/call/call_controls.dart
index 14342c0..2d25734 100644
--- a/lib/widgets/chat/call/call_controls.dart
+++ b/lib/widgets/chat/call/call_controls.dart
@@ -2,7 +2,6 @@ import 'dart:async';
 
 import 'package:flutter/foundation.dart';
 import 'package:flutter/material.dart';
-import 'package:flutter_background/flutter_background.dart';
 import 'package:flutter_webrtc/flutter_webrtc.dart';
 import 'package:get/get.dart';
 import 'package:livekit_client/livekit_client.dart';
@@ -171,35 +170,6 @@ class _ControlsWidgetState extends State {
       }
       return;
     }
-    if (lkPlatformIs(PlatformType.android)) {
-      requestBackgroundPermission([bool isRetry = false]) async {
-        try {
-          bool hasPermissions = await FlutterBackground.hasPermissions;
-          if (!isRetry) {
-            const androidConfig = FlutterBackgroundAndroidConfig(
-              notificationTitle: 'Screen Sharing',
-              notificationText: 'Solar Messager is sharing your screen',
-              notificationImportance: AndroidNotificationImportance.Default,
-              notificationIcon:
-                  AndroidResource(name: 'launcher_icon', defType: 'mipmap'),
-            );
-            hasPermissions = await FlutterBackground.initialize(
-                androidConfig: androidConfig);
-          }
-          if (hasPermissions &&
-              !FlutterBackground.isBackgroundExecutionEnabled) {
-            await FlutterBackground.enableBackgroundExecution();
-          }
-        } catch (e) {
-          if (!isRetry) {
-            return await Future.delayed(const Duration(seconds: 1),
-                () => requestBackgroundPermission(true));
-          }
-        }
-      }
-
-      await requestBackgroundPermission();
-    }
     if (lkPlatformIs(PlatformType.iOS)) {
       var track = await LocalVideoTrack.createScreenShareTrack(
         const ScreenShareCaptureOptions(
@@ -223,12 +193,6 @@ class _ControlsWidgetState extends State {
 
   void disableScreenShare() async {
     await participant.setScreenShareEnabled(false);
-    if (lkPlatformIs(PlatformType.android)) {
-      // Android specific
-      try {
-        await FlutterBackground.disableBackgroundExecution();
-      } catch (_) {}
-    }
   }
 
   @override
diff --git a/lib/widgets/chat/chat_message_input.dart b/lib/widgets/chat/chat_message_input.dart
index 7a99f3a..468517f 100644
--- a/lib/widgets/chat/chat_message_input.dart
+++ b/lib/widgets/chat/chat_message_input.dart
@@ -56,7 +56,7 @@ class _ChatMessageInputState extends State {
 
   Map encodeMessage(String content) {
     return {
-      'value': content,
+      'value': content.trim(),
       'keypair_id': null,
       'algorithm': 'plain',
     };
@@ -103,9 +103,11 @@ class _ChatMessageInputState extends State {
       senderId: sender.id,
     );
 
-    message.isSending = true;
+    if (_editTo == null) {
+      message.isSending = true;
+      widget.onSent(message);
+    }
 
-    if (widget.edit == null) widget.onSent(message);
     resetInput();
 
     Response resp;
@@ -131,6 +133,7 @@ class _ChatMessageInputState extends State {
     _editTo = null;
     _replyTo = null;
     _textController.clear();
+    _attachments.clear();
     setState(() {});
   }
 
@@ -161,70 +164,66 @@ class _ChatMessageInputState extends State {
       )
     ];
 
-    return Material(
-      color: Theme.of(context).colorScheme.surface,
-      child: Column(
-        mainAxisAlignment: MainAxisAlignment.center,
-        children: [
-          const Divider(thickness: 0.3, height: 1),
-          if (_replyTo != null)
-            MaterialBanner(
-              leading: const FaIcon(FontAwesomeIcons.reply, size: 18),
-              dividerColor: Colors.transparent,
-              content: ChatMessage(
-                item: _replyTo!,
-                isContentPreviewing: true,
-              ),
-              actions: notifyBannerActions,
+    return Column(
+      mainAxisAlignment: MainAxisAlignment.center,
+      children: [
+        if (_replyTo != null)
+          MaterialBanner(
+            leading: const FaIcon(FontAwesomeIcons.reply, size: 18),
+            dividerColor: Colors.transparent,
+            content: ChatMessage(
+              item: _replyTo!,
+              isContentPreviewing: true,
             ),
-          if (_editTo != null)
-            MaterialBanner(
-              leading: const Icon(Icons.edit),
-              dividerColor: Colors.transparent,
-              content: ChatMessage(
-                item: _editTo!,
-                isContentPreviewing: true,
-              ),
-              actions: notifyBannerActions,
-            ),
-          SizedBox(
-            height: 56,
-            child: Row(
-              mainAxisAlignment: MainAxisAlignment.start,
-              children: [
-                Expanded(
-                  child: TextField(
-                    controller: _textController,
-                    focusNode: _focusNode,
-                    maxLines: null,
-                    autocorrect: true,
-                    keyboardType: TextInputType.text,
-                    decoration: InputDecoration.collapsed(
-                      hintText: widget.placeholder ??
-                          'messageInputPlaceholder'.trParams(
-                            {'channel': '#${widget.channel.alias}'},
-                          ),
-                    ),
-                    onSubmitted: (_) => sendMessage(),
-                    onTapOutside: (_) =>
-                        FocusManager.instance.primaryFocus?.unfocus(),
-                  ),
-                ),
-                IconButton(
-                  icon: const Icon(Icons.attach_file),
-                  color: Colors.teal,
-                  onPressed: () => showAttachments(),
-                ),
-                IconButton(
-                  icon: const Icon(Icons.send),
-                  color: Theme.of(context).colorScheme.primary,
-                  onPressed: () => sendMessage(),
-                )
-              ],
-            ).paddingOnly(left: 20, right: 16),
+            actions: notifyBannerActions,
           ),
-        ],
-      ),
+        if (_editTo != null)
+          MaterialBanner(
+            leading: const Icon(Icons.edit),
+            dividerColor: Colors.transparent,
+            content: ChatMessage(
+              item: _editTo!,
+              isContentPreviewing: true,
+            ),
+            actions: notifyBannerActions,
+          ),
+        SizedBox(
+          height: 56,
+          child: Row(
+            mainAxisAlignment: MainAxisAlignment.start,
+            children: [
+              Expanded(
+                child: TextField(
+                  controller: _textController,
+                  focusNode: _focusNode,
+                  maxLines: null,
+                  autocorrect: true,
+                  keyboardType: TextInputType.text,
+                  decoration: InputDecoration.collapsed(
+                    hintText: widget.placeholder ??
+                        'messageInputPlaceholder'.trParams(
+                          {'channel': '#${widget.channel.alias}'},
+                        ),
+                  ),
+                  onSubmitted: (_) => sendMessage(),
+                  onTapOutside: (_) =>
+                      FocusManager.instance.primaryFocus?.unfocus(),
+                ),
+              ),
+              IconButton(
+                icon: const Icon(Icons.attach_file),
+                color: Colors.teal,
+                onPressed: () => showAttachments(),
+              ),
+              IconButton(
+                icon: const Icon(Icons.send),
+                color: Theme.of(context).colorScheme.primary,
+                onPressed: () => sendMessage(),
+              )
+            ],
+          ).paddingOnly(left: 20, right: 16),
+        ),
+      ],
     );
   }
 }
diff --git a/lib/widgets/current_state_action.dart b/lib/widgets/current_state_action.dart
index 2252510..dc86cb6 100644
--- a/lib/widgets/current_state_action.dart
+++ b/lib/widgets/current_state_action.dart
@@ -2,6 +2,7 @@ import 'package:flutter/material.dart';
 import 'package:flutter_animate/flutter_animate.dart';
 import 'package:get/get.dart';
 import 'package:solian/providers/account.dart';
+import 'package:solian/providers/auth.dart';
 import 'package:solian/providers/chat.dart';
 
 class BackgroundStateWidget extends StatelessWidget {
@@ -9,6 +10,7 @@ class BackgroundStateWidget extends StatelessWidget {
 
   @override
   Widget build(BuildContext context) {
+    final AuthProvider auth = Get.find();
     final AccountProvider account = Get.find();
     final ChatProvider chat = Get.find();
 
@@ -20,35 +22,51 @@ class BackgroundStateWidget extends StatelessWidget {
 
       return Row(children: [
         if (disconnected && !connecting)
-          IconButton(
-            tooltip: [
-              if (account.isConnected.isFalse)
-                'Lost Connection with Passport Server...',
-              if (chat.isConnected.isFalse)
-                'Lost Connection with Messaging Server...',
-            ].join('\n'),
-            icon: const Icon(Icons.wifi_off)
-                .animate(onPlay: (c) => c.repeat())
-                .fadeIn(duration: 800.ms)
-                .then()
-                .fadeOut(duration: 800.ms),
-            onPressed: () {
-              if (account.isConnected.isFalse) account.connect();
-              if (chat.isConnected.isFalse) chat.connect();
+          FutureBuilder(
+            future: auth.isAuthorized,
+            builder: (context, snapshot) {
+              if (!snapshot.hasData || snapshot.data == false) {
+                return const SizedBox();
+              }
+              return IconButton(
+                tooltip: [
+                  if (account.isConnected.isFalse)
+                    'Lost Connection with Passport Server...',
+                  if (chat.isConnected.isFalse)
+                    'Lost Connection with Messaging Server...',
+                ].join('\n'),
+                icon: const Icon(Icons.wifi_off)
+                    .animate(onPlay: (c) => c.repeat())
+                    .fadeIn(duration: 800.ms)
+                    .then()
+                    .fadeOut(duration: 800.ms),
+                onPressed: () {
+                  if (account.isConnected.isFalse) account.connect();
+                  if (chat.isConnected.isFalse) chat.connect();
+                },
+              );
             },
           ),
         if (connecting)
-          IconButton(
-            tooltip: [
-              if (account.isConnecting.isTrue)
-                'Waiting Passport Server Response...',
-              if (chat.isConnecting.isTrue)
-                'Waiting Messaging Server Response...',
-            ].join('\n'),
-            icon: const Icon(Icons.sync)
-                .animate(onPlay: (c) => c.repeat())
-                .rotate(duration: 1850.ms, begin: 1, end: 0),
-            onPressed: () {},
+          FutureBuilder(
+            future: auth.isAuthorized,
+            builder: (context, snapshot) {
+              if (!snapshot.hasData || snapshot.data == false) {
+                return const SizedBox();
+              }
+              return IconButton(
+                tooltip: [
+                  if (account.isConnecting.isTrue)
+                    'Waiting Passport Server Response...',
+                  if (chat.isConnecting.isTrue)
+                    'Waiting Messaging Server Response...',
+                ].join('\n'),
+                icon: const Icon(Icons.sync)
+                    .animate(onPlay: (c) => c.repeat())
+                    .rotate(duration: 1850.ms, begin: 1, end: 0),
+                onPressed: () {},
+              );
+            },
           ),
       ]);
     });
diff --git a/linux/flutter/generated_plugin_registrant.cc b/linux/flutter/generated_plugin_registrant.cc
index 583ccac..c5ec9f0 100644
--- a/linux/flutter/generated_plugin_registrant.cc
+++ b/linux/flutter/generated_plugin_registrant.cc
@@ -9,7 +9,6 @@
 #include 
 #include 
 #include 
-#include 
 #include 
 #include 
 
@@ -23,9 +22,6 @@ void fl_register_plugins(FlPluginRegistry* registry) {
   g_autoptr(FlPluginRegistrar) flutter_webrtc_registrar =
       fl_plugin_registry_get_registrar_for_plugin(registry, "FlutterWebRTCPlugin");
   flutter_web_r_t_c_plugin_register_with_registrar(flutter_webrtc_registrar);
-  g_autoptr(FlPluginRegistrar) platform_device_id_linux_registrar =
-      fl_plugin_registry_get_registrar_for_plugin(registry, "PlatformDeviceIdLinuxPlugin");
-  platform_device_id_linux_plugin_register_with_registrar(platform_device_id_linux_registrar);
   g_autoptr(FlPluginRegistrar) sentry_flutter_registrar =
       fl_plugin_registry_get_registrar_for_plugin(registry, "SentryFlutterPlugin");
   sentry_flutter_plugin_register_with_registrar(sentry_flutter_registrar);
diff --git a/linux/flutter/generated_plugins.cmake b/linux/flutter/generated_plugins.cmake
index 534fa8e..1faa6d7 100644
--- a/linux/flutter/generated_plugins.cmake
+++ b/linux/flutter/generated_plugins.cmake
@@ -6,7 +6,6 @@ list(APPEND FLUTTER_PLUGIN_LIST
   file_selector_linux
   flutter_secure_storage_linux
   flutter_webrtc
-  platform_device_id_linux
   sentry_flutter
   url_launcher_linux
 )
diff --git a/macos/Flutter/GeneratedPluginRegistrant.swift b/macos/Flutter/GeneratedPluginRegistrant.swift
index 47d1e94..5c6436f 100644
--- a/macos/Flutter/GeneratedPluginRegistrant.swift
+++ b/macos/Flutter/GeneratedPluginRegistrant.swift
@@ -16,9 +16,8 @@ import flutter_webrtc
 import livekit_client
 import package_info_plus
 import path_provider_foundation
-import platform_device_id
-import platform_device_id_macos
 import sentry_flutter
+import shared_preferences_foundation
 import sqflite
 import url_launcher_macos
 import video_player_avfoundation
@@ -36,9 +35,8 @@ func RegisterGeneratedPlugins(registry: FlutterPluginRegistry) {
   LiveKitPlugin.register(with: registry.registrar(forPlugin: "LiveKitPlugin"))
   FPPPackageInfoPlusPlugin.register(with: registry.registrar(forPlugin: "FPPPackageInfoPlusPlugin"))
   PathProviderPlugin.register(with: registry.registrar(forPlugin: "PathProviderPlugin"))
-  PlatformDeviceIdMacosPlugin.register(with: registry.registrar(forPlugin: "PlatformDeviceIdMacosPlugin"))
-  PlatformDeviceIdMacosPlugin.register(with: registry.registrar(forPlugin: "PlatformDeviceIdMacosPlugin"))
   SentryFlutterPlugin.register(with: registry.registrar(forPlugin: "SentryFlutterPlugin"))
+  SharedPreferencesPlugin.register(with: registry.registrar(forPlugin: "SharedPreferencesPlugin"))
   SqflitePlugin.register(with: registry.registrar(forPlugin: "SqflitePlugin"))
   UrlLauncherPlugin.register(with: registry.registrar(forPlugin: "UrlLauncherPlugin"))
   FVPVideoPlayerPlugin.register(with: registry.registrar(forPlugin: "FVPVideoPlayerPlugin"))
diff --git a/macos/Podfile.lock b/macos/Podfile.lock
index a085ab5..77662ee 100644
--- a/macos/Podfile.lock
+++ b/macos/Podfile.lock
@@ -6,6 +6,39 @@ PODS:
     - FlutterMacOS
   - file_selector_macos (0.0.1):
     - FlutterMacOS
+  - Firebase/CoreOnly (10.27.0):
+    - FirebaseCore (= 10.27.0)
+  - Firebase/Messaging (10.27.0):
+    - Firebase/CoreOnly
+    - FirebaseMessaging (~> 10.27.0)
+  - firebase_core (3.0.0):
+    - Firebase/CoreOnly (~> 10.27.0)
+    - FlutterMacOS
+  - firebase_messaging (15.0.0):
+    - Firebase/CoreOnly (~> 10.27.0)
+    - Firebase/Messaging (~> 10.27.0)
+    - firebase_core
+    - FlutterMacOS
+  - FirebaseCore (10.27.0):
+    - FirebaseCoreInternal (~> 10.0)
+    - GoogleUtilities/Environment (~> 7.12)
+    - GoogleUtilities/Logger (~> 7.12)
+  - FirebaseCoreInternal (10.27.0):
+    - "GoogleUtilities/NSData+zlib (~> 7.8)"
+  - FirebaseInstallations (10.27.0):
+    - FirebaseCore (~> 10.0)
+    - GoogleUtilities/Environment (~> 7.8)
+    - GoogleUtilities/UserDefaults (~> 7.8)
+    - PromisesObjC (~> 2.1)
+  - FirebaseMessaging (10.27.0):
+    - FirebaseCore (~> 10.0)
+    - FirebaseInstallations (~> 10.0)
+    - GoogleDataTransport (~> 9.3)
+    - GoogleUtilities/AppDelegateSwizzler (~> 7.8)
+    - GoogleUtilities/Environment (~> 7.8)
+    - GoogleUtilities/Reachability (~> 7.8)
+    - GoogleUtilities/UserDefaults (~> 7.8)
+    - nanopb (< 2.30911.0, >= 2.30908.0)
   - flutter_local_notifications (0.0.1):
     - FlutterMacOS
   - flutter_secure_storage_macos (6.1.1):
@@ -14,14 +47,49 @@ PODS:
     - FlutterMacOS
     - WebRTC-SDK (= 114.5735.10)
   - FlutterMacOS (1.0.0)
-  - livekit_client (2.1.5):
+  - GoogleDataTransport (9.4.1):
+    - GoogleUtilities/Environment (~> 7.7)
+    - nanopb (< 2.30911.0, >= 2.30908.0)
+    - PromisesObjC (< 3.0, >= 1.2)
+  - GoogleUtilities/AppDelegateSwizzler (7.13.3):
+    - GoogleUtilities/Environment
+    - GoogleUtilities/Logger
+    - GoogleUtilities/Network
+    - GoogleUtilities/Privacy
+  - GoogleUtilities/Environment (7.13.3):
+    - GoogleUtilities/Privacy
+    - PromisesObjC (< 3.0, >= 1.2)
+  - GoogleUtilities/Logger (7.13.3):
+    - GoogleUtilities/Environment
+    - GoogleUtilities/Privacy
+  - GoogleUtilities/Network (7.13.3):
+    - GoogleUtilities/Logger
+    - "GoogleUtilities/NSData+zlib"
+    - GoogleUtilities/Privacy
+    - GoogleUtilities/Reachability
+  - "GoogleUtilities/NSData+zlib (7.13.3)":
+    - GoogleUtilities/Privacy
+  - GoogleUtilities/Privacy (7.13.3)
+  - GoogleUtilities/Reachability (7.13.3):
+    - GoogleUtilities/Logger
+    - GoogleUtilities/Privacy
+  - GoogleUtilities/UserDefaults (7.13.3):
+    - GoogleUtilities/Logger
+    - GoogleUtilities/Privacy
+  - livekit_client (2.1.6):
     - FlutterMacOS
     - WebRTC-SDK (= 114.5735.10)
+  - nanopb (2.30910.0):
+    - nanopb/decode (= 2.30910.0)
+    - nanopb/encode (= 2.30910.0)
+  - nanopb/decode (2.30910.0)
+  - nanopb/encode (2.30910.0)
   - package_info_plus (0.0.1):
     - FlutterMacOS
   - path_provider_foundation (0.0.1):
     - Flutter
     - FlutterMacOS
+  - PromisesObjC (2.4.0)
   - Sentry/HybridSDK (8.25.2)
   - sentry_flutter (8.2.0):
     - Flutter
@@ -43,6 +111,8 @@ DEPENDENCIES:
   - connectivity_plus (from `Flutter/ephemeral/.symlinks/plugins/connectivity_plus/darwin`)
   - device_info_plus (from `Flutter/ephemeral/.symlinks/plugins/device_info_plus/macos`)
   - file_selector_macos (from `Flutter/ephemeral/.symlinks/plugins/file_selector_macos/macos`)
+  - firebase_core (from `Flutter/ephemeral/.symlinks/plugins/firebase_core/macos`)
+  - firebase_messaging (from `Flutter/ephemeral/.symlinks/plugins/firebase_messaging/macos`)
   - flutter_local_notifications (from `Flutter/ephemeral/.symlinks/plugins/flutter_local_notifications/macos`)
   - flutter_secure_storage_macos (from `Flutter/ephemeral/.symlinks/plugins/flutter_secure_storage_macos/macos`)
   - flutter_webrtc (from `Flutter/ephemeral/.symlinks/plugins/flutter_webrtc/macos`)
@@ -58,6 +128,15 @@ DEPENDENCIES:
 
 SPEC REPOS:
   trunk:
+    - Firebase
+    - FirebaseCore
+    - FirebaseCoreInternal
+    - FirebaseInstallations
+    - FirebaseMessaging
+    - GoogleDataTransport
+    - GoogleUtilities
+    - nanopb
+    - PromisesObjC
     - Sentry
     - WebRTC-SDK
 
@@ -68,6 +147,10 @@ EXTERNAL SOURCES:
     :path: Flutter/ephemeral/.symlinks/plugins/device_info_plus/macos
   file_selector_macos:
     :path: Flutter/ephemeral/.symlinks/plugins/file_selector_macos/macos
+  firebase_core:
+    :path: Flutter/ephemeral/.symlinks/plugins/firebase_core/macos
+  firebase_messaging:
+    :path: Flutter/ephemeral/.symlinks/plugins/firebase_messaging/macos
   flutter_local_notifications:
     :path: Flutter/ephemeral/.symlinks/plugins/flutter_local_notifications/macos
   flutter_secure_storage_macos:
@@ -97,13 +180,24 @@ SPEC CHECKSUMS:
   connectivity_plus: ddd7f30999e1faaef5967c23d5b6d503d10434db
   device_info_plus: ce1b7762849d3ec103d0e0517299f2db7ad60720
   file_selector_macos: 54fdab7caa3ac3fc43c9fac4d7d8d231277f8cf2
+  Firebase: 26b040b20866a55f55eb3611b9fcf3ae64816b86
+  firebase_core: 0b3b9c6c93f774c7392f1f9a6712f0d9ce9b1771
+  firebase_messaging: cea8e96b86f4fa6344d7b858d8fc8816e55f1b64
+  FirebaseCore: a2b95ae4ce7c83ceecfbbbe3b6f1cddc7415a808
+  FirebaseCoreInternal: 4b297a2d56063dbea2c1d0d04222d44a8d058862
+  FirebaseInstallations: 766dabca09fd94aef922538aaf144cc4a6fb6869
+  FirebaseMessaging: 585984d0a1df120617eb10b44cad8968b859815e
   flutter_local_notifications: 3805ca215b2fb7f397d78b66db91f6a747af52e4
   flutter_secure_storage_macos: 59459653abe1adb92abbc8ea747d79f8d19866c9
   flutter_webrtc: 823284e171ecb2487b7210c214886a949c122a59
   FlutterMacOS: 8f6f14fa908a6fb3fba0cd85dbd81ec4b251fb24
-  livekit_client: ca5f0447742014b6e462c27b71d49dcf03ec0446
+  GoogleDataTransport: 6c09b596d841063d76d4288cc2d2f42cc36e1e2a
+  GoogleUtilities: ea963c370a38a8069cc5f7ba4ca849a60b6d7d15
+  livekit_client: a87c5b7bac4ecd63da1183682ec10f5cafadbaf7
+  nanopb: 438bc412db1928dac798aa6fd75726007be04262
   package_info_plus: fa739dd842b393193c5ca93c26798dff6e3d0e0c
   path_provider_foundation: 2b6b4c569c0fb62ec74538f866245ac84301af46
+  PromisesObjC: f5707f49cb48b9636751c5b2e7d227e43fba9f47
   Sentry: 51b056d96914a741f63eca774d118678b1eb05a1
   sentry_flutter: e8397d13e297a5d4b6be8a752e33140b21c5cc97
   sqflite: 673a0e54cc04b7d6dba8d24fb8095b31c3a99eec
diff --git a/macos/Runner.xcodeproj/project.pbxproj b/macos/Runner.xcodeproj/project.pbxproj
index fefafc4..39aaaa8 100644
--- a/macos/Runner.xcodeproj/project.pbxproj
+++ b/macos/Runner.xcodeproj/project.pbxproj
@@ -243,6 +243,7 @@
 				33CC110E2044A8840003C045 /* Bundle Framework */,
 				3399D490228B24CF009A79C7 /* ShellScript */,
 				C5DDC734703B72E778163C68 /* [CP] Embed Pods Frameworks */,
+				7009C53F1F4A3CB93BB64EF3 /* [CP] Copy Pods Resources */,
 			);
 			buildRules = (
 			);
@@ -386,6 +387,23 @@
 			shellPath = /bin/sh;
 			shellScript = "\"$FLUTTER_ROOT\"/packages/flutter_tools/bin/macos_assemble.sh && touch Flutter/ephemeral/tripwire";
 		};
+		7009C53F1F4A3CB93BB64EF3 /* [CP] Copy Pods Resources */ = {
+			isa = PBXShellScriptBuildPhase;
+			buildActionMask = 2147483647;
+			files = (
+			);
+			inputFileListPaths = (
+				"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-resources-${CONFIGURATION}-input-files.xcfilelist",
+			);
+			name = "[CP] Copy Pods Resources";
+			outputFileListPaths = (
+				"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-resources-${CONFIGURATION}-output-files.xcfilelist",
+			);
+			runOnlyForDeploymentPostprocessing = 0;
+			shellPath = /bin/sh;
+			shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-resources.sh\"\n";
+			showEnvVarsInLog = 0;
+		};
 		C1C3653094F6B3FFFFCFD12B /* [CP] Check Pods Manifest.lock */ = {
 			isa = PBXShellScriptBuildPhase;
 			buildActionMask = 2147483647;
diff --git a/pubspec.lock b/pubspec.lock
index 587d909..d8dfe77 100644
--- a/pubspec.lock
+++ b/pubspec.lock
@@ -153,14 +153,6 @@ packages:
       url: "https://pub.dev"
     source: hosted
     version: "3.0.3"
-  cryptography:
-    dependency: transitive
-    description:
-      name: cryptography
-      sha256: d146b76d33d94548cf035233fbc2f4338c1242fa119013bead807d033fc4ae05
-      url: "https://pub.dev"
-    source: hosted
-    version: "2.7.0"
   csslib:
     dependency: transitive
     description:
@@ -181,10 +173,10 @@ packages:
     dependency: transitive
     description:
       name: dart_webrtc
-      sha256: fe4db21dc389b99e04cb7bf43bc927dba2e42768d4c28211b66a4b5a16e4d516
+      sha256: d663abfe6ed95afadcb64083e364aa16dbeaadead193bb03047cf6913e57b65e
       url: "https://pub.dev"
     source: hosted
-    version: "1.4.5"
+    version: "1.4.6+hotfix.1"
   dbus:
     dependency: transitive
     description:
@@ -193,24 +185,8 @@ packages:
       url: "https://pub.dev"
     source: hosted
     version: "0.7.10"
-  device_info:
-    dependency: transitive
-    description:
-      name: device_info
-      sha256: f4a8156cb7b7480d969cb734907d18b333c8f0bc0b1ad0b342cdcecf30d62c48
-      url: "https://pub.dev"
-    source: hosted
-    version: "2.0.3"
-  device_info_platform_interface:
-    dependency: transitive
-    description:
-      name: device_info_platform_interface
-      sha256: b148e0bf9640145d09a4f8dea96614076f889e7f7f8b5ecab1c7e5c2dbc73c1b
-      url: "https://pub.dev"
-    source: hosted
-    version: "2.0.1"
   device_info_plus:
-    dependency: transitive
+    dependency: "direct main"
     description:
       name: device_info_plus
       sha256: eead12d1a1ed83d8283ab4c2f3fca23ac4082f29f25f29dff0f758f57d06ec91
@@ -366,14 +342,6 @@ packages:
       url: "https://pub.dev"
     source: hosted
     version: "4.5.0"
-  flutter_background:
-    dependency: "direct main"
-    description:
-      name: flutter_background
-      sha256: "035c31a738509d67ee70bbf174e5aa7db462c371e838ec8259700c5c4e7ca17f"
-      url: "https://pub.dev"
-    source: hosted
-    version: "1.2.0"
   flutter_cache_manager:
     dependency: transitive
     description:
@@ -516,10 +484,10 @@ packages:
     dependency: "direct main"
     description:
       name: flutter_webrtc
-      sha256: "1c61bc08d14be57ac28e9e540c44b8b1b9ab1b25bbdb66a8c658e61a3211cc5d"
+      sha256: fd5f115a08dcdc00b988bea3003c956f1b60a78a61d899cbddfb44f5d0e44d4a
       url: "https://pub.dev"
     source: hosted
-    version: "0.10.7"
+    version: "0.10.8"
   font_awesome_flutter:
     dependency: "direct main"
     description:
@@ -708,10 +676,10 @@ packages:
     dependency: "direct main"
     description:
       name: livekit_client
-      sha256: "3792c4339db035d0320f1be8e2d99f394e5f3fe4215f95b371ce43db44a9d150"
+      sha256: e743aadc7dfbdcc9a1bc447cfe81e6f85346b624d972a71db3ce0f11b8a00a3b
       url: "https://pub.dev"
     source: hosted
-    version: "2.1.5"
+    version: "2.1.6"
   logging:
     dependency: transitive
     description:
@@ -936,54 +904,6 @@ packages:
       url: "https://pub.dev"
     source: hosted
     version: "2.0.11"
-  platform_device_id:
-    dependency: "direct main"
-    description:
-      name: platform_device_id
-      sha256: "7a12ec84de4a823bb10eba2f0e1ad29e2365abba17790489a0d78029904f562e"
-      url: "https://pub.dev"
-    source: hosted
-    version: "1.0.1"
-  platform_device_id_linux:
-    dependency: transitive
-    description:
-      name: platform_device_id_linux
-      sha256: "994b1608593e527a629af2d5aeb241c60d308d3434bc78b0f6fcb3c1a02dff43"
-      url: "https://pub.dev"
-    source: hosted
-    version: "1.0.0"
-  platform_device_id_macos:
-    dependency: transitive
-    description:
-      name: platform_device_id_macos
-      sha256: "968db2a504c611294b12a031b3734432d6df10553a0d3ae3b33ed21abfdbaba0"
-      url: "https://pub.dev"
-    source: hosted
-    version: "1.0.0"
-  platform_device_id_platform_interface:
-    dependency: transitive
-    description:
-      name: platform_device_id_platform_interface
-      sha256: c61607594252aaddacf3e4c4371ab08f2ef85ff427817fa6e48a169429610c46
-      url: "https://pub.dev"
-    source: hosted
-    version: "1.0.0"
-  platform_device_id_web:
-    dependency: transitive
-    description:
-      name: platform_device_id_web
-      sha256: "58e124594e1165db7f108395a780b1d1e1cd403021978e5228cf4289fbe736d5"
-      url: "https://pub.dev"
-    source: hosted
-    version: "1.0.0"
-  platform_device_id_windows:
-    dependency: transitive
-    description:
-      name: platform_device_id_windows
-      sha256: dbf8dcf03ad8555320ebae2403a3081b79f137f37661874e161fe2de0a84eeeb
-      url: "https://pub.dev"
-    source: hosted
-    version: "1.0.0"
   plugin_platform_interface:
     dependency: transitive
     description:
@@ -1048,6 +968,62 @@ packages:
       url: "https://pub.dev"
     source: hosted
     version: "8.2.0"
+  shared_preferences:
+    dependency: "direct main"
+    description:
+      name: shared_preferences
+      sha256: d3bbe5553a986e83980916ded2f0b435ef2e1893dfaa29d5a7a790d0eca12180
+      url: "https://pub.dev"
+    source: hosted
+    version: "2.2.3"
+  shared_preferences_android:
+    dependency: transitive
+    description:
+      name: shared_preferences_android
+      sha256: "93d0ec9dd902d85f326068e6a899487d1f65ffcd5798721a95330b26c8131577"
+      url: "https://pub.dev"
+    source: hosted
+    version: "2.2.3"
+  shared_preferences_foundation:
+    dependency: transitive
+    description:
+      name: shared_preferences_foundation
+      sha256: "0a8a893bf4fd1152f93fec03a415d11c27c74454d96e2318a7ac38dd18683ab7"
+      url: "https://pub.dev"
+    source: hosted
+    version: "2.4.0"
+  shared_preferences_linux:
+    dependency: transitive
+    description:
+      name: shared_preferences_linux
+      sha256: "9f2cbcf46d4270ea8be39fa156d86379077c8a5228d9dfdb1164ae0bb93f1faa"
+      url: "https://pub.dev"
+    source: hosted
+    version: "2.3.2"
+  shared_preferences_platform_interface:
+    dependency: transitive
+    description:
+      name: shared_preferences_platform_interface
+      sha256: "22e2ecac9419b4246d7c22bfbbda589e3acf5c0351137d87dd2939d984d37c3b"
+      url: "https://pub.dev"
+    source: hosted
+    version: "2.3.2"
+  shared_preferences_web:
+    dependency: transitive
+    description:
+      name: shared_preferences_web
+      sha256: "9aee1089b36bd2aafe06582b7d7817fd317ef05fc30e6ba14bff247d0933042a"
+      url: "https://pub.dev"
+    source: hosted
+    version: "2.3.0"
+  shared_preferences_windows:
+    dependency: transitive
+    description:
+      name: shared_preferences_windows
+      sha256: "841ad54f3c8381c480d0c9b508b89a34036f512482c407e6df7a9c4aa2ef8f59"
+      url: "https://pub.dev"
+    source: hosted
+    version: "2.3.2"
   sky_engine:
     dependency: transitive
     description: flutter
@@ -1257,10 +1233,10 @@ packages:
     dependency: transitive
     description:
       name: video_player_android
-      sha256: "4f77780499ebbdb3a8387f3de7a9d07a7665cfb3a3741177c44a52353fe41d64"
+      sha256: "9529001630e42988f755772972d5014d30121610700e8e502278a245939f8fc8"
       url: "https://pub.dev"
     source: hosted
-    version: "2.4.16"
+    version: "2.5.0"
   video_player_avfoundation:
     dependency: transitive
     description:
diff --git a/pubspec.yaml b/pubspec.yaml
index ddb28d7..ad9c7ca 100644
--- a/pubspec.yaml
+++ b/pubspec.yaml
@@ -62,13 +62,13 @@ dependencies:
   livekit_client: ^2.1.5
   flutter_webrtc: ^0.10.7
   wakelock_plus: ^1.2.5
-  flutter_background: ^1.2.0
   cached_network_image: ^3.3.1
   sentry_flutter: ^8.2.0
   firebase_core: ^3.0.0
   firebase_messaging: ^15.0.0
-  platform_device_id: ^1.0.1
   package_info_plus: ^8.0.0
+  device_info_plus: ^10.1.0
+  shared_preferences: ^2.2.3
 
 dev_dependencies:
   flutter_test:
diff --git a/windows/flutter/generated_plugin_registrant.cc b/windows/flutter/generated_plugin_registrant.cc
index 5d61019..1226b42 100644
--- a/windows/flutter/generated_plugin_registrant.cc
+++ b/windows/flutter/generated_plugin_registrant.cc
@@ -13,7 +13,6 @@
 #include 
 #include 
 #include 
-#include 
 #include 
 #include 
 #include 
@@ -33,8 +32,6 @@ void RegisterPlugins(flutter::PluginRegistry* registry) {
       registry->GetRegistrarForPlugin("LiveKitPlugin"));
   PermissionHandlerWindowsPluginRegisterWithRegistrar(
       registry->GetRegistrarForPlugin("PermissionHandlerWindowsPlugin"));
-  PlatformDeviceIdWindowsPluginRegisterWithRegistrar(
-      registry->GetRegistrarForPlugin("PlatformDeviceIdWindowsPlugin"));
   SentryFlutterPluginRegisterWithRegistrar(
       registry->GetRegistrarForPlugin("SentryFlutterPlugin"));
   UrlLauncherWindowsRegisterWithRegistrar(
diff --git a/windows/flutter/generated_plugins.cmake b/windows/flutter/generated_plugins.cmake
index 24c757d..2ad7592 100644
--- a/windows/flutter/generated_plugins.cmake
+++ b/windows/flutter/generated_plugins.cmake
@@ -10,7 +10,6 @@ list(APPEND FLUTTER_PLUGIN_LIST
   flutter_webrtc
   livekit_client
   permission_handler_windows
-  platform_device_id_windows
   sentry_flutter
   url_launcher_windows
   video_player_win