diff --git a/core/modules/aggregator/src/Plugin/Block/AggregatorFeedBlock.php b/core/modules/aggregator/src/Plugin/Block/AggregatorFeedBlock.php
index 90d8f66..f4c8e2a 100644
--- a/core/modules/aggregator/src/Plugin/Block/AggregatorFeedBlock.php
+++ b/core/modules/aggregator/src/Plugin/Block/AggregatorFeedBlock.php
@@ -167,8 +167,10 @@ public function build() {
    */
   public function getCacheTags() {
     $cache_tags = parent::getCacheTags();
-    $feed = $this->feedStorage->load($this->configuration['feed']);
-    return Cache::mergeTags($cache_tags, $feed->getCacheTags());
+    if ($feed = $this->feedStorage->load($this->configuration['feed'])) {
+      $cache_tags = Cache::mergeTags($cache_tags, $feed->getCacheTags());
+    }
+    return $cache_tags;
   }
 
 }
diff --git a/core/modules/migrate_drupal/tests/src/Kernel/d6/MigrateDrupal6AuditIdsTest.php b/core/modules/migrate_drupal/tests/src/Kernel/d6/MigrateDrupal6AuditIdsTest.php
index a0bb591..0c23e19 100644
--- a/core/modules/migrate_drupal/tests/src/Kernel/d6/MigrateDrupal6AuditIdsTest.php
+++ b/core/modules/migrate_drupal/tests/src/Kernel/d6/MigrateDrupal6AuditIdsTest.php
@@ -113,6 +113,7 @@ public function testAllMigrationsWithIdConflicts() {
       ->createInstancesByTag('Drupal 6');
 
     // Create content.
+    $this->createFeedContent();
     $this->createContent();
 
     // Audit the IDs of all migrations. There should be conflicts since content
diff --git a/core/modules/migrate_drupal/tests/src/Kernel/d7/MigrateDrupal7AuditIdsTest.php b/core/modules/migrate_drupal/tests/src/Kernel/d7/MigrateDrupal7AuditIdsTest.php
index 1d74423..3889277 100644
--- a/core/modules/migrate_drupal/tests/src/Kernel/d7/MigrateDrupal7AuditIdsTest.php
+++ b/core/modules/migrate_drupal/tests/src/Kernel/d7/MigrateDrupal7AuditIdsTest.php
@@ -112,6 +112,7 @@ public function testAllMigrationsWithIdConflicts() {
       ->createInstancesByTag('Drupal 7');
 
     // Create content.
+    $this->createFeedContent();
     $this->createContent();
 
     // Audit the IDs of all Drupal 7 migrations. There should be conflicts since
diff --git a/core/modules/migrate_drupal/tests/src/Traits/CreateTestContentEntitiesTrait.php b/core/modules/migrate_drupal/tests/src/Traits/CreateTestContentEntitiesTrait.php
index db720e8..01edd71 100644
--- a/core/modules/migrate_drupal/tests/src/Traits/CreateTestContentEntitiesTrait.php
+++ b/core/modules/migrate_drupal/tests/src/Traits/CreateTestContentEntitiesTrait.php
@@ -57,39 +57,59 @@ protected function installEntitySchemas() {
   }
 
   /**
-   * Create several pieces of generic content.
+   * Create several pieces of generic content, except for feeds.
    */
   protected function createContent() {
-    // Create an aggregator feed.
+    $this->createBlockContent();
+    $this->createNodeContent();
+    $this->createFileContent();
+    $this->createMenuLinkContent();
+    $this->createTermContent();
+    $this->createUserContent();
+  }
+
+  /**
+   * Create an aggregator feed and item.
+   */
+  protected function createFeedContent() {
+    $feed = Feed::create([
+      'title' => 'feed',
+      'url' => 'http://www.example.com',
+    ]);
+    $feed->save();    // Create an aggregator feed.
     $feed = Feed::create([
       'title' => 'feed',
       'url' => 'http://www.example.com',
     ]);
     $feed->save();
-
-    // Create an aggregator feed item.
     $item = Item::create([
       'title' => 'feed item',
       'fid' => $feed->id(),
       'link' => 'http://www.example.com',
     ]);
     $item->save();
+  }
 
-    // Create a block content.
+  /**
+   * Create block content.
+   */
+  protected function createBlockContent() {
     $block = BlockContent::create([
       'info' => 'block',
       'type' => 'block',
     ]);
     $block->save();
+  }
 
-    // Create a node.
+  /**
+   * Create a node and comment.
+   */
+  protected function createNodeContent() {
     $node = Node::create([
       'type' => 'page',
       'title' => 'page',
     ]);
     $node->save();
-
-    // Create a comment.
     $comment = Comment::create([
       'comment_type' => 'comment',
       'field_name' => 'comment',
@@ -97,29 +117,45 @@ protected function createContent() {
       'entity_id' => $node->id(),
     ]);
     $comment->save();
+  }
 
-    // Create a file.
+  /**
+   *  Create a file.
+   */
+  protected function createFileContent() {
     $file = File::create([
       'uri' => 'public://example.txt',
     ]);
     $file->save();
+  }
 
-    // Create a menu link.
+  /**
+   * Create a menu link.
+   */
+  protected function createMenuLinkContent() {
     $menu_link = MenuLinkContent::create([
       'title' => 'menu link',
       'link' => ['uri' => 'http://www.example.com'],
       'menu_name' => 'tools',
     ]);
     $menu_link->save();
+  }
 
-    // Create a taxonomy term.
+  /**
+   * Create a taxonomy term.
+   */
+  protected function createTermContent() {
     $term = Term::create([
       'name' => 'term',
       'vid' => 'term',
     ]);
     $term->save();
+  }
 
-    // Create a user.
+  /**
+   * Create a user.
+   */
+  protected function createUserContent() {
     $user = User::create([
       'uid' => 2,
       'name' => 'user',
diff --git a/core/modules/migrate_drupal_ui/src/Form/MigrateUpgradeForm.php b/core/modules/migrate_drupal_ui/src/Form/MigrateUpgradeForm.php
index 898a8a5..0f80b47 100644
--- a/core/modules/migrate_drupal_ui/src/Form/MigrateUpgradeForm.php
+++ b/core/modules/migrate_drupal_ui/src/Form/MigrateUpgradeForm.php
@@ -2,6 +2,7 @@
 
 namespace Drupal\migrate_drupal_ui\Form;
 
+use Drupal\Core\Database\DatabaseExceptionWrapper;
 use Drupal\Core\Datetime\DateFormatterInterface;
 use Drupal\Core\Extension\ModuleHandlerInterface;
 use Drupal\Core\Form\ConfirmFormBase;
@@ -166,9 +167,16 @@ public function buildOverviewForm(array $form, FormStateInterface $form_state) {
       //   https://www.drupal.org/node/2687849
       $form['upgrade_option_item'] = [
         '#type' => 'item',
-        '#prefix' => $this->t('An upgrade has already been performed on this site. To perform a new migration, create a clean and empty new install of Drupal 8. Rollbacks and incremental migrations are not yet supported through the user interface. For more information, see the <a href=":url">upgrading handbook</a>.', [':url' => 'https://www.drupal.org/upgrade/migrate']),
+        '#prefix' => $this->t('An upgrade has already been performed on this site. To perform a new migration, create a clean and empty new install of Drupal 8. Rollbacks are not yet supported through the user interface. For more information, see the <a href=":url">upgrading handbook</a>.', [':url' => 'https://www.drupal.org/upgrade/migrate']),
         '#description' => $this->t('Last upgrade: @date', ['@date' => $this->dateFormatter->format($date_performed)]),
       ];
+      $form['actions']['incremental'] = [
+        '#type' => 'submit',
+        '#value' => $this->t('Import new configuration and content from old site'),
+        '#button_type' => 'primary',
+        '#validate' => ['::validateIncrementalForm'],
+        '#submit' => ['::submitIncrementalForm'],
+      ];
       return $form;
     }
     else {
@@ -236,6 +244,51 @@ public function submitOverviewForm(array &$form, FormStateInterface $form_state)
   }
 
   /**
+   * Validation handler for the incremental overview form.
+   *
+   * @param array $form
+   *   An associative array containing the structure of the form.
+   * @param \Drupal\Core\Form\FormStateInterface $form_state
+   *   The current state of the form.
+   */
+  public function validateIncrementalForm(array &$form, FormStateInterface $form_state) {
+    // Retrieve the database driver from state.
+    $database_state_key = $this->state->get('migrate.fallback_state_key', '');
+    if ($database_state_key) {
+      try {
+        $database = $this->state->get($database_state_key, [])['database'];
+        if ($connection = $this->getConnection($database)) {
+          if ($version = $this->getLegacyDrupalVersion($connection)) {
+            $this->setupMigrations($database, $form_state);
+            $valid_legacy_database = TRUE;
+          }
+        }
+      }
+      catch (DatabaseExceptionWrapper $exception) {
+        // Hide DB exceptions and forward to the DB credentials form. In that
+        // form we can more properly display errors and accept new credentials.
+      }
+    }
+    if (empty($valid_legacy_database)) {
+      $form_state->setValue('step', 'credentials');
+      $form_state->setRebuild();
+    }
+  }
+
+  /**
+   * Form submission handler for the incremental overview form.
+   *
+   * @param array $form
+   *   An associative array containing the structure of the form.
+   * @param \Drupal\Core\Form\FormStateInterface $form_state
+   *   The current state of the form.
+   */
+  public function submitIncrementalForm(array &$form, FormStateInterface $form_state) {
+    $form_state->set('step', 'confirm_id_conflicts');
+    $form_state->setRebuild();
+  }
+
+  /**
    * Builds the database credential form and adds file location information.
    *
    * This is largely borrowed from \Drupal\Core\Installer\Form\SiteSettingsForm.
@@ -415,31 +468,7 @@ public function validateCredentialForm(array &$form, FormStateInterface $form_st
         ]));
       }
       else {
-        $this->createDatabaseStateSettings($database, $version);
-        $migrations = $this->getMigrations('migrate_drupal_' . $version, $version);
-
-        // Get the system data from source database.
-        $system_data = $this->getSystemData($connection);
-
-        // Convert the migration object into array
-        // so that it can be stored in form storage.
-        $migration_array = [];
-        foreach ($migrations as $migration) {
-          $migration_array[$migration->id()] = $migration->label();
-        }
-
-        // Store the retrieved migration IDs in form storage.
-        $form_state->set('version', $version);
-        $form_state->set('migrations', $migration_array);
-        if ($version == 6) {
-          $form_state->set('source_base_path', $form_state->getValue('d6_source_base_path'));
-        }
-        else {
-          $form_state->set('source_base_path', $form_state->getValue('source_base_path'));
-        }
-        $form_state->set('source_private_file_path', $form_state->getValue('source_private_file_path'));
-        // Store the retrived system data in form storage.
-        $form_state->set('system_data', $system_data);
+        $this->setupMigrations($database, $form_state);
       }
     }
     catch (\Exception $e) {
@@ -848,6 +877,44 @@ protected function getDatabaseTypes() {
   }
 
   /**
+   * Setup migrations.
+   *
+   * @param array $database
+   *   Database array representing the source Drupal database.
+   * @param \Drupal\Core\Form\FormStateInterface $form_state
+   *   The current state of the form.
+   */
+  protected function setupMigrations(array $database, FormStateInterface $form_state) {
+    $connection = $this->getConnection($database);
+    $version = $this->getLegacyDrupalVersion($connection);
+    $this->createDatabaseStateSettings($database, $version);
+    $migrations = $this->getMigrations('migrate_drupal_' . $version, $version);
+
+    // Get the system data from source database.
+    $system_data = $this->getSystemData($connection);
+
+    // Convert the migration object into array
+    // so that it can be stored in form storage.
+    $migration_array = [];
+    foreach ($migrations as $migration) {
+      $migration_array[$migration->id()] = $migration->label();
+    }
+
+    // Store the retrieved migration IDs in form storage.
+    $form_state->set('version', $version);
+    $form_state->set('migrations', $migration_array);
+    if ($version == 6) {
+      $form_state->set('source_base_path', $form_state->getValue('d6_source_base_path'));
+    }
+    else {
+      $form_state->set('source_base_path', $form_state->getValue('source_base_path'));
+    }
+    $form_state->set('source_private_file_path', $form_state->getValue('source_private_file_path'));
+    // Store the retrived system data in form storage.
+    $form_state->set('system_data', $system_data);
+  }
+
+  /**
    * {@inheritdoc}
    */
   public function getQuestion() {
diff --git a/core/modules/migrate_drupal_ui/tests/src/Functional/MigrateUpgradeTestBase.php b/core/modules/migrate_drupal_ui/tests/src/Functional/MigrateUpgradeTestBase.php
index 98c05aa..0db200f 100644
--- a/core/modules/migrate_drupal_ui/tests/src/Functional/MigrateUpgradeTestBase.php
+++ b/core/modules/migrate_drupal_ui/tests/src/Functional/MigrateUpgradeTestBase.php
@@ -40,7 +40,6 @@
     'content_translation',
     'migrate_drupal_ui',
     'telephone',
-    'aggregator',
     'book',
     'forum',
     'statistics',
@@ -118,6 +117,12 @@ protected function tearDown() {
 
   /**
    * Executes all steps of migrations upgrade.
+   *
+   * The upgrade is started three times. The first time is to test that
+   * providing incorrect database credentials fails as expected. The second
+   * time is to run the migration and assert the results. The third time is
+   * to test an incremental migration, by installing the aggregator module,
+   * and assert the results.
    */
   public function testMigrateUpgrade() {
     $connection_options = $this->sourceDatabase->getConnectionOptions();
@@ -160,19 +165,7 @@ public function testMigrateUpgrade() {
     $this->assertText('Resolve the issue below to continue the upgrade.');
 
     $this->drupalPostForm(NULL, $edits, t('Review upgrade'));
-    $session->pageTextContains('WARNING: Content may be overwritten on your new site.');
-    $session->pageTextContains('There is conflicting content of these types:');
-    $session->pageTextContains('aggregator feed entities');
-    $session->pageTextContains('aggregator feed item entities');
-    $session->pageTextContains('custom block entities');
-    $session->pageTextContains('custom menu link entities');
-    $session->pageTextContains('file entities');
-    $session->pageTextContains('taxonomy term entities');
-    $session->pageTextContains('user entities');
-    $session->pageTextContains('comments');
-    $session->pageTextContains('content item revisions');
-    $session->pageTextContains('content items');
-    $session->pageTextContains('There is translated content of these types:');
+    $this->assertIdConflict($session);
     $this->drupalPostForm(NULL, [], t('I acknowledge I may lose data. Continue anyway.'));
     $this->assertResponse(200);
     $this->assertText('Upgrade analysis report');
@@ -187,16 +180,126 @@ public function testMigrateUpgrade() {
     // Restart the upgrade process.
     $this->drupalGet('/upgrade');
     $session->responseContains('Upgrade a site by importing its files and the data from its database into a clean and empty new install of Drupal 8.');
-
     $this->drupalPostForm(NULL, [], t('Continue'));
     $session->pageTextContains('Provide credentials for the database of the Drupal site you want to upgrade.');
     $session->fieldExists('mysql[host]');
-
     $this->drupalPostForm(NULL, $edits, t('Review upgrade'));
+    $this->assertIdConflict($session);
+
+    $this->drupalPostForm(NULL, [], t('I acknowledge I may lose data. Continue anyway.'));
+    $session->statusCodeEquals(200);
+    $all_available = $this->getAvailablePaths();
+    $all_missing = $this->getMissingPaths();
+    $this->assertReviewPage($session, $all_available, $all_missing);
+    $this->drupalPostForm(NULL, [], t('Perform upgrade'));
+    $this->assertText(t('Congratulations, you upgraded Drupal!'));
+
+    \Drupal::service('module_installer')->install(['forum']);
+    \Drupal::service('module_installer')->install(['book']);
+
+    // Install aggregator module.
+    \Drupal::service('module_installer')->install(['aggregator']);
+
+    // Test incremental migration.
+    // Need to update available and missing path lists.
+    $this->drupalGet('/upgrade');
+    $session->responseContains('An upgrade has already been performed on this site. To perform a new migration, create a clean and empty new install of Drupal 8. Rollbacks are not yet supported through the user interface.');
+    $this->drupalPostForm(NULL, [], t('Import new configuration and content from old site'));
     $session->pageTextContains('WARNING: Content may be overwritten on your new site.');
+    $session->pageTextContains('There is conflicting content of these types:');
+    $session->pageTextContains('file entities');
+    $session->pageTextContains('content item revisions');
+    $session->pageTextContains('There is translated content of these types:');
+    $session->pageTextContains('content items');
+
     $this->drupalPostForm(NULL, [], t('I acknowledge I may lose data. Continue anyway.'));
     $session->statusCodeEquals(200);
-    $session->pageTextContains('Upgrade analysis report');
+    $all_available = $this->getAvailablePaths();
+    $all_available[] = 'aggregator';
+    $all_missing = $this->getMissingPaths();
+    $all_missing = array_diff($all_missing, ['aggregator']);
+    $this->assertReviewPage($session, $all_available, $all_missing);
+    $this->drupalPostForm(NULL, [], t('Perform upgrade'));
+    $session->pageTextContains(t('Congratulations, you upgraded Drupal!'));
+    $this->assertMigrationResults($this->getEntityCountsIncremental(), $version);
+  }
+
+  /**
+   * Transforms a nested array into a flat array suitable for BrowserTestBase::drupalPostForm().
+   *
+   * @param array $values
+   *   A multi-dimensional form values array to convert.
+   *
+   * @return array
+   *   The flattened $edit array suitable for BrowserTestBase::drupalPostForm().
+   */
+  protected function translatePostValues(array $values) {
+    $edit = [];
+    // The easiest and most straightforward way to translate values suitable for
+    // BrowserTestBase::drupalPostForm() is to actually build the POST data string
+    // and convert the resulting key/value pairs back into a flat array.
+    $query = http_build_query($values);
+    foreach (explode('&', $query) as $item) {
+      list($key, $value) = explode('=', $item);
+      $edit[urldecode($key)] = urldecode($value);
+    }
+    return $edit;
+  }
+
+  /**
+   * Gets the source base path for the concrete test.
+   *
+   * @return string
+   *   The source base path.
+   */
+  abstract protected function getSourceBasePath();
+
+  /**
+   * Gets the expected number of entities per entity type after migration.
+   *
+   * @return int[]
+   *   An array of expected counts keyed by entity type ID.
+   */
+  abstract protected function getEntityCounts();
+
+  /**
+   * Gets the available upgrade paths.
+   *
+   * @return string[]
+   *   An array of available upgrade paths.
+   */
+  abstract protected function getAvailablePaths();
+
+  /**
+   * Gets the missing upgrade paths.
+   *
+   * @return string[]
+   *   An array of missing upgrade paths.
+   */
+  abstract protected function getMissingPaths();
+
+  /**
+   * Gets the expected number of entities per entity type after incremental.
+   *
+   * @return int[]
+   *   An array of expected counts keyed by entity type ID.
+   */
+  abstract protected function getEntityCountsIncremental();
+
+
+  /**
+   * Helper method to assert the text on the 'Upgrade analysis report' page.
+   *
+   * @param $session
+   *   The currenct session.
+   * @param $all_available
+   *   Array of modules that will be upgraded.
+   * @param $all_missing
+   *   Array of modules that will not be upgraded.
+   */
+  protected function assertReviewPage($session, $all_available, $all_missing) {
+    $this->assertText('Upgrade analysis report');
+
     // Ensure there are no errors about the missing modules from the test module.
     $session->pageTextNotContains(t('Source module not found for migration_provider_no_annotation.'));
     $session->pageTextNotContains(t('Source module not found for migration_provider_test.'));
@@ -205,34 +308,56 @@ public function testMigrateUpgrade() {
     $session->pageTextNotContains(t('module not found'));
 
     // Test the available migration paths.
-    $all_available = $this->getAvailablePaths();
     foreach ($all_available as $available) {
       $session->elementExists('xpath', "//span[contains(@class, 'checked') and text() = '$available']");
       $session->elementNotExists('xpath', "//span[contains(@class, 'warning') and text() = '$available']");
     }
 
     // Test the missing migration paths.
-    $all_missing = $this->getMissingPaths();
     foreach ($all_missing as $missing) {
       $session->elementExists('xpath', "//span[contains(@class, 'warning') and text() = '$missing']");
       $session->elementNotExists('xpath', "//span[contains(@class, 'checked') and text() = '$missing']");
     }
+  }
 
-    $this->drupalPostForm(NULL, [], t('Perform upgrade'));
-    $this->assertText(t('Congratulations, you upgraded Drupal!'));
+  /**
+   * Helper method that asserts text on the ID conflict form.
+   *
+   * @param $session
+   *   The currenct session.
+   */
+  protected function assertIdConflict($session) {
+    $session->pageTextContains('WARNING: Content may be overwritten on your new site.');
+    $session->pageTextContains('There is conflicting content of these types:');
+    $session->pageTextContains('custom block entities');
+    $session->pageTextContains('custom menu link entities');
+    $session->pageTextContains('file entities');
+    $session->pageTextContains('taxonomy term entities');
+    $session->pageTextContains('user entities');
+    $session->pageTextContains('comments');
+    $session->pageTextContains('content item revisions');
+    $session->pageTextContains('content items');
+    $session->pageTextContains('There is translated content of these types:');
+  }
 
+  /**
+   * Checks that migrations have been performed successfully.
+   *
+   * @param array $expected_counts
+   *   The expected counts of each entity type.
+   * @param string $version
+   *   The drupal verison.
+   *
+   */
+  protected function assertMigrationResults(array $expected_counts, $version) {
     // Have to reset all the statics after migration to ensure entities are
     // loadable.
     $this->resetAll();
-
-    $expected_counts = $this->getEntityCounts();
-    foreach (array_keys(\Drupal::entityTypeManager()
-      ->getDefinitions()) as $entity_type) {
-      $real_count = \Drupal::entityQuery($entity_type)->count()->execute();
+    foreach (array_keys(\Drupal::entityTypeManager()->getDefinitions()) as $entity_type) {
+      $real_count = (int) \Drupal::entityQuery($entity_type)->count()->execute();
       $expected_count = isset($expected_counts[$entity_type]) ? $expected_counts[$entity_type] : 0;
-      $this->assertEqual($expected_count, $real_count, "Found $real_count $entity_type entities, expected $expected_count.");
+      $this->assertSame($expected_count, $real_count, "Found $real_count $entity_type entities, expected $expected_count.");
     }
-
     $plugin_manager = \Drupal::service('plugin.manager.migration');
     /** @var \Drupal\migrate\Plugin\Migration[] $all_migrations */
     $all_migrations = $plugin_manager->createInstancesByTag('Drupal ' . $version);
@@ -257,62 +382,7 @@ public function testMigrateUpgrade() {
         }
       }
     }
-    \Drupal::service('module_installer')->install(['forum']);
-    \Drupal::service('module_installer')->install(['book']);
-  }
 
-  /**
-   * Transforms a nested array into a flat array suitable for BrowserTestBase::drupalPostForm().
-   *
-   * @param array $values
-   *   A multi-dimensional form values array to convert.
-   *
-   * @return array
-   *   The flattened $edit array suitable for BrowserTestBase::drupalPostForm().
-   */
-  protected function translatePostValues(array $values) {
-    $edit = [];
-    // The easiest and most straightforward way to translate values suitable for
-    // BrowserTestBase::drupalPostForm() is to actually build the POST data string
-    // and convert the resulting key/value pairs back into a flat array.
-    $query = http_build_query($values);
-    foreach (explode('&', $query) as $item) {
-      list($key, $value) = explode('=', $item);
-      $edit[urldecode($key)] = urldecode($value);
-    }
-    return $edit;
   }
 
-  /**
-   * Gets the source base path for the concrete test.
-   *
-   * @return string
-   *   The source base path.
-   */
-  abstract protected function getSourceBasePath();
-
-  /**
-   * Gets the expected number of entities per entity type after migration.
-   *
-   * @return int[]
-   *   An array of expected counts keyed by entity type ID.
-   */
-  abstract protected function getEntityCounts();
-
-  /**
-   * Gets the available upgrade paths.
-   *
-   * @return string[]
-   *   An array of available upgrade paths.
-   */
-  abstract protected function getAvailablePaths();
-
-  /**
-   * Gets the missing upgrade paths.
-   *
-   * @return string[]
-   *   An array of missing upgrade paths.
-   */
-  abstract protected function getMissingPaths();
-
 }
diff --git a/core/modules/migrate_drupal_ui/tests/src/Functional/d6/MigrateUpgrade6Test.php b/core/modules/migrate_drupal_ui/tests/src/Functional/d6/MigrateUpgrade6Test.php
index 432b703..ed16569 100644
--- a/core/modules/migrate_drupal_ui/tests/src/Functional/d6/MigrateUpgrade6Test.php
+++ b/core/modules/migrate_drupal_ui/tests/src/Functional/d6/MigrateUpgrade6Test.php
@@ -69,22 +69,39 @@ protected function getEntityCounts() {
       'user' => 7,
       'user_role' => 6,
       'menu_link_content' => 5,
-      'view' => 16,
+      'view' => 14,
       'date_format' => 11,
       'entity_form_display' => 29,
       'entity_form_mode' => 1,
-      'entity_view_display' => 53,
-      'entity_view_mode' => 14,
+      'entity_view_display' => 50,
+      'entity_view_mode' => 12,
       'base_field_override' => 38,
     ];
   }
+   /**
+    * {@inheritdoc}
+    */
+  protected function getEntityCountsIncremental() {
+    $counts = $this->getEntityCounts();
+    $counts['aggregator_feed'] = 1;
+    $counts['aggregator_item'] = 1;
+    $counts['base_field_override'] = 38;
+    $counts['entity_form_display'] = 29;
+    $counts['entity_view_display'] = 53;
+    $counts['entity_view_mode'] = 14;
+    $counts['field_config'] = 84;
+    $counts['field_storage_config'] = 58;
+    $counts['node_type'] = 13;
+    $counts['rdf_mapping'] = 7;
+    $counts['view'] = 16;
+    return $counts;
+  }
 
   /**
    * {@inheritdoc}
    */
   protected function getAvailablePaths() {
     return [
-      'aggregator',
       'block',
       'book',
       'comment',
@@ -129,6 +146,7 @@ protected function getAvailablePaths() {
    */
   protected function getMissingPaths() {
     return [
+      'aggregator',
       'date_api',
       'date_timezone',
       'event',
diff --git a/core/modules/migrate_drupal_ui/tests/src/Functional/d7/MigrateUpgrade7Test.php b/core/modules/migrate_drupal_ui/tests/src/Functional/d7/MigrateUpgrade7Test.php
index 608967c..84290db 100644
--- a/core/modules/migrate_drupal_ui/tests/src/Functional/d7/MigrateUpgrade7Test.php
+++ b/core/modules/migrate_drupal_ui/tests/src/Functional/d7/MigrateUpgrade7Test.php
@@ -39,8 +39,6 @@ protected function getSourceBasePath() {
    */
   protected function getEntityCounts() {
     return [
-      'aggregator_item' => 11,
-      'aggregator_feed' => 1,
       'block' => 25,
       'block_content' => 1,
       'block_content_type' => 1,
@@ -73,12 +71,12 @@ protected function getEntityCounts() {
       'user' => 4,
       'user_role' => 3,
       'menu_link_content' => 8,
-      'view' => 16,
+      'view' => 14,
       'date_format' => 11,
       'entity_form_display' => 17,
       'entity_form_mode' => 1,
-      'entity_view_display' => 28,
-      'entity_view_mode' => 14,
+      'entity_view_display' => 25,
+      'entity_view_mode' => 12,
       'base_field_override' => 9,
     ];
   }
@@ -86,9 +84,27 @@ protected function getEntityCounts() {
   /**
    * {@inheritdoc}
    */
+  protected function getEntityCountsIncremental() {
+    $counts = $this->getEntityCounts();
+    $counts['aggregator_feed'] = 1;
+    $counts['aggregator_item'] = 10;
+    $counts['base_field_override'] = 9;
+    $counts['entity_form_display'] = 17;
+    $counts['entity_view_display'] = 28;
+    $counts['entity_view_mode'] = 14;
+    $counts['field_config'] = 61;
+    $counts['field_storage_config'] = 44;
+    $counts['rdf_mapping'] = 7;
+    $counts['taxonomy_term'] = 18;
+    $counts['view'] = 16;
+    return $counts;
+  }
+
+  /**
+   * {@inheritdoc}
+   */
   protected function getAvailablePaths() {
     return [
-      'aggregator',
       'block',
       'comment',
       'contact',
@@ -132,6 +148,7 @@ protected function getAvailablePaths() {
    */
   protected function getMissingPaths() {
     return [
+      'aggregator',
       'blog',
       'book',
       'color',
