diff --git a/src/com/android/settings/DataUsageSummary.java b/src/com/android/settings/DataUsageSummary.java
index 38376e4..c9a2999 100644
--- a/src/com/android/settings/DataUsageSummary.java
+++ b/src/com/android/settings/DataUsageSummary.java
@@ -480,7 +480,7 @@
             return;
         }
         try {
-            int uid = getActivity().getPackageManager().getPackageUid(mShowAppImmediatePkg,
+            int uid = getActivity().getPackageManager().getPackageUidAsUser(mShowAppImmediatePkg,
                 UserHandle.myUserId());
             AppItem app = new AppItem(uid);
             app.addUid(uid);
diff --git a/src/com/android/settings/DeviceAdminSettings.java b/src/com/android/settings/DeviceAdminSettings.java
index 5324983..25123b1 100644
--- a/src/com/android/settings/DeviceAdminSettings.java
+++ b/src/com/android/settings/DeviceAdminSettings.java
@@ -391,7 +391,7 @@
     private void addDeviceAdminBroadcastReceiversForProfile(
             Collection<ComponentName> alreadyAddedComponents, final int profileId) {
         final PackageManager pm = getActivity().getPackageManager();
-        List<ResolveInfo> enabledForProfile = pm.queryBroadcastReceivers(
+        List<ResolveInfo> enabledForProfile = pm.queryBroadcastReceiversAsUser(
                 new Intent(DeviceAdminReceiver.ACTION_DEVICE_ADMIN_ENABLED),
                 PackageManager.GET_META_DATA | PackageManager.GET_DISABLED_UNTIL_USED_COMPONENTS,
                 profileId);
@@ -436,7 +436,7 @@
             ArrayList<DeviceAdminInfo> deviceAdmins = new ArrayList<DeviceAdminInfo>(n);
             for (int i = 0; i < n; ++i) {
                 ComponentName activeAdmin = activeAdmins.get(i);
-                List<ResolveInfo> resolved = packageManager.queryBroadcastReceivers(
+                List<ResolveInfo> resolved = packageManager.queryBroadcastReceiversAsUser(
                         new Intent().setComponent(activeAdmin), PackageManager.GET_META_DATA
                                 | PackageManager.GET_DISABLED_UNTIL_USED_COMPONENTS, profileId);
                 if (resolved != null) {
diff --git a/src/com/android/settings/applications/AppLaunchSettings.java b/src/com/android/settings/applications/AppLaunchSettings.java
index ae711f7..91523ee 100644
--- a/src/com/android/settings/applications/AppLaunchSettings.java
+++ b/src/com/android/settings/applications/AppLaunchSettings.java
@@ -139,7 +139,7 @@
                 // Present 'undefined' as 'ask' because the OS treats them identically for
                 // purposes of the UI (and does the right thing around pending domain
                 // verifications that might arrive after the user chooses 'ask' in this UI).
-                final int state = mPm.getIntentVerificationStatus(mPackageName, UserHandle.myUserId());
+                final int state = mPm.getIntentVerificationStatusAsUser(mPackageName, UserHandle.myUserId());
                 mAppLinkState.setValue(
                         Integer.toString((state == INTENT_FILTER_DOMAIN_VERIFICATION_STATUS_UNDEFINED)
                                 ? INTENT_FILTER_DOMAIN_VERIFICATION_STATUS_ALWAYS_ASK
@@ -164,16 +164,16 @@
         }
 
         final int userId = UserHandle.myUserId();
-        final int priorState = mPm.getIntentVerificationStatus(mPackageName, userId);
+        final int priorState = mPm.getIntentVerificationStatusAsUser(mPackageName, userId);
 
         if (priorState == newState) {
             return false;
         }
 
-        boolean success = mPm.updateIntentVerificationStatus(mPackageName, newState, userId);
+        boolean success = mPm.updateIntentVerificationStatusAsUser(mPackageName, newState, userId);
         if (success) {
             // Read back the state to see if the change worked
-            final int updatedState = mPm.getIntentVerificationStatus(mPackageName, userId);
+            final int updatedState = mPm.getIntentVerificationStatusAsUser(mPackageName, userId);
             success = (newState == updatedState);
         } else {
             Log.e(TAG, "Couldn't update intent verification status!");
diff --git a/src/com/android/settings/applications/ClearDefaultsPreference.java b/src/com/android/settings/applications/ClearDefaultsPreference.java
index 3a63a66..e9c5a0e 100644
--- a/src/com/android/settings/applications/ClearDefaultsPreference.java
+++ b/src/com/android/settings/applications/ClearDefaultsPreference.java
@@ -95,7 +95,7 @@
                     final int userId = UserHandle.myUserId();
                     mPm.clearPackagePreferredActivities(mPackageName);
                     if (isDefaultBrowser(mPackageName)) {
-                        mPm.setDefaultBrowserPackageName(null, userId);
+                        mPm.setDefaultBrowserPackageNameAsUser(null, userId);
                     }
                     try {
                         mUsbManager.clearDefaults(mPackageName, userId);
@@ -163,7 +163,7 @@
     }
 
     private boolean isDefaultBrowser(String packageName) {
-        final String defaultBrowser = mPm.getDefaultBrowserPackageName(UserHandle.myUserId());
+        final String defaultBrowser = mPm.getDefaultBrowserPackageNameAsUser(UserHandle.myUserId());
         return packageName.equals(defaultBrowser);
     }
 
diff --git a/src/com/android/settings/applications/ManageApplications.java b/src/com/android/settings/applications/ManageApplications.java
index a01e18d..dd63e21 100644
--- a/src/com/android/settings/applications/ManageApplications.java
+++ b/src/com/android/settings/applications/ManageApplications.java
@@ -1097,7 +1097,7 @@
         private CharSequence getDomainsSummary(String packageName) {
             // If the user has explicitly said "no" for this package, that's the
             // string we should show.
-            int domainStatus = mPm.getIntentVerificationStatus(packageName, UserHandle.myUserId());
+            int domainStatus = mPm.getIntentVerificationStatusAsUser(packageName, UserHandle.myUserId());
             if (domainStatus == PackageManager.INTENT_FILTER_DOMAIN_VERIFICATION_STATUS_NEVER) {
                 return mContext.getString(R.string.domain_urls_summary_none);
             }
diff --git a/src/com/android/settings/applications/ManageDefaultApps.java b/src/com/android/settings/applications/ManageDefaultApps.java
index cbba122..73bf837 100644
--- a/src/com/android/settings/applications/ManageDefaultApps.java
+++ b/src/com/android/settings/applications/ManageDefaultApps.java
@@ -98,7 +98,7 @@
 
         final PackageManager pm = getPackageManager();
 
-        String packageName = pm.getDefaultBrowserPackageName(UserHandle.myUserId());
+        String packageName = pm.getDefaultBrowserPackageNameAsUser(UserHandle.myUserId());
         if (!TextUtils.isEmpty(packageName)) {
             // Check if the default Browser package is still there
             Intent intent = new Intent();
@@ -142,7 +142,7 @@
                         if (TextUtils.isEmpty(packageName)) {
                             return false;
                         }
-                        boolean result = mPm.setDefaultBrowserPackageName(
+                        boolean result = mPm.setDefaultBrowserPackageNameAsUser(
                                 packageName.toString(), myUserId);
                         if (result) {
                             mDefaultBrowserPreference.setValue(packageName.toString());
diff --git a/src/com/android/settings/wifi/WifiSettings.java b/src/com/android/settings/wifi/WifiSettings.java
index 87f72f5..403d12a 100644
--- a/src/com/android/settings/wifi/WifiSettings.java
+++ b/src/com/android/settings/wifi/WifiSettings.java
@@ -990,7 +990,7 @@
             if (deviceOwner != null) {
                 final int deviceOwnerUserId = dpm.getDeviceOwnerUserId();
                 try {
-                    final int deviceOwnerUid = pm.getPackageUid(deviceOwner.getPackageName(),
+                    final int deviceOwnerUid = pm.getPackageUidAsUser(deviceOwner.getPackageName(),
                             deviceOwnerUserId);
                     isConfigEligibleForLockdown = deviceOwnerUid == config.creatorUid;
                 } catch (NameNotFoundException e) {
