diff --git a/res/xml/tts_settings.xml b/res/xml/tts_settings.xml
index 3e5e097..dbdf469 100644
--- a/res/xml/tts_settings.xml
+++ b/res/xml/tts_settings.xml
@@ -24,13 +24,16 @@
 
     <PreferenceCategory android:key="tts_general_section"
          android:title="@string/tts_general_section_title">
-        <ListPreference
+        <com.android.settings.SeekBarPreference
             android:key="tts_default_rate"
             android:title="@string/tts_default_rate_title"
             android:summary="@string/tts_default_rate_summary"
             android:persistent="false"
-            android:entries="@array/tts_rate_entries"
-            android:entryValues="@array/tts_rate_values" />
+            android:defaultValue="50"
+            android:max="400" />
+        <SwitchPreference
+            android:key="tts_default_higher_speech_rate_enabled"
+            android:title="Higher speech rate" />
     </PreferenceCategory>
 
     <Preference android:key="tts_play_example"
diff --git a/src/com/android/settings/tts/TextToSpeechSettings.java b/src/com/android/settings/tts/TextToSpeechSettings.java
index 2d30ecf..be10dd3 100644
--- a/src/com/android/settings/tts/TextToSpeechSettings.java
+++ b/src/com/android/settings/tts/TextToSpeechSettings.java
@@ -26,7 +26,7 @@
 import android.speech.tts.TextToSpeech.EngineInfo;
 import android.speech.tts.TtsEngines;
 import android.speech.tts.UtteranceProgressListener;
-import android.support.v7.preference.ListPreference;
+import android.support.v14.preference.SwitchPreference;
 import android.support.v7.preference.Preference;
 import android.support.v7.preference.PreferenceCategory;
 import android.text.TextUtils;
@@ -35,6 +35,7 @@
 
 import com.android.internal.logging.MetricsProto.MetricsEvent;
 import com.android.settings.R;
+import com.android.settings.SeekBarPreference;
 import com.android.settings.SettingsActivity;
 import com.android.settings.SettingsPreferenceFragment;
 import com.android.settings.tts.TtsEnginePreference.RadioButtonGroupState;
@@ -49,6 +50,7 @@
 
 import static android.provider.Settings.Secure.TTS_DEFAULT_RATE;
 import static android.provider.Settings.Secure.TTS_DEFAULT_SYNTH;
+import static android.provider.Settings.Secure.TTS_DEFAULT_HIGHER_SPEECH_RATE_ENABLED;
 
 public class TextToSpeechSettings extends SettingsPreferenceFragment implements
         Preference.OnPreferenceChangeListener, Preference.OnPreferenceClickListener,
@@ -63,6 +65,10 @@
     /** Preference key for the TTS rate selection dialog. */
     private static final String KEY_DEFAULT_RATE = "tts_default_rate";
 
+    /** Preference key for the TTS advanced speech rate switch. */
+    private static final String KEY_HIGHER_RATE_SWITCH =
+        "tts_default_higher_speech_rate_enabled";
+
     /** Preference key for the TTS status field. */
     private static final String KEY_STATUS = "tts_status";
 
@@ -78,14 +84,26 @@
     private static final int GET_SAMPLE_TEXT = 1983;
     private static final int VOICE_DATA_INTEGRITY_CHECK = 1977;
 
+    /**
+     * Maximum speech rate values.
+     */
+    private static final int MAX_SPEECH_RATE = 400;
+    private static final int MAX_HIGHER_SPEECH_RATE = 600;
+
     private PreferenceCategory mEnginePreferenceCategory;
-    private ListPreference mDefaultRatePref;
+    private SeekBarPreference mDefaultRatePref;
+    private SwitchPreference mHigherRateSwitchPref;
     private Preference mPlayExample;
     private Preference mEngineStatus;
 
     private int mDefaultRate = TextToSpeech.Engine.DEFAULT_RATE;
 
     /**
+     * Whether higher speech rate is enabled.
+     */
+    private boolean mHigherRateSwitch = false;
+
+    /**
      * The currently selected engine.
      */
     private String mCurrentEngine;
@@ -161,7 +179,8 @@
 
         mEnginePreferenceCategory = (PreferenceCategory) findPreference(
                 KEY_ENGINE_PREFERENCE_SECTION);
-        mDefaultRatePref = (ListPreference) findPreference(KEY_DEFAULT_RATE);
+        mDefaultRatePref = (SeekBarPreference) findPreference(KEY_DEFAULT_RATE);
+        mHigherRateSwitchPref = (SwitchPreference) findPreference(KEY_HIGHER_RATE_SWITCH);
 
         mEngineStatus = findPreference(KEY_STATUS);
         updateEngineStatus(R.string.tts_status_checking);
@@ -223,13 +242,25 @@
         // Set up the default rate.
         try {
             mDefaultRate = android.provider.Settings.Secure.getInt(resolver, TTS_DEFAULT_RATE);
+            mHigherRateSwitch = android.provider.Settings.Secure.getInt(resolver,
+                    TTS_DEFAULT_HIGHER_SPEECH_RATE_ENABLED) == 1;
         } catch (SettingNotFoundException e) {
             // Default rate setting not found, initialize it
             mDefaultRate = TextToSpeech.Engine.DEFAULT_RATE;
+            mHigherRateSwitch = false;
         }
-        mDefaultRatePref.setValue(String.valueOf(mDefaultRate));
+        mDefaultRatePref.setProgress(mDefaultRate);
         mDefaultRatePref.setOnPreferenceChangeListener(this);
 
+        mHigherRateSwitchPref.setChecked(mHigherRateSwitch);
+        mHigherRateSwitchPref.setOnPreferenceChangeListener(this);
+
+        if (mHigherRateSwitch) {
+            mDefaultRatePref.setMax(MAX_HIGHER_SPEECH_RATE);
+        } else {
+            mDefaultRatePref.setMax(MAX_SPEECH_RATE);
+        }
+
         mCurrentEngine = mTts.getCurrentEngine();
 
         SettingsActivity activity = null;
@@ -447,7 +478,7 @@
     public boolean onPreferenceChange(Preference preference, Object objValue) {
         if (KEY_DEFAULT_RATE.equals(preference.getKey())) {
             // Default rate
-            mDefaultRate = Integer.parseInt((String) objValue);
+            mDefaultRate = ((Integer) objValue).intValue();
             try {
                 android.provider.Settings.Secure.putInt(getContentResolver(),
                         TTS_DEFAULT_RATE, mDefaultRate);
@@ -458,8 +489,21 @@
             } catch (NumberFormatException e) {
                 Log.e(TAG, "could not persist default TTS rate setting", e);
             }
+        } else if (KEY_HIGHER_RATE_SWITCH.equals(preference.getKey())) {
+            // Adjust range of speech rate depending on switch setting.
+            mHigherRateSwitch = ((Boolean) objValue).booleanValue();
+            try {
+              android.provider.Settings.Secure.putInt(getContentResolver(),
+                  TTS_DEFAULT_HIGHER_SPEECH_RATE_ENABLED, mHigherRateSwitch ? 1 : 0);
+              if (mHigherRateSwitch) {
+                mDefaultRatePref.setMax(MAX_HIGHER_SPEECH_RATE);
+              } else {
+                mDefaultRatePref.setMax(MAX_SPEECH_RATE);
+              }
+            } catch (NumberFormatException e) {
+              Log.e(TAG, "could not persist default higher speech rate setting", e);
+            }
         }
-
         return true;
     }
 
