diff --git a/res/values/strings.xml b/res/values/strings.xml
index b45c1d3..3f8cbb9 100644
--- a/res/values/strings.xml
+++ b/res/values/strings.xml
@@ -3868,6 +3868,10 @@
     <string name="accessibility_toggle_speak_password_preference_title">Speak passwords</string>
     <!-- Title for the accessibility preference for enabling/disabling large icons for mouse/trackpad pointers. [CHAR LIMIT=35] -->
     <string name="accessibility_toggle_large_pointer_icon_title">Large mouse pointer</string>
+    <!-- Title for the accessibility preference for master mono. [CHAR LIMIT=35] -->
+    <string name="accessibility_toggle_master_mono_title">Mono audio</string>
+    <!-- Summary for the accessibility preference for master mono. [CHAR LIMIT=50] -->
+    <string name="accessibility_toggle_master_mono_summary">Combine channels when playing audio</string>
     <!-- Title for accessibility preference to choose long-press delay i.e. timeout before it is detected. [CHAR LIMIT=35] -->
     <string name="accessibility_long_press_timeout_preference_title">Tap &amp; hold delay</string>
     <!-- Title for the accessibility preference to configure display color inversion. [CHAR LIMIT=NONE] -->
@@ -5823,15 +5827,6 @@
     <!-- Sound: Title for the option managing whether or not to vibrate when ringing. [CHAR LIMIT=30] -->
     <string name="vibrate_when_ringing_title">Also vibrate for calls</string>
 
-    <!-- Sound: Title for the option managing mono audio output. [CHAR LIMIT=30] -->
-    <string name="master_mono_title">Mono playback</string>
-
-    <!-- Sound: Mono audio: Summary for mono audio output when enabled.  [CHAR LIMIT=40] -->
-    <string name="master_mono_on">Always play back audio in mono</string>
-
-    <!-- Sound: Mono audio: Summary for mono audio output when disabled.  [CHAR LIMIT=40] -->
-    <string name="master_mono_off">Always play back audio in mono</string>
-
     <!-- Sound: Title for the other sounds option and associated settings page. [CHAR LIMIT=30] -->
     <string name="other_sound_settings">Other sounds</string>
 
diff --git a/res/xml/accessibility_settings.xml b/res/xml/accessibility_settings.xml
index 32b78c5..11cde5e 100644
--- a/res/xml/accessibility_settings.xml
+++ b/res/xml/accessibility_settings.xml
@@ -76,6 +76,12 @@
                 android:key="toggle_large_pointer_icon"
                 android:title="@string/accessibility_toggle_large_pointer_icon_title" />
 
+        <SwitchPreference
+                android:key="toggle_master_mono"
+                android:title="@string/accessibility_toggle_master_mono_title"
+                android:summary="@string/accessibility_toggle_master_mono_summary"
+                android:persistent="false"/>
+
         <PreferenceScreen
                 android:fragment="com.android.settings.accessibility.ToggleGlobalGesturePreferenceFragment"
                 android:key="enable_global_gesture_preference_screen"
diff --git a/res/xml/sound_settings.xml b/res/xml/sound_settings.xml
index 47b4db1..5e978f6 100644
--- a/res/xml/sound_settings.xml
+++ b/res/xml/sound_settings.xml
@@ -49,12 +49,6 @@
                 android:key="vibrate_when_ringing"
                 android:title="@string/vibrate_when_ringing_title" />
 
-        <!-- Master mono -->
-        <SwitchPreference
-                android:key="master_mono"
-                android:title="@string/master_mono_title"
-                android:summaryOn="@string/master_mono_on"
-                android:summaryOff="@string/master_mono_off" />
 
         <!-- Interruptions -->
         <com.android.settingslib.RestrictedPreference
diff --git a/src/com/android/settings/accessibility/AccessibilitySettings.java b/src/com/android/settings/accessibility/AccessibilitySettings.java
index c918831..ef841d3 100644
--- a/src/com/android/settings/accessibility/AccessibilitySettings.java
+++ b/src/com/android/settings/accessibility/AccessibilitySettings.java
@@ -86,6 +86,8 @@
             "toggle_speak_password_preference";
     private static final String TOGGLE_LARGE_POINTER_ICON =
             "toggle_large_pointer_icon";
