Merge "Patch from SVOX: 1.1.0.2 Engine Release Issues fixed since 1.1.0.0: - closing tags not interpreted in some cases where enclosed text   contains a smaller-then sign - Discontinuities in energy transformation - Lexicon Access: entry with empty phonetic transcription mistaken   as :G2P in seldom cases"
diff --git a/pico/lang/de-DE_gl0_sg.bin b/pico/lang/de-DE_gl0_sg.bin
index 5305b49..1655704 100755
--- a/pico/lang/de-DE_gl0_sg.bin
+++ b/pico/lang/de-DE_gl0_sg.bin
Binary files differ
diff --git a/pico/lang/de-DE_ta.bin b/pico/lang/de-DE_ta.bin
index cd59da7..3cb978a 100755
--- a/pico/lang/de-DE_ta.bin
+++ b/pico/lang/de-DE_ta.bin
Binary files differ
diff --git a/pico/lang/en-US_lh0_sg.bin b/pico/lang/en-US_lh0_sg.bin
index 91487cc..b2dfc39 100755
--- a/pico/lang/en-US_lh0_sg.bin
+++ b/pico/lang/en-US_lh0_sg.bin
Binary files differ
diff --git a/pico/lang/en-US_ta.bin b/pico/lang/en-US_ta.bin
index 95cb042..943f57e 100755
--- a/pico/lang/en-US_ta.bin
+++ b/pico/lang/en-US_ta.bin
Binary files differ
diff --git a/pico/lang/es-ES_ta.bin b/pico/lang/es-ES_ta.bin
index dfa3c55..3442eed 100755
--- a/pico/lang/es-ES_ta.bin
+++ b/pico/lang/es-ES_ta.bin
Binary files differ
diff --git a/pico/lang/es-ES_zl0_sg.bin b/pico/lang/es-ES_zl0_sg.bin
index f29f6b1..c70257c 100755
--- a/pico/lang/es-ES_zl0_sg.bin
+++ b/pico/lang/es-ES_zl0_sg.bin
Binary files differ
diff --git a/pico/lang/fr-FR_nk0_sg.bin b/pico/lang/fr-FR_nk0_sg.bin
index bf5467d..9a11e2b 100755
--- a/pico/lang/fr-FR_nk0_sg.bin
+++ b/pico/lang/fr-FR_nk0_sg.bin
Binary files differ
diff --git a/pico/lang/fr-FR_ta.bin b/pico/lang/fr-FR_ta.bin
index 117dbe3..6d4d72e 100755
--- a/pico/lang/fr-FR_ta.bin
+++ b/pico/lang/fr-FR_ta.bin
Binary files differ
diff --git a/pico/src/com/svox/pico/CheckVoiceData.java b/pico/src/com/svox/pico/CheckVoiceData.java
index 036be3b..abd85ab 100755
--- a/pico/src/com/svox/pico/CheckVoiceData.java
+++ b/pico/src/com/svox/pico/CheckVoiceData.java
@@ -21,8 +21,12 @@
 import android.app.Activity;
 import android.content.Intent;
 import android.os.Bundle;
+import android.os.Environment;
 import android.speech.tts.TextToSpeech;
 
