--- framework/source/accelerators/acceleratorconfiguration.cxx	2006-04-24 17:17:46.000000000 +0000
+++ framework/source/accelerators/acceleratorconfiguration.cxx	2006-04-24 17:59:05.000000000 +0000
@@ -340,9 +340,16 @@ void SAL_CALL AcceleratorConfiguration::
     throw(css::uno::Exception       ,
           css::uno::RuntimeException)
 {
+    css::uno::Reference< css::io::XStream > xStreamNoLang;
+
     // SAFE -> ----------------------------------
     ReadGuard aReadLock(m_aLock);
     css::uno::Reference< css::io::XStream > xStream = m_aPresetHandler.openTarget(PresetHandler::TARGET_CURRENT(), sal_True); // TRUE => open or create!
+    try
+    {
+        xStreamNoLang = m_aPresetHandler.openPreset(PresetHandler::PRESET_DEFAULT(), sal_True);
+    }
+    catch(const css::io::IOException&) {} // does not have to exist
     aReadLock.unlock();    
     // <- SAFE ----------------------------------
     
@@ -354,7 +361,23 @@ void SAL_CALL AcceleratorConfiguration::
                 ::rtl::OUString::createFromAscii("Could not open accelerator configuration for reading."),
                 static_cast< ::cppu::OWeakObject* >(this));
                 
+    // impl_ts_load() does not clear the cache
+    // SAFE -> ----------------------------------
+    WriteGuard aWriteLock(m_aLock);
+    m_aReadCache = AcceleratorCache();
+    aWriteLock.unlock();
+    // <- SAFE ----------------------------------
+
     impl_ts_load(xIn);    
+
+    // Load also the general language independent default accelerators
+    // (ignoring the already defined accelerators)
+    if (xStreamNoLang.is())
+    {
+        xIn = xStreamNoLang->getInputStream();
+        if (xIn.is())
+            impl_ts_load(xIn);
+    }
 }
           
 //-----------------------------------------------    
@@ -519,12 +535,15 @@ void AcceleratorConfiguration::impl_ts_l
     if (xSeek.is())
         xSeek->seek(0);
     
+    // add accelerators to the cache (the cache is not cleared)
+    // SAFE -> ----------------------------------
+    aWriteLock.lock();
+
     // create the parser queue
     // Note: Use special filter object between parser and reader
     // to get filtered xml with right namespaces ...
     // Use further a temp cache for reading!
-    AcceleratorCache                                       aCache  ;
-    AcceleratorConfigurationReader*                        pReader = new AcceleratorConfigurationReader(aCache);
+    AcceleratorConfigurationReader*                        pReader = new AcceleratorConfigurationReader(m_aReadCache);
     css::uno::Reference< css::xml::sax::XDocumentHandler > xReader (static_cast< ::cppu::OWeakObject* >(pReader), css::uno::UNO_QUERY_THROW);
     SaxNamespaceFilter*                                    pFilter = new SaxNamespaceFilter(xReader);  
     css::uno::Reference< css::xml::sax::XDocumentHandler > xFilter (static_cast< ::cppu::OWeakObject* >(pFilter), css::uno::UNO_QUERY_THROW);
@@ -539,10 +558,6 @@ void AcceleratorConfiguration::impl_ts_l
     // TODO think about error handling
     xParser->parseStream(aSource);
     
-    // take over the filled cache
-    // SAFE -> ----------------------------------
-    aWriteLock.lock();
-    m_aReadCache = aCache;
     aWriteLock.unlock();
     // <- SAFE ----------------------------------
 }
--- framework/source/accelerators/presethandler.cxx	2005-09-30 10:11:22.000000000 +0000
+++ framework/source/accelerators/presethandler.cxx	2006-04-24 17:48:53.000000000 +0000
@@ -175,12 +175,14 @@ PresetHandler::PresetHandler(const Prese
     m_sModule               = rCopy.m_sModule;
     m_aSharedStorages       = rCopy.m_aSharedStorages;
     m_xWorkingStorageShare  = rCopy.m_xWorkingStorageShare;
+    m_xWorkingStorageNoLang = rCopy.m_xWorkingStorageNoLang;
     m_xWorkingStorageUser   = rCopy.m_xWorkingStorageUser;
     m_lPresets              = rCopy.m_lPresets;
     m_lTargets              = rCopy.m_lTargets;
     m_aLocale               = rCopy.m_aLocale;
     m_lDocumentStorages     = rCopy.m_lDocumentStorages;
     m_sRelPathShare         = rCopy.m_sRelPathShare;
+    m_sRelPathNoLang        = rCopy.m_sRelPathNoLang;
     m_sRelPathUser          = rCopy.m_sRelPathUser;
 }
 
