Index: kernel/settings/view.php
===================================================================
--- .	(revision 21665)
+++ .	(working copy)
@@ -103,32 +103,70 @@
     }
 }
 
-
 if ( $http->hasPostVariable( 'ChangeINIFile' ) or
      ( $Params['SiteAccess'] and $Params['INIFile'] ) )
 {
-    $ini = eZINI::create( $settingFile, 'settings', null, null, false );
-    if ( file_exists( "settings/siteaccess/$currentSiteAccess" ) )
-    {
-        $ini->prependOverrideDir( "siteaccess/$currentSiteAccess", false, 'siteaccess' );
-    }
-    else
+    /*
+        To get the right INIOverrideDirList we have do do something
+
+        1. We delete all entry how are related to the admin siteaccess which want to diplay an ini setting from another siteaccess
+        2. We load the new site.ini to get all extensionNames for the choosen siteaccess
+        3. We add all this extensions to the overrideDirList
+        4. create ini for displaying
+    */
+    // $currentSiteAccess = choosen sitaccess to display selected ini
+    if( $GLOBALS['eZCurrentAccess']['name'] != $currentSiteAccess )
     {
-        $extensionDirectory = $ini->variable( 'ExtensionSettings', 'ExtensionDirectory' );
-        $activeExtensions = $ini->variable( 'ExtensionSettings', 'ActiveExtensions' );
-        foreach ( $activeExtensions as $extensionName )
+        // 1. delete all entry which are related to the old siteaccess
+        $newINIOverrideDirList = array();
+        foreach ( array_reverse( $GLOBALS['eZINIOverrideDirList'] ) as $dir )
         {
-            $possibleExtensionPath = $extensionDirectory . '/' . $extensionName . '/settings/siteaccess/' .
-                                     $currentSiteAccess;
-            if ( file_exists( $possibleExtensionPath ) )
+            $path = $dir[0];
+            if( ereg('siteaccess', $path) )
             {
-                $ini->prependOverrideDir( $extensionDirectory . '/' . $extensionName . '/settings/siteaccess/' .
-                                          $currentSiteAccess, true, 'siteaccess' );
                 break;
             }
+            else
+            {
+                $newINIOverrideDirList[] = $dir;
+            }
+        }
+        $iniOverrideDirListWithoutSiteaccess = array_reverse( $newINIOverrideDirList );
+
+        $GLOBALS['eZINIOverrideDirList'] = $iniOverrideDirListWithoutSiteaccess;
+
+        // normal siteaccess
+        if( file_exists( "settings/siteaccess/$currentSiteAccess" ) )
+        {
+            $GLOBALS['eZINIOverrideDirList'] = array_merge( array( array( "siteaccess/$currentSiteAccess", false, 'siteaccess' ) ) , $GLOBALS['eZINIOverrideDirList'] );
+        }
+        // extension sitaccess
+        else
+        {
+            eZExtension::prependExtensionSiteAccesses( $currentSiteAccess, false, true, 'siteaccess' );
+        }
+
+        // 2. create site.ini for the new siteaccess
+        $newSiteIni = eZINI::create( 'site.ini', 'settings', null, null, false );
+
+        // 3. load all extension which are activated in the sitaccess
+        $newActiveAccessExtensions = $newSiteIni->variable('ExtensionSettings','ActiveAccessExtensions');
+        $activeExtensionOverrideDirList = array();
+        foreach ( array_reverse( $newActiveAccessExtensions ) as $extensionName )
+        {
+            $activeExtensionOverrideDirList[] = array( "extension/$extensionName/settings" , true, false );
         }
+        $siteAccessOverrideDirListSetting = array_shift( $GLOBALS['eZINIOverrideDirList'] );
+
+        array_push( $activeExtensionOverrideDirList, $siteAccessOverrideDirListSetting );
+        $GLOBALS['eZINIOverrideDirList'] = array_merge( $activeExtensionOverrideDirList, $GLOBALS['eZINIOverrideDirList'] );
+
+        // now we have the right order for the overideDirList :-)
     }
-    $ini->loadCache();
+
+    // 4. create ini for displaying
+    // create ini data with empty array definition so that count( placement array ) = count( ini files )
+    $ini = new eZINI( $settingFile,'settings', null, false, null, false, true );
 
     $blocks = $ini->groups();
     $placements = $ini->groupPlacements();
@@ -232,11 +270,27 @@
 }
 
 $rootDir = 'settings';
