diff --git a/typo3/sysext/install/Classes/Updates/AbstractDownloadExtensionUpdate.php b/typo3/sysext/install/Classes/Updates/AbstractDownloadExtensionUpdate.php
index 45be31f8ad014a9ecedcbd99f21d114f7f0d6060..0a0e9bb3fecc13f78484b3a975572758c3013f26 100644
--- a/typo3/sysext/install/Classes/Updates/AbstractDownloadExtensionUpdate.php
+++ b/typo3/sysext/install/Classes/Updates/AbstractDownloadExtensionUpdate.php
@@ -14,6 +14,7 @@ namespace TYPO3\CMS\Install\Updates;
  * The TYPO3 project - inspiring people to share!
  */
 
+use TYPO3\CMS\Core\Core\Environment;
 use TYPO3\CMS\Core\Utility\GeneralUtility;
 use TYPO3\CMS\Extbase\Object\ObjectManager;
 use TYPO3\CMS\Extensionmanager\Utility\Connection\TerUtility;
@@ -58,15 +59,15 @@ abstract class AbstractDownloadExtensionUpdate extends AbstractUpdate
 
         /** @var $extensionListUtility ListUtility */
         $extensionListUtility = $objectManager->get(ListUtility::class);
-
         $availableExtensions = $extensionListUtility->getAvailableExtensions();
-        $availableAndInstalledExtensions = $extensionListUtility->getAvailableAndInstalledExtensions($availableExtensions);
+        $extensionDetails = $this->getExtensionDetails($extensionKey);
+
+        $isExtensionAvailable = !empty($availableExtensions[$extensionKey]);
+        $isComposerMode = Environment::isComposerMode();
 
