diff --git a/svl/source/numbers/zformat.cxx b/svl/source/numbers/zformat.cxx
index 4c14323..4be957e 100644
--- a/svl/source/numbers/zformat.cxx
+++ b/svl/source/numbers/zformat.cxx
@@ -715,6 +715,7 @@ SvNumberformat::SvNumberformat(String& rString,
             }
             else if ( lcl_SvNumberformat_IsBracketedPrefix( eSymbolType ) )
             {
+                LanguageType eLang = LANGUAGE_DONTKNOW;
                 switch ( eSymbolType )
                 {
                     case BRACKET_SYMBOLTYPE_COLOR :
@@ -807,13 +808,13 @@ SvNumberformat::SvNumberformat(String& rString,
                         else
                         {
                             xub_StrLen nTmp = 2;
-                            LanguageType eLang = ImpGetLanguageType( sStr, nTmp );
+                            eLang = ImpGetLanguageType( sStr, nTmp );
                             if ( eLang == LANGUAGE_DONTKNOW )
                             {
                                 bCancel = TRUE;         // break for
                                 nCheckPos = nPosOld;
                             }
-                            else
+                            else if ( eLang != 0 )
                             {
                                 sStr.AssignAscii( RTL_CONSTASCII_STRINGPARAM( "$-" ) );
                                 sStr += String::CreateFromInt32( sal_Int32( eLang ), 16 ).ToUpperAscii();
@@ -826,12 +827,19 @@ SvNumberformat::SvNumberformat(String& rString,
                 if ( !bCancel )
                 {
                     rString.Erase(nPosOld,nPos-nPosOld);
-                    rString.Insert(sStr,nPosOld);
-                    nPos = nPosOld + sStr.Len();
-                    rString.Insert(']', nPos);
-                    rString.Insert('[', nPosOld);
-                    nPos += 2;
-                    nPosOld = nPos;     // position before string
+                    if ( eLang != 0 )
+                    {
+                        rString.Insert(sStr,nPosOld);
+                        nPos = nPosOld + sStr.Len();
+                        rString.Insert(']', nPos);
+                        rString.Insert('[', nPosOld);
+                        nPos += 2;
+                        nPosOld = nPos;     // position before string
+                    }
+                    else
+                    {
+                        nPos = nPosOld;     // Excel LCID removed
+                    }
                 }
             }
         } while ( !bCancel && lcl_SvNumberformat_IsBracketedPrefix( eSymbolType ) );
@@ -1220,6 +1228,16 @@ short SvNumberformat::ImpNextSymbol(String& rString,
                     {
                         if ( rString.GetChar(nPos) == '-' )
                         {   // [$-xxx] locale
+                            if ( rString.GetChar(nPos+2) == '0' && rString.GetChar(nPos+3) == '7' ) // calendar type code "07" = Thai
+                            {
+                              rString.InsertAscii( "[~buddhist]", nPos+9 );
+                              nLen += 11;
+                            }
+                            if ( rString.GetChar(nPos+1) == 'D' ) // numeral shape code "D" = Thai digits
+                            {
+                              rString.InsertAscii( "[NatNum1]", nPos+9 );
+                              nLen += 9;
+                            }
                             sSymbol.EraseAllChars('[');
                             eSymbolType = BRACKET_SYMBOLTYPE_LOCALE;
                             eState = SsGetPrefix;
@@ -4211,6 +4229,7 @@ String SvNumberformat::GetMappedFormatstring(
             nSem++;
 
         String aPrefix;
+        bool LCIDInserted = FALSE;
 
         if ( !bDefaults )
         {
@@ -4244,14 +4263,6 @@ String SvNumberformat::GetMappedFormatstring(
         }
 
         const SvNumberNatNum& rNum = NumFor[n].GetNatNum();
-        // The Thai T NatNum modifier during Xcl export.
-        if (rNum.IsSet() && rNum.GetNatNum() == 1 &&
-                rKeywords[NF_KEY_THAI_T].EqualsAscii( "T") &&
-                MsLangId::getRealLanguage( rNum.GetLang()) ==
-                LANGUAGE_THAI)
-        {
-            aPrefix += 't';     // must be lowercase, otherwise taken as literal
-        }
 
         USHORT nAnz = NumFor[n].GetnAnz();
         if ( nSem && (nAnz || aPrefix.Len()) )
@@ -4311,6 +4322,25 @@ String SvNumberformat::GetMappedFormatstring(
                                 aStr += '"';
                             }
                             break;
+                        case NF_SYMBOLTYPE_CALDEL :
+                            if ( pStr[j+1].EqualsAscii("buddhist") )
+                            {
+                                //aStr.InsertAscii( "[$-", aStr.Len() );
+                                aStr.InsertAscii( "[$-", 0 );
+                                if ( rNum.IsSet() && rNum.GetNatNum() == 1 &&
+                                        MsLangId::getRealLanguage( rNum.GetLang() ) ==
+                                        LANGUAGE_THAI )
+                                {
+                                    aStr.InsertAscii( "D07041E]", 3 ); // date in Thai digit, Buddhist era
+                                }
+                                else
+                                {
+                                    aStr.InsertAscii( "107041E]", 3 ); // date in Arabic digit, Buddhist era
+                                }
+                                j = j+2;
+                            }
+                            LCIDInserted = TRUE;
+                        break;
                         default:
                             aStr += pStr[j];
                     }
@@ -4318,6 +4348,15 @@ String SvNumberformat::GetMappedFormatstring(
                 }
             }
         }
+        // The Thai T NatNum modifier during Xcl export.
+        if (rNum.IsSet() && rNum.GetNatNum() == 1 &&
+                rKeywords[NF_KEY_THAI_T].EqualsAscii( "T") &&
+                MsLangId::getRealLanguage( rNum.GetLang()) ==
+                LANGUAGE_THAI && !LCIDInserted )
+        {
+            
+            aStr.InsertAscii( "[$-D00041E]", 0 ); // number in Thai digit
+        }
     }
     for ( ; nSub<4 && bDefault[nSub]; ++nSub )
     {   // append empty subformats