@@ -188,6 +190,7 @@ PresetHandler::PresetHandler(const Prese
 PresetHandler::~PresetHandler()
 {
     m_xWorkingStorageShare.clear();
+    m_xWorkingStorageNoLang.clear();
     m_xWorkingStorageUser.clear();
 
     /* #i46497#
@@ -219,6 +223,7 @@ void PresetHandler::forgetCachedStorages
     if (m_eConfigType == E_DOCUMENT)
     {
         m_xWorkingStorageShare.clear();
+        m_xWorkingStorageNoLang.clear();
         m_xWorkingStorageUser.clear();
     }
     
@@ -379,6 +384,7 @@ void PresetHandler::connectToResource(  
     // <- SAFE ----------------------------------
 
     css::uno::Reference< css::embed::XStorage > xShare;
+    css::uno::Reference< css::embed::XStorage > xNoLang;
     css::uno::Reference< css::embed::XStorage > xUser;
 
     // special case for documents
@@ -408,6 +414,7 @@ void PresetHandler::connectToResource(  
 
     ::rtl::OUStringBuffer sRelPathBuf(1024);
     ::rtl::OUString       sRelPathShare;
+    ::rtl::OUString       sRelPathNoLang;
     ::rtl::OUString       sRelPathUser;
     switch(eConfigType)
     {
@@ -462,6 +469,10 @@ void PresetHandler::connectToResource(  
         break;
     }
 
+    // Non-localized global share
+    xNoLang = xShare;
+    sRelPathNoLang = sRelPathShare;
+
     if (
         (aLocale     != ::comphelper::Locale::X_NOTRANSLATE()) && // localized level?
         (eConfigType != E_DOCUMENT                           )    // no localization in document mode!
@@ -535,10 +546,12 @@ void PresetHandler::connectToResource(  
     aWriteLock.lock();
     
     m_xWorkingStorageShare = xShare  ;
+    m_xWorkingStorageNoLang= xNoLang;
     m_xWorkingStorageUser  = xUser   ;
     m_lPresets             = lPresets;
     m_lTargets             = lTargets;
     m_sRelPathShare        = sRelPathShare;
+    m_sRelPathNoLang       = sRelPathNoLang;
     m_sRelPathUser         = sRelPathUser;
     
     aWriteLock.unlock();
@@ -591,6 +604,7 @@ void PresetHandler::copyPresetToTarget(c
     // SAFE -> ----------------------------------
     ReadGuard aReadLock(m_aLock);
     css::uno::Reference< css::embed::XStorage > xWorkingShare = m_xWorkingStorageShare;
+    css::uno::Reference< css::embed::XStorage > xWorkingNoLang= m_xWorkingStorageNoLang;
     css::uno::Reference< css::embed::XStorage > xWorkingUser  = m_xWorkingStorageUser ;
     aReadLock.unlock();
     // <- SAFE ----------------------------------
@@ -638,11 +654,12 @@ css::uno::Reference< css::io::XStream > 
 }
 
 //-----------------------------------------------    
-css::uno::Reference< css::io::XStream > PresetHandler::openPreset(const ::rtl::OUString& sPreset)
+css::uno::Reference< css::io::XStream > PresetHandler::openPreset(const ::rtl::OUString& sPreset,
+                                                                  sal_Bool bUseNoLangGlobal)
 {
     // SAFE -> ----------------------------------
     ReadGuard aReadLock(m_aLock);
-    css::uno::Reference< css::embed::XStorage > xFolder = m_xWorkingStorageShare;
+    css::uno::Reference< css::embed::XStorage > xFolder = bUseNoLangGlobal? m_xWorkingStorageNoLang: m_xWorkingStorageShare;
     aReadLock.unlock();
     // <- SAFE ----------------------------------
     
--- framework/source/inc/accelerators/presethandler.hxx	2005-09-09 01:30:19.000000000 +0000
+++ framework/source/inc/accelerators/presethandler.hxx	2006-04-24 17:48:27.000000000 +0000
@@ -224,6 +226,11 @@ class PresetHandler : private ThreadHelp
                     is equals to m_xWorkingStorageShare then! 
          */
         css::uno::Reference< css::embed::XStorage > m_xWorkingStorageShare;
+
+        //---------------------------------------
+        /** @short  global language-independent storage
+         */
+        css::uno::Reference< css::embed::XStorage > m_xWorkingStorageNoLang;
         
         //---------------------------------------
         /** @short  holds the folder storage of the user layer alive,
@@ -259,6 +264,7 @@ class PresetHandler : private ThreadHelp
         //---------------------------------------
         /** @short  knows the relative path from the root. */
         ::rtl::OUString m_sRelPathShare;
+        ::rtl::OUString m_sRelPathNoLang;
         ::rtl::OUString m_sRelPathUser;
     
     //-------------------------------------------
@@ -456,10 +462,14 @@ class PresetHandler : private ThreadHelp
 
             @param  sPreset
                     the ALIAS name of an existing preset.
+
+            @param  bNoLangGlobal
+                    access the global language-independent storage instead of the preset storage
                     
             @return The opened preset stream ... or NULL if the preset does not exists. 
          */
-        css::uno::Reference< css::io::XStream > openPreset(const ::rtl::OUString& sPreset);
+        css::uno::Reference< css::io::XStream > openPreset(const ::rtl::OUString& sPreset,
+                                                           sal_Bool bUseNoLangGlobal = sal_False);
         
         //---------------------------------------
         /** @short  open the specified target as stream object
