diff --git a/automatic_updates_extensions/src/Form/UpdaterForm.php b/automatic_updates_extensions/src/Form/UpdaterForm.php
index d7e6545d2e0aec0e2498c4b2c446b05264beffea..a4111421ed1b4065b636922a0a014c2047345a6e 100644
--- a/automatic_updates_extensions/src/Form/UpdaterForm.php
+++ b/automatic_updates_extensions/src/Form/UpdaterForm.php
@@ -13,6 +13,7 @@ use Drupal\Core\State\StateInterface;
 use Drupal\Core\Messenger\MessengerInterface;
 use Drupal\Core\Render\RendererInterface;
 use Drupal\Core\Url;
+use Drupal\package_manager\ProjectInfo;
 use Drupal\system\SystemManager;
 use Drupal\update\UpdateManagerInterface;
 use Symfony\Component\DependencyInjection\ContainerInterface;
@@ -241,22 +242,24 @@ final class UpdaterForm extends FormBase {
       return [];
     }
 
-    $project_data = update_calculate_project_data($available_updates);
+    $all_projects_data = update_calculate_project_data($available_updates);
     $outdated_modules = [];
     $installed_packages = array_keys($this->extensionUpdater->getActiveComposer()->getInstalledPackages());
     $non_supported_update_statuses = [];
-    foreach ($project_data as $project_name => $project_info) {
-      if (in_array($project_info['project_type'], $supported_project_types, TRUE)) {
-        if ($project_info['status'] !== UpdateManagerInterface::CURRENT) {
+    foreach ($all_projects_data as $project_name => $project_data) {
+      if (in_array($project_data['project_type'], $supported_project_types, TRUE)) {
+        if ($project_data['status'] !== UpdateManagerInterface::CURRENT) {
           if (!in_array("drupal/$project_name", $installed_packages, TRUE)) {
-            $non_supported_update_statuses[] = $project_info['status'];
+            $non_supported_update_statuses[] = $project_data['status'];
             continue;
           }
-          if (!empty($project_info['recommended'])) {
-            $outdated_modules[$project_name] = $project_info;
+          $project_information = new ProjectInfo($project_name);
+          $installable_versions = array_keys($project_information->getInstallableReleases());
+          if (!empty($project_data['recommended']) && in_array($project_data['recommended'], $installable_versions, TRUE)) {
+            $outdated_modules[$project_name] = $project_data;
           }
           else {
-            $non_supported_update_statuses[] = $project_info['status'];
+            $non_supported_update_statuses[] = $project_data['status'];
           }
         }
       }
@@ -287,7 +290,6 @@ final class UpdaterForm extends FormBase {
           $message_status
         );
       }
-
     }
     return $outdated_modules;
   }
diff --git a/automatic_updates_extensions/tests/modules/automatic_updates_extensions_test/automatic_updates_extensions_test.info.yml b/automatic_updates_extensions/tests/modules/automatic_updates_extensions_test/automatic_updates_extensions_test.info.yml
new file mode 100644
index 0000000000000000000000000000000000000000..a0c7a2a93a25a76cbb074987247658a11a68862a
--- /dev/null
+++ b/automatic_updates_extensions/tests/modules/automatic_updates_extensions_test/automatic_updates_extensions_test.info.yml
@@ -0,0 +1,6 @@
+name: 'Automatic Updates Extensions Tests'
+description: 'Provides functional tests for recommended versions'
+type: module
+package: Testing
+dependencies:
+  - automatic_updates:automatic_updates_extensions
diff --git a/automatic_updates_extensions/tests/modules/automatic_updates_extensions_test/automatic_updates_extensions_test.module b/automatic_updates_extensions/tests/modules/automatic_updates_extensions_test/automatic_updates_extensions_test.module
new file mode 100644
index 0000000000000000000000000000000000000000..887cc4f2a4385f9349f51a8467e04e08332d55dd
--- /dev/null
+++ b/automatic_updates_extensions/tests/modules/automatic_updates_extensions_test/automatic_updates_extensions_test.module
@@ -0,0 +1,15 @@
+<?php
+
+/**
+ * @file
+ * Contains hook implementation for Automatic Updates Extensions Test.
+ */
+
+/**
+ * Implements hook_update_status_alter().
+ */
+function automatic_updates_extensions_test_update_status_alter(&$projects) {
+  if (\Drupal::state()->get('testUninstallableRelease') && !empty($projects['semver_test'])) {
+    $projects['semver_test']['recommended'] = $projects['semver_test']['existing_version'];
+  }
+}
diff --git a/automatic_updates_extensions/tests/src/Functional/UpdaterFormTest.php b/automatic_updates_extensions/tests/src/Functional/UpdaterFormTest.php
index d8c3a98bd7e77ee921efecf7738633ad1af37f3d..56d5e880a5cc1632f8062ff0bb393295d25701cf 100644
--- a/automatic_updates_extensions/tests/src/Functional/UpdaterFormTest.php
+++ b/automatic_updates_extensions/tests/src/Functional/UpdaterFormTest.php
@@ -38,6 +38,7 @@ class UpdaterFormTest extends AutomaticUpdatesFunctionalTestBase {
     'block',
     'semver_test',
     'aaa_update_test',
+    'automatic_updates_extensions_test',
   ];
 
   /**
@@ -416,4 +417,19 @@ class UpdaterFormTest extends AutomaticUpdatesFunctionalTestBase {
     $assert->buttonExists('Update');
   }
 
+  /**
+   * Tests the form when an uninstallable module requires an update.
+   */
+  public function testUninstallableRelease(): void {
+    $this->container->get('state')->set('testUninstallableRelease', TRUE);
+    $this->setReleaseMetadata(__DIR__ . '/../../fixtures/release-history/semver_test.1.1.xml');
+    $assert = $this->assertSession();
+    $this->setProjectInstalledVersion(['semver_test' => '8.1.0']);
+    $user = $this->createUser(['administer software updates', 'administer site configuration']);
+    $this->drupalLogin($user);
+    $this->drupalGet('admin/reports/updates/automatic-update-extensions');
+    $this->checkForUpdates();
+    $this->assertNoUpdates();
+  }
+
 }