diff --git a/typo3/sysext/extensionmanager/Classes/Controller/ActionController.php b/typo3/sysext/extensionmanager/Classes/Controller/ActionController.php
index c799ad0631ebd405dbafe4cf26fe8de342c24922..56b66dab43ed699ebecc247147b65882762743fd 100644
--- a/typo3/sysext/extensionmanager/Classes/Controller/ActionController.php
+++ b/typo3/sysext/extensionmanager/Classes/Controller/ActionController.php
@@ -17,6 +17,7 @@ namespace TYPO3\CMS\Extensionmanager\Controller;
 use TYPO3\CMS\Core\Registry;
 use TYPO3\CMS\Core\Utility\ExtensionManagementUtility;
 use TYPO3\CMS\Core\Utility\GeneralUtility;
+use TYPO3\CMS\Core\Utility\PathUtility;
 use TYPO3\CMS\Extensionmanager\Service\ExtensionManagementService;
 use TYPO3\CMS\Extensionmanager\Utility\ExtensionModelUtility;
 use TYPO3\CMS\Extensionmanager\Utility\FileHandlingUtility;
@@ -156,7 +157,22 @@ class ActionController extends AbstractController
     protected function downloadExtensionZipAction($extension)
     {
         $fileName = $this->fileHandlingUtility->createZipFileFromExtension($extension);
-        $this->fileHandlingUtility->sendZipFileToBrowserAndDelete($fileName);
+        $this->sendZipFileToBrowserAndDelete($fileName);
+    }
+
+    /**
+     * Sends a zip file to the browser and deletes it afterwards
+     *
+     * @param string $fileName
+     */
+    protected function sendZipFileToBrowserAndDelete(string $fileName): void
+    {
+        header('Content-Type: application/zip');
+        header('Content-Length: ' . filesize($fileName));
+        header('Content-Disposition: attachment; filename="' . PathUtility::basename($fileName) . '"');
+        readfile($fileName);
+        unlink($fileName);
+        die;
     }
 
     /**
diff --git a/typo3/sysext/extensionmanager/Classes/Utility/DependencyUtility.php b/typo3/sysext/extensionmanager/Classes/Utility/DependencyUtility.php
index c73650509ca7e3ad9d11f01907336a7ee42dc6ee..25664c15bee6474a72a193b576a1aba3b3446e1b 100644
--- a/typo3/sysext/extensionmanager/Classes/Utility/DependencyUtility.php
+++ b/typo3/sysext/extensionmanager/Classes/Utility/DependencyUtility.php
@@ -483,7 +483,10 @@ class DependencyUtility implements SingletonInterface
     protected function isAvailableVersionCompatible(Dependency $dependency)
     {
         $this->setAvailableExtensions();
-        $extensionData = $this->emConfUtility->includeEmConf($this->availableExtensions[$dependency->getIdentifier()]);
+        $extensionData = $this->emConfUtility->includeEmConf(
+            $dependency->getIdentifier(),
+            $this->availableExtensions[$dependency->getIdentifier()]
+        );
         return $this->isVersionCompatible($extensionData['version'], $dependency);
     }
 
diff --git a/typo3/sysext/extensionmanager/Classes/Utility/EmConfUtility.php b/typo3/sysext/extensionmanager/Classes/Utility/EmConfUtility.php
index f7e38f5892cb5611da5d2b489f59501edab6ebca..ff53b3202542f0d6ad99e10587c740240bbb81b7 100644
--- a/typo3/sysext/extensionmanager/Classes/Utility/EmConfUtility.php
+++ b/typo3/sysext/extensionmanager/Classes/Utility/EmConfUtility.php
@@ -27,13 +27,18 @@ class EmConfUtility implements SingletonInterface
     /**
      * Returns the $EM_CONF array from an extensions ext_emconf.php file
      *
+     * @param string $extensionKey the extension name
      * @param array $extension Extension information array
      * @return array|bool EMconf array values or false if no ext_emconf.php found.
      */