-        // Extension is not downloaded yet.
-        if (!is_array($availableAndInstalledExtensions[$extensionKey])) {
+        if (!$isComposerMode && !$isExtensionAvailable) {
             /** @var $extensionTerUtility TerUtility */
             $extensionTerUtility = $objectManager->get(TerUtility::class);
-            $extensionDetails = $this->getExtensionDetails($extensionKey);
             if (empty($extensionDetails)) {
                 $updateSuccessful = false;
                 $customMessage .= 'No version information for extension ' . $extensionKey . ' found. Can not install the extension.';
@@ -90,11 +91,20 @@ abstract class AbstractDownloadExtensionUpdate extends AbstractUpdate
             $extensionListUtility->reloadAvailableExtensions();
         }
 
-        if ($updateSuccessful !== false) {
+        if ($isComposerMode && !$isExtensionAvailable) {
+            $updateSuccessful = false;
+            $customMessage .= 'The extension ' . $extensionKey . ' can not be downloaded since ' .
+              'Composer is used for package management. Please require this ' .
+              'extension as package via Composer: ' .
+              '"composer require ' . $extensionDetails['composerName'] . ':^' . $extensionDetails['versionString'] . '"';
+        }
+
+        if ($updateSuccessful) {
             /** @var $extensionInstallUtility InstallUtility */
             $extensionInstallUtility = $objectManager->get(InstallUtility::class);
             $extensionInstallUtility->install($extensionKey);
         }
+
         return $updateSuccessful;
     }
 
diff --git a/typo3/sysext/install/Classes/Updates/Compatibility7ExtractionUpdate.php b/typo3/sysext/install/Classes/Updates/Compatibility7ExtractionUpdate.php
index 189bd9112dd41de0f30c768ccc5aee0881d4784d..b6aa71bda280b8763fae7381c192cec48941f851 100644
--- a/typo3/sysext/install/Classes/Updates/Compatibility7ExtractionUpdate.php
+++ b/typo3/sysext/install/Classes/Updates/Compatibility7ExtractionUpdate.php
@@ -39,7 +39,8 @@ class Compatibility7ExtractionUpdate extends AbstractDownloadExtensionUpdate
             'title' => 'Compatibility Mode for TYPO3 v7',
             'description' => 'Provides an additional backwards-compatibility layer with legacy functionality for sites that haven\'t fully migrated to TYPO3 v8 yet.',
             'versionString' => '8.7.1',
-        ]
+            'composerName' => 'friendsoftypo3/compatibility7',
+        ],
     ];
 
     /**
diff --git a/typo3/sysext/install/Classes/Updates/FormLegacyExtractionUpdate.php b/typo3/sysext/install/Classes/Updates/FormLegacyExtractionUpdate.php
index 6aeb7800d9dd073f7f2d11718a7216231e79ac0b..11c9f35447be8155f964724fd875794a80731698 100644
--- a/typo3/sysext/install/Classes/Updates/FormLegacyExtractionUpdate.php
+++ b/typo3/sysext/install/Classes/Updates/FormLegacyExtractionUpdate.php
@@ -42,7 +42,8 @@ class FormLegacyExtractionUpdate extends AbstractDownloadExtensionUpdate
             'title' => 'Legacy form extension for TYPO3 v7 compatibility',
             'description' => 'Provides an additional backwards-compatibility layer with legacy functionality for sites that used the form extension in TYPO3 v7.',
             'versionString' => '8.7.0',
-        ]
+            'composerName' => 'friendsoftypo3/form-legacy',
+        ],
     ];
 
     /**
diff --git a/typo3/sysext/install/Classes/Updates/FuncExtractionUpdate.php b/typo3/sysext/install/Classes/Updates/FuncExtractionUpdate.php
index 679fca51257126e7b4a46ff5cc808256ea9e4b96..19001ca351c7343525b9cdf18800ce44065b921a 100644
--- a/typo3/sysext/install/Classes/Updates/FuncExtractionUpdate.php
+++ b/typo3/sysext/install/Classes/Updates/FuncExtractionUpdate.php
@@ -39,7 +39,8 @@ class FuncExtractionUpdate extends AbstractDownloadExtensionUpdate
             'title' => 'Web->Functions module',
             'description' => 'Provides Web->Functions BE module used in previous TYPO3 versions for extensions that still rely on it.',
             'versionString' => '9.0.1',
-        ]
+            'composerName' => 'friendsoftypo3/cms-func',
+        ],
     ];
 
     /**
diff --git a/typo3/sysext/install/Classes/Updates/RedirectExtractionUpdate.php b/typo3/sysext/install/Classes/Updates/RedirectExtractionUpdate.php
index ceb0ac7e818504c52f47385628be319b279d1a77..e31db5d22f94c517cc3e0ecb8ffc78484ff28089 100644
--- a/typo3/sysext/install/Classes/Updates/RedirectExtractionUpdate.php
+++ b/typo3/sysext/install/Classes/Updates/RedirectExtractionUpdate.php
@@ -40,7 +40,8 @@ class RedirectExtractionUpdate extends AbstractDownloadExtensionUpdate
             'title' => 'Redirects based on &RDCT parameter',
             'description' => 'Provides redirects based on "cache_md5params" and the GET parameter &RDCT for extensions that still rely on it.',
             'versionString' => '1.0.0',
-        ]
+            'composerName' => 'friendsoftypo3/rdct',
+        ],
     ];
 
     /**
diff --git a/typo3/sysext/install/Classes/Updates/RteHtmlAreaExtractionUpdate.php b/typo3/sysext/install/Classes/Updates/RteHtmlAreaExtractionUpdate.php
index 0237106a2436cc77eae4c6c951646b813eac6b6a..e1604d22db82a74fb6e4cc1804513b0d2ea12650 100644
--- a/typo3/sysext/install/Classes/Updates/RteHtmlAreaExtractionUpdate.php
+++ b/typo3/sysext/install/Classes/Updates/RteHtmlAreaExtractionUpdate.php
@@ -39,7 +39,8 @@ class RteHtmlAreaExtractionUpdate extends AbstractDownloadExtensionUpdate
             'title' => 'RTE HTMLArea for TYPO3',
             'description' => 'Provides the well-known RTE used in previous TYPO3 versions, if handling of images or custom configurations are necessary.',
             'versionString' => '8.7.0',
-        ]
+            'composerName' => 'friendsoftypo3/rtehtmlarea',
+        ],
     ];
 
     /**
diff --git a/typo3/sysext/install/Classes/Updates/Typo3DbExtractionUpdate.php b/typo3/sysext/install/Classes/Updates/Typo3DbExtractionUpdate.php
index 64ef5592e844d498c4a31201cbecd380eb925ff8..a96ac1367302cd6ede7583605dede2ec71b1b6cb 100644
--- a/typo3/sysext/install/Classes/Updates/Typo3DbExtractionUpdate.php
+++ b/typo3/sysext/install/Classes/Updates/Typo3DbExtractionUpdate.php
@@ -39,7 +39,8 @@ class Typo3DbExtractionUpdate extends AbstractDownloadExtensionUpdate
             'title' => '$GLOBALS[\'TYPO3_DB\'] compatibility layer',
             'description' => 'Provides the well-known database API $GLOBALS[\'TYPO3_DB\'] used in previous TYPO3 versions for extensions that still rely on it.',
             'versionString' => '1.0.1',
-        ]
+            'composerName' => 'friendsoftypo3/typo3db-legacy',
+        ],
     ];
 
     /**
diff --git a/typo3/sysext/install/Tests/Unit/Updates/Compatibility7ExtractionUpdateTest.php b/typo3/sysext/install/Tests/Unit/Updates/Compatibility7ExtractionUpdateTest.php
index d61447b23795b617c1bb4fe707359933a63bcf33..d50c10765675b3fd47214dfb9c461233b6f596d6 100644
--- a/typo3/sysext/install/Tests/Unit/Updates/Compatibility7ExtractionUpdateTest.php
+++ b/typo3/sysext/install/Tests/Unit/Updates/Compatibility7ExtractionUpdateTest.php
@@ -114,7 +114,7 @@ class Compatibility7ExtractionUpdateTest extends UnitTestCase
         $installUtility = $this->prophesize(InstallUtility::class);
         $objectManager->get(InstallUtility::class)->willReturn($installUtility->reveal());
         $objectManager->get(ListUtility::class)->willReturn($listUtility->reveal());
-        $extensionList = ['compatibility7' => []];
+        $extensionList = ['compatibility7' => ['foo' => 'bar']];
         $listUtility->getAvailableExtensions()->willReturn($extensionList);
         $listUtility->getAvailableAndInstalledExtensions($extensionList)->willReturn($extensionList);
         $installUtility->install('compatibility7')->shouldBeCalled();