+import java.util.ArrayList;
+import java.util.HashMap;
+
 /*
  * Checks if the voice data for the SVOX Pico Engine is present on the
  * sd card.
@@ -31,7 +35,8 @@
 
     // The following constants are the same path constants as the ones defined
     // in external/svox/pico/tts/com_svox_picottsengine.cpp
-    private final static String PICO_LINGWARE_PATH = "/sdcard/svox/";
+    private final static String PICO_LINGWARE_PATH =
+            Environment.getExternalStorageDirectory() + "/svox/";
     private final static String PICO_SYSTEM_LINGWARE_PATH = "/system/tts/lang_pico/";
 
     private final static String[] dataFiles = {
@@ -45,29 +50,75 @@
         "spa-ESP", "spa-ESP", "fra-FRA", "fra-FRA", "ita-ITA", "ita-ITA"
     };
 
+    private final static String[] supportedLanguages = {
+        "deu-DEU", "eng-GBR", "eng-USA", "spa-ESP", "fra-FRA", "ita-ITA"
+    };
+
     @Override
     protected void onCreate(Bundle savedInstanceState) {
         super.onCreate(savedInstanceState);
 
         int result = TextToSpeech.Engine.CHECK_VOICE_DATA_PASS;
+        boolean foundMatch = false;
+
+        ArrayList<String> available = new ArrayList<String>();
+        ArrayList<String> unavailable = new ArrayList<String>();
+
+        HashMap<String, Boolean> languageCountry = new HashMap<String, Boolean>();
+
+        Bundle bundle = getIntent().getExtras();
+        if (bundle != null){
+            // TODO (clchen): Add this intent to TextToSpeech.Engine
+            ArrayList<String> langCountryVars = bundle.getStringArrayList(
+                    "TextToSpeech.Engine.EXTRA_CHECK_VOICE_DATA_FOR");
+            if (langCountryVars != null){
+                for (int i = 0; i < langCountryVars.size(); i++){
+                    if (langCountryVars.get(i).length() > 0){
+                        languageCountry.put(langCountryVars.get(i), true);
+                    }
+                }
+            }
+        }
 
         // Check for files
-        for (int i = 0; i < dataFiles.length; i++) {
-            File tempFile = new File(PICO_LINGWARE_PATH + dataFiles[i]);
-            File tempFileSys = new File(PICO_SYSTEM_LINGWARE_PATH + dataFiles[i]);
-            if ((!tempFile.exists()) && (!tempFileSys.exists())) {
-                result = TextToSpeech.Engine.CHECK_VOICE_DATA_MISSING_DATA;
+        for (int i = 0; i < supportedLanguages.length; i++){
+            if ((languageCountry.size() < 1) ||
+                (languageCountry.containsKey(supportedLanguages[i]))){
+                if (!fileExists(dataFiles[2 * i]) ||
+                    !fileExists(dataFiles[(2 * i) + 1])){
+                    result = TextToSpeech.Engine.CHECK_VOICE_DATA_MISSING_DATA;
+                    unavailable.add(supportedLanguages[i]);
+                } else {
+                    available.add(supportedLanguages[i]);
+                    foundMatch = true;
+                }
             }
         }
 
+        if ((languageCountry.size() > 0) && !foundMatch){
+            result = TextToSpeech.Engine.CHECK_VOICE_DATA_FAIL;
+        }
+
         // Put the root directory for the sd card data + the data filenames
         Intent returnData = new Intent();
         returnData.putExtra(TextToSpeech.Engine.EXTRA_VOICE_DATA_ROOT_DIRECTORY, PICO_LINGWARE_PATH);
         returnData.putExtra(TextToSpeech.Engine.EXTRA_VOICE_DATA_FILES, dataFiles);
         returnData.putExtra(TextToSpeech.Engine.EXTRA_VOICE_DATA_FILES_INFO, dataFilesInfo);
 
+        // TODO (clchen): Add these intents to TextToSpeech.Engine
+        returnData.putStringArrayListExtra("TextToSpeech.Engine.EXTRA_AVAILABLE_VOICES", available);
+        returnData.putStringArrayListExtra("TextToSpeech.Engine.EXTRA_UNAVAILABLE_VOICES", unavailable);
         setResult(result, returnData);
         finish();
     }
 
+    private boolean fileExists(String filename){
+        File tempFile = new File(PICO_LINGWARE_PATH + filename);
+        File tempFileSys = new File(PICO_SYSTEM_LINGWARE_PATH + filename);
+        if ((!tempFile.exists()) && (!tempFileSys.exists())) {
+            return false;
+        }
+        return true;
+    }
+
 }
diff --git a/pico/tests/data/tests_regressions_es-ES.txt b/pico/tests/data/tests_regressions_es-ES.txt
new file mode 100644
index 0000000..f44d8dc
--- /dev/null
+++ b/pico/tests/data/tests_regressions_es-ES.txt
@@ -0,0 +1,20 @@
+
+# BEGIN_TEST
+
+#------------------------------
+# Spanish (es-ES)
+#
+# Notes: These tests cover known issues and previous bugs that have been fixed. Those
+#        latter are to be used for regression testing
+#        When a test is marked as "BUG", if possible, the tester will capture an approximate
+#        transcription of what was heard inside [ ].
+
+# TEST (old bug: burst of noise at end of sentence)
+<speak xml:lang="es-ES">El sintetizador de voz</speak>
+
+# END_TEST
+
+
+# ---------
+
+
diff --git a/pico/tests/data/xsampa_pico_man_de-DE.txt b/pico/tests/data/xsampa_pico_man_de-DE.txt
index 4e9690b..1182394 100644
--- a/pico/tests/data/xsampa_pico_man_de-DE.txt
+++ b/pico/tests/data/xsampa_pico_man_de-DE.txt
@@ -71,8 +71,8 @@
 # TEST s Masse "ma.s@
 <speak xml:lang="de-DE"> Ich teste <phoneme alphabet="xsampa" ph="&#34;ma.s@"/>.</speak>
 
-# BUG v Wahl "va:l says [val], [a] should be long
-<speak xml:lang="de-DE"> Ich teste <phoneme alphabet="xsampa" ph="&#34;va:l"/>.</speak>
+# TEST v Wahl "va:l says [val]
+<speak xml:lang="de-DE"> Ich teste <phoneme alphabet="xsampa" ph="&#34;va:l"/>. Ein Wahl.</speak>
 
 # TEST x Bach "bax
 <speak xml:lang="de-DE"> Ich teste <phoneme alphabet="xsampa" ph="&#34;bax"/>.</speak>
diff --git a/pico/tests/data/xsampa_pico_man_en-GB.txt b/pico/tests/data/xsampa_pico_man_en-GB.txt
index fbee754..b65af3a 100644
--- a/pico/tests/data/xsampa_pico_man_en-GB.txt
+++ b/pico/tests/data/xsampa_pico_man_en-GB.txt
@@ -197,7 +197,7 @@
 <speak xml:lang="en-GB"> Testing <phoneme alphabet="xsampa" ph="&#34;mE.Z@`"/>.</speak>
 <speak xml:lang="en-GB"> Testing <phoneme alphabet="xsampa" ph="&#34;mE.Z@"/>.</speak>
 
-# BUG A: (US) long "lA:N says [lang]
+# TEST A: (US) long "lA:N
 <speak xml:lang="en-GB"> Testing <phoneme alphabet="xsampa" ph="&#34;lA:N"/>.</speak>
 
 # TEST A:r\ (US) A:(GB) stars "stA:r\z
@@ -247,7 +247,7 @@
 # TEST j yacht "jA:t
 <speak xml:lang="en-GB"> Testing <phoneme alphabet="xsampa" ph="&#34;jA:t"/>.</speak>
 
-# BUG l long "lA:N
+# TEST l long "lA:N
 <speak xml:lang="en-GB"> Testing <phoneme alphabet="xsampa" ph="&#34;lA:N"/>.</speak>
 
 # TEST w wasp "wA:sp
diff --git a/pico/tests/data/xsampa_pico_man_en-US.txt b/pico/tests/data/xsampa_pico_man_en-US.txt
index 74ed371..6f477a2 100644
--- a/pico/tests/data/xsampa_pico_man_en-US.txt
+++ b/pico/tests/data/xsampa_pico_man_en-US.txt
@@ -87,8 +87,8 @@
 # TEST j yacht "jA:t
 <speak xml:lang="en-US"> Testing <phoneme alphabet="xsampa" ph="&#34;jA:t"/>.</speak>
 
-# BUG l long "lA:N  says [lang]
-<speak xml:lang="en-US"> Testing <phoneme alphabet="xsampa" ph="&#34;lA:N"/>.</speak>
+# TEST l long "lA:N
+<speak xml:lang="en-US"> Testing <phoneme alphabet="xsampa" ph="&#34;lA:N"/>. And long.</speak>
 
 # TEST l= little "lI.tl=
 <speak xml:lang="en-US"> Testing <phoneme alphabet="xsampa" ph="&#34;lI.tl= "/>.</speak>
diff --git a/pico/tests/data/xsampa_pico_man_fr-FR.txt b/pico/tests/data/xsampa_pico_man_fr-FR.txt
index 6cf6d1a..f6485e3 100644
--- a/pico/tests/data/xsampa_pico_man_fr-FR.txt
+++ b/pico/tests/data/xsampa_pico_man_fr-FR.txt
@@ -75,20 +75,20 @@
 
 # --------- Approximants
 
-# BUG H juin "ZHE~  says [j'lin]
-<speak xml:lang="fr-FR"> Je teste <phoneme alphabet="xsampa" ph="&#34;ZHE~"/>.</speak>
+# TEST H juin "ZHE~
+<speak xml:lang="fr-FR"> Le mois de <phoneme alphabet="xsampa" ph="&#34;ZHE~"/>, et de juin.</speak>
 
 # TEST j pierre "pjER
 <speak xml:lang="fr-FR"> Je teste <phoneme alphabet="xsampa" ph="&#34;pjER"/>.</speak>
 
-# BUG l long "lO~ says [ion]
-<speak xml:lang="fr-FR"> Je teste <phoneme alphabet="xsampa" ph="&#34;lO~"/>.</speak>
+# TEST l long "lO~
+<speak xml:lang="fr-FR"> Je teste <phoneme alphabet="xsampa" ph="&#34;lO~"/>, long, et longtemps.</speak>
 
-# TEST l long "lO~ works only in a sentence (here also used to say "longtemps")
+# TEST l long "lO~ used here in a sentence (to say "longtemps")
 <speak xml:lang="fr-FR"> Je teste <phoneme alphabet="xsampa" ph="&#34;lO~"/> et <phoneme alphabet="xsampa" ph="&#34;lO~tA~"/>.</speak>
 
-# BUG w coin "kwE~ says [keu'oin]
-<speak xml:lang="fr-FR"> Je teste <phoneme alphabet="xsampa" ph="&#34;kwE~"/>.</speak>
+# TEST w coin "kwE~
+<speak xml:lang="fr-FR"> Je teste <phoneme alphabet="xsampa" ph="&#34;kwE~"/>, et coin.</speak>
 
 
 # ---------  Vowels
@@ -103,7 +103,7 @@
 <speak xml:lang="fr-FR"> Je teste <phoneme alphabet="xsampa" ph="&#34;Zys.t@.mA~"/>.</speak>
 
 # BUG E seize "sEz says [seisse]
-<speak xml:lang="fr-FR"> Je teste <phoneme alphabet="xsampa" ph="&#34;sEz"/>.</speak>
+<speak xml:lang="fr-FR"> Je teste <phoneme alphabet="xsampa" ph="&#34;sEz"/>, et seize, et césar.</speak>
 
 # TEST O comme "kOm
 <speak xml:lang="fr-FR"> Je teste <phoneme alphabet="xsampa" ph="&#34;kOm"/>.</speak>
diff --git a/pico/tts/com_svox_picottsengine.cpp b/pico/tts/com_svox_picottsengine.cpp
index 6fb0ac7..450ebcb 100644
--- a/pico/tts/com_svox_picottsengine.cpp
+++ b/pico/tts/com_svox_picottsengine.cpp
@@ -730,7 +730,7 @@
         pos=tokstart+tlen_2;
     }
     //}
-    data[outpos] = 0;
+    data[outpos -1] = 0;
     return data;
 }/*doCamelCase*/
 
@@ -1505,13 +1505,13 @@
         }
     } else {
         /* camelCase pre-processing */
-        //expanded_text = doCamelCase(text);
+        expanded_text = doCamelCase(text);
         /* Add property tags to the string - if any.    */
-        local_text = (pico_Char *) doAddProperties( text );//expanded_text );
-        /*if (expanded_text) {
+        local_text = (pico_Char *) doAddProperties( expanded_text );
+        if (expanded_text) {
             LOGV("freeing string for %s", expanded_text);
             free( expanded_text );
-        }*/
+        }
         if (!local_text) {
             LOGE("Failed to allocate memory for text string");
             return TTS_FAILURE;