diff --git a/src/com/android/settings/WirelessSettings.java b/src/com/android/settings/WirelessSettings.java
index 6724cc1..db39e12 100644
--- a/src/com/android/settings/WirelessSettings.java
+++ b/src/com/android/settings/WirelessSettings.java
@@ -80,6 +80,7 @@
 
     private ConnectivityManager mCm;
     private TelephonyManager mTm;
+    private PackageManager mPm;
 
     private static final int MANAGE_MOBILE_PLAN_DIALOG_ID = 1;
     private static final String SAVED_MANAGE_MOBILE_PLAN_MSG = "mManageMobilePlanMessage";
@@ -124,6 +125,15 @@
 
         NetworkInfo ni = mCm.getProvisioningOrActiveNetworkInfo();
         if (mTm.hasIccCard() && (ni != null)) {
+            // Check for carrier apps that can handle provisioning first
+            Intent provisioningIntent = new Intent(TelephonyIntents.ACTION_CARRIER_SETUP);
+            provisioningIntent.addCategory(TelephonyIntents.CATEGORY_MCCMNC_PREFIX
+                    + mTm.getSimOperator());
+            if (mPm.resolveActivity(provisioningIntent, 0 /* flags */) != null) {
+                startActivity(provisioningIntent);
+                return;
+            }
+
             // Get provisioning URL
             String url = mCm.getMobileProvisioningUrl();
             if (!TextUtils.isEmpty(url)) {
@@ -192,15 +202,14 @@
         CharSequence[] entryValues = new CharSequence[count];
         Drawable[] entryImages = new Drawable[count];
 
-        PackageManager packageManager = getPackageManager();
         int i = 0;
         for (SmsApplicationData smsApplicationData : smsApplications) {
             entries[i] = smsApplicationData.mApplicationName;
             entryValues[i] = smsApplicationData.mPackageName;
             try {
-                entryImages[i] = packageManager.getApplicationIcon(smsApplicationData.mPackageName);
+                entryImages[i] = mPm.getApplicationIcon(smsApplicationData.mPackageName);
             } catch (NameNotFoundException e) {
-                entryImages[i] = packageManager.getDefaultActivityIcon();
+                entryImages[i] = mPm.getDefaultActivityIcon();
             }
             i++;
         }
@@ -260,6 +269,7 @@
 
         mCm = (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE);
         mTm = (TelephonyManager) getSystemService(Context.TELEPHONY_SERVICE);
+        mPm = getPackageManager();
 
         addPreferencesFromResource(R.xml.wireless_settings);
 
@@ -342,7 +352,7 @@
         }
 
         // Remove Airplane Mode settings if it's a stationary device such as a TV.
-        if (getActivity().getPackageManager().hasSystemFeature(PackageManager.FEATURE_TELEVISION)) {
+        if (mPm.hasSystemFeature(PackageManager.FEATURE_TELEVISION)) {
             removePreference(KEY_TOGGLE_AIRPLANE);
         }
 
@@ -370,8 +380,7 @@
                 com.android.internal.R.bool.config_cellBroadcastAppLinks);
         try {
             if (isCellBroadcastAppLinkEnabled) {
-                PackageManager pm = getPackageManager();
-                if (pm.getApplicationEnabledSetting("com.android.cellbroadcastreceiver")
+                if (mPm.getApplicationEnabledSetting("com.android.cellbroadcastreceiver")
                         == PackageManager.COMPONENT_ENABLED_STATE_DISABLED) {
                     isCellBroadcastAppLinkEnabled = false;  // CMAS app disabled
                 }
