eclair snapshot
diff --git a/pico/lang/en-US_lh0_sg.bin b/pico/lang/en-US_lh0_sg.bin
index 69cd99b..18e4b7e 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 cf02cdc..08c184c 100755
--- a/pico/lang/en-US_ta.bin
+++ b/pico/lang/en-US_ta.bin
Binary files differ
diff --git a/pico/lib/picoacph.c b/pico/lib/picoacph.c
index 98feb6e..c06e860 100644
--- a/pico/lib/picoacph.c
+++ b/pico/lib/picoacph.c
@@ -157,7 +157,7 @@
 } acph_subobj_t;
 
 
-static pico_status_t acphInitialize(register picodata_ProcessingUnit this) {
+static pico_status_t acphInitialize(register picodata_ProcessingUnit this, picoos_int32 r_mode) {
     acph_subobj_t * acph;
     picoos_uint16 i;
 
@@ -193,6 +193,11 @@
         acph->cbuf[i] = 0;
     }
 
+    if (r_mode == PICO_RESET_SOFT) {
+        /*following initializations needed only at startup or after a full reset*/
+        return PICO_OK;
+    }
+
     /* kb tabphones */
     acph->tabphones =
         picoktab_getPhones(this->voice->kbArray[PICOKNOW_KBID_TAB_PHONES]);
@@ -310,7 +315,7 @@
         return NULL;
     }
 
-    acphInitialize(this);
+    acphInitialize(this, PICO_RESET_FULL);
     return this;
 }
 
diff --git a/pico/lib/picoapi.c b/pico/lib/picoapi.c
index c4ef8bf..affd780 100644
--- a/pico/lib/picoapi.c
+++ b/pico/lib/picoapi.c
@@ -660,13 +660,15 @@
 /**
  * pico_resetEngine : Resets the engine
  * @param    engine : pointer to a Pico engine handle
+ * @param    r_mode : reset mode
  * @return  PICO_OK : successful
  * @return     PICO_ERR_INVALID_HANDLE, PICO_ERR_NULLPTR_ACCESS : errors
  * @callgraph
  * @callergraph
 */
 PICO_FUNC pico_resetEngine(
-        pico_Engine engine)
+        pico_Engine engine,
+        pico_Status r_mode)
 {
     pico_Status status = PICO_OK;
 
@@ -674,7 +676,11 @@
         status = PICO_ERR_INVALID_HANDLE;
     } else {
         picoctrl_engResetExceptionManager((picoctrl_Engine) engine);
-        status = picoctrl_engReset((picoctrl_Engine) engine);
+
+        if (r_mode<PICO_RESET_FULL) r_mode = PICO_RESET_FULL;
+        if (r_mode>PICO_RESET_SOFT) r_mode = PICO_RESET_FULL;
+
+        status = picoctrl_engReset((picoctrl_Engine) engine, (picoos_int32)r_mode);
     }
 
     return status;
diff --git a/pico/lib/picoapi.h b/pico/lib/picoapi.h
index 0dad702..8a5725b 100644
--- a/pico/lib/picoapi.h
+++ b/pico/lib/picoapi.h
@@ -422,8 +422,9 @@
    particular text input and signal data output buffers.
 */
 PICO_FUNC pico_resetEngine(
-        pico_Engine engine
-        );
+        pico_Engine engine,
+        pico_Status r_mode
+);
 
 
 /* Engine status and error/warning message retrieval ******************/
diff --git a/pico/lib/picocep.c b/pico/lib/picocep.c
index 2510c13..bb80c3d 100644
--- a/pico/lib/picocep.c
+++ b/pico/lib/picocep.c
@@ -285,7 +285,7 @@
  * @callgraph
  * @callergraph
  */
-static pico_status_t cepInitialize(register picodata_ProcessingUnit this)
+static pico_status_t cepInitialize(register picodata_ProcessingUnit this, picoos_int32 r_mode)
 {
     /*pico_status_t nRes;*/
     cep_subobj_t * cep;
@@ -328,35 +328,37 @@
      ------------------------------------------------------------------*/
     cep->activeEndPos = PICOCEP_MAXWINLEN;
 
-    /* kb pdflfz */
-    cep->pdflfz = picokpdf_getPdfMUL(
-            this->voice->kbArray[PICOKNOW_KBID_PDF_LFZ]);
+    if (r_mode == PICO_RESET_FULL) {
+        /* kb pdflfz */
+        cep->pdflfz = picokpdf_getPdfMUL(
+                this->voice->kbArray[PICOKNOW_KBID_PDF_LFZ]);
 
-    /* kb pdfmgc */
-    cep->pdfmgc = picokpdf_getPdfMUL(
-            this->voice->kbArray[PICOKNOW_KBID_PDF_MGC]);
+        /* kb pdfmgc */
+        cep->pdfmgc = picokpdf_getPdfMUL(
+                this->voice->kbArray[PICOKNOW_KBID_PDF_MGC]);
 
-    /* kb tab phones */
-    /* cep->phones =
-     picoktab_getPhones(this->voice->kbArray[PICOKNOW_KBID_TAB_PHONES]); */
+        /* kb tab phones */
+        /* cep->phones =
+         picoktab_getPhones(this->voice->kbArray[PICOKNOW_KBID_TAB_PHONES]); */
 
-    /*---------------------- other working variables ---------------------------*/
-    /* define the (constant) FRAME_PAR item header */
-    cep->framehead.type = PICODATA_ITEM_FRAME_PAR;
-    cep->framehead.info1 = PICOCEP_OUT_DATA_FORMAT;
-    cep->framehead.info2 = cep->pdfmgc->ceporder;
-    cep->framehead.len = sizeof(picoos_uint16) + (cep->framehead.info2 + 4)
-            * sizeof(picoos_uint16);
+        /*---------------------- other working variables ---------------------------*/
+        /* define the (constant) FRAME_PAR item header */
+        cep->framehead.type = PICODATA_ITEM_FRAME_PAR;
+        cep->framehead.info1 = PICOCEP_OUT_DATA_FORMAT;
+        cep->framehead.info2 = cep->pdfmgc->ceporder;
+        cep->framehead.len = sizeof(picoos_uint16) + (cep->framehead.info2 + 4)
+                * sizeof(picoos_uint16);
+        cep->scmeanpowLFZ = cep->pdflfz->bigpow - cep->pdflfz->meanpow;
+        cep->scmeanpowMGC = cep->pdfmgc->bigpow - cep->pdfmgc->meanpow;
 
+        cep->scmeanLFZ = (1 << (picoos_uint32) cep->scmeanpowLFZ);
+
+        cep->scmeanMGC = (1 << (picoos_uint32) cep->scmeanpowMGC);
+
+    }
     /* constants used in makeWUWandWUm */
     initSmoothing(cep);
 
-    cep->scmeanpowLFZ = cep->pdflfz->bigpow - cep->pdflfz->meanpow;
-    cep->scmeanpowMGC = cep->pdfmgc->bigpow - cep->pdfmgc->meanpow;
-
-    cep->scmeanLFZ = (1 << (picoos_uint32) cep->scmeanpowLFZ);
-
-    cep->scmeanMGC = (1 << (picoos_uint32) cep->scmeanpowMGC);
 
     return PICO_OK;
 }/*cepInitialize*/
@@ -461,7 +463,7 @@
         picoos_deallocate(mm, (void*) &this);
         return NULL;
     }
-    cepInitialize(this);
+    cepInitialize(this, PICO_RESET_FULL);
 
     return this;
 }/*picocep_newCepUnit*/
diff --git a/pico/lib/picoctrl.c b/pico/lib/picoctrl.c
index 5af70e3..25550f2 100644
--- a/pico/lib/picoctrl.c
+++ b/pico/lib/picoctrl.c
@@ -90,7 +90,7 @@
  * @callgraph
  * @callergraph
  */
-static pico_status_t ctrlInitialize(register picodata_ProcessingUnit this) {
+static pico_status_t ctrlInitialize(register picodata_ProcessingUnit this, picoos_int32 r_mode) {
     register ctrl_subobj_t * ctrl;
     pico_status_t status= PICO_OK;
     picoos_int8 i;
@@ -104,7 +104,7 @@
     status = PICO_OK;
     for (i = 0; i < ctrl->numProcUnits; i++) {
         if (PICO_OK == status) {
-            status = ctrl->procUnit[i]->initialize(ctrl->procUnit[i]);
+            status = ctrl->procUnit[i]->initialize(ctrl->procUnit[i], r_mode);
             PICODBG_DEBUG(("(re-)initializing procUnit[%i] returned status %i",i, status));
         }
         if (PICO_OK == status) {
@@ -521,7 +521,7 @@
  * @callgraph
  * @callergraph
  */
-pico_status_t picoctrl_engReset(picoctrl_Engine this)
+pico_status_t picoctrl_engReset(picoctrl_Engine this, picoos_int32 r_mode)
 {
     pico_status_t status;
 
@@ -532,7 +532,7 @@
 
     status = this->control->terminate(this->control);
     if (PICO_OK == status) {
-        status = this->control->initialize(this->control);
+        status = this->control->initialize(this->control, r_mode);
     }
     if (PICO_OK == status) {
         status = picodata_cbReset(this->cbIn);
diff --git a/pico/lib/picoctrl.h b/pico/lib/picoctrl.h
index 1dfea54..ff85d5a 100644
--- a/pico/lib/picoctrl.h
+++ b/pico/lib/picoctrl.h
@@ -69,8 +69,8 @@
         picoos_int16 * bytesPut);
 
 pico_status_t picoctrl_engReset(
-        picoctrl_Engine engine
-        );
+        picoctrl_Engine engine,
+        picoos_int32 r_mode);
 
 picoos_Common picoctrl_engGetCommon(picoctrl_Engine this);
 
diff --git a/pico/lib/picodata.c b/pico/lib/picodata.c
index 244e4b6..b886959 100644
--- a/pico/lib/picodata.c
+++ b/pico/lib/picodata.c
@@ -574,7 +574,7 @@
     picorsrc_Voice voice;
 } simple_pu_data_t;
 
-static pico_status_t puSimpleInitialize (register picodata_ProcessingUnit this) {
+static pico_status_t puSimpleInitialize (register picodata_ProcessingUnit this, picoos_int32 r_mode) {
     return PICO_OK;
 }
 
diff --git a/pico/lib/picodata.h b/pico/lib/picodata.h
index 637a3ff..2105051 100644
--- a/pico/lib/picodata.h
+++ b/pico/lib/picodata.h
@@ -498,7 +498,7 @@
 pico_status_t picodata_setCbOut(picodata_ProcessingUnit this, picodata_CharBuffer cbOut);
 
 /* protected */
-typedef pico_status_t (* picodata_puInitializeMethod) (register picodata_ProcessingUnit this);
+typedef pico_status_t (* picodata_puInitializeMethod) (register picodata_ProcessingUnit this, picoos_int32 mode);
 typedef pico_status_t (* picodata_puTerminateMethod) (register picodata_ProcessingUnit this);
 typedef picodata_step_result_t (* picodata_puStepMethod) (register picodata_ProcessingUnit this, picoos_int16 mode, picoos_uint16 * numBytesOutput);
 typedef pico_status_t (* picodata_puSubDeallocateMethod) (register picodata_ProcessingUnit this, picoos_MemoryManager mm);
diff --git a/pico/lib/picodefs.h b/pico/lib/picodefs.h
index 6613e84..8c24039 100644
--- a/pico/lib/picodefs.h
+++ b/pico/lib/picodefs.h
@@ -156,6 +156,11 @@
 
 #define PICO_STEP_ERROR                 (pico_Status)  -200
 
+/* Engine reset modes ***********************************************************/
+
+/* general */
+#define PICO_RESET_FULL                 (pico_Status)    0
+#define PICO_RESET_SOFT                 (pico_Status)    0x10
 
 
 /* ********************************************************************/
diff --git a/pico/lib/picopam.c b/pico/lib/picopam.c
index 02e5cc2..f3253a6 100644
--- a/pico/lib/picopam.c
+++ b/pico/lib/picopam.c
@@ -386,7 +386,7 @@
 /*------------------------------------------------------------------
  Service routines :
  ------------------------------------------------------------------*/
-static pico_status_t pam_initialize(register picodata_ProcessingUnit this);
+static pico_status_t pam_initialize(register picodata_ProcessingUnit this, picoos_int32 r_mode);
 static pico_status_t pam_terminate(register picodata_ProcessingUnit this);
 static pico_status_t pam_allocate(picoos_MemoryManager mm, pam_subobj_t *pam);
 static void pam_deallocate(picoos_MemoryManager mm, pam_subobj_t *pam);
@@ -556,7 +556,7 @@
  * @callgraph
  * @callergraph
  */
-static pico_status_t pam_initialize(register picodata_ProcessingUnit this)
+static pico_status_t pam_initialize(register picodata_ProcessingUnit this, picoos_int32 r_mode)
 {
     pico_status_t nI, nJ;
     pam_subobj_t *pam;
@@ -599,6 +599,11 @@
     pam->nLastAttachedItemId = pam->nCurrAttachedItem = 0;
     pam->nAttachedItemsSize = 0;
 
+    if (r_mode == PICO_RESET_SOFT) {
+        /*following initializations needed only at startup or after a full reset*/
+        return PICO_OK;
+    }
+
     /*pitch and duration modifiers*/
     pam->pMod = 1.0f;
     pam->dMod = 1.0f;
@@ -621,6 +626,8 @@
             }
         }
     }
+
+
 /*-----------------------------------------------------------------
      * MANAGE LINGWARE INITIALIZATION IF NEEDED
      ------------------------------------------------------------------*/
@@ -813,7 +820,7 @@
     /*-----------------------------------------------------------------
      * Initialize memory for PAM (this may be re-used elsewhere, e.g.Reset)
      * ------------------------------------------------------------------*/
-    if (PICO_OK != pam_initialize(this)) {
+    if (PICO_OK != pam_initialize(this, PICO_RESET_FULL)) {
         PICODBG_ERROR(("problem initializing the pam sub-object"));
     }
     return this;
diff --git a/pico/lib/picopr.c b/pico/lib/picopr.c
index f54734a..d5371d7 100644
--- a/pico/lib/picopr.c
+++ b/pico/lib/picopr.c
@@ -3168,8 +3168,9 @@
 /* *****************************************************************************/
 
 
-pico_status_t prReset(register picodata_ProcessingUnit this)
+pico_status_t prReset(register picodata_ProcessingUnit this, picoos_int32 r_mode)
 {
+
     picoos_int32 i;
     pr_subobj_t * pr;
 
@@ -3226,6 +3227,10 @@
 
     pr->forceOutput = FALSE;
 
+    if (r_mode == PICO_RESET_SOFT) {
+        /*following initializations needed only at startup or after a full reset*/
+        return PICO_OK;
+    }
 
     pr->xsampa_parser = picokfst_getFST(this->voice->kbArray[PICOKNOW_KBID_FST_XSAMPA_PARSE]);
 
@@ -3239,14 +3244,14 @@
 }
 
 
-pico_status_t prInitialize(register picodata_ProcessingUnit this)
+pico_status_t prInitialize(register picodata_ProcessingUnit this, picoos_int32 r_mode)
 {
 /*
     if (NULL == this || NULL == this->subObj) {
         return PICO_ERR_OTHER;
     }
 */
-    return prReset(this);
+    return prReset(this, r_mode);
 }
 
 
@@ -3314,7 +3319,7 @@
         picoos_deallocate(mm, (void *)&this);
         return NULL;
     }
-    prInitialize(this);
+    prInitialize(this, PICO_RESET_FULL);
     return this;
 }
 
diff --git a/pico/lib/picosa.c b/pico/lib/picosa.c
index 3147c76..ab48713 100644
--- a/pico/lib/picosa.c
+++ b/pico/lib/picosa.c
@@ -242,7 +242,7 @@
 } sa_subobj_t;
 
 
