diff --git a/src/com/android/packageinstaller/Constants.java b/src/com/android/packageinstaller/Constants.java
index c3d7f86..fa25beb 100644
--- a/src/com/android/packageinstaller/Constants.java
+++ b/src/com/android/packageinstaller/Constants.java
@@ -136,4 +136,15 @@
      * set for the names of the roles that an application is always denied for.
      */
     public static final String REQUEST_ROLE_USER_DENIED_ALWAYS_KEY_PREFIX = "denied_always:";
+
+    /**
+     * Intent extra used to pass current sessionId between Permission Controller fragments.
+     */
+    public static final String EXTRA_SESSION_ID =
+            "com.android.packageinstaller.extra.SESSION_ID";
+
+    /**
+     * Invalid session id.
+     */
+    public static final long INVALID_SESSION_ID = 0;
 }
diff --git a/src/com/android/packageinstaller/permission/service/LocationAccessCheck.java b/src/com/android/packageinstaller/permission/service/LocationAccessCheck.java
index e3a2e92..30911e1 100644
--- a/src/com/android/packageinstaller/permission/service/LocationAccessCheck.java
+++ b/src/com/android/packageinstaller/permission/service/LocationAccessCheck.java
@@ -39,6 +39,8 @@
 import static android.provider.Settings.Secure.LOCATION_ACCESS_CHECK_DELAY_MILLIS;
 import static android.provider.Settings.Secure.LOCATION_ACCESS_CHECK_INTERVAL_MILLIS;
 
+import static com.android.packageinstaller.Constants.EXTRA_SESSION_ID;
+import static com.android.packageinstaller.Constants.INVALID_SESSION_ID;
 import static com.android.packageinstaller.Constants.KEY_LAST_LOCATION_ACCESS_NOTIFICATION_SHOWN;
 import static com.android.packageinstaller.Constants.LOCATION_ACCESS_CHECK_ALREADY_NOTIFIED_FILE;
 import static com.android.packageinstaller.Constants.LOCATION_ACCESS_CHECK_JOB_ID;
@@ -516,9 +518,16 @@
         deleteIntent.putExtra(EXTRA_USER, user);
         deleteIntent.setFlags(FLAG_RECEIVER_FOREGROUND);
 
+        long sessionId = INVALID_SESSION_ID;
+
+        while (sessionId == INVALID_SESSION_ID) {
+            sessionId = new Random().nextLong();
+        }
+
         Intent clickIntent = new Intent(mContext, NotificationClickHandler.class);
         clickIntent.putExtra(EXTRA_PACKAGE_NAME, pkgName);
         clickIntent.putExtra(EXTRA_USER, user);
+        clickIntent.putExtra(EXTRA_SESSION_ID, sessionId);
         clickIntent.setFlags(FLAG_RECEIVER_FOREGROUND);
 
         CharSequence appName = getNotificationAppName();
@@ -813,6 +822,7 @@
         public void onReceive(Context context, Intent intent) {
             String pkg = getStringExtraSafe(intent, EXTRA_PACKAGE_NAME);
             UserHandle user = getParcelableExtraSafe(intent, EXTRA_USER);
+            long sessionId = intent.getLongExtra(EXTRA_SESSION_ID, INVALID_SESSION_ID);
 
             new LocationAccessCheck(context, null).markAsNotified(pkg, user);
 
@@ -821,6 +831,8 @@
             manageAppPermission.putExtra(EXTRA_PERMISSION_NAME, ACCESS_FINE_LOCATION);
             manageAppPermission.putExtra(EXTRA_PACKAGE_NAME, pkg);
             manageAppPermission.putExtra(EXTRA_USER, user);
+            manageAppPermission.putExtra(EXTRA_SESSION_ID, sessionId);
+
 
             context.startActivity(manageAppPermission);
         }
diff --git a/src/com/android/packageinstaller/permission/ui/AppPermissionActivity.java b/src/com/android/packageinstaller/permission/ui/AppPermissionActivity.java
index b425fd8..7e70129 100644
--- a/src/com/android/packageinstaller/permission/ui/AppPermissionActivity.java
+++ b/src/com/android/packageinstaller/permission/ui/AppPermissionActivity.java
@@ -18,6 +18,8 @@
 
 import static android.view.WindowManager.LayoutParams.SYSTEM_FLAG_HIDE_NON_SYSTEM_OVERLAY_WINDOWS;
 
