diff --git a/res/values/strings.xml b/res/values/strings.xml
index 8ccb8bf..c63ad6e 100644
--- a/res/values/strings.xml
+++ b/res/values/strings.xml
@@ -2012,6 +2012,10 @@
     <string name="use_default_tts_settings_summary">Default settings below override application settings</string>
     <!-- On main TTS Settings screen, section header for default TTS settings -->
     <string name="tts_default_settings_section">Default settings</string>
+    <!-- On main TTS Settings screen, in default settings section, setting default synthesis engine for synthesized voice -->
+    <string name="tts_default_synth_title">Default Engine</string>
+    <!-- On main TTS Settings screen, summary for default synthesis engine for synthesized voice -->
+    <string name="tts_default_synth_summary">Sets the speech synthesis engine to be used for spoken text</string>
     <!-- On main TTS Settings screen, in default settings section, setting default speech rate for synthesized voice -->
     <string name="tts_default_rate_title">Speech rate</string>
     <!-- On main TTS Settings screen, summary for default speech rate for synthesized voice -->
diff --git a/res/xml/tts_settings.xml b/res/xml/tts_settings.xml
index d94d575..6b1a843 100644
--- a/res/xml/tts_settings.xml
+++ b/res/xml/tts_settings.xml
@@ -37,6 +37,11 @@
                     
         <PreferenceCategory
             android:title="@string/tts_default_settings_section">
+            <ListPreference
+                android:key="tts_default_synth"
+                android:title="@string/tts_default_synth_title"
+                android:summary="@string/tts_default_synth_summary"
+                android:persistent="false" />
             
             <ListPreference
                 android:key="tts_default_rate"
diff --git a/src/com/android/settings/TextToSpeechSettings.java b/src/com/android/settings/TextToSpeechSettings.java
index f60d0f2..edc09e6 100644
--- a/src/com/android/settings/TextToSpeechSettings.java
+++ b/src/com/android/settings/TextToSpeechSettings.java
@@ -55,6 +55,7 @@
     private static final String KEY_TTS_DEFAULT_LANG = "tts_default_lang";
     private static final String KEY_TTS_DEFAULT_COUNTRY = "tts_default_country";
     private static final String KEY_TTS_DEFAULT_VARIANT = "tts_default_variant";
+    private static final String KEY_TTS_DEFAULT_SYNTH = "tts_default_synth";
     // TODO move default Locale values to TextToSpeech.Engine
     private static final String DEFAULT_LANG_VAL = "eng";
     private static final String DEFAULT_COUNTRY_VAL = "USA";
@@ -70,6 +71,7 @@
     private CheckBoxPreference mUseDefaultPref = null;
     private ListPreference     mDefaultRatePref = null;
     private ListPreference     mDefaultLocPref = null;
+    private ListPreference     mDefaultSynthPref = null;
     private String             mDefaultLanguage = null;
     private String             mDefaultCountry = null;
     private String             mDefaultLocVariant = null;
@@ -156,7 +158,10 @@
         mUseDefaultPref.setChecked(useDefault == 1);
         mUseDefaultPref.setOnPreferenceChangeListener(this);
 
-        // Default engine
+        // Default synthesis engine
+        mDefaultSynthPref = (ListPreference) findPreference(KEY_TTS_DEFAULT_SYNTH);
+        loadEngines();
+        mDefaultSynthPref.setOnPreferenceChangeListener(this);
         String engine = Settings.Secure.getString(resolver, TTS_DEFAULT_SYNTH);
         if (engine == null) {
             // TODO move FALLBACK_TTS_DEFAULT_SYNTH to TextToSpeech
@@ -297,6 +302,14 @@
             int newIndex = mDefaultLocPref.findIndexOfValue((String)objValue);
             Log.v("Settings", " selected is " + newIndex);
             mDemoStringIndex = newIndex > -1 ? newIndex : 0;
+        } else if (KEY_TTS_DEFAULT_SYNTH.equals(preference.getKey())) {
+            // TODO: Do a data check here
+            mDefaultEng = objValue.toString();
+            Settings.Secure.putString(getContentResolver(), TTS_DEFAULT_SYNTH, mDefaultEng);
+            if (mTts != null) {
+                mTts.setEngineByPackageName(mDefaultEng);
+            }
+            Log.v("Settings", "The default synth is: " + objValue.toString());
         }
 
         return true;
@@ -424,4 +437,23 @@
         Settings.Secure.putString(resolver, TTS_DEFAULT_VARIANT, DEFAULT_VARIANT_VAL);
     }
 
+
+  private void loadEngines() {
+    ListPreference enginesPref = (ListPreference) findPreference(KEY_TTS_DEFAULT_SYNTH);
+
+    Intent intent = new Intent("android.intent.action.START_TTS_ENGINE");
+
+    ResolveInfo[] enginesArray = new ResolveInfo[0];
+    PackageManager pm = getPackageManager();
+    enginesArray = pm.queryIntentActivities(intent, 0).toArray(enginesArray);
+    CharSequence entries[] = new CharSequence[enginesArray.length];
+    CharSequence values[] = new CharSequence[enginesArray.length];
+    for (int i = 0; i < enginesArray.length; i++) {
+      entries[i] = enginesArray[i].loadLabel(pm);
+      values[i] = enginesArray[i].activityInfo.packageName;
+    }
+    enginesPref.setEntries(entries);
+    enginesPref.setEntryValues(values);
+  }
+
 }
