diff --git a/src/com/android/permissioncontroller/permission/data/AllPackageInfosLiveData.kt b/src/com/android/permissioncontroller/permission/data/AllPackageInfosLiveData.kt
index 424505b..494a8de 100644
--- a/src/com/android/permissioncontroller/permission/data/AllPackageInfosLiveData.kt
+++ b/src/com/android/permissioncontroller/permission/data/AllPackageInfosLiveData.kt
@@ -19,12 +19,16 @@
 import android.os.UserHandle
 import com.android.permissioncontroller.permission.data.AllPackageInfosLiveData.addSource
 import com.android.permissioncontroller.permission.model.livedatatypes.LightPackageInfo
+import kotlinx.coroutines.Dispatchers.Main
+import kotlinx.coroutines.GlobalScope
+import kotlinx.coroutines.launch
 
 /**
  * A LiveData which tracks the PackageInfos of all of the packages in the system, for all users.
  */
 object AllPackageInfosLiveData :
-    SmartUpdateMediatorLiveData<Map<UserHandle, List<LightPackageInfo>>>() {
+    SmartUpdateMediatorLiveData<Map<UserHandle, List<LightPackageInfo>>>(),
+    DeepUpdateable {
 
     private val userPackageInfosLiveDatas = mutableMapOf<UserHandle, UserPackageInfosLiveData>()
     private val userPackageInfos = mutableMapOf<UserHandle, List<LightPackageInfo>>()
@@ -35,6 +39,15 @@
         }
     }
 
+    override suspend fun onDeepUpdate() {
+        updateIfActive()
+        GlobalScope.launch(Main.immediate) {
+            for ((_, liveData) in userPackageInfosLiveDatas) {
+                liveData.updateAsync()
+            }
+        }
+    }
+
     override fun onUpdate() {
         UsersLiveData.value?.let { users ->
             val getLiveData = { user: UserHandle -> UserPackageInfosLiveData[user] }
diff --git a/src/com/android/permissioncontroller/permission/data/DeepUpdateable.kt b/src/com/android/permissioncontroller/permission/data/DeepUpdateable.kt
new file mode 100644
index 0000000..4a7d5b4
--- /dev/null
+++ b/src/com/android/permissioncontroller/permission/data/DeepUpdateable.kt
@@ -0,0 +1,29 @@
+/*
+ * Copyright (C) 2020 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.android.permissioncontroller.permission.data
+
+interface DeepUpdateable {
+    suspend fun onDeepUpdate()
+}
+
+suspend fun SmartUpdateMediatorLiveData<*>.deepUpdate() {
+    if (this is DeepUpdateable) {
+        onDeepUpdate()
+    } else {
+        updateIfActive()
+    }
+}
\ No newline at end of file
diff --git a/src/com/android/permissioncontroller/permission/data/SmartUpdateMediatorLiveData.kt b/src/com/android/permissioncontroller/permission/data/SmartUpdateMediatorLiveData.kt
index 84826c0..0634d1b 100644
--- a/src/com/android/permissioncontroller/permission/data/SmartUpdateMediatorLiveData.kt
+++ b/src/com/android/permissioncontroller/permission/data/SmartUpdateMediatorLiveData.kt
@@ -328,8 +328,10 @@
         return getInitializedValue(
             observe = { observer ->
                 observeStale(ForeverActiveLifecycle, observer)
-                if (forceUpdate) {
-                    updateIfActive()
+                if (forceUpdate || (!staleOk && isStale)) {
+                    GlobalScope.launch(Main) {
+                        deepUpdate()
+                    }
                 }
             },
             isInitialized = { isInitialized && (staleOk || !isStale) })
