diff --git a/core/modules/migrate_drupal_ui/src/Form/MigrateUpgradeForm.php b/core/modules/migrate_drupal_ui/src/Form/MigrateUpgradeForm.php
index 5808c1f..e229d60 100644
--- a/core/modules/migrate_drupal_ui/src/Form/MigrateUpgradeForm.php
+++ b/core/modules/migrate_drupal_ui/src/Form/MigrateUpgradeForm.php
@@ -958,8 +958,8 @@ public function buildConfirmForm(array $form, FormStateInterface $form_state) {
 
     $form['actions']['submit']['#value'] = $this->t('Perform upgrade');
 
-    $table_data = [];
-    $system_data = [];
+    // Build upgrade analysis.
+    // Get system data and migrations.
     foreach ($form_state->get('migrations') as $migration_id => $migration_label) {
       // Fetch the system data at the first opportunity.
       if (empty($system_data)) {
@@ -972,13 +972,13 @@ public function buildConfirmForm(array $form, FormStateInterface $form_state) {
       $destination_module = $this->moduleUpgradePaths[$migration_id]['destination_module'];
       $table_data[$source_module][$destination_module][$migration_id] = $migration_label;
     }
+
     // Sort the table by source module names and within that destination
     // module names.
     ksort($table_data);
     foreach ($table_data as $source_module => $destination_module_info) {
       ksort($table_data[$source_module]);
     }
-    $unmigrated_source_modules = array_diff_key($system_data['module'], $table_data);
 
     // Missing migrations.
     $form['missing_module_list_title'] = [
@@ -993,17 +993,11 @@ public function buildConfirmForm(array $form, FormStateInterface $form_state) {
         $this->t('Destination'),
       ],
     ];
-    $missing_count = 0;
-    ksort($unmigrated_source_modules);
-    foreach ($unmigrated_source_modules as $source_module => $module_data) {
-      if ($module_data['status']) {
-        $missing_count++;
-        $form['missing_module_list'][$source_module] = [
-          'source_module' => ['#plain_text' => $source_module],
-          'destination_module' => ['#plain_text' => 'Missing'],
-        ];
-      }
-    }
+    $unmigrated_source_modules = array_diff_key($system_data['module'], $table_data);
+    $missing = $this->getMissingMigrations($unmigrated_source_modules);
+    $missing_count = count($missing);
+    $form['missing_module_list'] = $form['missing_module_list'] + $missing;
+
     // Available migrations.
     $form['available_module_list'] = [
       '#tree' => TRUE,
@@ -1018,10 +1012,54 @@ public function buildConfirmForm(array $form, FormStateInterface $form_state) {
         $this->t('Destination'),
       ],
     ];
+    $available = $this->getAvailableMigrations($table_data);
+    $available_count = count($table_data);
+    $form['available_module_list']['module_list'] = $form['available_module_list']['module_list'] +  $available;
 
-    $available_count = 0;
+    $form['counts'] = [
+      '#type' => 'item',
+      '#title' => '<ul><li>' . $this->t('@count available upgrade paths', ['@count' => $available_count]) . '</li><li>' . $this->t('@count missing upgrade paths', ['@count' => $missing_count]) . '</li></ul>',
+      '#weight' => -15,
+    ];
+
+    return $form;
+  }
+
+  /**
+   * Build a list of missing migrations.
+   *
+   * @param array $unmigrated_source_modules
+   *   An array of missing migrations keyed by source module.
+   *
+   * * @return array $available
+   *   Array of missing migrations formatted for display in a table.
+   */
+  protected function getMissingMigrations($unmigrated_source_modules) {
+    ksort($unmigrated_source_modules);
+    foreach ($unmigrated_source_modules as $source_module => $module_data) {
+      if ($module_data['status']) {
+        $missing[$source_module] = [
+          'source_module' => ['#plain_text' => $source_module],
+          'destination_module' => ['#plain_text' => 'Missing'],
+        ];
+      }
+    }
+    return $missing;
+  }
+
+  /**
+   * Build a list of available migrations.
+   *
+   * @param array $table_data
+   *   An multidimensional array of migrations, keyed by source module,
+   *   destination module and migration id.
+   *
+   * @return array $available
+   *   Array of available migrations formatted for display in a table.
+   *
+   */
+  protected function getAvailableMigrations($table_data) {
     foreach ($table_data as $source_module => $destination_module_info) {
-      $available_count++;
       $destination_details = [];
       foreach ($destination_module_info as $destination_module => $migration_ids) {
         $destination_details[$destination_module] = [
@@ -1029,18 +1067,12 @@ public function buildConfirmForm(array $form, FormStateInterface $form_state) {
           '#plain_text' => $destination_module,
         ];
       }
-      $form['available_module_list']['module_list'][$source_module] = [
+      $available[$source_module] = [
         'source_module' => ['#plain_text' => $source_module],
         'destination_module' => $destination_details,
       ];
     }
-    $form['counts'] = [
-      '#type' => 'item',
-      '#title' => '<ul><li>' . $this->t('@count available upgrade paths', ['@count' => $available_count]) . '</li><li>' . $this->t('@count missing upgrade paths', ['@count' => $missing_count]) . '</li></ul>',
-      '#weight' => -15,
-    ];
-
-    return $form;
+    return $available;
   }
 
   /**