+import static com.android.packageinstaller.Constants.INVALID_SESSION_ID;
+
 import android.content.Intent;
 import android.os.Bundle;
 import android.os.UserHandle;
@@ -27,6 +29,7 @@
 import androidx.fragment.app.Fragment;
 import androidx.fragment.app.FragmentActivity;
 
+import com.android.packageinstaller.Constants;
 import com.android.packageinstaller.DeviceUtils;
 import com.android.packageinstaller.permission.ui.auto.AutoAppPermissionFragment;
 import com.android.packageinstaller.permission.ui.handheld.AppPermissionFragment;
@@ -100,8 +103,10 @@
             androidXFragment = AutoAppPermissionFragment.newInstance(packageName, permissionName,
                     groupName, userHandle);
         } else {
+            long sessionId = getIntent().getLongExtra(Constants.EXTRA_SESSION_ID,
+                    INVALID_SESSION_ID);
             androidXFragment = AppPermissionFragment.newInstance(packageName, permissionName,
-                    groupName, userHandle, caller);
+                    groupName, userHandle, caller, sessionId);
         }
 
         getSupportFragmentManager().beginTransaction().replace(android.R.id.content,
diff --git a/src/com/android/packageinstaller/permission/ui/ManagePermissionsActivity.java b/src/com/android/packageinstaller/permission/ui/ManagePermissionsActivity.java
index 6dd3279..9ec35ea 100644
--- a/src/com/android/packageinstaller/permission/ui/ManagePermissionsActivity.java
+++ b/src/com/android/packageinstaller/permission/ui/ManagePermissionsActivity.java
@@ -18,6 +18,8 @@
 
 import static android.view.WindowManager.LayoutParams.SYSTEM_FLAG_HIDE_NON_SYSTEM_OVERLAY_WINDOWS;
 
+import static com.android.packageinstaller.Constants.INVALID_SESSION_ID;
+
 import android.content.Intent;
 import android.os.Bundle;
 import android.os.UserHandle;
@@ -27,6 +29,7 @@
 import androidx.fragment.app.Fragment;
 import androidx.fragment.app.FragmentActivity;
 
+import com.android.packageinstaller.Constants;
 import com.android.packageinstaller.DeviceUtils;
 import com.android.packageinstaller.permission.ui.auto.AutoAllAppPermissionsFragment;
 import com.android.packageinstaller.permission.ui.auto.AutoAppPermissionsFragment;
@@ -38,6 +41,8 @@
 import com.android.packageinstaller.permission.utils.Utils;
 import com.android.permissioncontroller.R;
 
+import java.util.Random;
+
 public final class ManagePermissionsActivity extends FragmentActivity {
     private static final String LOG_TAG = ManagePermissionsActivity.class.getSimpleName();
 
@@ -64,6 +69,11 @@
 
         getWindow().addSystemFlags(SYSTEM_FLAG_HIDE_NON_SYSTEM_OVERLAY_WINDOWS);
 
+        long sessionId = getIntent().getLongExtra(Constants.EXTRA_SESSION_ID, INVALID_SESSION_ID);
+        while (sessionId == INVALID_SESSION_ID) {
+            sessionId = new Random().nextLong();
+        }
+
         String permissionName;
         switch (action) {
             case Intent.ACTION_MANAGE_PERMISSIONS:
@@ -74,7 +84,7 @@
                             com.android.packageinstaller.permission.ui.television
                                     .ManagePermissionsFragment.newInstance();
                 } else {
-                    androidXFragment = ManageStandardPermissionsFragment.newInstance();
+                    androidXFragment = ManageStandardPermissionsFragment.newInstance(sessionId);
                 }
                 break;
 
@@ -143,7 +153,8 @@
                                 .AllAppPermissionsFragment.newInstance(packageName, userHandle);
                     } else {
                         androidXFragment = com.android.packageinstaller.permission.ui.handheld
-                                .AppPermissionsFragment.newInstance(packageName, userHandle);
+                                .AppPermissionsFragment.newInstance(
+                                        packageName, userHandle, sessionId);
                     }
                 }
             } break;