+$iniFiles = eZDir::recursiveFindRelative( $rootDir, '', '.ini' );
 
-$iniFiles = eZDir::recursiveFindRelative( $rootDir, '', '.ini' );
-$iniFiles = str_replace('/', '', $iniFiles );
+// find all .ini files in active extensions
+foreach ( $GLOBALS['eZINIOverrideDirList'] as $iniDataSet )
+{
+    $rootDir = $iniDataSet[0];
+    $iniFiles = array_merge( $iniFiles, eZDir::recursiveFindRelative( $rootDir, '', '.ini' ) );
+}
+
+// extract all .ini files without path
+$iniFiles = preg_replace('%.*/%', '', $iniFiles );
 sort( $iniFiles );
 
+$eZIniOverrideDirList = array();
+foreach ( $GLOBALS['eZINIOverrideDirList'] as $iniLocation )
+{
+    $eZIniOverrideDirList[] = $iniLocation[0];
+}
+
+$tpl->setVariable( 'ini_override_dir_list' , $eZIniOverrideDirList );
+
 $tpl->setVariable( 'ini_files', $iniFiles );
 $tpl->setVariable( 'siteaccess_list', $siteAccessList );
 $tpl->setVariable( 'current_siteaccess', $currentSiteAccess );
Index: design/admin/templates/settings/view.tpl
===================================================================
--- .	(revision 21665)
+++ .	(working copy)
@@ -77,6 +77,14 @@
 {* DESIGN: Content START *}<div class="box-ml"><div class="box-mr"><div class="box-content">
 <div class="context-attributes">
 
+{* show ini override location list *}
+<h2>{'IniOverrideDirList - parsing order of ini locations'|i18n('admin/settings/view')}</h2>
+<ol>
+<li><b>settings (default *.ini)</b></li>
+{foreach $ini_override_dir_list as $ini_location}
+    <li>{$ini_location}</li>
+{/foreach}
+</ol>
 
     <table class="list" width="100%" cellspacing="0" cellpadding="0" border="0">
 {section var=Blocks loop=$settings}
@@ -81,16 +89,16 @@
     <table class="list" width="100%" cellspacing="0" cellpadding="0" border="0">
 {section var=Blocks loop=$settings}
         <tr>
-	    <th class="tight">&nbsp;</th>
+        <th class="tight">&nbsp;</th>
             <th width="50%">
             {$Blocks.key} ({$Blocks.item.count})&nbsp;&nbsp;&nbsp;
             {section show=$Blocks.item.editable}
-	             <a href={concat( '/settings/edit/', $current_siteaccess, '/', $ini_file, '/', $Blocks.key)|ezurl}>{'[add setting]'|i18n('design/admin/settings')}</a>
+                 <a href={concat( '/settings/edit/', $current_siteaccess, '/', $ini_file, '/', $Blocks.key)|ezurl}>{'[add setting]'|i18n('design/admin/settings')}</a>
             {/section}
             </th>
-	    <th class="tight">
-	        {'Placement'|i18n( 'design/admin/settings' )}
-	    </th>
+        <th class="tight">
+            {'Placement'|i18n( 'design/admin/settings' )}
+        </th>
             <th width="50%">
                 {'Value'|i18n( 'design/admin/settings' )}
             </th>
@@ -121,7 +129,7 @@
                 {switch match=$Settings.item.type}
                 {case match='array'}
                     {section show=ne($Settings.item.placement,'undefined')}
-	                {section var=Placements loop=$Settings.item.content}
+                    {section var=Placements loop=$Settings.item.content}
                         <div class="array">[{$Placements.key}] {$Placements.item.content|wash}</div>
                     {/section}
                     {/section}
@@ -149,7 +157,7 @@
                 {section show=$Settings.item.editable}
                 {switch match=$Settings.item.type}
                     {case match='array'}
-	                    <a href={concat('settings/edit/', $current_siteaccess, '/', $ini_file, '/', $Blocks.key, '/', $Settings.key, '/', 'siteaccess')|ezurl}>
+                        <a href={concat('settings/edit/', $current_siteaccess, '/', $ini_file, '/', $Blocks.key, '/', $Settings.key, '/', 'siteaccess')|ezurl}>
                         <img src={"edit.gif"|ezimage} alt="{'Edit'|i18n('design/admin/settings')}" /></a>
                     {/case}
                     {case}