+    private static final String TOGGLE_MASTER_MONO =
+            "toggle_master_mono";
     private static final String SELECT_LONG_PRESS_TIMEOUT_PREFERENCE =
             "select_long_press_timeout_preference";
     private static final String ENABLE_ACCESSIBILITY_GESTURE_PREFERENCE_SCREEN =
@@ -182,6 +184,7 @@
     private SwitchPreference mToggleLockScreenRotationPreference;
     private SwitchPreference mToggleSpeakPasswordPreference;
     private SwitchPreference mToggleLargePointerIconPreference;
+    private SwitchPreference mToggleMasterMonoPreference;
     private ListPreference mSelectLongPressTimeoutPreference;
     private Preference mNoServicesMessagePreference;
     private PreferenceScreen mCaptioningPreferenceScreen;
@@ -280,6 +283,9 @@
         } else if (mToggleLargePointerIconPreference == preference) {
             handleToggleLargePointerIconPreferenceClick();
             return true;
+        } else if (mToggleMasterMonoPreference == preference) {
+            handleToggleMasterMonoPreferenceClick();
+            return true;
         } else if (mGlobalGesturePreferenceScreen == preference) {
             handleToggleEnableAccessibilityGesturePreferenceClick();
             return true;
@@ -321,6 +327,11 @@
                 mToggleLargePointerIconPreference.isChecked() ? 1 : 0);
     }
 
+    private void handleToggleMasterMonoPreferenceClick() {
+        Settings.System.putIntForUser(getContentResolver(), Settings.System.MASTER_MONO,
+                mToggleMasterMonoPreference.isChecked() ? 1 : 0, UserHandle.USER_CURRENT);
+    }
+
     private void handleToggleEnableAccessibilityGesturePreferenceClick() {
         Bundle extras = mGlobalGesturePreferenceScreen.getExtras();
         extras.putString(EXTRA_TITLE, getString(
@@ -378,6 +389,10 @@
         mToggleLargePointerIconPreference =
                 (SwitchPreference) findPreference(TOGGLE_LARGE_POINTER_ICON);
 
+        // Master Mono
+        mToggleMasterMonoPreference =
+                (SwitchPreference) findPreference(TOGGLE_MASTER_MONO);
+
         // Long press timeout.
         mSelectLongPressTimeoutPreference =
                 (ListPreference) findPreference(SELECT_LONG_PRESS_TIMEOUT_PREFERENCE);
@@ -571,6 +586,9 @@
         mToggleLargePointerIconPreference.setChecked(Settings.Secure.getInt(getContentResolver(),
                 Settings.Secure.ACCESSIBILITY_LARGE_POINTER_ICON, 0) != 0);
 
+        // Master mono
+        updateMasterMono();
+
         // Long press timeout.
         final int longPressTimeout = Settings.Secure.getInt(getContentResolver(),
                 Settings.Secure.LONG_PRESS_TIMEOUT, mLongPressTimeoutDefault);
@@ -640,6 +658,13 @@
         }
     }
 
+    private void updateMasterMono() {
+        final boolean masterMono = Settings.System.getIntForUser(
+                getContentResolver(), Settings.System.MASTER_MONO,
+                0 /* default */, UserHandle.USER_CURRENT) == 1;
+        mToggleMasterMonoPreference.setChecked(masterMono);
+    }
+
     public static final SearchIndexProvider SEARCH_INDEX_DATA_PROVIDER =
             new BaseSearchIndexProvider() {
         @Override
diff --git a/src/com/android/settings/notification/SoundSettings.java b/src/com/android/settings/notification/SoundSettings.java
index 274ce59..33721d7 100644
--- a/src/com/android/settings/notification/SoundSettings.java
+++ b/src/com/android/settings/notification/SoundSettings.java
@@ -80,7 +80,6 @@
     private static final String KEY_NOTIFICATION_RINGTONE = "notification_ringtone";
     private static final String KEY_ALARM_RINGTONE = "alarm_ringtone";
     private static final String KEY_VIBRATE_WHEN_RINGING = "vibrate_when_ringing";
-    private static final String KEY_MASTER_MONO = "master_mono";
     private static final String KEY_WIFI_DISPLAY = "wifi_display";
     private static final String KEY_ZEN_MODE = "zen_mode";
     private static final String KEY_CELL_BROADCAST_SETTINGS = "cell_broadcast_settings";
@@ -111,7 +110,6 @@
     private Preference mNotificationRingtonePreference;
     private Preference mAlarmRingtonePreference;
     private TwoStatePreference mVibrateWhenRinging;
-    private TwoStatePreference mMasterMono;
     private ComponentName mSuppressor;
     private int mRingerMode = -1;
 
@@ -176,7 +174,6 @@
         }
         initRingtones();
         initVibrateWhenRinging();
-        initMasterMono();
         updateRingerMode();
         updateEffectsSuppressor();
     }