@@ -163,7 +174,7 @@
                             .PermissionAppsFragment.newInstance(permissionName);
                 } else {
                     androidXFragment = com.android.packageinstaller.permission.ui.handheld
-                            .PermissionAppsFragment.newInstance(permissionName);
+                            .PermissionAppsFragment.newInstance(permissionName, sessionId);
                 }
             } break;
 
diff --git a/src/com/android/packageinstaller/permission/ui/handheld/AppPermissionFragment.java b/src/com/android/packageinstaller/permission/ui/handheld/AppPermissionFragment.java
index d314bd7..25e7966 100644
--- a/src/com/android/packageinstaller/permission/ui/handheld/AppPermissionFragment.java
+++ b/src/com/android/packageinstaller/permission/ui/handheld/AppPermissionFragment.java
@@ -52,6 +52,7 @@
 import androidx.fragment.app.DialogFragment;
 import androidx.fragment.app.Fragment;
 
+import com.android.packageinstaller.Constants;
 import com.android.packageinstaller.permission.model.AppPermissionGroup;
 import com.android.packageinstaller.permission.model.Permission;
 import com.android.packageinstaller.permission.model.PermissionUsages;
@@ -112,8 +113,8 @@
      * @return A new fragment
      */
     public static @NonNull AppPermissionFragment newInstance(@NonNull String packageName,
-            @NonNull String permName, @Nullable String groupName, @NonNull UserHandle userHandle,
-            @Nullable String caller) {
+            @NonNull String permName, @Nullable String groupName,
+            @NonNull UserHandle userHandle, @Nullable String caller, long sessionId) {
         AppPermissionFragment fragment = new AppPermissionFragment();
         Bundle arguments = new Bundle();
         arguments.putString(Intent.EXTRA_PACKAGE_NAME, packageName);
@@ -124,6 +125,7 @@
         }
         arguments.putParcelable(Intent.EXTRA_USER, userHandle);
         arguments.putString(AppPermissionActivity.EXTRA_CALLER_NAME, caller);
+        arguments.putLong(Constants.EXTRA_SESSION_ID, sessionId);
         fragment.setArguments(arguments);
         return fragment;
     }
@@ -209,6 +211,8 @@
             root.requireViewById(R.id.usage_summary).setVisibility(View.GONE);
         }
 
+        long sessionId = getArguments().getLong(Constants.EXTRA_SESSION_ID);
+
         TextView footer1Link = root.requireViewById(R.id.footer_link_1);
         footer1Link.setText(context.getString(R.string.app_permission_footer_app_permissions_link,
                 appLabel));
@@ -216,6 +220,7 @@
             UserHandle user = UserHandle.getUserHandleForUid(mGroup.getApp().applicationInfo.uid);
             Intent intent = new Intent(Intent.ACTION_MANAGE_APP_PERMISSIONS);
             intent.putExtra(Intent.EXTRA_PACKAGE_NAME, mGroup.getApp().packageName);
+            intent.putExtra(Constants.EXTRA_SESSION_ID, sessionId);
             intent.putExtra(Intent.EXTRA_USER, user);
             context.startActivity(intent);
         });
@@ -225,6 +230,7 @@
         footer2Link.setOnClickListener((v) -> {
             Intent intent = new Intent(Intent.ACTION_MANAGE_PERMISSION_APPS);
             intent.putExtra(Intent.EXTRA_PERMISSION_NAME, mGroup.getName());
+            intent.putExtra(Constants.EXTRA_SESSION_ID, sessionId);
             context.startActivity(intent);
         });
 
diff --git a/src/com/android/packageinstaller/permission/ui/handheld/AppPermissionsFragment.java b/src/com/android/packageinstaller/permission/ui/handheld/AppPermissionsFragment.java
index 26cebb5..615fbd1 100644
--- a/src/com/android/packageinstaller/permission/ui/handheld/AppPermissionsFragment.java
+++ b/src/com/android/packageinstaller/permission/ui/handheld/AppPermissionsFragment.java
@@ -16,6 +16,9 @@
 
 package com.android.packageinstaller.permission.ui.handheld;
 
+import static com.android.packageinstaller.Constants.EXTRA_SESSION_ID;
+import static com.android.packageinstaller.Constants.INVALID_SESSION_ID;
+
 import android.app.ActionBar;
 import android.app.Activity;
 import android.content.Context;