-    public function includeEmConf(array $extension)
+    public function includeEmConf(string $extensionKey, array $extension)
     {
-        $_EXTKEY = $extension['key'];
-        $path = Environment::getPublicPath() . '/' . $extension['siteRelPath'] . 'ext_emconf.php';
+        $_EXTKEY = $extensionKey;
+        if (!empty($extension['packagePath'])) {
+            $path = $extension['packagePath'] . 'ext_emconf.php';
+        } else {
+            $path = Environment::getPublicPath() . '/' . $extension['siteRelPath'] . 'ext_emconf.php';
+        }
         $EM_CONF = null;
         if (file_exists($path)) {
             include $path;
@@ -84,7 +89,7 @@ $EM_CONF[$_EXTKEY] = ' . $emConf . ';
      * @param array $emConf
      * @return array
      */
-    public function fixEmConf(array $emConf)
+    protected function fixEmConf(array $emConf)
     {
         if (
             !isset($emConf['constraints']) || !isset($emConf['constraints']['depends'])
@@ -140,7 +145,7 @@ $EM_CONF[$_EXTKEY] = ' . $emConf . ';
      * @param mixed $dependency Either a string or an array listing dependencies.
      * @return array A simple dependency list for display
      */
-    public function stringToDependency($dependency)
+    protected function stringToDependency($dependency)
     {
         $constraint = [];
         if (is_string($dependency) && $dependency !== '') {
diff --git a/typo3/sysext/extensionmanager/Classes/Utility/FileHandlingUtility.php b/typo3/sysext/extensionmanager/Classes/Utility/FileHandlingUtility.php
index df0f6b701644d40d2940e81e657bcf809914ca4f..1c9fb54156a61f7b5416e60c5fe3cd027638c68c 100644
--- a/typo3/sysext/extensionmanager/Classes/Utility/FileHandlingUtility.php
+++ b/typo3/sysext/extensionmanager/Classes/Utility/FileHandlingUtility.php
@@ -269,8 +269,9 @@ class FileHandlingUtility implements SingletonInterface, LoggerAwareInterface
         $emConfFileData = [];
         if (file_exists($rootPath . 'ext_emconf.php')) {
             $emConfFileData = $this->emConfUtility->includeEmConf(
+                $extensionData['extKey'],
                 [
-                    'key' => $extensionData['extKey'],
+                    'packagePath' => $rootPath,
                     'siteRelPath' => PathUtility::stripPathSitePrefix($rootPath)
                 ]
             );
@@ -319,7 +320,7 @@ class FileHandlingUtility implements SingletonInterface, LoggerAwareInterface
      * @param string $absolutePath
      * @return string
      */
-    protected function getRelativePath($absolutePath)
+    protected function getRelativePath(string $absolutePath): string
     {
         return PathUtility::stripPathSitePrefix($absolutePath);
     }
@@ -327,43 +328,41 @@ class FileHandlingUtility implements SingletonInterface, LoggerAwareInterface
     /**
      * Get extension path for an available or installed extension
      *
-     * @param string $extension
+     * @param string $extensionKey
      * @return string
      */
-    public function getAbsoluteExtensionPath($extension)
+    public function getAbsoluteExtensionPath(string $extensionKey): string
     {
-        $extension = $this->installUtility->enrichExtensionWithDetails($extension);
-        $absolutePath = $this->getAbsolutePath($extension['siteRelPath']);
-        return $absolutePath;
+        $extension = $this->installUtility->enrichExtensionWithDetails($extensionKey);
+        return $this->getAbsolutePath($extension['siteRelPath']);
     }
 
     /**
      * Get version of an available or installed extension
      *
-     * @param string $extension
+     * @param string $extensionKey
      * @return string
      */
-    public function getExtensionVersion($extension)
+    protected function getExtensionVersion(string $extensionKey): string
     {
-        $extensionData = $this->installUtility->enrichExtensionWithDetails($extension);
-        $version = $extensionData['version'];
-        return $version;
+        $extensionData = $this->installUtility->enrichExtensionWithDetails($extensionKey);
+        return (string)$extensionData['version'];
     }
 
     /**
      * Create a zip file from an extension
      *
-     * @param array $extension
+     * @param string $extensionKey
      * @return string Name and path of create zip file
      */
-    public function createZipFileFromExtension($extension)
+    public function createZipFileFromExtension($extensionKey): string
     {
-        $extensionPath = $this->getAbsoluteExtensionPath($extension);
+        $extensionPath = $this->getAbsoluteExtensionPath($extensionKey);
 
         // Add trailing slash to the extension path, getAllFilesAndFoldersInPath explicitly requires that.
         $extensionPath = PathUtility::sanitizeTrailingSeparator($extensionPath);
 
-        $version = $this->getExtensionVersion($extension);
+        $version = $this->getExtensionVersion($extensionKey);
         if (empty($version)) {
             $version = '0.0.0';
         }
@@ -372,7 +371,7 @@ class FileHandlingUtility implements SingletonInterface, LoggerAwareInterface
         if (!@is_dir($temporaryPath)) {
             GeneralUtility::mkdir($temporaryPath);
         }
-        $fileName = $temporaryPath . $extension . '_' . $version . '_' . date('YmdHi', $GLOBALS['EXEC_TIME']) . '.zip';
+        $fileName = $temporaryPath . $extensionKey . '_' . $version . '_' . date('YmdHi', $GLOBALS['EXEC_TIME']) . '.zip';
 
         $zip = new \ZipArchive();
         $zip->open($fileName, \ZipArchive::CREATE);
@@ -435,25 +434,6 @@ class FileHandlingUtility implements SingletonInterface, LoggerAwareInterface
         GeneralUtility::fixPermissions($extensionDir, true);
     }
 
-    /**
-     * Sends a zip file to the browser and deletes it afterwards
-     *
-     * @param string $fileName
-     * @param string $downloadName
-     */
-    public function sendZipFileToBrowserAndDelete($fileName, $downloadName = '')
-    {
-        if ($downloadName === '') {
-            $downloadName = PathUtility::basename($fileName);
-        }
-        header('Content-Type: application/zip');
-        header('Content-Length: ' . filesize($fileName));
-        header('Content-Disposition: attachment; filename="' . $downloadName . '"');
-        readfile($fileName);
-        unlink($fileName);
-        die;
-    }
-
     /**
      * @param string $extensionKey
      */
diff --git a/typo3/sysext/extensionmanager/Classes/Utility/ListUtility.php b/typo3/sysext/extensionmanager/Classes/Utility/ListUtility.php
index c45d9da691d89f0f14c2d1ace5dab13dc667888c..f792dc136c2b7a8f27bd9c15769e4bfde3ad0db0 100644
--- a/typo3/sysext/extensionmanager/Classes/Utility/ListUtility.php
+++ b/typo3/sysext/extensionmanager/Classes/Utility/ListUtility.php
@@ -17,9 +17,9 @@ namespace TYPO3\CMS\Extensionmanager\Utility;
 use TYPO3\CMS\Core\Core\Environment;
 use TYPO3\CMS\Core\Package\PackageInterface;
 use TYPO3\CMS\Core\Package\PackageManager;
-use TYPO3\CMS\Core\Type\File\ImageInfo;
 use TYPO3\CMS\Core\Utility\ExtensionManagementUtility;
 use TYPO3\CMS\Core\Utility\GeneralUtility;
+use TYPO3\CMS\Core\Utility\PathUtility;
 use TYPO3\CMS\Core\Utility\VersionNumberUtility;
 use TYPO3\CMS\Extensionmanager\Domain\Model\Extension;
 use TYPO3\CMS\Extensionmanager\Domain\Repository\ExtensionRepository;
@@ -116,12 +116,12 @@ class ListUtility implements \TYPO3\CMS\Core\SingletonInterface
             $this->availableExtensions = [];
             $this->emitPackagesMayHaveChangedSignal();
             foreach ($this->packageManager->getAvailablePackages() as $package) {
-                $installationType = $this->getInstallTypeForPackage($package);
                 $this->availableExtensions[$package->getPackageKey()] = [
+                    'packagePath' => $package->getPackagePath(),
                     'siteRelPath' => str_replace(Environment::getPublicPath() . '/', '', $package->getPackagePath()),
-                    'type' => $installationType,
+                    'type' => $this->getInstallTypeForPackage($package),
                     'key' => $package->getPackageKey(),
-                    'ext_icon' => ExtensionManagementUtility::getExtensionIcon($package->getPackagePath()),
+                    'icon' => PathUtility::getAbsoluteWebPath($package->getPackagePath() . ExtensionManagementUtility::getExtensionIcon($package->getPackagePath())),
                 ];
             }
         }
@@ -198,7 +198,7 @@ class ListUtility implements \TYPO3\CMS\Core\SingletonInterface
     public function enrichExtensionsWithEmConfInformation(array $extensions)
     {
         foreach ($extensions as $extensionKey => $properties) {
-            $emconf = $this->emConfUtility->includeEmConf($properties);
+            $emconf = $this->emConfUtility->includeEmConf($extensionKey, $properties);
             if ($emconf) {
                 $extensions[$extensionKey] = array_merge($emconf, $properties);
             } else {
@@ -264,29 +264,6 @@ class ListUtility implements \TYPO3\CMS\Core\SingletonInterface
         return $terObject;
     }
 
-    /**
-     * Adds information about icon size to the extension information
-     *
-     * @param array $extensions
-     * @return array
-     */
-    public function enrichExtensionsWithIconInformation(array $extensions)
-    {
-        foreach ($extensions as &$properties) {
-            $extIconPath = Environment::getPublicPath() . '/' . $properties['siteRelPath'] . $properties['ext_icon'];
-            if (@is_file($extIconPath)) {
-                $imageInfo = GeneralUtility::makeInstance(ImageInfo::class, $extIconPath);
-                $properties['ext_icon_width'] = $imageInfo->getWidth();
-                $properties['ext_icon_height'] = $imageInfo->getHeight();
-            } else {
-                $properties['ext_icon_width'] = 0;
-                $properties['ext_icon_height'] = 0;
-            }
-        }
-        unset($properties);
-        return $extensions;
-    }
-
     /**
      * Gets all available and installed extension with additional information
      * from em_conf and TER (if available)
@@ -297,7 +274,6 @@ class ListUtility implements \TYPO3\CMS\Core\SingletonInterface
     {
         $availableExtensions = $this->getAvailableExtensions();
         $availableAndInstalledExtensions = $this->getAvailableAndInstalledExtensions($availableExtensions);
-        $availableAndInstalledExtensions = $this->enrichExtensionsWithIconInformation($availableAndInstalledExtensions);
         return $this->enrichExtensionsWithEmConfAndTerInformation($availableAndInstalledExtensions);
     }
 }
diff --git a/typo3/sysext/extensionmanager/Resources/Private/Templates/List/Index.html b/typo3/sysext/extensionmanager/Resources/Private/Templates/List/Index.html
index ee4617482ffcb79eac2e9b1cad0f80f687490e0c..caeb52fd054b35e603c113a20bd6f5c0cfad761d 100644
--- a/typo3/sysext/extensionmanager/Resources/Private/Templates/List/Index.html
+++ b/typo3/sysext/extensionmanager/Resources/Private/Templates/List/Index.html
@@ -64,8 +64,8 @@
                     <em:toggleExtensionInstallationState extension="{extension}" />
                 </td>
                 <td>
-                    <f:if condition="{extension.ext_icon}">
-                        <img class="ext-icon" src="../{extension.siteRelPath}{extension.ext_icon}" alt="{extension.title}" />
+                    <f:if condition="{extension.icon}">
+                        <img class="ext-icon" src="{extension.icon}" alt="{extension.title}" />
                     </f:if>
                     <span title="{extension.description}">{extension.title}</span>
                 </td>
diff --git a/typo3/sysext/extensionmanager/Tests/Unit/Utility/EmConfUtilityTest.php b/typo3/sysext/extensionmanager/Tests/Unit/Utility/EmConfUtilityTest.php
index 08f316f76db17aad0df50789131d9507f070b2c1..2a01ef45cd2d63612e1bc62fce73437d898fe233 100644
--- a/typo3/sysext/extensionmanager/Tests/Unit/Utility/EmConfUtilityTest.php
+++ b/typo3/sysext/extensionmanager/Tests/Unit/Utility/EmConfUtilityTest.php
@@ -32,8 +32,8 @@ class EmConfUtilityTest extends UnitTestCase
             'extKey' => 'key',
             'EM_CONF' => [],
         ];
-        $fixture = new EmConfUtility();
-        $emConf = $fixture->constructEmConf($extensionData);
+        $subject = new EmConfUtility();
+        $emConf = $subject->constructEmConf($extensionData);
         self::assertStringContainsString('Extension Manager/Repository config file for ext', $emConf);
     }
 
@@ -56,8 +56,12 @@ class EmConfUtilityTest extends UnitTestCase
                 'suggests' => [],
             ],
         ];
-        $fixture = new EmConfUtility();
-        self::assertEquals($expected, $fixture->fixEmConf($input));
+        $subject = new EmConfUtility();
+        $_EXTKEY = 'test';
+        $result = $subject->constructEmConf(['EM_CONF' => $input]);
+        eval(substr($result, 7));
+        $result = $EM_CONF[$_EXTKEY];
+        self::assertEquals($expected, $result);
     }
 
     /**
@@ -80,7 +84,12 @@ class EmConfUtilityTest extends UnitTestCase
                 'suggests' => [],
             ],
         ];
-        $fixture = new EmConfUtility();
-        self::assertEquals($expected, $fixture->fixEmConf($input));
+        $subject = new EmConfUtility();
+
+        $_EXTKEY = 'test';
+        $result = $subject->constructEmConf(['EM_CONF' => $input]);
+        eval(substr($result, 7));
+        $result = $EM_CONF[$_EXTKEY];
+        self::assertEquals($expected, $result);
     }
 }