@@ -451,33 +448,6 @@
                 Settings.System.VIBRATE_WHEN_RINGING, 0) != 0);
     }
 
-    // === Master mono ===
-
-    private void initMasterMono() {
-        mMasterMono =
-                (TwoStatePreference) getPreferenceScreen().findPreference(KEY_MASTER_MONO);
-        if (mMasterMono == null) {
-            Log.i(TAG, "Preference not found: " + KEY_MASTER_MONO);
-            return;
-        }
-
-        mMasterMono.setPersistent(false);
-        updateMasterMono();
-        mMasterMono.setOnPreferenceChangeListener(new OnPreferenceChangeListener() {
-            @Override
-            public boolean onPreferenceChange(Preference preference, Object newValue) {
-                final boolean val = (Boolean) newValue;
-                mAudioManager.setMasterMono(val);
-                return true;
-            }
-        });
-    }
-
-    private void updateMasterMono() {
-        if (mMasterMono == null) return;
-        mMasterMono.setChecked(mAudioManager.isMasterMono());
-    }
-
     // === Callbacks ===
 
     private final class SettingsObserver extends ContentObserver {
@@ -512,8 +482,7 @@
         private static final int STOP_SAMPLE = 3;
         private static final int UPDATE_EFFECTS_SUPPRESSOR = 4;
         private static final int UPDATE_RINGER_MODE = 5;
-        private static final int UPDATE_MASTER_MONO = 6;
-        private static final int UPDATE_ALARM_RINGTONE = 7;
+        private static final int UPDATE_ALARM_RINGTONE = 6;
 
         private H() {
             super(Looper.getMainLooper());
@@ -537,9 +506,6 @@
                 case UPDATE_RINGER_MODE:
                     updateRingerMode();
                     break;
-                case UPDATE_MASTER_MONO:
-                    updateMasterMono();
-                    break;
                 case UPDATE_ALARM_RINGTONE:
                     mAlarmRingtonePreference.setSummary((CharSequence) msg.obj);
                     break;
@@ -556,7 +522,6 @@
                 final IntentFilter filter = new IntentFilter();
                 filter.addAction(NotificationManager.ACTION_EFFECTS_SUPPRESSOR_CHANGED);
                 filter.addAction(AudioManager.INTERNAL_RINGER_MODE_CHANGED_ACTION);
-                filter.addAction(AudioManager.MASTER_MONO_CHANGED_ACTION);
                 mContext.registerReceiver(this, filter);
             } else {
                 mContext.unregisterReceiver(this);
@@ -571,8 +536,6 @@
                 mHandler.sendEmptyMessage(H.UPDATE_EFFECTS_SUPPRESSOR);
             } else if (AudioManager.INTERNAL_RINGER_MODE_CHANGED_ACTION.equals(action)) {
                 mHandler.sendEmptyMessage(H.UPDATE_RINGER_MODE);
-            } else if (AudioManager.MASTER_MONO_CHANGED_ACTION.equals(action)) {
-                mHandler.sendEmptyMessage(H.UPDATE_MASTER_MONO);
             }
         }
     }
