diff --git a/src/com/android/settings/TextToSpeechSettings.java b/src/com/android/settings/TextToSpeechSettings.java
index 84b14a1..04287be 100644
--- a/src/com/android/settings/TextToSpeechSettings.java
+++ b/src/com/android/settings/TextToSpeechSettings.java
@@ -408,7 +408,17 @@
                         (ListPreference) findPreference("tts_default_lang");
                 CharSequence[] entries = new CharSequence[available.size()];
                 CharSequence[] entryValues = new CharSequence[available.size()];
-                for (int i=0; i<available.size(); i++){
+                int selectedLanguageIndex = -1;
+                String selectedLanguagePref = mDefaultLanguage;
+                if (mDefaultCountry.length() > 0) {
+                    selectedLanguagePref = selectedLanguagePref + LOCALE_DELIMITER +
+                            mDefaultCountry;
+                }
+                if (mDefaultLocVariant.length() > 0) {
+                    selectedLanguagePref = selectedLanguagePref + LOCALE_DELIMITER +
+                            mDefaultLocVariant;
+                }
+                for (int i = 0; i < available.size(); i++){
                     String[] langCountryVariant = available.get(i).split("-");
                     Locale loc = null;
                     if (langCountryVariant.length == 1){
@@ -422,10 +432,16 @@
                     if (loc != null){
                         entries[i] = loc.getDisplayName();
                         entryValues[i] = available.get(i);
+                        if (entryValues[i].equals(selectedLanguagePref)){
+                            selectedLanguageIndex = i;
+                        }
                     }
                 }
                 ttsLanguagePref.setEntries(entries);
                 ttsLanguagePref.setEntryValues(entryValues);
+                if (selectedLanguageIndex > -1) {
+                    ttsLanguagePref.setValueIndex(selectedLanguageIndex);
+                }
                 mEnableDemo = true;
                 // Make sure that the default language can be used.
                 int languageResult = mTts.setLanguage(
