diff --git a/AndroidManifest.xml b/AndroidManifest.xml
index ac3799f..051660e 100644
--- a/AndroidManifest.xml
+++ b/AndroidManifest.xml
@@ -228,6 +228,19 @@
             </intent-filter>
         </activity>
 
+        <activity-alias android:name="ProtectedEnableAccountPreferenceActivity"
+                  android:targetActivity=".settings.EnableAccountPreferenceActivity"
+                  android:label="@string/enable_account_preference_title"
+                  android:configChanges="orientation|screenSize|keyboardHidden"
+                  android:theme="@style/Theme.Telecom.DialerSettings"
+                  android:process=":ui"
+                  android:permission="android.permission.MODIFY_PHONE_STATE">
+            <intent-filter>
+                <action android:name="android.telecom.action.ENABLE_PHONE_ACCOUNT_SETTING" />
+                <category android:name="android.intent.category.DEFAULT" />
+            </intent-filter>
+        </activity-alias>
+
         <activity android:name=".components.ErrorDialogActivity"
                 android:configChanges="orientation|screenSize|keyboardHidden"
                 android:excludeFromRecents="true"
diff --git a/src/com/android/server/telecom/PhoneAccountRegistrar.java b/src/com/android/server/telecom/PhoneAccountRegistrar.java
index 1ef869b..3d539cb 100644
--- a/src/com/android/server/telecom/PhoneAccountRegistrar.java
+++ b/src/com/android/server/telecom/PhoneAccountRegistrar.java
@@ -350,12 +350,16 @@
 
     public void enablePhoneAccount(PhoneAccountHandle accountHandle, boolean isEnabled) {
         PhoneAccount account = getPhoneAccount(accountHandle);
-        if (account.hasCapabilities(PhoneAccount.CAPABILITY_SIM_SUBSCRIPTION)) {
+        if (account == null) {
+            Log.w(this, "Could not find account to enable: " + accountHandle);
+            return;
+        } else if (account.hasCapabilities(PhoneAccount.CAPABILITY_SIM_SUBSCRIPTION)) {
             // We never change the enabled state of SIM-based accounts.
+            Log.w(this, "Could not change enable state of SIM account: " + accountHandle);
             return;
         }
 
-        if (account != null && account.isEnabled() != isEnabled) {
+        if (account.isEnabled() != isEnabled) {
             account.setIsEnabled(isEnabled);
             write();
             fireAccountsChanged();
diff --git a/src/com/android/server/telecom/settings/EnableAccountPreferenceActivity.java b/src/com/android/server/telecom/settings/EnableAccountPreferenceActivity.java
index 383b416..728100c 100644
--- a/src/com/android/server/telecom/settings/EnableAccountPreferenceActivity.java
+++ b/src/com/android/server/telecom/settings/EnableAccountPreferenceActivity.java
@@ -18,7 +18,12 @@
 
 import android.app.ActionBar;
 import android.app.Activity;
+import android.content.ComponentName;
+import android.content.Intent;
 import android.os.Bundle;
+import android.telecom.Log;
+import android.telecom.PhoneAccountHandle;
+import android.telecom.TelecomManager;
 import android.view.MenuItem;
 
 public class EnableAccountPreferenceActivity extends Activity {
@@ -26,6 +31,12 @@
     public void onCreate(Bundle savedInstanceState) {
         super.onCreate(savedInstanceState);
 
+
+        if (handleDirectChangeRequest()) {
+            finish();
+            return;
+        }
+
         getFragmentManager().beginTransaction()
                 .replace(android.R.id.content, new EnableAccountPreferenceFragment())
                 .commit();
@@ -36,6 +47,54 @@
         }
     }
 
+    private boolean handleDirectChangeRequest() {
+        // Here we check to see if the intent action is the protected version which allows
+        // for immediate enabling/disabling of phone accounts. If it is, take the phone account
+        // handle and value and simply enable/disable the account. If any part is missing, then
+        // open the setting screen as normal.
+        Intent intent = getIntent();
+        String action = intent.getAction();
+        if (!TelecomManager.ACTION_ENABLE_PHONE_ACCOUNT_SETTING.equals(action)) {
+            return false;
+        }
+
+        if (!intent.hasExtra(TelecomManager.EXTRA_ENABLE_PHONE_ACCOUNT_VALUE)) {
+            Log.w(this, "Boolean extra value not found in %s",
+                    TelecomManager.EXTRA_ENABLE_PHONE_ACCOUNT_VALUE);
+            return false;
+        }
+
+        String desc = intent.getStringExtra(TelecomManager.EXTRA_PHONE_ACCOUNT_DESCRIPTION);
+        if (desc == null) {
+            Log.w(this, "Extra value not found or is null in %s",
+                    TelecomManager.EXTRA_PHONE_ACCOUNT_DESCRIPTION);
+            return false;
+        }
+
+        String[] parts = desc.split(";");
+        if (parts.length < 2) {
+            Log.w(this, "Description not split into two parts with semi-colon: %s", desc);
+            return false;
+        }
+
+        ComponentName component = ComponentName.unflattenFromString(parts[0]);
+        if (component == null) {
+            Log.w(this, "Value does not unflatten to ComponentName: %s", parts[0]);
+            return false;
+        }
+
+        PhoneAccountHandle handle = new PhoneAccountHandle(component, parts[1]);
+        boolean enabled = intent.getBooleanExtra(
+                TelecomManager.EXTRA_ENABLE_PHONE_ACCOUNT_VALUE, false);
+        try {
+            TelecomManager.from(this).enablePhoneAccount(handle, enabled);
+            return true;
+        } catch (Exception e) {
+            Log.e(this, e, "Exception enabling account %s, %s", parts[0], parts[1]);
+            return false;
+        }
+    }
+
     /** ${inheritDoc} */
     @Override
     public boolean onOptionsItemSelected(MenuItem item) {
