diff --git a/AndroidManifest.xml b/AndroidManifest.xml
index 336a80b..a3ca7ba 100644
--- a/AndroidManifest.xml
+++ b/AndroidManifest.xml
@@ -29,6 +29,7 @@
     <uses-permission android:name="android.permission.RECEIVE_SMS"/>
     <uses-permission android:name="android.permission.RECEIVE_MMS"/>
     <uses-permission android:name="android.permission.SEND_SMS"/>
+    <uses-permission android:name="android.permission.MANAGE_ROLE_HOLDERS" />
     <!-- Application needs access to MMS network -->
     <uses-permission android:name="android.permission.INTERNET" />
     <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>
diff --git a/res/values/custom_strings.xml b/res/values/custom_strings.xml
index b3a5200..b4fd6ca 100644
--- a/res/values/custom_strings.xml
+++ b/res/values/custom_strings.xml
@@ -24,4 +24,7 @@
     <string name="swipe_to_delete_conversation_pref_title">Swipe to delete</string>
     <string name="swipe_to_delete_conversation_pref_summary">Swipe to the right to delete a conversation</string>
 
+    <string name="value_yes">Yes</string>
+    <string name="value_no">No</string>
+
 </resources>
diff --git a/res/xml-v21/preferences_application.xml b/res/xml-v21/preferences_application.xml
index d650489..3d2c3b6 100644
--- a/res/xml-v21/preferences_application.xml
+++ b/res/xml-v21/preferences_application.xml
@@ -17,24 +17,10 @@
 <!-- Preference screen definition for Bugle's application-wide settings -->
 <PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android">
 
-    <!--  KLP+ only -->
-    <PreferenceScreen
-        android:key="@string/sms_disabled_pref_key"
-        android:title="@string/sms_disabled_pref_title"
-        android:persistent="false">
-        <intent
-            android:action="android.provider.Telephony.ACTION_CHANGE_DEFAULT">
-            <extra android:name="package" android:value="com.android.messaging" />
-        </intent>
-    </PreferenceScreen>
-    <PreferenceScreen
+    <Preference
         android:key="@string/sms_enabled_pref_key"
         android:title="@string/sms_enabled_pref_title"
-        android:persistent="false">
-        <intent
-            android:action="android.settings.WIRELESS_SETTINGS">
-        </intent>
-    </PreferenceScreen>
+        android:persistent="false"/>
 
     <SwitchPreference
         android:key="@string/send_sound_pref_key"
diff --git a/res/xml-v23/preferences_application.xml b/res/xml-v23/preferences_application.xml
index 7370c4a..3d2c3b6 100644
--- a/res/xml-v23/preferences_application.xml
+++ b/res/xml-v23/preferences_application.xml
@@ -17,25 +17,10 @@
 <!-- Preference screen definition for Bugle's application-wide settings -->
 <PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android">
 
-    <!--  KLP+ only -->
-    <PreferenceScreen
-        android:key="@string/sms_disabled_pref_key"
-        android:title="@string/sms_disabled_pref_title"
-        android:persistent="false">
-        <intent
-            android:action="android.provider.Telephony.ACTION_CHANGE_DEFAULT">
-            <extra android:name="package" android:value="com.android.messaging" />
-        </intent>
-    </PreferenceScreen>
-    <!--  MNC+ only -->
-    <PreferenceScreen
+    <Preference
         android:key="@string/sms_enabled_pref_key"
         android:title="@string/sms_enabled_pref_title"
-        android:persistent="false">
-        <intent
-            android:action="android.provider.Telephony.ACTION_CHANGE_DEFAULT">
-        </intent>
-    </PreferenceScreen>
+        android:persistent="false"/>
 
     <SwitchPreference
         android:key="@string/send_sound_pref_key"
diff --git a/res/xml/preferences_application.xml b/res/xml/preferences_application.xml
index 7ca8dd7..f47469c 100644
--- a/res/xml/preferences_application.xml
+++ b/res/xml/preferences_application.xml
@@ -17,24 +17,10 @@
 <!-- Preference screen definition for Bugle's application-wide settings -->
 <PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android">
 
-    <!--  KLP+ only -->
-    <PreferenceScreen
-        android:key="@string/sms_disabled_pref_key"
-        android:title="@string/sms_disabled_pref_title"
-        android:persistent="false">
-        <intent
-            android:action="android.provider.Telephony.ACTION_CHANGE_DEFAULT">
-            <extra android:name="package" android:value="com.android.messaging" />
-        </intent>
-    </PreferenceScreen>
-    <PreferenceScreen
+    <Preference
         android:key="@string/sms_enabled_pref_key"
         android:title="@string/sms_enabled_pref_title"
-        android:persistent="false">
-        <intent
-            android:action="android.settings.WIRELESS_SETTINGS">
-        </intent>
-    </PreferenceScreen>
+        android:persistent="false"/>
 
     <CheckBoxPreference
         android:key="@string/send_sound_pref_key"
