Index: .
===================================================================
--- .	(revision 21370)
+++ .	(working copy)
@@ -103,13 +103,70 @@
     }
 }
 
-
 if ( $http->hasPostVariable( 'ChangeINIFile' ) or
      ( $Params['SiteAccess'] and $Params['INIFile'] ) )
 {
-    $ini = eZINI::create( $settingFile, 'settings', null, null, false );
-    $ini->prependOverrideDir( "siteaccess/$currentSiteAccess", false, 'siteaccess' );
-    $ini->loadCache();
+    /*
+        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 )
+    {
+        // 1. delete all entry which are related to the old siteaccess
+        $newINIOverrideDirList = array();
+        foreach ( array_reverse( $GLOBALS['eZINIOverrideDirList'] ) as $dir )
+        {
+            $path = $dir[0];
+            if( ereg('siteaccess', $path) )
+            {
+                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 :-)
+    }
+
+    // 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();
@@ -213,8 +270,15 @@
 }
 
 $rootDir = 'settings';
+$iniFiles = eZDir::recursiveFindRelative( $rootDir, '', '.ini' );
 
-$iniFiles = eZDir::recursiveFindRelative( $rootDir, '', '.ini' );
+// find all .ini files in active extensions
+foreach ( $GLOBALS['eZINIOverrideDirList'] as $iniDataSet )
+{
+    $rootDir = $iniDataSet[0];
+    $iniFiles = array_merge( $iniFiles, eZDir::recursiveFindRelative( $rootDir, '', '.ini' ) );
+}
+
 $iniFiles = str_replace('/', '', $iniFiles );
 sort( $iniFiles );
 
