diff --git a/src/com/android/settings/tts/TextToSpeechSettings.java b/src/com/android/settings/tts/TextToSpeechSettings.java
index 52ee4fd..0ff7f4f 100644
--- a/src/com/android/settings/tts/TextToSpeechSettings.java
+++ b/src/com/android/settings/tts/TextToSpeechSettings.java
@@ -104,7 +104,17 @@
     private TtsEngines mEnginesHelper = null;
 
     private String mSampleText = "";
+
+    /**
+     * Default locale used by selected TTS engine, null if not connected to any engine.
+     */
     private Locale mCurrentDefaultLocale;
+
+    /**
+     * List of available locals of selected TTS engine, as returned by
+     * {@link TextToSpeech.Engine#ACTION_CHECK_TTS_DATA} activity. If empty, then activity
+     * was not yet called.
+     */
     private List<String> mAvailableStrLocals;
 
     /**
@@ -263,7 +273,9 @@
     }
 
     private boolean evaluateDefaultLocale() {
-        if (mCurrentDefaultLocale == null) {
+        // Check if we are connected to the engine, and CHECK_VOICE_DATA returned list
+        // of available languages.
+        if (mCurrentDefaultLocale == null || mAvailableStrLocals == null) {
             return false;
         }
         int defaultAvailable = mTts.setLanguage(mCurrentDefaultLocale);
@@ -277,18 +289,17 @@
         if (!TextUtils.isEmpty(mCurrentDefaultLocale.getVariant())) {
             defaultLocaleStr += "-" + mCurrentDefaultLocale.getVariant();
         }
-        if (mAvailableStrLocals != null) {
-            for (String loc : mAvailableStrLocals) {
-                if (loc.equalsIgnoreCase(defaultLocaleStr)) {
-                    notInAvailableLangauges = false;
-                    break;
-                }
+
+        for (String loc : mAvailableStrLocals) {
+            if (loc.equalsIgnoreCase(defaultLocaleStr)) {
+              notInAvailableLangauges = false;
+              break;
             }
         }
 
         if (defaultAvailable == TextToSpeech.LANG_NOT_SUPPORTED ||
                 defaultAvailable == TextToSpeech.LANG_MISSING_DATA ||
-                mAvailableStrLocals == null || notInAvailableLangauges) {
+                notInAvailableLangauges) {
             if (DBG) Log.d(TAG, "Default locale for this TTS engine is not supported.");
             updateEngineStatus(R.string.tts_status_not_supported);
             updateWidgetState(false);
@@ -557,8 +568,15 @@
         Settings.Secure.putString(getContentResolver(), TTS_DEFAULT_SYNTH, engine);
 
         mAvailableStrLocals = data.getStringArrayListExtra(
-                TextToSpeech.Engine.EXTRA_AVAILABLE_VOICES);
-        evaluateDefaultLocale();
+            TextToSpeech.Engine.EXTRA_AVAILABLE_VOICES);
+        if (mAvailableStrLocals == null) {
+            Log.e(TAG, "Voice data check complete, but no available voices found");
+            // Set mAvailableStrLocals to empty list
+            mAvailableStrLocals = new ArrayList<String>();
+        }
+        if (evaluateDefaultLocale()) {
+            getSampleText();
+        }
 
         final int engineCount = mEnginePreferenceCategory.getPreferenceCount();
         for (int i = 0; i < engineCount; ++i) {