diff --git a/src/com/android/messaging/ui/appsettings/ApplicationSettingsActivity.java b/src/com/android/messaging/ui/appsettings/ApplicationSettingsActivity.java
index 19979a9..ac8e0b6 100644
--- a/src/com/android/messaging/ui/appsettings/ApplicationSettingsActivity.java
+++ b/src/com/android/messaging/ui/appsettings/ApplicationSettingsActivity.java
@@ -17,6 +17,7 @@
 package com.android.messaging.ui.appsettings;
 
 import android.app.FragmentTransaction;
+import android.app.role.RoleManager;
 import android.content.Intent;
 import android.net.Uri;
 import android.os.Bundle;
@@ -83,11 +84,8 @@
 
         private String mNotificationsPreferenceKey;
         private Preference mNotificationsPreference;
-        private String mSmsDisabledPrefKey;
-        private Preference mSmsDisabledPreference;
         private String mSmsEnabledPrefKey;
         private Preference mSmsEnabledPreference;
-        private boolean mIsSmsPreferenceClicked;
         private String mSwipeRightToDeleteConversationkey;
         private SwitchPreference mSwipeRightToDeleteConversationPreference;
 
@@ -105,15 +103,12 @@
             mNotificationsPreferenceKey =
                     getString(R.string.notifications_pref_key);
             mNotificationsPreference = findPreference(mNotificationsPreferenceKey);
-            mSmsDisabledPrefKey = getString(R.string.sms_disabled_pref_key);
-            mSmsDisabledPreference = findPreference(mSmsDisabledPrefKey);
             mSmsEnabledPrefKey = getString(R.string.sms_enabled_pref_key);
             mSmsEnabledPreference = findPreference(mSmsEnabledPrefKey);
             mSwipeRightToDeleteConversationkey = getString(
                     R.string.swipe_right_deletes_conversation_key);
             mSwipeRightToDeleteConversationPreference =
                     (SwitchPreference) findPreference(mSwipeRightToDeleteConversationkey);
-            mIsSmsPreferenceClicked = false;
 
             if (!DebugUtils.isDebugEnabled()) {
                 final Preference debugCategory = findPreference(getString(
@@ -142,46 +137,25 @@
                 Intent intent = new Intent(Settings.ACTION_APP_NOTIFICATION_SETTINGS);
                 intent.putExtra(Settings.EXTRA_APP_PACKAGE, getContext().getPackageName());
                 startActivity(intent);
-            }
-            if (preference.getKey() ==  mSmsDisabledPrefKey ||
-                    preference.getKey() == mSmsEnabledPrefKey) {
-                mIsSmsPreferenceClicked = true;
+                return true;
+            } if (preference.getKey() == mSmsEnabledPrefKey) {
+                Intent intent = new Intent("android.intent.action.MANAGE_DEFAULT_APP");
+                intent.putExtra("android.intent.extra.ROLE_NAME", RoleManager.ROLE_SMS);
+                startActivity(intent);
+                return true;
             }
             return super.onPreferenceTreeClick(preferenceScreen, preference);
         }
 
         private void updateSmsEnabledPreferences() {
             if (!OsUtil.isAtLeastKLP()) {
-                getPreferenceScreen().removePreference(mSmsDisabledPreference);
                 getPreferenceScreen().removePreference(mSmsEnabledPreference);
             } else {
                 final String defaultSmsAppLabel = getString(R.string.default_sms_app,
                         PhoneUtils.getDefault().getDefaultSmsAppLabel());
-                boolean isSmsEnabledBeforeState;
-                boolean isSmsEnabledCurrentState;
-                if (PhoneUtils.getDefault().isDefaultSmsApp()) {
-                    if (getPreferenceScreen().findPreference(mSmsEnabledPrefKey) == null) {
-                        getPreferenceScreen().addPreference(mSmsEnabledPreference);
-                        isSmsEnabledBeforeState = false;
-                    } else {
-                        isSmsEnabledBeforeState = true;
-                    }
-                    isSmsEnabledCurrentState = true;
-                    getPreferenceScreen().removePreference(mSmsDisabledPreference);
-                    mSmsEnabledPreference.setSummary(defaultSmsAppLabel);
-                } else {
-                    if (getPreferenceScreen().findPreference(mSmsDisabledPrefKey) == null) {
-                        getPreferenceScreen().addPreference(mSmsDisabledPreference);
-                        isSmsEnabledBeforeState = true;
-                    } else {
-                        isSmsEnabledBeforeState = false;
-                    }
-                    isSmsEnabledCurrentState = false;
-                    getPreferenceScreen().removePreference(mSmsEnabledPreference);
-                    mSmsDisabledPreference.setSummary(defaultSmsAppLabel);
-                }
+                boolean isSmsEnabledCurrentState = PhoneUtils.getDefault().isDefaultSmsApp();
+                mSmsEnabledPreference.setSummary(isSmsEnabledCurrentState ? getString(R.string.value_yes) : getString(R.string.value_no));
             }
-            mIsSmsPreferenceClicked = false;
         }
 
         @Override