-static pico_status_t saInitialize(register picodata_ProcessingUnit this) {
+static pico_status_t saInitialize(register picodata_ProcessingUnit this, picoos_int32 r_mode) {
     sa_subobj_t * sa;
     picoos_uint16 i;
     picokfst_FST fst;
@@ -294,6 +294,11 @@
     sa->phonWritePos = 0;
     sa->nextReadPos = 0;
 
+    if (r_mode == PICO_RESET_SOFT) {
+        /*following initializations needed only at startup or after a full reset*/
+        return PICO_OK;
+    }
+
     /* kb fst[] */
     sa->numFsts = 0;
     for (i = 0; i<PICOKNOW_MAX_NUM_WPHO_FSTS; i++) {
@@ -471,7 +476,7 @@
     }
 
 
-    saInitialize(this);
+    saInitialize(this, PICO_RESET_FULL);
     return this;
 }
 
diff --git a/pico/lib/picosig.c b/pico/lib/picosig.c
index be44b3c..4282e24 100644
--- a/pico/lib/picosig.c
+++ b/pico/lib/picosig.c
@@ -114,7 +114,7 @@
  * @callgraph
  * @callergraph
  */
-static pico_status_t sigInitialize(register picodata_ProcessingUnit this)
+static pico_status_t sigInitialize(register picodata_ProcessingUnit this, picoos_int32 r_mode)
 {
     sig_subobj_t *sig_subObj;
     if (NULL == this || NULL == this->subObj) {
@@ -147,33 +147,40 @@
     /*-----------------------------------------------------------------
      * MANAGE LINGWARE INITIALIZATION IF NEEDED
      ------------------------------------------------------------------*/
-    sig_subObj->pdfmgc = picokpdf_getPdfMUL(
-            this->voice->kbArray[PICOKNOW_KBID_PDF_MGC]);
-    sig_subObj->pdflfz = picokpdf_getPdfMUL(
-            this->voice->kbArray[PICOKNOW_KBID_PDF_LFZ]);
-    sig_subObj->pdfphs = picokpdf_getPdfPHS(
-            this->voice->kbArray[PICOKNOW_KBID_PDF_PHS]);
+    if (r_mode == PICO_RESET_FULL) {
+        /*not done when resetting SOFT*/
+        sig_subObj->pdfmgc = picokpdf_getPdfMUL(
+                this->voice->kbArray[PICOKNOW_KBID_PDF_MGC]);
+        sig_subObj->pdflfz = picokpdf_getPdfMUL(
+                this->voice->kbArray[PICOKNOW_KBID_PDF_LFZ]);
+        sig_subObj->pdfphs = picokpdf_getPdfPHS(
+                this->voice->kbArray[PICOKNOW_KBID_PDF_PHS]);
 
-    sig_subObj->scmeanpowLFZ = sig_subObj->pdflfz->bigpow
-            - sig_subObj->pdflfz->meanpow;
-    sig_subObj->scmeanpowMGC = sig_subObj->pdfmgc->bigpow
-            - sig_subObj->pdfmgc->meanpow;
-    sig_subObj->scmeanLFZ = (1 << (picoos_uint32) sig_subObj->scmeanpowLFZ);
-    sig_subObj->scmeanMGC = (1 << (picoos_uint32) sig_subObj->scmeanpowMGC);
-    sig_subObj->fSampNorm = PICOSIG_NORM1 * sig_subObj->pdfmgc->amplif;
+        sig_subObj->scmeanpowLFZ = sig_subObj->pdflfz->bigpow
+                - sig_subObj->pdflfz->meanpow;
+        sig_subObj->scmeanpowMGC = sig_subObj->pdfmgc->bigpow
+                - sig_subObj->pdfmgc->meanpow;
+        sig_subObj->scmeanLFZ = (1 << (picoos_uint32) sig_subObj->scmeanpowLFZ);
+        sig_subObj->scmeanMGC = (1 << (picoos_uint32) sig_subObj->scmeanpowMGC);
+        sig_subObj->fSampNorm = PICOSIG_NORM1 * sig_subObj->pdfmgc->amplif;
+        /*-----------------------------------------------------------------
+         * Initialize memory for DSP
+         * ------------------------------------------------------------------*/
+        sigDspInitialize(&(sig_subObj->sig_inner), r_mode);
+        /*-----------------------------------------------------------------
+         * Initialize modifiers
+         * ------------------------------------------------------------------*/
+        /*pitch , volume , speaker modifiers*/
+        sig_subObj->pMod = 1.0f;
+        sig_subObj->vMod = 1.0f;
+        sig_subObj->sMod = 1.0f;
+    } else {
+        /*-----------------------------------------------------------------
+         * Initialize memory for DSP
+         * ------------------------------------------------------------------*/
+        sigDspInitialize(&(sig_subObj->sig_inner), r_mode);
+    }
 
-    /*-----------------------------------------------------------------
-     * Initialize memory for DSP
-     * ------------------------------------------------------------------*/
-    sigDspInitialize(&(sig_subObj->sig_inner));
-
-    /*-----------------------------------------------------------------
-     * Initialize modifiers
-     * ------------------------------------------------------------------*/
-    /*pitch , volume , speaker modifiers*/
-    sig_subObj->pMod = 1.0f;
-    sig_subObj->vMod = 1.0f;
-    sig_subObj->sMod = 1.0f;
 
     return PICO_OK;
 }/*sigInitialize*/
@@ -287,7 +294,7 @@
     /*-----------------------------------------------------------------
      * Initialize memory for DSP (this may be re-used elsewhere, e.g.Reset)
      * ------------------------------------------------------------------*/
-    if (PICO_OK != sigInitialize(this)) {
+    if (PICO_OK != sigInitialize(this, PICO_RESET_FULL)) {
         PICODBG_ERROR(("Error in iSig Sub Object initialization"));
         sigDeallocate(mm, &(sig_subObj->sig_inner));
         picoos_deallocate(mm, (void *) &this);
diff --git a/pico/lib/picosig2.c b/pico/lib/picosig2.c
index e431c90..52943e6 100644
--- a/pico/lib/picosig2.c
+++ b/pico/lib/picosig2.c
@@ -412,11 +412,30 @@
  * @callgraph
  * @callergraph
  */
-void sigDspInitialize(sig_innerobj_t *sig_inObj)
+void sigDspInitialize(sig_innerobj_t *sig_inObj, picoos_int32 r_mode)
 {
     picoos_int32 i, j;
     picoos_int32 *pnt;
 
+    if (r_mode == PICO_RESET_SOFT) {
+        /*minimal initialization when receiving a soft reset */
+        return;
+        /*
+        sig_inObj->voxbnd_p = (picoos_int32) ((picoos_single) sig_inObj->hfftsize_p
+                / ((picoos_single) sig_inObj->Fs_p / (picoos_single) 2)
+                * (picoos_single) sig_inObj->VCutoff_p);
+        sig_inObj->voxbnd2_p
+                = (picoos_int32) ((picoos_single) sig_inObj->hfftsize_p
+                        / ((picoos_single) sig_inObj->Fs_p / (picoos_single) 2)
+                        * (picoos_single) sig_inObj->UVCutoff_p);
+        sig_inObj->nextPeak_p = (((int) (PICODSP_FFTSIZE))
+                / ((int) PICODSP_DISPLACE) - 1) * sig_inObj->hop_p;
+        for (i = 0; i < 2 * PICODSP_FFTSIZE; i++) {
+             sig_inObj->int_vec26[i] = 0;
+        }
+        return;
+        */
+    }
     /*-----------------------------------------------------------------
      * Initialization
      * ------------------------------------------------------------------*/
diff --git a/pico/lib/picosig2.h b/pico/lib/picosig2.h
index f239ced..1b975db 100644
--- a/pico/lib/picosig2.h
+++ b/pico/lib/picosig2.h
@@ -139,7 +139,7 @@
 extern pico_status_t sigAllocate(picoos_MemoryManager mm,
         sig_innerobj_t *sig_inObj);
 extern void sigDeallocate(picoos_MemoryManager mm, sig_innerobj_t *sig_inObj);
-extern void sigDspInitialize(sig_innerobj_t *sig_inObj);
+extern void sigDspInitialize(sig_innerobj_t *sig_inObj, picoos_int32 r_mode);
 
 /*------------------------------------------------------------------
  Exported (to picosig.c) Processing routines :
diff --git a/pico/lib/picospho.c b/pico/lib/picospho.c
index 0d0cdf8..bf9dd80 100644
--- a/pico/lib/picospho.c
+++ b/pico/lib/picospho.c
@@ -286,7 +286,7 @@
 }
 
 
-static pico_status_t sphoInitialize(register picodata_ProcessingUnit this)
+static pico_status_t sphoInitialize(register picodata_ProcessingUnit this, picoos_int32 r_mode)
 {
     picoos_uint8 i;
     spho_subobj_t * spho;
@@ -392,7 +392,7 @@
         return NULL;
     }
 
-    sphoInitialize(this);
+    sphoInitialize(this, PICO_RESET_FULL);
     return this;
 }
 
diff --git a/pico/lib/picotok.c b/pico/lib/picotok.c
index 4488609..969e2a3 100644
--- a/pico/lib/picotok.c
+++ b/pico/lib/picotok.c
@@ -1385,7 +1385,7 @@
 
 /* *****************************************************************************/
 
-static pico_status_t tokReset(register picodata_ProcessingUnit this)
+static pico_status_t tokReset(register picodata_ProcessingUnit this, picoos_int32 r_mode)
 {
     tok_subobj_t * tok;
     MarkupId mId;
@@ -1449,7 +1449,7 @@
     return PICO_OK;
 }
 
-static pico_status_t tokInitialize(register picodata_ProcessingUnit this)
+static pico_status_t tokInitialize(register picodata_ProcessingUnit this, picoos_int32 r_mode)
 {
 /*
 
@@ -1460,7 +1460,7 @@
     }
     tok = (tok_subobj_t *) this->subObj;
 */
-    return tokReset(this);
+    return tokReset(this, r_mode);
 }
 
 
@@ -1508,7 +1508,7 @@
         picoos_deallocate(mm, (void *)&this);
         return NULL;
     }
-    tokInitialize(this);
+    tokInitialize(this, PICO_RESET_FULL);
     return this;
 }
 
diff --git a/pico/lib/picowa.c b/pico/lib/picowa.c
index 3e793c9..ab8ca51 100644
--- a/pico/lib/picowa.c
+++ b/pico/lib/picowa.c
@@ -78,7 +78,7 @@
 } wa_subobj_t;
 
 
-static pico_status_t waInitialize(register picodata_ProcessingUnit this) {
+static pico_status_t waInitialize(register picodata_ProcessingUnit this, picoos_int32 r_mode) {
     picoos_uint8 i;
     picoklex_Lex ulex;
     wa_subobj_t * wa;
@@ -98,6 +98,10 @@
     wa->outBufSize = PICOWA_MAXITEMSIZE;
     wa->outLen = 0;
 
+    if (r_mode == PICO_RESET_SOFT) {
+        /*following initializations needed only at startup or after a full reset*/
+        return PICO_OK;
+    }
     /* kb lex */
     wa->lex = picoklex_getLex(this->voice->kbArray[PICOKNOW_KBID_LEX_MAIN]);
     if (wa->lex == NULL) {
@@ -177,7 +181,7 @@
         return NULL;
     }
 
-    waInitialize(this);
+    waInitialize(this, PICO_RESET_FULL);
     return this;
 }
 
diff --git a/pico/tests/data/xsampa_pico_man_README.txt b/pico/tests/data/xsampa_pico_man_README.txt
new file mode 100644
index 0000000..d0b785e
--- /dev/null
+++ b/pico/tests/data/xsampa_pico_man_README.txt
@@ -0,0 +1,23 @@
+ReadME for the XSAMPA Pico TTS tests
+
+The following files contain a series of utterances to test the Pico TTS engine with regards to
+the support of language-specific XSAMPA characters:
+
+ xsampa_pico_man_de-DE.txt
+ xsampa_pico_man_en-GB.txt
+ xsampa_pico_man_en-US.txt
+ xsampa_pico_man_es-ES.txt
+ xsampa_pico_man_fr-FR.txt
+ xsampa_pico_man_it-IT.txt
+
+They implement the examples given in section A.4 of the SVOX Pico Manual ("SVOX Pico - Speech Output
+Engine SDK").
+They are formatted as utterances that can be sent to the Pico engine through the Android 1.6 API.
+This is achieved by using the TextToSpeech.speak() method of the android.speech.tts package.
+The test files adopt the following syntax:
+- the lines used in the test are between the lines marked "BEGIN_TEST" and "END_TEST",
+- lines that start with "#" are not spoken.
+The application found in external/svox/pico/tests/apps/SpeechTester lets you load those files and
+run the test, i.e. play all valid test lines in the test file. Copy the test files to the
+Android-powered device, and enter the file name that contains the test to run, and click "Run test".
+
diff --git a/pico/tests/data/xsampa_pico_man_de-DE.txt b/pico/tests/data/xsampa_pico_man_de-DE.txt
new file mode 100644
index 0000000..e2bc5a8
--- /dev/null
+++ b/pico/tests/data/xsampa_pico_man_de-DE.txt
@@ -0,0 +1,248 @@
+# BEGIN_TEST
+
+#------------------------------
+# German (de-DE)
+#
+# Notes: These tests use the XSAMPA examples given in the pico manual.
+#        The only differences between the manual and the test strings are:
+#        1/ replaced the primary stress character " (double quote) by its dec code &#34;
+#        2/ the XSAMPA "r\" is replaced by "r\\" (the backslash is escaped) otherwise pico says
+#           garbage or the [rrr] sound is pronounced "j" (as a french j)
+#        When a test is marked as "BUG", if possible, the tester will capture an approximate
+#        transcription of what was heard inside [ ].
+
+# Consonants
+# --------- Plosives
+
+# TEST ? Abend "?a:.b@nt
+<speak xml:lang="de-DE"> Ich teste <phoneme alphabet="xsampa" ph="&#34;?a:.b@nt"/>.</speak>
+
+# TEST b Ball "bal
+<speak xml:lang="de-DE"> Ich teste <phoneme alphabet="xsampa" ph="&#34;bal"/>.</speak>
+
+# TEST d Dach "dax
+<speak xml:lang="de-DE"> Ich teste <phoneme alphabet="xsampa" ph="&#34;dax"/>.</speak>
+
+# TEST g Gabe "ga:.b@
+<speak xml:lang="de-DE"> Ich teste <phoneme alphabet="xsampa" ph="&#34;ga:.b@"/>.</speak>
+
+# TEST k Kamm "kam
+<speak xml:lang="de-DE"> Ich teste <phoneme alphabet="xsampa" ph="&#34;kam"/>.</speak>
+
+# TEST p Post "pOst
+<speak xml:lang="de-DE"> Ich teste <phoneme alphabet="xsampa" ph="&#34;pOst"/>.</speak>
+
+# TEST t Tritt "tRIt
+<speak xml:lang="de-DE"> Ich teste <phoneme alphabet="xsampa" ph="&#34;tRIt"/>.</speak>
+
+
+# --------- Nasals
+
+# TEST N lang "laN
+<speak xml:lang="de-DE"> Ich teste <phoneme alphabet="xsampa" ph="&#34;laN"/>.</speak>
+
+# TEST m Matte "ma.t@
+<speak xml:lang="de-DE"> Ich teste <phoneme alphabet="xsampa" ph="&#34;ma.t@"/>.</speak>
+
+# TEST n Nest "nEst
+<speak xml:lang="de-DE"> Ich teste <phoneme alphabet="xsampa" ph="&#34;nEst"/>.</speak>
+
+
+
+# --------- Fricatives
+# TEST C Milch "mIlC
+<speak xml:lang="de-DE"> Ich teste <phoneme alphabet="xsampa" ph="&#34;mIlC"/>.</speak>
+
+# TEST R Rabe "Ra:.b@
+<speak xml:lang="de-DE"> Ich teste <phoneme alphabet="xsampa" ph="&#34;Ra:.b@"/>.</speak>
+
+# TEST S Masche "ma.S@
+<speak xml:lang="de-DE"> Ich teste <phoneme alphabet="xsampa" ph="&#34;ma.S@"/>.</speak>
+
+# TEST Z Genie Ze."ni:
+<speak xml:lang="de-DE"> Ich teste <phoneme alphabet="xsampa" ph="Ze.&#34;ni"/>.</speak>
+
+# TEST f Affe "?a.f@
+<speak xml:lang="de-DE"> Ich teste <phoneme alphabet="xsampa" ph="&#34;?a.f@"/>.</speak>
+
+# TEST h Hund "hUnt
+<speak xml:lang="de-DE"> Ich teste <phoneme alphabet="xsampa" ph="&#34;hUnt"/>.</speak>
+
+# 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 x Bach "bax
+<speak xml:lang="de-DE"> Ich teste <phoneme alphabet="xsampa" ph="&#34;bax"/>.</speak>
+
+# TEST z Rose "Ro:.z@
+<speak xml:lang="de-DE"> Ich teste <phoneme alphabet="xsampa" ph="&#34;Ro:.z@"/>.</speak>
+
+# --------- Approximants
+
+# TEST j Jagd "ja:kt
+<speak xml:lang="de-DE"> Ich teste <phoneme alphabet="xsampa" ph="&#34;ja:kt"/>.</speak>
+
+# TEST l Luft "lUft
+<speak xml:lang="de-DE"> Ich teste <phoneme alphabet="xsampa" ph="&#34;lUft"/>.</speak>
+
+# --------- Syllabic Consonants
+
+# BUG l= Nabel "na:.b=l says [natrel], error on [b]
+<speak xml:lang="de-DE"> Ich teste <phoneme alphabet="xsampa" ph="&#34;na:.b=l"/>.</speak>
+
+# TEST m= hartem "haR.t=m
+<speak xml:lang="de-DE"> Ich teste <phoneme alphabet="xsampa" ph="&#34;haR.t=m"/>.</speak>
+
+# TEST n= Latten "la.t=n
+<speak xml:lang="de-DE"> Ich teste <phoneme alphabet="xsampa" ph="&#34;la.t=n"/>.</speak>
+
+
+# --------- Affricates
+
+# TEST d_Z Dschungel "d_ZU.N@l
+<speak xml:lang="de-DE"> Ich teste <phoneme alphabet="xsampa" ph="&#34;d_ZU.N@l"/>.</speak>
+
+# TEST p_f Dampf "damp_f
+<speak xml:lang="de-DE"> Ich teste <phoneme alphabet="xsampa" ph="&#34;damp_f"/>.</speak>
+
+# TEST t_S Klatsch "klat_S
+<speak xml:lang="de-DE"> Ich teste <phoneme alphabet="xsampa" ph="&#34;klat_S"/>.</speak>
+
+# TEST t_s Zunge "t_sU.N@
+<speak xml:lang="de-DE"> Ich teste <phoneme alphabet="xsampa" ph="&#34;t_sU.N@"/>.</speak>
+
+# Monophthongs
+
+# --------- Short
+
+# TEST 2 Ökonom ?2.ko."no:m
+<speak xml:lang="de-DE"> Ich teste <phoneme alphabet="xsampa" ph="?2.ko.&#34;no:m"/>.</speak>
+
+# TEST 6 Halter "hal.t6
+<speak xml:lang="de-DE"> Ich teste <phoneme alphabet="xsampa" ph="&#34;hal.t6"/>.</speak>
+
+# TEST 9 göttlich "g9t.lIC
+<speak xml:lang="de-DE"> Ich teste <phoneme alphabet="xsampa" ph="&#34;g9t.lIC"/>.</speak>
+
+# TEST @ Lage "la:.g@
+<speak xml:lang="de-DE"> Ich teste <phoneme alphabet="xsampa" ph="&#34;la:.g@"/>.</speak>
+
+# TEST E Kette "kE.t@
+<speak xml:lang="de-DE"> Ich teste <phoneme alphabet="xsampa" ph="&#34;kE.t@"/>.</speak>
+
+# TEST I Kiste "kIs.t@
+<speak xml:lang="de-DE"> Ich teste <phoneme alphabet="xsampa" ph="&#34;kIs.t@"/>.</speak>
+
+# TEST O Kopf "kOp_f
+<speak xml:lang="de-DE"> Ich teste <phoneme alphabet="xsampa" ph="&#34;kOp_f"/>.</speak>
+
+# TEST U Kunst "kUnst
+<speak xml:lang="de-DE"> Ich teste <phoneme alphabet="xsampa" ph="&#34;kUnst"/>.</speak>
+
+# TEST Y füllen "fY.l@n
+<speak xml:lang="de-DE"> Ich teste <phoneme alphabet="xsampa" ph="&#34;fY.l@n"/>.</speak>
+
+# TEST a Kappe "ka.p@
+<speak xml:lang="de-DE"> Ich teste <phoneme alphabet="xsampa" ph="&#34;ka.p@"/>.</speak>
+
+# TEST e Theorie te.o."Ri:
+<speak xml:lang="de-DE"> Ich teste <phoneme alphabet="xsampa" ph="te.o.&#34;Ri:"/>.</speak>
+
+# TEST i Politik po.li."ti:k
+<speak xml:lang="de-DE"> Ich teste <phoneme alphabet="xsampa" ph="po.li.&#34;ti:k"/>.</speak>
+
+# TEST o polieren po."li:.R@n
+<speak xml:lang="de-DE"> Ich teste <phoneme alphabet="xsampa" ph="po.&#34;li:.R@n"/>.</speak>
+
+# TEST u Kurier ku."Ri:6_^
+<speak xml:lang="de-DE"> Ich teste <phoneme alphabet="xsampa" ph="ku.&#34;Ri:6_^"/>.</speak>
+
+# TEST y Mythologie my.to.lo."gi:
+<speak xml:lang="de-DE"> Ich teste <phoneme alphabet="xsampa" ph="my.to.lo.&#34;gi:"/>.</speak>
+
+
+
+# --------- Long
+
+# TEST 2: Öl "
+<speak xml:lang="de-DE"> Ich teste <phoneme alphabet="xsampa" ph="&#34;?2:l"/>.</speak>
+
+# TEST E: Bär "bE:6_^
+<speak xml:lang="de-DE"> Ich teste <phoneme alphabet="xsampa" ph="&#34;bE:6_^"/>.</speak>
+
+# TEST a: Kater "ka:.t6
+<speak xml:lang="de-DE"> Ich teste <phoneme alphabet="xsampa" ph="&#34;ka:.t6"/>.</speak>
+
+# TEST e: Beet "be:t
+<speak xml:lang="de-DE"> Ich teste <phoneme alphabet="xsampa" ph="&#34;be:t"/>.</speak>
+
+# TEST i: Biene "bi:.n@
+<speak xml:lang="de-DE"> Ich teste <phoneme alphabet="xsampa" ph="&#34;bi:.n@"/>.</speak>
+
+# TEST o: Boot "bo:t
+<speak xml:lang="de-DE"> Ich teste <phoneme alphabet="xsampa" ph="&#34;bo:t"/>.</speak>
+
+# TEST u: Hut "hu:t
+<speak xml:lang="de-DE"> Ich teste <phoneme alphabet="xsampa" ph="&#34;hu:t"/>.</speak>
+
+# TEST y: kühl "ky:l
+<speak xml:lang="de-DE"> Ich teste <phoneme alphabet="xsampa" ph="&#34;ky:l"/>.</speak>
+
+
+# --------- Nasalized
+
+# TEST 9~: parfum par."f9~:
+<speak xml:lang="de-DE"> Ich teste <phoneme alphabet="xsampa" ph="par.&#34;f9~:"/>.</speak>
+
+# TEST E~: Timbre "tE~:.bR@
+<speak xml:lang="de-DE"> Ich teste <phoneme alphabet="xsampa" ph="&#34;tE~:.bR@"/>.</speak>
+
+# TEST a~: Chance "Sa~:.s@
+<speak xml:lang="de-DE"> Ich teste <phoneme alphabet="xsampa" ph="&#34;Sa~:.s@"/>.</speak>
+
+# TEST o~: fond "fo~:
+<speak xml:lang="de-DE"> Ich teste <phoneme alphabet="xsampa" ph="&#34;fo~:"/>.</speak>
+
+
+# --------- Non-syllabic
+
+# TEST 6_^ Bier "bi:6_^
+<speak xml:lang="de-DE"> Ich teste <phoneme alphabet="xsampa" ph="&#34;bi:6_^"/>.</speak>
+
+# TEST i_^ Mumie "mu:.mi_^@"
+<speak xml:lang="de-DE"> Ich teste <phoneme alphabet="xsampa" ph="&#34;mu:.mi_^@&#34;"/>.</speak>
+
+# TEST o_^ foyer fo_^a."je:
+<speak xml:lang="de-DE"> Ich teste <phoneme alphabet="xsampa" ph="fo_^a.&#34;je:"/>.</speak>
+
+# TEST u_^ aktuell ?ak."tu_^El
+<speak xml:lang="de-DE"> Ich teste <phoneme alphabet="xsampa" ph="?ak.&#34;tu_^El"/>.</speak>
+
+
+# --------- Diphthongs
+
+# TEST O_Y Deutsch "dO_Yt_S
+<speak xml:lang="de-DE"> Ich teste <phoneme alphabet="xsampa" ph="&#34;dO_Yt_S"/>.</speak>
+
+# TEST a_I Bein "ba_In
+<speak xml:lang="de-DE"> Ich teste <phoneme alphabet="xsampa" ph="&#34;ba_In"/>.</speak>
+
+# TEST a_U Kauf "ka_Uf
+<speak xml:lang="de-DE"> Ich teste <phoneme alphabet="xsampa" ph="&#34;ka_Uf"/>.</speak>
+
+# END_TEST
+
+
+# --------- Other Symbols
+#  word separator    NEED TEST HERE <<<<<<<<<<<<------------------------------------
+%  secondary stress  NEED TEST HERE <<<<<<<<<<<<------------------------------------
+.  syllable break    NEED TEST HERE <<<<<<<<<<<<------------------------------------
+"  primary stress    NEED TEST HERE <<<<<<<<<<<<------------------------------------
+
+
+# ---------
+
+
diff --git a/pico/tests/data/xsampa_pico_man_en-GB.txt b/pico/tests/data/xsampa_pico_man_en-GB.txt
new file mode 100644
index 0000000..b5b5dde
--- /dev/null
+++ b/pico/tests/data/xsampa_pico_man_en-GB.txt
@@ -0,0 +1,192 @@
+
+# BEGIN_TEST
+
+#------------------------------
+# English (en-GB)
+#
+# Notes: These tests use the XSAMPA examples given in the pico manual.
+#        The only differences between the manual and the test strings are:
+#        1/ replaced the primary stress character " (double quote) by its dec code &#34;
+#        2/ the XSAMPA "r\" is replaced by "r\\" (the backslash is escaped) otherwise pico says
+#           garbage or the "rrr" sound is pronounced "j" (as a french j)
+#        When a test is marked as "BUG", if possible, the tester will capture an approximate
+#        transcription of what was heard inside [ ].
+
+# Consonants
+# --------- Plosives
+
+# TEST "bin"
+<speak xml:lang="en-GB"> Testing <phoneme alphabet="xsampa" ph="&#34;bIn"/>.</speak>
+
+# TEST "din"
+<speak xml:lang="en-GB"> Testing <phoneme alphabet="xsampa" ph="&#34;dIn"/>.</speak>
+
+# TEST "give"
+<speak xml:lang="en-GB"> Testing <phoneme alphabet="xsampa" ph="&#34;gIv"/>.</speak>
+
+# TEST "kin"
+<speak xml:lang="en-GB"> Testing <phoneme alphabet="xsampa" ph="&#34;kIn"/>.</speak>
+
+# TEST "pin"
+<speak xml:lang="en-GB"> Testing <phoneme alphabet="xsampa" ph="&#34;pIn"/>.</speak>
+
+# TEST "tin"
+<speak xml:lang="en-GB"> Testing <phoneme alphabet="xsampa" ph="&#34;tIn"/>.</speak>
+
+
+# --------- Nasals
+
+# TEST N thing "TIN
+<speak xml:lang="en-GB"> Testing <phoneme alphabet="xsampa" ph="&#34;TIN"/>.</speak>
+
+# TEST m mock "mA:k
+<speak xml:lang="en-GB"> Testing <phoneme alphabet="xsampa" ph="&#34;mA:k"/>.</speak>
+
+# TEST n knock "nA:k
+<speak xml:lang="en-GB"> Testing <phoneme alphabet="xsampa" ph="&#34;nA:k"/>.</speak>
+
+# --------- Fricatives
+
+# TEST D this "DIs
+<speak xml:lang="en-GB"> Testing <phoneme alphabet="xsampa" ph="&#34;DIs"/>.</speak>
+
+# TEST S shin "SIn
+<speak xml:lang="en-GB"> Testing <phoneme alphabet="xsampa" ph="&#34;SIn"/>.</speak>
+
+# TEST T thin "TIn
+<speak xml:lang="en-GB"> Testing <phoneme alphabet="xsampa" ph="&#34;TIn"/>.</speak>
+
+# BUG Z measure "mE.Z@` says [measu'chu'res]
+<speak xml:lang="en-GB"> Testing <phoneme alphabet="xsampa" ph="&#34;mE.Z@`"/>.</speak>
+
+# TEST f fit "fIt
+<speak xml:lang="en-GB"> Testing <phoneme alphabet="xsampa" ph="&#34;fIt"/>.</speak>
+
+# TEST h hit "hIt
+<speak xml:lang="en-GB"> Testing <phoneme alphabet="xsampa" ph="&#34;hIt"/>.</speak>
+
+# TEST s sin "sIn
+<speak xml:lang="en-GB"> Testing <phoneme alphabet="xsampa" ph="&#34;sIn"/>.</speak>
+
+# TEST v vim "vIm
+<speak xml:lang="en-GB"> Testing <phoneme alphabet="xsampa" ph="&#34;vIm"/>.</speak>
+
+# TEST z zing "zIN
+<speak xml:lang="en-GB"> Testing <phoneme alphabet="xsampa" ph="&#34;zIN"/>.</speak>
+
+
+# --------- Approximants
+
+# TEST j yacht "jA:t
+<speak xml:lang="en-GB"> Testing <phoneme alphabet="xsampa" ph="&#34;jA:t"/>.</speak>
+
+# BUG l long "lA:N  says garbage after the [l]
+<speak xml:lang="en-GB"> Testing <phoneme alphabet="xsampa" ph="&#34;lQ:N"/>.</speak>
+
+# TEST l= little "lI.tl=
+<speak xml:lang="en-GB"> Testing <phoneme alphabet="xsampa" ph="&#34;lI.tl= "/>.</speak>
+
+# TEST r\ right "r\a_It
+<speak xml:lang="en-GB"> Testing <phoneme alphabet="xsampa" ph="&#34;r\\a_It"/>.</speak>
+
+# BUG w wasp "wA:sp says garbage after the [wa]
+<speak xml:lang="en-GB"> Testing <phoneme alphabet="xsampa" ph="&#34;wQ:sp"/>.</speak>
+
+
+# --------- Affricates
+
+# TEST d_Z gin "d_ZIn
+<speak xml:lang="en-GB"> Testing <phoneme alphabet="xsampa" ph="&#34;d_ZIn"/>.</speak>
+
+# TEST t_S chin "t_SIn
+<speak xml:lang="en-GB"> Testing <phoneme alphabet="xsampa" ph="&#34;t_SIn"/>.</speak>
+
+
+# Monophthongs
+# --------- Short
+
+# TEST @ allow @."la_U
+<speak xml:lang="en-GB"> Testing <phoneme alphabet="xsampa" ph="@.&#34;la_U"/>.</speak>
+
+# TEST E pet  "pEt
+<speak xml:lang="en-GB"> Testing <phoneme alphabet="xsampa" ph="&#34;pEt"/>.</speak>
+
+# TEST I pit "pIt
+<speak xml:lang="en-GB"> Testing <phoneme alphabet="xsampa" ph="&#34;pIt"/>.</speak>
+
+# TEST Q pot "pQt
+<speak xml:lang="en-GB"> Testing <phoneme alphabet="xsampa" ph="&#34;pQt"/>.</speak>
+
+# TEST U put "pUt
+<speak xml:lang="en-GB"> Testing <phoneme alphabet="xsampa" ph="&#34;pUt"/>.</speak>
+
+# TEST V cut "kVt
+<speak xml:lang="en-GB"> Testing <phoneme alphabet="xsampa" ph="&#34;kVt"/>.</speak>
+
+# TEST { pat "p{t
+<speak xml:lang="en-GB"> Testing <phoneme alphabet="xsampa" ph="&#34;p{t"/>.</speak>
+
+
+# --------- Long
+
+# TEST 3: furs "f3:z says [fuz z z]
+<speak xml:lang="en-GB"> Testing <phoneme alphabet="xsampa" ph="&#34;f3:z"/>.</speak>
+
+# BUG A: stars "stA:z says [st'eyes]
+<speak xml:lang="en-GB"> Testing <phoneme alphabet="xsampa" ph="&#34;stA:rz"/>.</speak>
+
+# TEST i: ease "i:z
+<speak xml:lang="en-GB"> Testing <phoneme alphabet="xsampa" ph="&#34;i:z"/>.</speak>
+
+# TEST u: lose "lu:z
+<speak xml:lang="en-GB"> Testing <phoneme alphabet="xsampa" ph="&#34;lu:z"/>.</speak>
+
+
+# --------- Diphthongs
+
+# BUG o_U nose "no_Uz says garbage
+<speak xml:lang="en-GB"> Testing <phoneme alphabet="xsampa" ph="&#34;no_Uz"/>.</speak>
+
+# TEST O_I noise  "nO_Iz
+<speak xml:lang="en-GB"> Testing <phoneme alphabet="xsampa" ph="&#34;nO_Iz"/>.</speak>
+
+# TEST a_I rise "r\a_Iz
+<speak xml:lang="en-GB"> Testing <phoneme alphabet="xsampa" ph="&#34;r\\a_Iz"/>.</speak>
+
+# TEST a_U rouse "r\a_Uz
+<speak xml:lang="en-GB"> Testing <phoneme alphabet="xsampa" ph="&#34;r\\a_Uz"/>.</speak>
+
+# TEST e_I raise "r\e_Iz
+<speak xml:lang="en-GB"> Testing <phoneme alphabet="xsampa" ph="&#34;r\\e_Iz"/>.</speak>
+
+
+# --------- Other Symbols
+
+# TEST #  word separator, tested on "this yacht"
+<speak xml:lang="en-GB"> Testing <phoneme alphabet="xsampa" ph="&#34;DIsjA:t"/> and <phoneme alphabet="xsampa" ph="&#34;DIs#jA:t"/>.</speak>
+
+# TEST %  secondary stress  NEED TEST HERE <<<<<<<<<<<<------------------------------------
+#<speak xml:lang="en-GB"> Testing <phoneme alphabet="xsampa" ph="&#34;"/>.</speak>
+
+# TEST .  syllable break    NEED TEST HERE <<<<<<<<<<<<------------------------------------
+#<speak xml:lang="en-GB"> Testing <phoneme alphabet="xsampa" ph="&#34;"/>.</speak>
+
+# TEST "  primary stress  BETTER TEST?      <<<<<<<<<<<<------------------------------------
+<speak xml:lang="en-GB"> Testing <phoneme alphabet="xsampa" ph="&#34;nO_Iz"/> and <phoneme alphabet="xsampa" ph="nO_Iz"/> primary stress.</speak>
+
+# ---------
+# END_TEST
+
+#-----------------------
+# Tests from en-US
+
+# BUG? W whale "We_Il  says [kale]
+<speak xml:lang="en-GB"> Testing <phoneme alphabet="xsampa" ph="&#34;We_Il"/>.</speak>
+
+# BUG? @` actor "{k.t@` says garbage after [a]
+<speak xml:lang="en-GB"> Testing <phoneme alphabet="xsampa" ph="&#34;{k.t@`"/>.</speak>
+
+# BUG? O: four "fO:r\ says garbage
+<speak xml:lang="en-GB"> Testing <phoneme alphabet="xsampa" ph="&#34;fO:r\\"/>.</speak>
+
+
diff --git a/pico/tests/data/xsampa_pico_man_en-US.txt b/pico/tests/data/xsampa_pico_man_en-US.txt
new file mode 100644
index 0000000..6a3204a
--- /dev/null
+++ b/pico/tests/data/xsampa_pico_man_en-US.txt
@@ -0,0 +1,189 @@
+
+# BEGIN_TEST
+
+#------------------------------
+# English (en-US)
+#
+# Notes: These tests use the XSAMPA examples given in the pico manual.
+#        The only differences between the manual and the test strings are:
+#        1/ replaced the primary stress character " (double quote) by its dec code &#34;
+#        2/ the XSAMPA "r\" is replaced by "r\\" (the backslash is escaped) otherwise pico says
+#           garbage or the "rrr" sound is pronounced "j" (as a french j)
+#        When a test is marked as "BUG", if possible, the tester will capture an approximate
+#        transcription of what was heard inside [ ].
+
+
+# Consonants
+# --------- Plosives
+
+# TEST "bin"
+<speak xml:lang="en-US"> Testing <phoneme alphabet="xsampa" ph="&#34;bIn"/>.</speak>
+
+# TEST "din"
+<speak xml:lang="en-US"> Testing <phoneme alphabet="xsampa" ph="&#34;dIn"/>.</speak>
+
+# TEST "give"
+<speak xml:lang="en-US"> Testing <phoneme alphabet="xsampa" ph="&#34;gIv"/>.</speak>
+
+# TEST "kin"
+<speak xml:lang="en-US"> Testing <phoneme alphabet="xsampa" ph="&#34;kIn"/>.</speak>
+
+# TEST "pin"
+<speak xml:lang="en-US"> Testing <phoneme alphabet="xsampa" ph="&#34;pIn"/>.</speak>
+
+# TEST "tin"
+<speak xml:lang="en-US"> Testing <phoneme alphabet="xsampa" ph="&#34;tIn"/>.</speak>
+
+
+# --------- Nasals
+
+# TEST N thing "TIN
+<speak xml:lang="en-US"> Testing <phoneme alphabet="xsampa" ph="&#34;TIN"/>.</speak>
+
+# TEST m mock "mA:k
+<speak xml:lang="en-US"> Testing <phoneme alphabet="xsampa" ph="&#34;mA:k"/>.</speak>
+
+# TEST n knock "nA:k
+<speak xml:lang="en-US"> Testing <phoneme alphabet="xsampa" ph="&#34;nA:k"/>.</speak>
+
+# --------- Fricatives
+
+# TEST D this "DIs
+<speak xml:lang="en-US"> Testing <phoneme alphabet="xsampa" ph="&#34;DIs"/>.</speak>
+
+# TEST S shin "SIn
+<speak xml:lang="en-US"> Testing <phoneme alphabet="xsampa" ph="&#34;SIn"/>.</speak>
+
+# TEST T thin "TIn
+<speak xml:lang="en-US"> Testing <phoneme alphabet="xsampa" ph="&#34;TIn"/>.</speak>
+
+# TEST Z measure "mE.Z@`
+<speak xml:lang="en-US"> Testing <phoneme alphabet="xsampa" ph="&#34;mE.Z@`"/>.</speak>
+
+# TEST f fit "fIt
+<speak xml:lang="en-US"> Testing <phoneme alphabet="xsampa" ph="&#34;fIt"/>.</speak>
+
+# TEST h hit "hIt
+<speak xml:lang="en-US"> Testing <phoneme alphabet="xsampa" ph="&#34;hIt"/>.</speak>
+
+# TEST s sin "sIn
+<speak xml:lang="en-US"> Testing <phoneme alphabet="xsampa" ph="&#34;sIn"/>.</speak>
+
+# TEST v vim "vIm
+<speak xml:lang="en-US"> Testing <phoneme alphabet="xsampa" ph="&#34;vIm"/>.</speak>
+
+# TEST W whale "We_Il  ("east coast" pronounciation of W phoneme for "wh")
+<speak xml:lang="en-US"> Testing <phoneme alphabet="xsampa" ph="&#34;We_Il"/>.</speak>
+
+# TEST w whale "We_Il
+<speak xml:lang="en-US"> Testing <phoneme alphabet="xsampa" ph="&#34;we_Il"/>.</speak>
+
+# TEST z zing "zIN
+<speak xml:lang="en-US"> Testing <phoneme alphabet="xsampa" ph="&#34;zIN"/>.</speak>
+
+
+# --------- Approximants
+
+# 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= little "lI.tl=
+<speak xml:lang="en-US"> Testing <phoneme alphabet="xsampa" ph="&#34;lI.tl= "/>.</speak>
+
+# TEST r\ right "r\a_It says [jight]
+<speak xml:lang="en-US"> Testing <phoneme alphabet="xsampa" ph="&#34;r\\a_It"/>.</speak>
+
+# TEST w wasp "wA:sp
+<speak xml:lang="en-US"> Testing <phoneme alphabet="xsampa" ph="&#34;wA:sp"/>.</speak>
+
+
+# --------- Affricates
+
+# TEST d_Z gin "d_ZIn
+<speak xml:lang="en-US"> Testing <phoneme alphabet="xsampa" ph="&#34;d_ZIn"/>.</speak>
+
+# TEST t_S chin "t_SIn
+<speak xml:lang="en-US"> Testing <phoneme alphabet="xsampa" ph="&#34;t_SIn"/>.</speak>
+
+
+# Monophthongs
+# --------- Short
+
+# TEST @ allow @."la_U
+<speak xml:lang="en-US"> Testing <phoneme alphabet="xsampa" ph="@.&#34;la_U"/>.</speak>
+
+# TEST @` actor "{k.t@`
+<speak xml:lang="en-US"> Testing <phoneme alphabet="xsampa" ph="&#34;{k.t@`"/>.</speak>
+
+# TEST E pet  "pEt
+<speak xml:lang="en-US"> Testing <phoneme alphabet="xsampa" ph="&#34;pEt"/>.</speak>
+
+# TEST I pit "pIt
+<speak xml:lang="en-US"> Testing <phoneme alphabet="xsampa" ph="&#34;pIt"/>.</speak>
+
+# TEST U put "pUt
+<speak xml:lang="en-US"> Testing <phoneme alphabet="xsampa" ph="&#34;pUt"/>.</speak>
+
+# TEST V cut "kVt
+<speak xml:lang="en-US"> Testing <phoneme alphabet="xsampa" ph="&#34;kVt"/>.</speak>
+
+# TEST { pat "p{t
+<speak xml:lang="en-US"> Testing <phoneme alphabet="xsampa" ph="&#34;p{t"/>.</speak>
+
+
+# --------- Long
+
+# TEST 3`: furs "f3`:z says [fuz z z]
+<speak xml:lang="en-US"> Testing <phoneme alphabet="xsampa" ph="&#34;f3`:z"/>.</speak>
+
+# TEST A: stars "stA:r\z says [starch]
+<speak xml:lang="en-US"> Testing <phoneme alphabet="xsampa" ph="&#34;stA:r\\z"/>.</speak>
+
+# TEST i: ease "i:z
+<speak xml:lang="en-US"> Testing <phoneme alphabet="xsampa" ph="&#34;i:z"/>.</speak>
+
+# TEST O: four "fO:r\
+<speak xml:lang="en-US"> Testing <phoneme alphabet="xsampa" ph="&#34;fO:r\\"/>.</speak>
+
+# TEST u: lose "lu:z
+<speak xml:lang="en-US"> Testing <phoneme alphabet="xsampa" ph="&#34;lu:z"/>.</speak>
+
+
+# --------- Diphthongs
+
+# TEST o_U nose "no_Uz
+<speak xml:lang="en-US"> Testing <phoneme alphabet="xsampa" ph="&#34;no_Uz"/>.</speak>
+
+# TEST O_I noise  "nO_Iz
+<speak xml:lang="en-US"> Testing <phoneme alphabet="xsampa" ph="&#34;nO_Iz"/>.</speak>
+
+# TEST a_I rise "r\a_Iz
+<speak xml:lang="en-US"> Testing <phoneme alphabet="xsampa" ph="&#34;r\\a_Iz"/>.</speak>
+
+# TEST a_U rouse "r\a_Uz
+<speak xml:lang="en-US"> Testing <phoneme alphabet="xsampa" ph="&#34;r\\a_Uz"/>.</speak>
+
+# TEST e_I raise "r\e_Iz
+<speak xml:lang="en-US"> Testing <phoneme alphabet="xsampa" ph="&#34;r\\e_Iz"/>.</speak>
+
+# --------- Other Symbols
+
+# TEST #  word separator, tested on "this yacht"
+<speak xml:lang="en-US"> Testing <phoneme alphabet="xsampa" ph="&#34;DIsjA:t"/> and <phoneme alphabet="xsampa" ph="&#34;DIs#jA:t"/>.</speak>
+
+# TEST %  secondary stress  NEED TEST HERE <<<<<<<<<<<<------------------------------------
+#<speak xml:lang="en-US"> not tested.</speak>
+
+# TEST .  syllable break    NEED TEST HERE <<<<<<<<<<<<------------------------------------
+#<speak xml:lang="en-US"> not tested.</speak>
+
+# BUG "  primary stress  BETTER TEST?      <<<<<<<<<<<<------------------------------------
+<speak xml:lang="en-US"> Testing <phoneme alphabet="xsampa" ph="&#34;no_Uz"/> and <phoneme alphabet="xsampa" ph="no_Uz"/> primary stress.</speak>
+
+# ---------
+
+# END_TEST
+
diff --git a/pico/tests/data/xsampa_pico_man_es-ES.txt b/pico/tests/data/xsampa_pico_man_es-ES.txt
new file mode 100644
index 0000000..898571c
--- /dev/null
+++ b/pico/tests/data/xsampa_pico_man_es-ES.txt
@@ -0,0 +1,131 @@
+
+# BEGIN_TEST
+
+#------------------------------
+# Spanish (es-ES)
+#
+# Notes: These tests use the XSAMPA examples given in the pico manual.
+#        The only differences between the manual and the test strings are:
+#        1/ replaced the primary stress character " (double quote) by its dec code &#34;
+#        2/ the XSAMPA "r\" is replaced by "r\\" (the backslash is escaped) otherwise pico says
+#           garbage or the [rrr] sound is pronounced "j" (as a french j)
+#        When a test is marked as "BUG", if possible, the tester will capture an approximate
+#        transcription of what was heard inside [ ].
+
+# Consonants
+# --------- Plosives
+
+# TEST b vino "bi.no
+<speak xml:lang="es-ES"> Puedo probar <phoneme alphabet="xsampa" ph="&#34;bi.no"/>.</speak>
+
+# TEST d donde "don.de
+<speak xml:lang="es-ES"> Puedo probar <phoneme alphabet="xsampa" ph="&#34;don.de"/>.</speak>
+
+# TEST g gato "ga.to
+<speak xml:lang="es-ES"> Puedo probar <phoneme alphabet="xsampa" ph="&#34;ga.to"/>.</speak>
+
+# TEST k casa "ka.sa
+<speak xml:lang="es-ES"> Puedo probar <phoneme alphabet="xsampa" ph="&#34;ka.sa"/>.</speak>
+
+# TEST p puente "pu_^en.te
+<speak xml:lang="es-ES"> Puedo probar <phoneme alphabet="xsampa" ph="&#34;pu_^en.te "/>.</speak>
+
+# TEST t tiempo "tjem.po
+<speak xml:lang="es-ES"> Puedo probar <phoneme alphabet="xsampa" ph="&#34;tjem.po"/>.</speak>
+
+
+# --------- Fricatives
+# TEST f fácil "fa.Til
+<speak xml:lang="es-ES"> Puedo probar <phoneme alphabet="xsampa" ph="&#34;fa.Til"/>.</speak>
+
+# TEST x hijo "i.xo
+<speak xml:lang="es-ES"> Puedo probar <phoneme alphabet="xsampa" ph="&#34;i.xo"/>.</speak>
+
+# TEST s sopa "so.pa
+<speak xml:lang="es-ES"> Puedo probar <phoneme alphabet="xsampa" ph="&#34;so.pa"/>.</speak>
+
+# TEST B cabeza ka."Be.Ta
+<speak xml:lang="es-ES"> Puedo probar <phoneme alphabet="xsampa" ph="ka.&#34;Be.Ta"/>.</speak>
+
+# TEST D dedo "de.Do
+<speak xml:lang="es-ES"> Puedo probar <phoneme alphabet="xsampa" ph="&#34;de.Do"/>.</speak>
+
+# TEST G luego "lu_^e.Go
+<speak xml:lang="es-ES"> Puedo probar <phoneme alphabet="xsampa" ph="&#34;lu_^e.Go"/>.</speak>
+
+# TEST T zona "To.na
+<speak xml:lang="es-ES"> Puedo probar <phoneme alphabet="xsampa" ph="&#34;To.na"/>.</speak>
+
+# TEST j\ cónyuge "kon.j\u.xe
+<speak xml:lang="es-ES"> Puedo probar <phoneme alphabet="xsampa" ph="&#34;kon.j\u.xe"/>.</speak>
+
+
+# --------- Affricates
+# TEST t_S mucho "mu.t_So
+<speak xml:lang="es-ES"> Puedo probar <phoneme alphabet="xsampa" ph="&#34;mu.t_So"/>.</speak>
+
+
+# --------- Approximants
+# TEST l lejos "le.xos
+<speak xml:lang="es-ES"> Puedo probar <phoneme alphabet="xsampa" ph="&#34;le.xos"/>.</speak>
+
+# BUG L caballo ca."Ba.Lo drops [c], says [aballo]
+<speak xml:lang="es-ES"> Puedo probar <phoneme alphabet="xsampa" ph="ca.&#34;Ba.Lo"/>.</speak>
+
+# IMPROVE j rey "rej [r] is not a strong r, should be
+<speak xml:lang="es-ES"> Puedo probar <phoneme alphabet="xsampa" ph="&#34;rej"/>.</speak>
+
+
+# --------- Nasals
+# TEST J año "a.Jo
+<speak xml:lang="es-ES"> Puedo probar <phoneme alphabet="xsampa" ph="&#34;a.Jo"/>.</speak>
+
+# TEST N nunca "nuN.ka
+<speak xml:lang="es-ES"> Puedo probar <phoneme alphabet="xsampa" ph="&#34;nuN.ka"/>.</speak>
+
+# TEST m monte "mon.te
+<speak xml:lang="es-ES"> Puedo probar <phoneme alphabet="xsampa" ph="&#34;mon.te"/>.</speak>
+
+# TEST n nota "no.ta
+<speak xml:lang="es-ES"> Puedo probar <phoneme alphabet="xsampa" ph="&#34;no.ta"/>.</speak>
+
+
+# --------- Tap, trill
+# TEST 4 hora "o.4a
+<speak xml:lang="es-ES"> Puedo probar <phoneme alphabet="xsampa" ph="&#34;o.4a"/>.</speak>
+
+# TEST r torre "to.re
+<speak xml:lang="es-ES"> Puedo probar <phoneme alphabet="xsampa" ph="&#34;to.re"/>.</speak>
+
+# Vowels
+# TEST a valle "ba.Le
+<speak xml:lang="es-ES"> Puedo probar <phoneme alphabet="xsampa" ph="&#34;ba.Le"/>.</speak>
+
+# TEST e pero "pe.4o
+<speak xml:lang="es-ES"> Puedo probar <phoneme alphabet="xsampa" ph="&#34;pe.4o"/>.</speak>
+
+# TEST i pico "pi.ko
+<speak xml:lang="es-ES"> Puedo probar <phoneme alphabet="xsampa" ph="&#34;pi.ko"/>.</speak>
+
+# TEST o toro "to.4o
+<speak xml:lang="es-ES"> Puedo probar <phoneme alphabet="xsampa" ph="&#34;to.4o"/>.</speak>
+
+# TEST u duro "du.4o
+<speak xml:lang="es-ES"> Puedo probar <phoneme alphabet="xsampa" ph="&#34;du.4o"/>.</speak>
+
+# TEST u_^ bueno "bu_^e.no
+<speak xml:lang="es-ES"> Puedo probar <phoneme alphabet="xsampa" ph="&#34;bu_^e.no"/>.</speak>
+
+
+# END_TEST
+
+# --------- Other Symbols
+#  word separator    NEED TEST HERE <<<<<<<<<<<<------------------------------------
+%  secondary stress  NEED TEST HERE <<<<<<<<<<<<------------------------------------
+.  syllable break    NEED TEST HERE <<<<<<<<<<<<------------------------------------
+"  primary stress    NEED TEST HERE <<<<<<<<<<<<------------------------------------
+
+
+# ---------
+
+
diff --git a/pico/tests/data/xsampa_pico_man_fr-FR.txt b/pico/tests/data/xsampa_pico_man_fr-FR.txt
new file mode 100644
index 0000000..6cf6d1a
--- /dev/null
+++ b/pico/tests/data/xsampa_pico_man_fr-FR.txt
@@ -0,0 +1,153 @@
+
+# BEGIN_TEST
+
+#------------------------------
+# French (fr-FR)
+#
+# Notes: These tests use the XSAMPA examples given in the pico manual.
+#        The only differences between the manual and the test strings are:
+#        1/ replaced the primary stress character " (double quote) by its dec code &#34;
+#        2/ the XSAMPA "r\" is replaced by "r\\" (the backslash is escaped) otherwise pico says
+#           garbage or the "rrr" sound is pronounced "j" (as a french j)
+#        When a test is marked as "BUG", if possible, the tester will capture an approximate
+#        transcription of what was heard inside [ ].
+
+# Consonants
+# --------- Plosives
+
+# TEST b bon "bO~
+<speak xml:lang="fr-FR"> Je teste <phoneme alphabet="xsampa" ph="&#34;bO~"/>.</speak>
+
+# TEST d dans "dA~
+<speak xml:lang="fr-FR"> Je teste <phoneme alphabet="xsampa" ph="&#34;dA~"/>.</speak>
+
+# TEST g gant "gA~
+<speak xml:lang="fr-FR"> Je teste <phoneme alphabet="xsampa" ph="&#34;gA~"/>.</speak>
+
+# TEST k quand "kA~
+<speak xml:lang="fr-FR"> Je teste <phoneme alphabet="xsampa" ph="&#34;kA~"/>.</speak>
+
+# TEST p pont "pO~
+<speak xml:lang="fr-FR"> Je teste <phoneme alphabet="xsampa" ph="&#34;pO~"/>.</speak>
+
+# TEST t temps "tA~
+<speak xml:lang="fr-FR"> Je teste <phoneme alphabet="xsampa" ph="&#34;tA~"/>.</speak>
+
+
+# --------- Nasals
+
+# TEST J oignon O."JO~
+<speak xml:lang="fr-FR"> Je teste <phoneme alphabet="xsampa" ph="O.&#34;JO~"/>.</speak>
+
+# TEST N camping kA~."piN
+<speak xml:lang="fr-FR"> Je teste <phoneme alphabet="xsampa" ph="kA~.&#34;piN"/>.</speak>
+
+# TEST m mont "mO~
+<speak xml:lang="fr-FR"> Je teste <phoneme alphabet="xsampa" ph="&#34;mO~"/>.</speak>
+
+# TEST n nom "nO~
+<speak xml:lang="fr-FR"> Je teste <phoneme alphabet="xsampa" ph="&#34;nO~"/>.</speak>
+
+
+# --------- Fricatives
+
+# TEST R rond "RO~
+<speak xml:lang="fr-FR"> Je teste <phoneme alphabet="xsampa" ph="&#34;RO~"/>.</speak>
+
+# TEST S champ "SA~
+<speak xml:lang="fr-FR"> Je teste <phoneme alphabet="xsampa" ph="&#34;SA~"/>.</speak>
+
+# TEST Z gens "ZA~
+<speak xml:lang="fr-FR"> Je teste <phoneme alphabet="xsampa" ph="&#34;ZA~"/>.</speak>
+
+# TEST f femme "fam
+<speak xml:lang="fr-FR"> Je teste <phoneme alphabet="xsampa" ph="&#34;fam"/>.</speak>
+
+# TEST s sans "sA~
+<speak xml:lang="fr-FR"> Je teste <phoneme alphabet="xsampa" ph="&#34;sA~"/>.</speak>
+
+# TEST v vent "vA~
+<speak xml:lang="fr-FR"> Je teste <phoneme alphabet="xsampa" ph="&#34;vA~"/>.</speak>
+
+# TEST z zone "zon
+<speak xml:lang="fr-FR"> Je teste <phoneme alphabet="xsampa" ph="&#34;zon"/>.</speak>
+
+
+# --------- Approximants
+
+# BUG H juin "ZHE~  says [j'lin]
+<speak xml:lang="fr-FR"> Je teste <phoneme alphabet="xsampa" ph="&#34;ZHE~"/>.</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~ works only in a sentence (here also used 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>
+
+
+# ---------  Vowels
+
+# TEST 2 deux "d2
+<speak xml:lang="fr-FR"> Je teste <phoneme alphabet="xsampa" ph="&#34;d2"/>.</speak>
+
+# TEST 9 neuf "n9f
+<speak xml:lang="fr-FR"> Je teste <phoneme alphabet="xsampa" ph="&#34;n9f"/>.</speak>
+
+# TEST @ justement  "Zys.t@.mA~
+<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>
+
+# TEST O comme "kOm
+<speak xml:lang="fr-FR"> Je teste <phoneme alphabet="xsampa" ph="&#34;kOm"/>.</speak>
+
+# TEST a patte "pat
+<speak xml:lang="fr-FR"> Je teste <phoneme alphabet="xsampa" ph="&#34;pat"/>.</speak>
+
+# TEST e ses "se
+<speak xml:lang="fr-FR"> Je teste <phoneme alphabet="xsampa" ph="&#34;se"/>.</speak>
+
+# TEST i si "si
+<speak xml:lang="fr-FR"> Je teste <phoneme alphabet="xsampa" ph="&#34;si"/>.</speak>
+
+# TEST o gros "gRo
+<speak xml:lang="fr-FR"> Je teste <phoneme alphabet="xsampa" ph="&#34;gRo"/>.</speak>
+
+# TEST u doux "du
+<speak xml:lang="fr-FR"> Je teste <phoneme alphabet="xsampa" ph="&#34;du"/>.</speak>
+
+# TEST y du "dy
+<speak xml:lang="fr-FR"> Je teste <phoneme alphabet="xsampa" ph="&#34;dy"/>.</speak>
+
+# TEST 9~ brun "bR9~
+<speak xml:lang="fr-FR"> Je teste <phoneme alphabet="xsampa" ph="&#34;bR9~"/>.</speak>
+
+# TEST E~ vin "vE~
+<speak xml:lang="fr-FR"> Je teste <phoneme alphabet="xsampa" ph="&#34;vE~"/>.</speak>
+
+# TEST O~ bon "bO~
+<speak xml:lang="fr-FR"> Je teste <phoneme alphabet="xsampa" ph="&#34;bO~"/>.</speak>
+
+# TEST A~ vent "vA~
+<speak xml:lang="fr-FR"> Je teste <phoneme alphabet="xsampa" ph="&#34;vA~"/>.</speak>
+
+
+# END_TEST
+
+# --------- Other Symbols
+#  word separator    NEED TEST HERE <<<<<<<<<<<<------------------------------------
+%  secondary stress  NEED TEST HERE <<<<<<<<<<<<------------------------------------
+.  syllable break    NEED TEST HERE <<<<<<<<<<<<------------------------------------
+"  primary stress    NEED TEST HERE <<<<<<<<<<<<------------------------------------
+
+
+# ---------
+
+
diff --git a/pico/tests/data/xsampa_pico_man_it-IT.txt b/pico/tests/data/xsampa_pico_man_it-IT.txt
new file mode 100644
index 0000000..eeb558d
--- /dev/null
+++ b/pico/tests/data/xsampa_pico_man_it-IT.txt
@@ -0,0 +1,210 @@
+
+# BEGIN_TEST
+
+#------------------------------
+# Italian (it-IT)
+#
+# Notes: These tests use the XSAMPA examples given in the pico manual.
+#        The only differences between the manual and the test strings are:
+#        1/ replaced the primary stress character " (double quote) by its dec code &#34;
+#        2/ the XSAMPA "r\" is replaced by "r\\" (the backslash is escaped) otherwise pico says
+#           garbage or the [rrr] sound is pronounced "j" (as a french j)
+#        When a test is marked as "BUG", if possible, the tester will capture an approximate
+#        transcription of what was heard inside [ ].
+
+# Consonants
+# --------- Plosives
+
+# TEST b banco "baN.ko
+<speak xml:lang="it-IT"> I test <phoneme alphabet="xsampa" ph="&#34;baN.ko"/>.</speak>
+
+# TEST d danno "da.n:o
+<speak xml:lang="it-IT"> I test <phoneme alphabet="xsampa" ph="&#34;da.n:o"/>.</speak>
+
+# TEST g gamba "gam.ba
+<speak xml:lang="it-IT"> I test <phoneme alphabet="xsampa" ph="&#34;gam.ba"/>.</speak>
+
+# TEST k cane "ka:.ne
+<speak xml:lang="it-IT"> I test <phoneme alphabet="xsampa" ph="&#34;ka:.ne"/>.</speak>
+
+# TEST p pane "pa:.ne
+<speak xml:lang="it-IT"> I test <phoneme alphabet="xsampa" ph="&#34;pa:.ne"/>.</speak>
+
+# TEST t tanto "tan.to
+<speak xml:lang="it-IT"> I test <phoneme alphabet="xsampa" ph="&#34;tan.to"/>.</speak>
+
+# TEST b: gobbo "go.b:o
+<speak xml:lang="it-IT"> I test <phoneme alphabet="xsampa" ph="&#34;go.b:o"/>.</speak>
+
+# TEST d: cadde "ka.d:e
+<speak xml:lang="it-IT"> I test <phoneme alphabet="xsampa" ph="&#34;ka.d:e"/>.</speak>
+
+# IMPROVE g: fugga "fu.g:a says [fuga] wrong g (not "plosive")
+<speak xml:lang="it-IT"> I test <phoneme alphabet="xsampa" ph="&#34;fu.g:a"/>.</speak>
+
+# TEST k: nocca "no.k:a
+<speak xml:lang="it-IT"> I test <phoneme alphabet="xsampa" ph="&#34;no.k:a"/>.</speak>
+
+# TEST p: coppa "ko.p:a
+<speak xml:lang="it-IT"> I test <phoneme alphabet="xsampa" ph="&#34;ko.p:a"/>.</speak>
+
+# TEST t: zucchetto t_su."k:e.t:o
+<speak xml:lang="it-IT"> I test <phoneme alphabet="xsampa" ph="t_su.&#34;k:e.t:o"/>.</speak>
+
+
+# --------- Fricatives
+
+# TEST S scendo "Sen.do
+<speak xml:lang="it-IT"> I test <phoneme alphabet="xsampa" ph="&#34;Sen.do"/>.</speak>
+
+# TEST f fame "fa:.me
+<speak xml:lang="it-IT"> I test <phoneme alphabet="xsampa" ph="&#34;fa:.me"/>.</speak>
+
+# TEST s sano "sa:.no
+<speak xml:lang="it-IT"> I test <phoneme alphabet="xsampa" ph="&#34;sa:.no"/>.</speak>
+
+# TEST v vano "va:.no
+<speak xml:lang="it-IT"> I test <phoneme alphabet="xsampa" ph="&#34;va:.no"/>.</speak>
+
+# TEST z sbaglio "zba.L:o
+<speak xml:lang="it-IT"> I test <phoneme alphabet="xsampa" ph="&#34;zba.L:o"/>.</speak>
+
+# IMPROVE S: ascia "a.S:a [sh] should be longer
+<speak xml:lang="it-IT"> I test <phoneme alphabet="xsampa" ph="&#34;a.S:a"/>.</speak>
+
+# IMPROVE f: beffa "be.f:a [ff] should be longer
+<speak xml:lang="it-IT"> I test <phoneme alphabet="xsampa" ph="&#34;be.f:a"/>.</speak>
+
+# IMPROVE s: cassa "ka.s:a [ss] should be longer
+<speak xml:lang="it-IT"> I test <phoneme alphabet="xsampa" ph="&#34;ka.s:a"/>.</speak>
+
+# IMPROVE v: bevvi "be.v:i [vv] should be more stressed
+<speak xml:lang="it-IT"> I test <phoneme alphabet="xsampa" ph="&#34;be.v:i"/>.</speak>
+
+
+# --------- Affricates
+
+# TEST d_z zona "d_zO:.na
+<speak xml:lang="it-IT"> I test <phoneme alphabet="xsampa" ph="&#34;d_zO:.na"/>.</speak>
+
+# TEST d_Z gita "d_Zi:.ta
+<speak xml:lang="it-IT"> I test <phoneme alphabet="xsampa" ph="&#34;d_Zi:.ta"/>.</speak>
+
+# TEST t_s zitto "t_si.t:o
+<speak xml:lang="it-IT"> I test <phoneme alphabet="xsampa" ph="&#34;t_si.t:o"/>.</speak>
+
+# TEST t_S cena "t_Se:.na
+<speak xml:lang="it-IT"> I test <phoneme alphabet="xsampa" ph="&#34;t_Se:.na"/>.</speak>
+
+# TEST d_z: mezzo "mE.d_z:o
+<speak xml:lang="it-IT"> I test <phoneme alphabet="xsampa" ph="&#34;mE.d_z:o"/>.</speak>
+
+# BUG d_Z: oggi "O.d_Z:i [o] is missing, [g] is wrong
+<speak xml:lang="it-IT"> I test <phoneme alphabet="xsampa" ph="&#34;O.d_Z:i"/>.</speak>
+
+# TEST t_s: bozza "bo.t_s:a
+<speak xml:lang="it-IT"> I test <phoneme alphabet="xsampa" ph="&#34;bo.t_s:a"/>.</speak>
+
+# TEST t_S: braccio "b4a.t_S:o
+<speak xml:lang="it-IT"> I test <phoneme alphabet="xsampa" ph="&#34;b4a.t_S:o"/>.</speak>
+
+# --------- Approximants
+
+# TEST l lama "la:.ma
+<speak xml:lang="it-IT"> I test <phoneme alphabet="xsampa" ph="&#34;la:.ma"/>.</speak>
+
+# IMPROVE L gli "Li the L sound is hard to recognize
+<speak xml:lang="it-IT"> I test <phoneme alphabet="xsampa" ph="&#34;Li"/>.</speak>
+
+# TEST l: colla "ko.l:a
+<speak xml:lang="it-IT"> I test <phoneme alphabet="xsampa" ph="&#34;ko.l:a"/>.</speak>
+
+# IMPROVE L: foglio "fo.L:o the L sound is hard to recognize
+<speak xml:lang="it-IT"> I test <phoneme alphabet="xsampa" ph="&#34;fo.L:o"/>.</speak>
+
+# --------- Nasals
+
+# BUG J gnocchi "JO.k:i [gn] is missing
+<speak xml:lang="it-IT"> I test <phoneme alphabet="xsampa" ph="&#34;JO.k:i"/>.</speak>
+
+# TEST N manca "maN.ka
+<speak xml:lang="it-IT"> I test <phoneme alphabet="xsampa" ph="&#34;maN.ka"/>.</speak>
+
+# TEST m modo "mO:.do
+<speak xml:lang="it-IT"> I test <phoneme alphabet="xsampa" ph="&#34;mO:.do"/>.</speak>
+
+# TEST n nato "na:.to
+<speak xml:lang="it-IT"> I test <phoneme alphabet="xsampa" ph="&#34;na:.to"/>.</speak>
+
+# TEST J: guadagna gu_^a."da.J:a
+<speak xml:lang="it-IT"> I test <phoneme alphabet="xsampa" ph="gu_^a.&#34;da.J:a"/>.</speak>
+
+# TEST m: partimmo pa4."ti.m:o
+<speak xml:lang="it-IT"> I test <phoneme alphabet="xsampa" ph="pa4.&#34;ti.m:o"/>.</speak>
+
+# TEST n: madonna ma."do.n:a
+<speak xml:lang="it-IT"> I test <phoneme alphabet="xsampa" ph="ma.&#34;do.n:a"/>.</speak>
+
+
+# --------- Tap, trill
+# TEST 4 pera "pE:.4a
+<speak xml:lang="it-IT"> I test <phoneme alphabet="xsampa" ph="&#34;pE:.4a"/>.</speak>
+
+# TEST r arrabiata a."ra.b:i_^a:.ta
+<speak xml:lang="it-IT"> I test <phoneme alphabet="xsampa" ph="a.&#34;ra.b:i_^a:.ta"/>.</speak>
+
+
+# Vowels
+
+# TEST a rata "4a:.ta
+<speak xml:lang="it-IT"> I test <phoneme alphabet="xsampa" ph="&#34;4a:.ta"/>.</speak>
+
+# TEST e rete "4e:.te
+<speak xml:lang="it-IT"> I test <phoneme alphabet="xsampa" ph="&#34;4e:.te"/>.</speak>
+
+# TEST E compiendo kom."pi_^En.do
+<speak xml:lang="it-IT"> I test <phoneme alphabet="xsampa" ph="kom.&#34;pi_^En.do"/>.</speak>
+
+# TEST i moderni mo."de4.ni
+<speak xml:lang="it-IT"> I test <phoneme alphabet="xsampa" ph="mo.&#34;de4.ni"/>.</speak>
+
+# TEST o sabato "sa:.ba.to
+<speak xml:lang="it-IT"> I test <phoneme alphabet="xsampa" ph="&#34;sa:.ba.to"/>.</speak>
+
+# BUG u occulta o."k_kul.ta [cc] is dropped, [t] is wrong, barely audible
+<speak xml:lang="it-IT"> I test <phoneme alphabet="xsampa" ph="o.&#34;k_kul.ta"/>.</speak>
+
+# TEST a: abitare a.bi."ta:.4e
+<speak xml:lang="it-IT"> I test <phoneme alphabet="xsampa" ph="a.bi.&#34;ta:.4e"/>.</speak>
+
+# TEST e: abete a."be:.te
+<speak xml:lang="it-IT"> I test <phoneme alphabet="xsampa" ph="a.&#34;be:.te"/>.</speak>
+
+# TEST E: alfieri al."fi_^E:.4i
+<speak xml:lang="it-IT"> I test <phoneme alphabet="xsampa" ph="al.&#34;fi_^E:.4i"/>.</speak>
+
+# TEST i: alpina al."pi:.na
+<speak xml:lang="it-IT"> I test <phoneme alphabet="xsampa" ph="al.&#34;pi:.na"/>.</speak>
+
+# TEST o: ardore a4."do:.4e
+<speak xml:lang="it-IT"> I test <phoneme alphabet="xsampa" ph="a4.&#34;do:.4e"/>.</speak>
+
+# TEST O: memoria me."mO:.4i_^a
+<speak xml:lang="it-IT"> I test <phoneme alphabet="xsampa" ph="me.&#34;mO:.4i_^a"/>.</speak>
+
+# TEST u: salubre sa."lu:.b4e
+<speak xml:lang="it-IT"> I test <phoneme alphabet="xsampa" ph="sa.&#34;lu:.b4e"/>.</speak>
+
+# TEST i_^ filiale fi."li_^a:.le
+<speak xml:lang="it-IT"> I test <phoneme alphabet="xsampa" ph="fi.&#34;li_^a:.le"/>.</speak>
+
+# TEST u_^ frequenta f4e."ku_^En.ta
+<speak xml:lang="it-IT"> I test <phoneme alphabet="xsampa" ph="f4e.&#34;ku_^En.ta"/>.</speak>
+
+# END_TEST
+
+# --------- Other Symbols
+#  word separator    NEED TEST HERE <<<<<<<<<<<<------------------------------------
+%  secondary stress  NEED TEST HERE <<<<<<<<<<<<------------------------------------
+.  syllable break    NEED TEST HERE <<<<<<<<<<<<------------------------------------
+"  primary stress    NEED TEST HERE <<<<<<<<<<<<------------------------------------
diff --git a/pico/tts/com_svox_picottsengine.cpp b/pico/tts/com_svox_picottsengine.cpp
index f7df2a4..6fb0ac7 100644
--- a/pico/tts/com_svox_picottsengine.cpp
+++ b/pico/tts/com_svox_picottsengine.cpp
@@ -29,6 +29,7 @@
  *   If the language is changed through an SSML tag, there is a latency for the load.
  *
  */
+//#define LOG_NDEBUG 0
 
 #include <stdio.h>
 #include <unistd.h>
@@ -583,6 +584,157 @@
 }
 
 
+/** get_tok
+ *  Searches for tokens in a string
+ *  @str - text to be processed
+ *  @pos - position of first character to be searched in str
+ *  @textlen - postion of last character to be searched
+ *  @tokstart - address of a variable to receive the start of the token found
+ *  @tokstart - address of a variable to receive the length of the token found
+ *  return : 1=token found, 0=token not found
+ *  notes : the token separator set could be enlarged adding characters in "seps"
+*/
+static int  get_tok(const char * str , int pos, int textlen, int *tokstart, int *toklen)
+{
+    const char * seps = " ";
+
+    /*look for start*/
+    while ((pos<textlen) && (strchr(seps,str[pos]) != NULL)) {
+        pos++;
+    }
+    if (pos == textlen) {
+        /*no characters != seps found whithin string*/
+        return 0;
+    }
+    *tokstart = pos;
+    /*look for end*/
+    while ((pos<textlen) && (strchr(seps,str[pos]) == NULL)) {
+        pos++;
+    }
+    *toklen = pos - *tokstart;
+    return 1;
+}/*get_tok*/
+
+
+/** get_sub_tok
+ *  Searches for subtokens in a token having a compound structure with camel case like "xxxYyyy"
+ *  @str - text to be processed
+ *  @pos - position of first character to be searched in str
+ *  @textlen - postion of last character to be searched in str
+ *  @tokstart - address of a variable to receive the start of the sub token found
+ *  @tokstart - address of a variable to receive the length of the sub token found
+ *  return : 1=sub token found, 0=sub token not found
+ *  notes : the sub token separator set could be enlarged adding characters in "seps"
+*/
+static int  get_sub_tok(const char * str , int pos, int textlen, int *tokstart, int *toklen) {
+
+    const char * seps = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";
+
+    if (pos == textlen) {
+        return 0;
+    }
+
+    /*first char != space*/
+    *tokstart = pos;
+    /*finding first non separator*/
+    while ((pos < textlen) && (strchr(seps, str[pos]) != NULL)) {
+        pos++;
+    }
+    if (pos == textlen) {
+        /*characters all in seps found whithin string : return full token*/
+        *toklen = pos - *tokstart;
+        return 1;
+    }
+    /*pos should be pointing to first non seps and more chars are there*/
+    /*finding first separator*/
+    while ((pos < textlen) && (strchr(seps, str[pos]) == NULL)) {
+        pos++;
+    }
+    if (pos == textlen) {
+        /*transition non seps->seps not found : return full token*/
+        *toklen = pos - *tokstart;
+        return 1;
+    }
+    *toklen = pos - *tokstart;
+    return 1;
+}/*get_sub_tok*/
+
+
+/** doCamelCase
+ *  Searches for tokens having a compound structure with camel case and transforms them as follows :
+ *        "XxxxYyyy" -->> "Xxxx Yyyy",
+ *        "xxxYyyy"  -->> "xxx Yyyy",
+ *        "XXXYyyy"  -->> "XXXYyyy"
+ *        etc....
+ *  The calling function is responsible for freeing the returned string.
+ *  @str - text to be processed
+ *  return new string with text processed
+*/
+static char * doCamelCase( const char * str )
+{
+    int     textlen;             /* input string length   */
+    int     totlen;              /* output string length   */
+    int     tlen_2, nsubtok;     /* nuber of subtokens   */
+    int     toklen, tokstart;    /*legnth and start of generic token*/
+    int     stoklen, stokstart;  /*legnth and start of generic sub-token*/
+    int     pos, tokpos, outpos; /*postion of current char in input string and token and output*/
+    char    *data;               /*pointer of the returned string*/
+
+    pos = 0;
+    tokpos = 0;
+    toklen = 0;
+    stoklen = 0;
+    tlen_2 = 0;
+    totlen = 0;
+
+    textlen = strlen(str) + 1;
+
+    /*counting characters after sub token splitting including spaces*/
+    //while ((pos<textlen) && (str[pos]!=0)) {
+    while (get_tok(str, pos, textlen, &tokstart, &toklen)) {
+        tokpos = tokstart;
+        tlen_2 = 0;
+        nsubtok = 0;
+        while (get_sub_tok(str, tokpos, tokstart+toklen, &stokstart, &stoklen)) {
+            totlen += stoklen;
+            tlen_2 += stoklen;
+            tokpos = stokstart + stoklen;
+            nsubtok += 1;
+        }
+        totlen += nsubtok;    /*add spaces between subtokens*/
+        pos = tokstart + tlen_2;
+    }
+    //}
+    /* Allocate the return string */
+    data = (char *) malloc( totlen );                  /* allocate string      */
+    if (!data) {
+        return NULL;
+    }
+    memset(data, 0, totlen);                           /* clear it             */
+    outpos = 0;
+    pos = 0;
+    /*copying characters*/
+    //while ((pos<textlen) && (str[pos]!=0)) {
+    while (get_tok  (str, pos, textlen, &tokstart, &toklen)) {
+        tokpos = tokstart;
+        tlen_2 = 0;
+        nsubtok = 0;
+        while (get_sub_tok(str, tokpos, tokstart+toklen, &stokstart, &stoklen)) {
+            strncpy(&(data[outpos]), &(str[stokstart]), stoklen);
+            outpos += stoklen;
+            strncpy(&(data[outpos]), " ", 1);
+            tlen_2 += stoklen;
+            outpos += 1;
+            tokpos = stokstart + stoklen;
+        }
+        pos=tokstart+tlen_2;
+    }
+    //}
+    data[outpos] = 0;
+    return data;
+}/*doCamelCase*/
+
+
 /** createPhonemeString
  *  Wrap all individual words in <phoneme> tags.
  *  The Pico <phoneme> tag only supports one word in each tag,
@@ -649,13 +801,16 @@
     char        strXSAMPA[6];       /* SAMPA sequence           */
 } PArr;
 
-#define phn_cnt (134)
+#define phn_cnt (134+7)
 
 PArr    PhnAry[phn_cnt] = {
 
-    /* XSAMPA conversion table      */
+    /* XSAMPA conversion table
+	   This maps a single IPA symbol to a sequence representing XSAMPA.
+       This relies upon a direct one-to-one correspondance
+       including diphthongs and affricates.						      */
 
-    /* Vowels (23) incomplete     */
+    /* Vowels (23) complete     */
     {0x025B,        "E"},
     {0x0251,        "A"},
     {0x0254,        "O"},
@@ -680,7 +835,7 @@
     {0x025E,        "3\\\\"},
     {0x0258,        "@\\\\"},
 
-    /* Consonants (60) incomplete */
+    /* Consonants (60) complete */
     {0x0288,        "t`"},
     {0x0256,        "d`"},
     {0x025F,        "J\\\\"},
@@ -731,6 +886,7 @@
     {0x029C,        "H\\\\"},
     {0x02A1,        ">\\\\"},
     {0x02A2,        "<\\\\"},
+    {0x0267,        "x\\\\"},		/* hooktop heng	*/
     {0x0298,        "O\\\\"},
     {0x01C0,        "|\\\\"},
     {0x01C3,        "!\\\\"},
@@ -739,10 +895,10 @@
     {0x027A,        "l\\\\"},
     {0x0255,        "s\\\\"},
     {0x0291,        "z\\\\"},
-    {0x0267,        "x\\\\"},
     {0x026B,        "l_G"},
 
-    /* Diacritics (34) incomplete */
+
+    /* Diacritics (37) complete */
     {0x02BC,        "_>"},
     {0x0325,        "_0"},
     {0x030A,        "_0"},
@@ -758,7 +914,7 @@
     {0x031C,        "_c"},
     {0x031F,        "_+"},
     {0x0320,        "_-"},
-    {0x0308,        "_\""},     /* centralized  */
+    {0x0308,        "_\""},     /* centralized		*/
     {0x033D,        "_x"},
     {0x0318,        "_A"},
     {0x0319,        "_q"},
@@ -766,30 +922,39 @@
     {0x02B7,        "_w"},
     {0x02B2,        "_j"},
     {0x02E0,        "_G"},
-    {0x02E4,        "_?\\\\"},
-    {0x0303,        "~"},
+    {0x02E4,        "_?\\\\"},	/* pharyngealized	*/
+    {0x0303,        "~"},		/* nasalized		*/
     {0x207F,        "_n"},
     {0x02E1,        "_l"},
     {0x031A,        "_}"},
     {0x0334,        "_e"},
-    {0x031D,        "_r"},
-    {0x031E,        "_o"},
-    {0x0329,        "="},
-    {0x032F,        "_^"},
-    {0x02D0,        ":"},
-
-    /* Others (11) complete */
-    {0x0361,        "_"},
+    {0x031D,        "_r"},		/* raised  equivalent to 02D4 */
+    {0x02D4,        "_r"},		/* raised  equivalent to 031D */
+    {0x031E,        "_o"},		/* lowered equivalent to 02D5 */
+    {0x02D5,        "_o"},		/* lowered equivalent to 031E */
+    {0x0329,        "="},		/* sylabic			*/
+    {0x032F,        "_^"},		/* non-sylabic		*/
+    {0x0361,        "_"},		/* top tie bar		*/
     {0x035C,        "_"},
-    {0x02C8,        "\""},
-    {0x02CC,        "%"},
-    {0x02D1,        ":\\\\"},
-    {0x0306,        "_X"},
-    {0x2016,        "||"},
-    {0x203F,        "-\\\\"},
-    {0x2197,        "<R>"},
-    {0x2198,        "<F>"},
-    {0x025D,                "3`"},
+
+    /* Suprasegmental (15) incomplete */
+    {0x02C8,        "\""},		/* primary   stress	*/
+    {0x02CC,        "%"},		/* secondary stress	*/
+    {0x02D0,        ":"},		/* long				*/
+    {0x02D1,        ":\\\\"},	/* half-long		*/
+    {0x0306,        "_X"},		/* extra short		*/
+
+    {0x2016,        "||"},		/* major group		*/
+    {0x203F,        "-\\\\"},	/* bottom tie bar	*/
+    {0x2197,        "<R>"},		/* global rise		*/
+    {0x2198,        "<F>"},		/* global fall		*/
+    {0x2193,        "<D>"},		/* downstep			*/
+    {0x2191,        "<U>"},		/* upstep			*/
+    {0x02E5,        "<T>"},		/* extra high level	*/
+    {0x02E7,        "<M>"},		/* mid level		*/
+    {0x02E9,        "<B>"},		/* extra low level	*/
+
+    {0x025D,        "3`:"},		/* non-IPA	%%		*/
 
     /* Affricates (6) complete  */
     {0x02A3,        "d_z"},
@@ -834,7 +999,7 @@
 int cnvIpaToXsampa( const char16_t * ipaString, size_t ipaStringSize, char ** outXsampaString )
 {
     size_t xsize;                                  /* size of result               */
-    int    ipidx;                                  /* index into IPA string        */
+    size_t ipidx;                                  /* index into IPA string        */
     char * XPnt;                                   /* short XSAMPA char sequence   */
 
     /* Convert an IPA string to an XSAMPA string and store the xsampa string in *outXsampaString.
@@ -1269,6 +1434,7 @@
     int         err;
     int         cbret;
     pico_Char * inp = NULL;
+    char *      expanded_text = NULL;
     pico_Char * local_text = NULL;
     short       outbuf[MAX_OUTBUF_SIZE/2];
     pico_Int16  bytes_sent, bytes_recv, text_remaining, out_data_type;
@@ -1338,10 +1504,16 @@
             return TTS_FAILURE;
         }
     } else {
+        /* camelCase pre-processing */
+        //expanded_text = doCamelCase(text);
         /* Add property tags to the string - if any.    */
-        local_text = (pico_Char *) doAddProperties( text );
+        local_text = (pico_Char *) doAddProperties( text );//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");
+            LOGE("Failed to allocate memory for text string");
             return TTS_FAILURE;
         }
     }
@@ -1354,9 +1526,9 @@
 
     /* synthesis loop   */
     while (text_remaining) {
-        
+
         if (picoSynthAbort) {
-            ret = pico_resetEngine( picoEngine );
+            ret = pico_resetEngine( picoEngine, PICO_RESET_SOFT );
             break;
         }
 
@@ -1374,11 +1546,11 @@
         inp += bytes_sent;
         do {
             if (picoSynthAbort) {
-                ret = pico_resetEngine( picoEngine );
+                ret = pico_resetEngine( picoEngine, PICO_RESET_SOFT );
                 break;
             }
             /* Retrieve the samples and add them to the buffer. */
-            ret = pico_getData( picoEngine, (void *) outbuf, MAX_OUTBUF_SIZE, &bytes_recv, 
+            ret = pico_getData( picoEngine, (void *) outbuf, MAX_OUTBUF_SIZE, &bytes_recv,
                     &out_data_type );
             if (bytes_recv) {
                 if ((bufused + bytes_recv) <= bufferSize) {
@@ -1391,7 +1563,7 @@
                     if (cbret == TTS_CALLBACK_HALT) {
                         LOGI("Halt requested by caller. Halting.");
                         picoSynthAbort = 1;
-                        ret = pico_resetEngine( picoEngine );
+                        ret = pico_resetEngine( picoEngine, PICO_RESET_SOFT );
                         break;
                     }
                     bufused = 0;
@@ -1419,7 +1591,7 @@
             LOGV("Synth loop: sending TTS_SYNTH_DONE after error");
             picoSynthDoneCBPtr( userdata, 16000, AudioSystem::PCM_16_BIT, 1, buffer, bufused,
                     TTS_SYNTH_DONE);
-            pico_resetEngine( picoEngine );
+            pico_resetEngine( picoEngine, PICO_RESET_SOFT );
             return TTS_FAILURE;
         }
     }
diff --git a/picolanginstaller/res/drawable/icon.png b/picolanginstaller/res/drawable/icon.png
old mode 100755
new mode 100644
index cdb9e94..997d87b
--- a/picolanginstaller/res/drawable/icon.png
+++ b/picolanginstaller/res/drawable/icon.png
Binary files differ
diff --git a/picolanginstaller/res/values-cs/strings.xml b/picolanginstaller/res/values-cs/strings.xml
index 6263d71..0480acc 100644
--- a/picolanginstaller/res/values-cs/strings.xml
+++ b/picolanginstaller/res/values-cs/strings.xml
@@ -19,6 +19,6 @@
     <string name="installing_message" msgid="8792926973732354514">"Instalace hlasových dat na kartu SD."</string>
     <string name="uninstall_message" msgid="174096141356529599">"Hlasová data byla úspěšně nainstalována. Instalační program můžete bezpečně odebrat."</string>
     <string name="uninstall" msgid="6195983436684617741">"Odinstalovat"</string>
-    <string name="retry_message" msgid="6519833625675608678">"Instalace hlasových dat se nezdařila. Zkontrolujte, zda je karta SD v zařízení a obsahuje alespoň 6 MB volného místa. Je-li karta již v zařízení, odeberte ji a vložte znovu."</string>
+    <string name="retry_message" msgid="6519833625675608678">"Instalace hlasových dat se nezdařila. Zkontrolujte, zda je karta SD v zařízení a obsahuje alespoň 6 MB volného místa. Je-li karta již v zařízení, odeberte ji a vložte znovu."</string>
     <string name="retry" msgid="7470276488993209974">"Zkusit znovu"</string>
 </resources>
diff --git a/picolanginstaller/res/values-da/strings.xml b/picolanginstaller/res/values-da/strings.xml
new file mode 100644
index 0000000..7244fbe
--- /dev/null
+++ b/picolanginstaller/res/values-da/strings.xml
@@ -0,0 +1,24 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- Copyright (C) 2009 The Android Open Source Project
+
+     Licensed under the Apache License, Version 2.0 (the "License");
+     you may not use this file except in compliance with the License.
+     You may obtain a copy of the License at
+
+          http://www.apache.org/licenses/LICENSE-2.0
+
+     Unless required by applicable law or agreed to in writing, software
+     distributed under the License is distributed on an "AS IS" BASIS,
+     WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+     See the License for the specific language governing permissions and
+     limitations under the License.
+-->
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="app_name" msgid="3853942104135735825">"Installationsprogram for talesyntesedata"</string>
+    <string name="installing_message" msgid="8792926973732354514">"Installation af stemmedata på SD-kort."</string>
+    <string name="uninstall_message" msgid="174096141356529599">"Stemmedataene er installeret. Du kan nu fjerne dette installationsprogram."</string>
+    <string name="uninstall" msgid="6195983436684617741">"Afinstaller"</string>
+    <string name="retry_message" msgid="6519833625675608678">"Stemmedata kunne ikke installeres. Kontroller, at dit SD-kort sidder i enheden og har mindst 6 MB ledig plads. Hvis kortet allerede sidder i enheden, skal du prøve at fjerne kortet og indsætte det igen."</string>
+    <string name="retry" msgid="7470276488993209974">"Prøv igen"</string>
+</resources>
diff --git a/picolanginstaller/res/values-de/strings.xml b/picolanginstaller/res/values-de/strings.xml
index e6b4eac..0cc7b02 100644
--- a/picolanginstaller/res/values-de/strings.xml
+++ b/picolanginstaller/res/values-de/strings.xml
@@ -20,5 +20,5 @@
     <string name="uninstall_message" msgid="174096141356529599">"Die Sprachdaten wurden erfolgreich installiert. Sie können dieses Installationsprogramm nun entfernen."</string>
     <string name="uninstall" msgid="6195983436684617741">"Deinstallieren"</string>
     <string name="retry_message" msgid="6519833625675608678">"Die Sprachdaten konnten nicht installiert werden. Stellen Sie sicher, dass sich die SD-Karte in Ihrem Gerät befindet und über mindestens 6 MB freien Speicherplatz verfügt. Wenn sich Ihre Karte bereits im Gerät befindet, entfernen Sie die Karte und setzen Sie sie dann wieder ein."</string>
-    <string name="retry" msgid="7470276488993209974">"Erneut versuchen"</string>
+    <string name="retry" msgid="7470276488993209974">"Wiederholen"</string>
 </resources>
diff --git a/picolanginstaller/res/values-el/strings.xml b/picolanginstaller/res/values-el/strings.xml
new file mode 100644
index 0000000..b8a281b
--- /dev/null
+++ b/picolanginstaller/res/values-el/strings.xml
@@ -0,0 +1,24 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- Copyright (C) 2009 The Android Open Source Project
+
+     Licensed under the Apache License, Version 2.0 (the "License");
+     you may not use this file except in compliance with the License.
+     You may obtain a copy of the License at
+
+          http://www.apache.org/licenses/LICENSE-2.0
+
+     Unless required by applicable law or agreed to in writing, software
+     distributed under the License is distributed on an "AS IS" BASIS,
+     WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+     See the License for the specific language governing permissions and
+     limitations under the License.
+-->
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="app_name" msgid="3853942104135735825">"Πρόγραμμα εγκατάστασης δεδομένων σύνθεσης ομιλίας"</string>
+    <string name="installing_message" msgid="8792926973732354514">"Εγκατάσταση δεδομένων φωνής στην κάρτα SD."</string>
+    <string name="uninstall_message" msgid="174096141356529599">"Η εγκατάσταση των δεδομένων φωνής ολοκληρώθηκε με επιτυχία. Μπορείτε τώρα να καταργήσετε το πρόγραμμα εγκατάστασης."</string>
+    <string name="uninstall" msgid="6195983436684617741">"Κατάργηση εγκατάστασης"</string>
+    <string name="retry_message" msgid="6519833625675608678">"Η εγκατάσταση των δεδομένων φωνής απέτυχε. Βεβαιωθείτε ότι η κάρτα SD είναι τοποθετημένη στη συσκευή σας και ότι έχει τουλάχιστον 6MB ελεύθερου χώρου. Εάν η κάρτα βρίσκεται ήδη στη συσκευή σας, δοκιμάστε να την αφαιρέσετε και να την τοποθετήσετε ξανά."</string>
+    <string name="retry" msgid="7470276488993209974">"Επανάληψη"</string>
+</resources>
diff --git a/picolanginstaller/res/values-es-rUS/strings.xml b/picolanginstaller/res/values-es-rUS/strings.xml
new file mode 100644
index 0000000..e9898be
--- /dev/null
+++ b/picolanginstaller/res/values-es-rUS/strings.xml
@@ -0,0 +1,24 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- Copyright (C) 2009 The Android Open Source Project
+
+     Licensed under the Apache License, Version 2.0 (the "License");
+     you may not use this file except in compliance with the License.
+     You may obtain a copy of the License at
+
+          http://www.apache.org/licenses/LICENSE-2.0
+
+     Unless required by applicable law or agreed to in writing, software
+     distributed under the License is distributed on an "AS IS" BASIS,
+     WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+     See the License for the specific language governing permissions and
+     limitations under the License.
+-->
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="app_name" msgid="3853942104135735825">"Instalador de datos de síntesis de voz"</string>
+    <string name="installing_message" msgid="8792926973732354514">"Instalando los datos de voz en la tarjeta SD"</string>
+    <string name="uninstall_message" msgid="174096141356529599">"Los datos de voz se han instalado de manera exitosa. Ahora puedes suprimir este instalador de manera segura."</string>
+    <string name="uninstall" msgid="6195983436684617741">"Desinstalar..."</string>
+    <string name="retry_message" msgid="6519833625675608678">"No se pudo instalar los datos de voz de manera correcta. Asegúrate de que tu tarjeta SD esté en tu dispositivo y que tenga al menos 6MB de espacio libre. Si tu tarjeta ya está en tu dispositivo, intenta sacarla y volverla a insertar."</string>
+    <string name="retry" msgid="7470276488993209974">"Intentar nuevamente"</string>
+</resources>
diff --git a/picolanginstaller/res/values-fr/strings.xml b/picolanginstaller/res/values-fr/strings.xml
index b167ab0..a97df4f 100644
--- a/picolanginstaller/res/values-fr/strings.xml
+++ b/picolanginstaller/res/values-fr/strings.xml
@@ -19,6 +19,6 @@
     <string name="installing_message" msgid="8792926973732354514">"Installation des données de la fonction de synthèse vocale sur la carte SD"</string>
     <string name="uninstall_message" msgid="174096141356529599">"Les données de la fonction de synthèse vocale ont été installées correctement. Vous pouvez maintenant supprimer ce programme d\'installation en toute sécurité."</string>
     <string name="uninstall" msgid="6195983436684617741">"Désinstaller"</string>
-    <string name="retry_message" msgid="6519833625675608678">"L\'installation des données de la fonction de synthèse vocale a échoué. Veuillez vérifier que vous avez bien inséré votre carte SD dans votre mobile et que celle-ci dispose d\'au moins 6 Mo d\'espace disponible. Si votre carte SD est déjà insérée dans votre appareil, essayez de la retirer et de la réinsérer."</string>
+    <string name="retry_message" msgid="6519833625675608678">"L\'installation des données de la fonction de synthèse vocale a échoué. Veuillez vérifier que vous avez bien inséré votre carte SD dans votre mobile et que celle-ci dispose d\'au moins 6 Mo d\'espace disponible. Si votre carte SD est déjà insérée dans l\'appareil, essayez de la retirer et de la réinsérer."</string>
     <string name="retry" msgid="7470276488993209974">"Réessayer"</string>
 </resources>
diff --git a/picolanginstaller/res/values-ja/strings.xml b/picolanginstaller/res/values-ja/strings.xml
index 7480db0..2ea06b8 100644
--- a/picolanginstaller/res/values-ja/strings.xml
+++ b/picolanginstaller/res/values-ja/strings.xml
@@ -16,9 +16,9 @@
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="app_name" msgid="3853942104135735825">"音声合成データのインストーラ"</string>
-    <string name="installing_message" msgid="8792926973732354514">"音声データをSDカードにインストールしています。"</string>
+    <string name="installing_message" msgid="8792926973732354514">"音声データをSDカードにインストール中です。"</string>
     <string name="uninstall_message" msgid="174096141356529599">"音声データは正常にインストールされました。これでこのインストーラを安全に削除できます。"</string>
     <string name="uninstall" msgid="6195983436684617741">"アンインストール"</string>
-    <string name="retry_message" msgid="6519833625675608678">"音声データをインストールできませんでした。最低6MBの空き容量があるSDカードが端末に挿入されていることを確認してください。既にSDカードが挿入されている場合は挿入し直してみてください。"</string>
+    <string name="retry_message" msgid="6519833625675608678">"音声データをインストールできませんでした。6MB以上の空き容量があるSDカードが端末に挿入されていることを確認してください。既にSDカードが挿入されている場合は、挿入し直してみてください。"</string>
     <string name="retry" msgid="7470276488993209974">"再試行"</string>
 </resources>
diff --git a/picolanginstaller/res/values-ko/strings.xml b/picolanginstaller/res/values-ko/strings.xml
new file mode 100644
index 0000000..269d723
--- /dev/null
+++ b/picolanginstaller/res/values-ko/strings.xml
@@ -0,0 +1,24 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- Copyright (C) 2009 The Android Open Source Project
+
+     Licensed under the Apache License, Version 2.0 (the "License");
+     you may not use this file except in compliance with the License.
+     You may obtain a copy of the License at
+
+          http://www.apache.org/licenses/LICENSE-2.0
+
+     Unless required by applicable law or agreed to in writing, software
+     distributed under the License is distributed on an "AS IS" BASIS,
+     WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+     See the License for the specific language governing permissions and
+     limitations under the License.
+-->
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="app_name" msgid="3853942104135735825">"음성 합성 데이터 설치 프로그램"</string>
+    <string name="installing_message" msgid="8792926973732354514">"SD 카드에 음성 데이터를 설치하는 중입니다."</string>
+    <string name="uninstall_message" msgid="174096141356529599">"음성 데이터가 성공적으로 설치되었습니다. 이제 이 설치 프로그램을 안전하게 삭제할 수 있습니다."</string>
+    <string name="uninstall" msgid="6195983436684617741">"제거"</string>
+    <string name="retry_message" msgid="6519833625675608678">"음성 데이터가 설치되지 않았습니다. SD 카드가 장치에 삽입되어 있고 사용 가능한 공간이 6MB 이상인지 확인하시기 바랍니다. 카드가 이미 장치에 삽입되어 있으면 카드를 제거하고 다시 삽입해 보세요."</string>
+    <string name="retry" msgid="7470276488993209974">"다시 시도"</string>
+</resources>
diff --git a/picolanginstaller/res/values-nb/strings.xml b/picolanginstaller/res/values-nb/strings.xml
new file mode 100644
index 0000000..49fbed8
--- /dev/null
+++ b/picolanginstaller/res/values-nb/strings.xml
@@ -0,0 +1,24 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- Copyright (C) 2009 The Android Open Source Project
+
+     Licensed under the Apache License, Version 2.0 (the "License");
+     you may not use this file except in compliance with the License.
+     You may obtain a copy of the License at
+
+          http://www.apache.org/licenses/LICENSE-2.0
+
+     Unless required by applicable law or agreed to in writing, software
+     distributed under the License is distributed on an "AS IS" BASIS,
+     WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+     See the License for the specific language governing permissions and
+     limitations under the License.
+-->
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="app_name" msgid="3853942104135735825">"Installasjonsprogram for tale-syntesedata"</string>
+    <string name="installing_message" msgid="8792926973732354514">"Installer stemmedata på SD-kort."</string>
+    <string name="uninstall_message" msgid="174096141356529599">"Stemmedata er installert. Du kan fjerne dette installasjonsprogrammet nå."</string>
+    <string name="uninstall" msgid="6195983436684617741">"Avinstaller"</string>
+    <string name="retry_message" msgid="6519833625675608678">"Stemmedata kunne ikke installere. Kontroller at SD-kortet er i enheten, og at det har ledig plass på minst 6 MB. Hvis kortet er i enheten, prøv å ta ut kortet og sette det inn igjen."</string>
+    <string name="retry" msgid="7470276488993209974">"Prøv på nytt"</string>
+</resources>
diff --git a/picolanginstaller/res/values-nl/strings.xml b/picolanginstaller/res/values-nl/strings.xml
index 9236d72..0555896 100644
--- a/picolanginstaller/res/values-nl/strings.xml
+++ b/picolanginstaller/res/values-nl/strings.xml
@@ -19,6 +19,6 @@
     <string name="installing_message" msgid="8792926973732354514">"Stemgegevens installeren op SD-kaart."</string>
     <string name="uninstall_message" msgid="174096141356529599">"De stemgegevens zijn geïnstalleerd. U kunt dit installatieprogramma nu veilig verwijderen."</string>
     <string name="uninstall" msgid="6195983436684617741">"Verwijderen"</string>
-    <string name="retry_message" msgid="6519833625675608678">"Het installeren van de stemgegevens is mislukt. Controleer of de SD-kaart in het apparaat is geplaatst en ten minste 6 MB vrije ruimte heeft. Als de kaart al in het apparaat is geplaatst, verwijdert u de kaart en plaatst u deze opnieuw."</string>
+    <string name="retry_message" msgid="6519833625675608678">"Het installeren van de stemgegevens is mislukt. Controleer of de SD-kaart in het apparaat is geplaatst en er ten minste 6 MB vrije ruimte beschikbaar is. Als de kaart al in het apparaat is geplaatst, verwijdert u de kaart en plaatst u deze opnieuw."</string>
     <string name="retry" msgid="7470276488993209974">"Opnieuw proberen"</string>
 </resources>
diff --git a/picolanginstaller/res/values-pl/strings.xml b/picolanginstaller/res/values-pl/strings.xml
index aef790d..a6c69ad 100644
--- a/picolanginstaller/res/values-pl/strings.xml
+++ b/picolanginstaller/res/values-pl/strings.xml
@@ -20,5 +20,5 @@
     <string name="uninstall_message" msgid="174096141356529599">"Dane głosowe zostały pomyślnie zainstalowane. Możesz teraz bezpiecznie usunąć ten program instalacyjny."</string>
     <string name="uninstall" msgid="6195983436684617741">"Odinstaluj"</string>
     <string name="retry_message" msgid="6519833625675608678">"Zainstalowanie danych głosowych nie powiodło się. Sprawdź, czy w urządzeniu znajduje się karta SD zawierająca co najmniej 6 MB wolnego miejsca. Jeśli karta znajduje się w urządzeniu, wyjmij ją i włóż ponownie."</string>
-    <string name="retry" msgid="7470276488993209974">"Ponów"</string>
+    <string name="retry" msgid="7470276488993209974">"Ponów próbę"</string>
 </resources>
diff --git a/picolanginstaller/res/values-pt-rPT/strings.xml b/picolanginstaller/res/values-pt-rPT/strings.xml
new file mode 100644
index 0000000..11dae9b
--- /dev/null
+++ b/picolanginstaller/res/values-pt-rPT/strings.xml
@@ -0,0 +1,24 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- Copyright (C) 2009 The Android Open Source Project
+
+     Licensed under the Apache License, Version 2.0 (the "License");
+     you may not use this file except in compliance with the License.
+     You may obtain a copy of the License at
+
+          http://www.apache.org/licenses/LICENSE-2.0
+
+     Unless required by applicable law or agreed to in writing, software
+     distributed under the License is distributed on an "AS IS" BASIS,
+     WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+     See the License for the specific language governing permissions and
+     limitations under the License.
+-->
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="app_name" msgid="3853942104135735825">"Instalador de dados de reprodução de voz"</string>
+    <string name="installing_message" msgid="8792926973732354514">"A instalar dados de voz no cartão SD."</string>
+    <string name="uninstall_message" msgid="174096141356529599">"Os dados de voz foram instalados com êxito. Agora já pode remover este instalador com segurança."</string>
+    <string name="uninstall" msgid="6195983436684617741">"Desinstalar"</string>
+    <string name="retry_message" msgid="6519833625675608678">"A instalação dos dados de voz falhou. Certifique-se de que o seu cartão SD está inserido no respectivo dispositivo e de que possui, pelo menos, 6 MB de espaço livre. Se o cartão já estiver no dispositivo, experimente retirá-lo e voltar a inseri-lo."</string>
+    <string name="retry" msgid="7470276488993209974">"Tentar novamente"</string>
+</resources>
diff --git a/picolanginstaller/res/values-pt/strings.xml b/picolanginstaller/res/values-pt/strings.xml
new file mode 100644
index 0000000..f224726
--- /dev/null
+++ b/picolanginstaller/res/values-pt/strings.xml
@@ -0,0 +1,24 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- Copyright (C) 2009 The Android Open Source Project
+
+     Licensed under the Apache License, Version 2.0 (the "License");
+     you may not use this file except in compliance with the License.
+     You may obtain a copy of the License at
+
+          http://www.apache.org/licenses/LICENSE-2.0
+
+     Unless required by applicable law or agreed to in writing, software
+     distributed under the License is distributed on an "AS IS" BASIS,
+     WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+     See the License for the specific language governing permissions and
+     limitations under the License.
+-->
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="app_name" msgid="3853942104135735825">"Instalador de dados de sintetização de voz"</string>
+    <string name="installing_message" msgid="8792926973732354514">"Instalando os dados de voz no cartão SD."</string>
+    <string name="uninstall_message" msgid="174096141356529599">"Os dados de voz foram instalados com êxito. O instalador já pode ser removido com segurança."</string>
+    <string name="uninstall" msgid="6195983436684617741">"Desinstalar"</string>
+    <string name="retry_message" msgid="6519833625675608678">"Falha na instalação dos dados de voz. Verifique se o seu cartão SD está no aparelho e tem no mínimo 6 MB de espaço livre. Se o cartão já estiver no seu dispositivo, remova-o e o insira novamente."</string>
+    <string name="retry" msgid="7470276488993209974">"Tentar novamente"</string>
+</resources>
diff --git a/picolanginstaller/res/values-ru/strings.xml b/picolanginstaller/res/values-ru/strings.xml
new file mode 100644
index 0000000..ab9e013
--- /dev/null
+++ b/picolanginstaller/res/values-ru/strings.xml
@@ -0,0 +1,24 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- Copyright (C) 2009 The Android Open Source Project
+
+     Licensed under the Apache License, Version 2.0 (the "License");
+     you may not use this file except in compliance with the License.
+     You may obtain a copy of the License at
+
+          http://www.apache.org/licenses/LICENSE-2.0
+
+     Unless required by applicable law or agreed to in writing, software
+     distributed under the License is distributed on an "AS IS" BASIS,
+     WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+     See the License for the specific language governing permissions and
+     limitations under the License.
+-->
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="app_name" msgid="3853942104135735825">"Установщик данных синтезатора речи"</string>
+    <string name="installing_message" msgid="8792926973732354514">"Установка голосовых данных на SD-карте."</string>
+    <string name="uninstall_message" msgid="174096141356529599">"Голосовые данные установлены успешно. Можно удалить установщик."</string>
+    <string name="uninstall" msgid="6195983436684617741">"Удалить"</string>
+    <string name="retry_message" msgid="6519833625675608678">"Произошел сбой при установке голосовых данных. Убедитесь, что на SD-карте вашего устройства имеется как минимум 6 МБ свободного пространства. Если карта уже находится в устройстве, попробуйте извлечь ее и снова вставить."</string>
+    <string name="retry" msgid="7470276488993209974">"Повторить попытку"</string>
+</resources>
diff --git a/picolanginstaller/res/values-sv/strings.xml b/picolanginstaller/res/values-sv/strings.xml
new file mode 100644
index 0000000..a951927
--- /dev/null
+++ b/picolanginstaller/res/values-sv/strings.xml
@@ -0,0 +1,24 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- Copyright (C) 2009 The Android Open Source Project
+
+     Licensed under the Apache License, Version 2.0 (the "License");
+     you may not use this file except in compliance with the License.
+     You may obtain a copy of the License at
+
+          http://www.apache.org/licenses/LICENSE-2.0
+
+     Unless required by applicable law or agreed to in writing, software
+     distributed under the License is distributed on an "AS IS" BASIS,
+     WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+     See the License for the specific language governing permissions and
+     limitations under the License.
+-->
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="app_name" msgid="3853942104135735825">"Datainstallationsprogram för talsyntes"</string>
+    <string name="installing_message" msgid="8792926973732354514">"Installera röstdata på SD-kort."</string>
+    <string name="uninstall_message" msgid="174096141356529599">"Röstdata har installerats. Du kan nu ta bort installationsprogrammet."</string>
+    <string name="uninstall" msgid="6195983436684617741">"Avinstallera"</string>
+    <string name="retry_message" msgid="6519833625675608678">"Röstdata kunde inte installeras. Kontrollera att SD-kortet i enheten har minst 6 MB ledigt utrymme. Om kortet redan sitter i enheten kan du pröva med att ta ut och sätta tillbaka det."</string>
+    <string name="retry" msgid="7470276488993209974">"Försök igen"</string>
+</resources>
diff --git a/picolanginstaller/res/values-tr/strings.xml b/picolanginstaller/res/values-tr/strings.xml
new file mode 100644
index 0000000..b210197
--- /dev/null
+++ b/picolanginstaller/res/values-tr/strings.xml
@@ -0,0 +1,24 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- Copyright (C) 2009 The Android Open Source Project
+
+     Licensed under the Apache License, Version 2.0 (the "License");
+     you may not use this file except in compliance with the License.
+     You may obtain a copy of the License at
+
+          http://www.apache.org/licenses/LICENSE-2.0
+
+     Unless required by applicable law or agreed to in writing, software
+     distributed under the License is distributed on an "AS IS" BASIS,
+     WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+     See the License for the specific language governing permissions and
+     limitations under the License.
+-->
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="app_name" msgid="3853942104135735825">"Konuşma Sentezi Veri Yükleyicisi"</string>
+    <string name="installing_message" msgid="8792926973732354514">"Ses verileri SD karta yükleniyor."</string>
+    <string name="uninstall_message" msgid="174096141356529599">"Ses verileri başarıyla yüklendi. Bu yükleyiciyi artık güvenle kaldırabilirsiniz."</string>
+    <string name="uninstall" msgid="6195983436684617741">"Kaldır"</string>
+    <string name="retry_message" msgid="6519833625675608678">"Ses verileri yüklenemedi. Lütfen SD kartınızın cihazınızda olduğundan ve en az 6 MB boş alan bulunduğundan emin olun. Kartınız zaten cihazınızdaysa kartı çıkarmayı ve yeniden takmayı deneyin."</string>
+    <string name="retry" msgid="7470276488993209974">"Tekrar Dene"</string>
+</resources>
diff --git a/picolanginstaller/res/values-zh-rCN/strings.xml b/picolanginstaller/res/values-zh-rCN/strings.xml
new file mode 100644
index 0000000..1c14c74
--- /dev/null
+++ b/picolanginstaller/res/values-zh-rCN/strings.xml
@@ -0,0 +1,24 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- Copyright (C) 2009 The Android Open Source Project
+
+     Licensed under the Apache License, Version 2.0 (the "License");
+     you may not use this file except in compliance with the License.
+     You may obtain a copy of the License at
+
+          http://www.apache.org/licenses/LICENSE-2.0
+
+     Unless required by applicable law or agreed to in writing, software
+     distributed under the License is distributed on an "AS IS" BASIS,
+     WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+     See the License for the specific language governing permissions and
+     limitations under the License.
+-->
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="app_name" msgid="3853942104135735825">"语音合成数据安装程序"</string>
+    <string name="installing_message" msgid="8792926973732354514">"正在将语音数据安装到 SD 卡上。"</string>
+    <string name="uninstall_message" msgid="174096141356529599">"语音数据安装成功,现在可以安全地删除此安装程序。"</string>
+    <string name="uninstall" msgid="6195983436684617741">"卸载"</string>
+    <string name="retry_message" msgid="6519833625675608678">"语音数据安装失败。请确保已将 SD 卡插入您的设备,并至少有 6 MB 可用空间。如果您的 SD 卡已插入设备中,请尝试将其拔下并重新插入。"</string>
+    <string name="retry" msgid="7470276488993209974">"重试"</string>
+</resources>
diff --git a/picolanginstaller/res/values-zh-rTW/strings.xml b/picolanginstaller/res/values-zh-rTW/strings.xml
index 98b0646..5c0c8ab 100644
--- a/picolanginstaller/res/values-zh-rTW/strings.xml
+++ b/picolanginstaller/res/values-zh-rTW/strings.xml
@@ -19,6 +19,6 @@
     <string name="installing_message" msgid="8792926973732354514">"正在 SD 卡上安裝語音資料。"</string>
     <string name="uninstall_message" msgid="174096141356529599">"已安裝語音資料,您可以移除安裝程式了。"</string>
     <string name="uninstall" msgid="6195983436684617741">"解除安裝"</string>
-    <string name="retry_message" msgid="6519833625675608678">"無法安裝語音資料,請確定您的手機已插入 SD 卡,且有 6MB 的可用空間。如果您已插入 SD 卡,請取出再重新插入一次。"</string>
+    <string name="retry_message" msgid="6519833625675608678">"無法安裝語音資料,請檢查手機是否已插入 SD 卡,以及是否有 6MB 的可用空間。如果您已插入 SD 卡,請取出再重新插入一次。"</string>
     <string name="retry" msgid="7470276488993209974">"重試"</string>
 </resources>