@@ -71,15 +74,18 @@
      * @return A new fragment
      */
     public static AppPermissionsFragment newInstance(@NonNull String packageName,
-            @NonNull UserHandle userHandle) {
-        return setPackageNameAndUserHandle(new AppPermissionsFragment(), packageName, userHandle);
+            @NonNull UserHandle userHandle, long sessionId) {
+        return setPackageNameAndUserHandleAndSessionId(
+                new AppPermissionsFragment(), packageName, userHandle, sessionId);
     }
 
-    private static <T extends Fragment> T setPackageNameAndUserHandle(@NonNull T fragment,
-            @NonNull String packageName, @NonNull UserHandle userHandle) {
+    private static <T extends Fragment> T setPackageNameAndUserHandleAndSessionId(
+            @NonNull T fragment, @NonNull String packageName, @NonNull UserHandle userHandle,
+            long sessionId) {
         Bundle arguments = new Bundle();
         arguments.putString(Intent.EXTRA_PACKAGE_NAME, packageName);
         arguments.putParcelable(Intent.EXTRA_USER, userHandle);
+        arguments.putLong(EXTRA_SESSION_ID, sessionId);
         fragment.setArguments(arguments);
         return fragment;
     }
@@ -215,6 +221,8 @@
         allowed.setOrderingAsAdded(true);
         denied.setOrderingAsAdded(true);
 
+        long sessionId = getArguments().getLong(EXTRA_SESSION_ID, INVALID_SESSION_ID);
+
         for (int i = 0; i < groups.size(); i++) {
             AppPermissionGroup group = groups.get(i);
             if (!Utils.shouldShowPermission(getContext(), group)) {
@@ -224,7 +232,7 @@
             boolean isPlatform = group.getDeclaringPackage().equals(Utils.OS_PKG);
 
             PermissionControlPreference preference = new PermissionControlPreference(context,
-                    group, AppPermissionsFragment.class.getName());
+                    group, AppPermissionsFragment.class.getName(), sessionId);
             preference.setKey(group.getName());
             Drawable icon = Utils.loadDrawable(context.getPackageManager(),
                     group.getIconPkg(), group.getIconResId());
@@ -278,9 +286,10 @@
         if (mExtraScreen != null) {
             extraPerms.setOnPreferenceClickListener(preference -> {
                 AdditionalPermissionsFragment frag = new AdditionalPermissionsFragment();
-                setPackageNameAndUserHandle(frag,
+                setPackageNameAndUserHandleAndSessionId(frag,
                         getArguments().getString(Intent.EXTRA_PACKAGE_NAME),
-                        getArguments().getParcelable(Intent.EXTRA_USER));
+                        getArguments().getParcelable(Intent.EXTRA_USER),
+                        getArguments().getLong(EXTRA_SESSION_ID, INVALID_SESSION_ID));
                 frag.setTargetFragment(AppPermissionsFragment.this, 0);
                 getFragmentManager().beginTransaction()
                         .replace(android.R.id.content, frag)
diff --git a/src/com/android/packageinstaller/permission/ui/handheld/ManageCustomPermissionsFragment.java b/src/com/android/packageinstaller/permission/ui/handheld/ManageCustomPermissionsFragment.java
index ffd0829..8249053 100644
--- a/src/com/android/packageinstaller/permission/ui/handheld/ManageCustomPermissionsFragment.java
+++ b/src/com/android/packageinstaller/permission/ui/handheld/ManageCustomPermissionsFragment.java
@@ -16,12 +16,27 @@
 
 package com.android.packageinstaller.permission.ui.handheld;
 
+import static com.android.packageinstaller.Constants.EXTRA_SESSION_ID;
+
+import android.os.Bundle;
 import android.view.MenuItem;
 
 /**
  * Fragment that allows the user to manage custom permissions.
  */
 public class ManageCustomPermissionsFragment extends ManagePermissionsFragment {
+
+    /**
+     * @return A new fragment
+     */
+    public static ManageCustomPermissionsFragment newInstance(long sessionId) {
+        ManageCustomPermissionsFragment fragment = new ManageCustomPermissionsFragment();
+        Bundle arguments = new Bundle();
+        arguments.putLong(EXTRA_SESSION_ID, sessionId);
+        fragment.setArguments(arguments);
+        return fragment;
+    }
+
     @Override
     public void onStart() {
         super.onStart();
diff --git a/src/com/android/packageinstaller/permission/ui/handheld/ManagePermissionsFragment.java b/src/com/android/packageinstaller/permission/ui/handheld/ManagePermissionsFragment.java
index cf2c56f..638c3a6 100644
--- a/src/com/android/packageinstaller/permission/ui/handheld/ManagePermissionsFragment.java
+++ b/src/com/android/packageinstaller/permission/ui/handheld/ManagePermissionsFragment.java
@@ -15,6 +15,9 @@
  */
 package com.android.packageinstaller.permission.ui.handheld;
 
+import static com.android.packageinstaller.Constants.EXTRA_SESSION_ID;
+import static com.android.packageinstaller.Constants.INVALID_SESSION_ID;
+
 import android.app.ActionBar;
 import android.content.ActivityNotFoundException;
 import android.content.Context;
@@ -75,7 +78,9 @@
         }
 
         Intent intent = new Intent(Intent.ACTION_MANAGE_PERMISSION_APPS)
-                .putExtra(Intent.EXTRA_PERMISSION_NAME, key);
+                .putExtra(Intent.EXTRA_PERMISSION_NAME, key)
+                .putExtra(EXTRA_SESSION_ID,
+                        getArguments().getLong(EXTRA_SESSION_ID, INVALID_SESSION_ID));
         try {
             getActivity().startActivity(intent);
         } catch (ActivityNotFoundException e) {
diff --git a/src/com/android/packageinstaller/permission/ui/handheld/ManageStandardPermissionsFragment.java b/src/com/android/packageinstaller/permission/ui/handheld/ManageStandardPermissionsFragment.java
index cc4558f..3d793f0 100644
--- a/src/com/android/packageinstaller/permission/ui/handheld/ManageStandardPermissionsFragment.java
+++ b/src/com/android/packageinstaller/permission/ui/handheld/ManageStandardPermissionsFragment.java
@@ -15,6 +15,8 @@
  */
 package com.android.packageinstaller.permission.ui.handheld;
 
+import static com.android.packageinstaller.Constants.EXTRA_SESSION_ID;
+
 import android.os.Bundle;
 import android.view.MenuItem;
 
@@ -38,11 +40,14 @@
     /**
      * @return A new fragment
      */
-    public static ManageStandardPermissionsFragment newInstance() {
-        return new ManageStandardPermissionsFragment();
+    public static ManageStandardPermissionsFragment newInstance(long sessionId) {
+        ManageStandardPermissionsFragment fragment = new ManageStandardPermissionsFragment();
+        Bundle arguments = new Bundle();
+        arguments.putLong(EXTRA_SESSION_ID, sessionId);
+        fragment.setArguments(arguments);
+        return fragment;
     }
 
-
     @Override
     public void onCreate(Bundle icicle) {
         super.onCreate(icicle);
@@ -95,8 +100,9 @@
                         android.R.attr.colorControlNormal));
                 additionalPermissionsPreference.setTitle(R.string.additional_permissions);
                 additionalPermissionsPreference.setOnPreferenceClickListener(preference -> {
+                    long sessionId = getArguments().getLong(EXTRA_SESSION_ID);
                     ManageCustomPermissionsFragment frag =
-                            new ManageCustomPermissionsFragment();
+                            ManageCustomPermissionsFragment.newInstance(sessionId);
                     frag.setTargetFragment(ManageStandardPermissionsFragment.this, 0);
                     FragmentTransaction ft = getFragmentManager().beginTransaction();
                     ft.replace(android.R.id.content, frag);
diff --git a/src/com/android/packageinstaller/permission/ui/handheld/PermissionAppsFragment.java b/src/com/android/packageinstaller/permission/ui/handheld/PermissionAppsFragment.java
index 70ea65a..885f05b 100644
--- a/src/com/android/packageinstaller/permission/ui/handheld/PermissionAppsFragment.java
+++ b/src/com/android/packageinstaller/permission/ui/handheld/PermissionAppsFragment.java
@@ -15,6 +15,9 @@
  */
 package com.android.packageinstaller.permission.ui.handheld;
 
+import static com.android.packageinstaller.Constants.EXTRA_SESSION_ID;
+import static com.android.packageinstaller.Constants.INVALID_SESSION_ID;
+
 import android.app.ActionBar;
 import android.content.Context;
 import android.content.Intent;
@@ -60,13 +63,19 @@
     private static final String SHOW_SYSTEM_KEY = PermissionAppsFragment.class.getName()
             + KEY_SHOW_SYSTEM_PREFS;
 
-    public static PermissionAppsFragment newInstance(String permissionName) {
-        return setPermissionName(new PermissionAppsFragment(), permissionName);
+    /**
+     * @return A new fragment
+     */
+    public static PermissionAppsFragment newInstance(String permissionName, long sessionId) {
+        return setPermissionNameAndSessionId(
+                new PermissionAppsFragment(), permissionName, sessionId);
     }
 
-    private static <T extends Fragment> T setPermissionName(T fragment, String permissionName) {
+    private static <T extends Fragment> T setPermissionNameAndSessionId(
+            T fragment, String permissionName, long sessionId) {
         Bundle arguments = new Bundle();
         arguments.putString(Intent.EXTRA_PERMISSION_NAME, permissionName);
+        arguments.putLong(EXTRA_SESSION_ID, sessionId);
         fragment.setArguments(arguments);
         return fragment;
     }
@@ -245,6 +254,8 @@
             return result;
         });
 
+        long sessionId = getArguments().getLong(EXTRA_SESSION_ID, INVALID_SESSION_ID);
+
         for (int i = 0; i < sortedApps.size(); i++) {
             PermissionApp app = sortedApps.get(i);
             AppPermissionGroup group = app.getPermissionGroup();
@@ -302,7 +313,7 @@
             }
 
             PermissionControlPreference pref = new PermissionControlPreference(context, group,
-                    PermissionAppsFragment.class.getName());
+                    PermissionAppsFragment.class.getName(), sessionId);
             pref.setKey(key);
             pref.setIcon(app.getIcon());
             pref.setTitle(Utils.getFullAppLabel(app.getAppInfo(), context));
@@ -338,7 +349,8 @@
                 pref.setTitle(R.string.preference_show_system_apps);
                 pref.setOnPreferenceClickListener(preference -> {
                     SystemAppsFragment frag = new SystemAppsFragment();
-                    setPermissionName(frag, getArguments().getString(Intent.EXTRA_PERMISSION_NAME));
+                    setPermissionNameAndSessionId(frag,
+                            getArguments().getString(Intent.EXTRA_PERMISSION_NAME), sessionId);
                     frag.setTargetFragment(PermissionAppsFragment.this, 0);
                     getFragmentManager().beginTransaction()
                         .replace(android.R.id.content, frag)
diff --git a/src/com/android/packageinstaller/permission/ui/handheld/PermissionControlPreference.java b/src/com/android/packageinstaller/permission/ui/handheld/PermissionControlPreference.java
index 362358b..da86a6d 100644
--- a/src/com/android/packageinstaller/permission/ui/handheld/PermissionControlPreference.java
+++ b/src/com/android/packageinstaller/permission/ui/handheld/PermissionControlPreference.java
@@ -16,6 +16,8 @@
 
 package com.android.packageinstaller.permission.ui.handheld;
 
+import static com.android.packageinstaller.Constants.EXTRA_SESSION_ID;
+
 import android.content.Context;
 import android.content.Intent;
 import android.graphics.drawable.Drawable;
@@ -51,6 +53,11 @@
 
     public PermissionControlPreference(@NonNull Context context,
             @NonNull AppPermissionGroup group, @NonNull String caller) {
+        this(context, group, caller, 0);
+    }
+
+    public PermissionControlPreference(@NonNull Context context,
+            @NonNull AppPermissionGroup group, @NonNull String caller, long sessionId) {
         super(context);
         mContext = context;
         mWidgetIcon = null;
@@ -64,6 +71,7 @@
             intent.putExtra(Intent.EXTRA_PERMISSION_NAME, group.getPermissions().get(0).getName());
             intent.putExtra(Intent.EXTRA_USER, group.getUser());
             intent.putExtra(AppPermissionActivity.EXTRA_CALLER_NAME, caller);
+            intent.putExtra(EXTRA_SESSION_ID, sessionId);
             context.startActivity(intent);
             return true;
         });
