diff --git a/typo3/sysext/extensionmanager/Classes/Utility/InstallUtility.php b/typo3/sysext/extensionmanager/Classes/Utility/InstallUtility.php
index c7731695014250f542afd41d775a5bfd2652a17d..ee2c5b0d5e82eaa6e8b2f87269807a9120e640e3 100644
--- a/typo3/sysext/extensionmanager/Classes/Utility/InstallUtility.php
+++ b/typo3/sysext/extensionmanager/Classes/Utility/InstallUtility.php
@@ -14,8 +14,9 @@ namespace TYPO3\CMS\Extensionmanager\Utility;
  * The TYPO3 project - inspiring people to share!
  */
 
-use TYPO3\CMS\Core\Utility\GeneralUtility;
 use TYPO3\CMS\Core\Service\OpcodeCacheService;
+use TYPO3\CMS\Core\Utility\GeneralUtility;
+use TYPO3\CMS\Core\Utility\PathUtility;
 use TYPO3\CMS\Extensionmanager\Domain\Model\Extension;
 use TYPO3\CMS\Extensionmanager\Exception\ExtensionManagerException;
 use TYPO3\CMS\Impexp\Utility\ImportExportUtility;
@@ -187,13 +188,21 @@ class InstallUtility implements \TYPO3\CMS\Core\SingletonInterface
             $this->cacheManager->flushCachesInGroup('system');
         }
         $this->reloadCaches();
+        $this->processExtensionSetup($extensionKey);
+
+        $this->emitAfterExtensionInstallSignal($extensionKey);
+    }
 
+    /**
+     * @param string $extensionKey
+     */
+    public function processExtensionSetup($extensionKey)
+    {
+        $extension = $this->getExtensionArray($extensionKey);
         $this->importInitialFiles($extension['siteRelPath'], $extensionKey);
         $this->processDatabaseUpdates($extension);
         $this->processRuntimeDatabaseUpdates($extensionKey);
-        $this->saveDefaultConfiguration($extension['key']);
-
-        $this->emitAfterExtensionInstallSignal($extensionKey);
+        $this->saveDefaultConfiguration($extensionKey);
     }
 
     /**
@@ -313,12 +322,7 @@ class InstallUtility implements \TYPO3\CMS\Core\SingletonInterface
      */
     public function enrichExtensionWithDetails($extensionKey)
     {
-        $availableExtensions = $this->listUtility->getAvailableExtensions();
-        if (isset($availableExtensions[$extensionKey])) {
-            $extension = $availableExtensions[$extensionKey];
-        } else {
-            throw new ExtensionManagerException('Extension ' . $extensionKey . ' is not available', 1342864081);
-        }
+        $extension = $this->getExtensionArray($extensionKey);
         $availableAndInstalledExtensions = $this->listUtility->enrichExtensionsWithEmConfAndTerInformation(array($extensionKey => $extension));
 
         if (!isset($availableAndInstalledExtensions[$extensionKey])) {
@@ -331,6 +335,21 @@ class InstallUtility implements \TYPO3\CMS\Core\SingletonInterface
         return $availableAndInstalledExtensions[$extensionKey];
     }
 
+    /**
+     * @param string $extensionKey
+     * @return array
+     * @throws ExtensionManagerException
+     */
+    protected function getExtensionArray($extensionKey)
+    {
+        $availableExtensions = $this->listUtility->getAvailableExtensions();
+        if (isset($availableExtensions[$extensionKey])) {
+            return $availableExtensions[$extensionKey];
+        } else {
+            throw new ExtensionManagerException('Extension ' . $extensionKey . ' is not available', 1342864081);
+        }
+    }
+
     /**
      * Creates directories as requested in ext_emconf.php
      *
diff --git a/typo3/sysext/extensionmanager/Classes/Utility/ListUtility.php b/typo3/sysext/extensionmanager/Classes/Utility/ListUtility.php
index 8978b125f1b5e79444702fcb1110f06d8136b4f1..59c57898c4be5517a2cd9b9fd34d0f75c13a7a39 100644
--- a/typo3/sysext/extensionmanager/Classes/Utility/ListUtility.php
+++ b/typo3/sysext/extensionmanager/Classes/Utility/ListUtility.php
@@ -55,6 +55,11 @@ class ListUtility implements \TYPO3\CMS\Core\SingletonInterface
      */
     protected $signalSlotDispatcher;
 
+    /**
+     * @var array
+     */
+    protected $availableExtensions = NULL;
+
     /**
      * @param \TYPO3\CMS\Extensionmanager\Utility\EmConfUtility $emConfUtility
      */
@@ -102,18 +107,20 @@ class ListUtility implements \TYPO3\CMS\Core\SingletonInterface
      */
     public function getAvailableExtensions()
     {
-        $this->emitPackagesMayHaveChangedSignal();
-        $extensions = array();
-        foreach ($this->packageManager->getAvailablePackages() as $package) {
-            $installationType = $this->getInstallTypeForPackage($package);
-            $extensions[$package->getPackageKey()] = array(
-                'siteRelPath' => str_replace(PATH_site, '', $package->getPackagePath()),
-                'type' => $installationType,
-                'key' => $package->getPackageKey(),
-                'ext_icon' => ExtensionManagementUtility::getExtensionIcon($package->getPackagePath()),
-            );
+        if ($this->availableExtensions === NULL) {
+            $this->emitPackagesMayHaveChangedSignal();
+            foreach ($this->packageManager->getAvailablePackages() as $package) {
+                $installationType = $this->getInstallTypeForPackage($package);
+                $this->availableExtensions[$package->getPackageKey()] = array(
+                    'siteRelPath' => str_replace(PATH_site, '', $package->getPackagePath()),
+                    'type' => $installationType,
+                    'key' => $package->getPackageKey(),
+                    'ext_icon' => ExtensionManagementUtility::getExtensionIcon($package->getPackagePath()),
+                );
+            }
         }
-        return $extensions;
+
+        return $this->availableExtensions;
     }
 
     /**
diff --git a/typo3/sysext/extensionmanager/Tests/Unit/Utility/InstallUtilityTest.php b/typo3/sysext/extensionmanager/Tests/Unit/Utility/InstallUtilityTest.php
index caab13c9735315a24c28c87736f6865df114a2a8..ede4169ed25ebfd4840b8132d3e489fafcdcde71 100644
--- a/typo3/sysext/extensionmanager/Tests/Unit/Utility/InstallUtilityTest.php
+++ b/typo3/sysext/extensionmanager/Tests/Unit/Utility/InstallUtilityTest.php
@@ -59,6 +59,7 @@ class InstallUtilityTest extends \TYPO3\CMS\Core\Tests\UnitTestCase
                 'reloadCaches',
                 'processCachingFrameworkUpdates',
                 'saveDefaultConfiguration',
+                'getExtensionArray',
                 'enrichExtensionWithDetails',
                 'ensureConfiguredDirectoriesExist',
                 'importInitialFiles',
@@ -70,6 +71,10 @@ class InstallUtilityTest extends \TYPO3\CMS\Core\Tests\UnitTestCase
         );
         $dependencyUtility = $this->getMock(\TYPO3\CMS\Extensionmanager\Utility\DependencyUtility::class);
         $this->installMock->_set('dependencyUtility', $dependencyUtility);
+        $this->installMock->expects($this->any())
+            ->method('getExtensionArray')
+            ->with($this->extensionKey)
+            ->will($this->returnCallback(array($this, 'getExtensionData')));
         $this->installMock->expects($this->any())
             ->method('enrichExtensionWithDetails')
             ->with($this->extensionKey)