Index: .
===================================================================
--- .	(revision 21362)
+++ .	(working copy)
@@ -103,13 +103,69 @@
     }
 }
 
-
 if ( $http->hasPostVariable( 'ChangeINIFile' ) or
      ( $Params['SiteAccess'] and $Params['INIFile'] ) )
 {
+    /*
+        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'] != $currentSiteAccesss )
+    {
+        // 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
     $ini = eZINI::create( $settingFile, 'settings', null, null, false );
-    $ini->prependOverrideDir( "siteaccess/$currentSiteAccess", false, 'siteaccess' );
-    $ini->loadCache();
 
     $blocks = $ini->groups();
     $placements = $ini->groupPlacements();
@@ -136,7 +192,7 @@
 
                     foreach( $settingKey as $settingElementKey=>$settingElementValue )
                     {
-                        $settingPlacement = $ini->findSettingPlacement( $placements[$block][$setting][$settingElementKey] );
+                        $settingPlacement = $ini->findSettingPlacement( $placements[$block][$setting][++$settingElementKey] );
                         if ( $settingElementValue != null )
                         {
                             // Make a space after the ';' to make it possible for
