diff --git a/migrate_example/README.txt b/migrate_example/README.txt
index 1778ca348fd7934e21cc0f361c4c2cb991e8da46..d9a12dc60bd43b954cfd4438a54483fa5e51fb70 100644
--- a/migrate_example/README.txt
+++ b/migrate_example/README.txt
@@ -49,8 +49,8 @@ read the files in the following order:
 
 RUNNING THE MIGRATIONS
 ----------------------
-The migrate_tools module (also part of the migrate_plus project) provides the
-tools you need to perform migration processes. At this time, the web UI only
+The migrate_tools module (https://www.drupal.org/project/migrate_tools) provides
+the tools you need to perform migration processes. At this time, the web UI only
 provides status information - to perform migration operations, you need to use
 the drush commands.
 
@@ -66,7 +66,6 @@ drush ms               # Abbreviation for migrate-status
 # Run the import operation for all the beer migrations.
 drush mi --group=beer  # Abbreviation for migrate-import
 
-
 # Look at what you've done! Also, visit the site and see the imported content,
 # user accounts, etc.
 drush ms
diff --git a/migrate_source_csv/migrate_source_csv.info.yml b/migrate_source_csv/migrate_source_csv.info.yml
deleted file mode 100644
index 7810f170ab2de4ca6cda9d34d6a1706c0590eaad..0000000000000000000000000000000000000000
--- a/migrate_source_csv/migrate_source_csv.info.yml
+++ /dev/null
@@ -1,7 +0,0 @@
-type: module
-name: Migrate Source CSV
-description: 'CSV source migration.'
-package: Migration
-core: 8.x
-dependencies:
-  - migrate
diff --git a/migrate_source_csv/src/CSVFileObject.php b/migrate_source_csv/src/CSVFileObject.php
deleted file mode 100644
index 8d9950ea93aea54437d98d05ad2e22376d8c5a88..0000000000000000000000000000000000000000
--- a/migrate_source_csv/src/CSVFileObject.php
+++ /dev/null
@@ -1,120 +0,0 @@
-<?php
-/**
- * @file
- * Contains \Drupal\migrate_source_csv\CSVFileObject.php.
- */
-
-namespace Drupal\migrate_source_csv;
-
-/**
- * Defines a CSV file object.
- *
- * @package Drupal\migrate_source_csv.
- *
- * Extends SPLFileObject to:
- * - assume CSV format
- * - skip header rows on rewind()
- * - address columns by header row name instead of index.
- */
-class CSVFileObject extends \SplFileObject {
-
-  /**
-   * The number of rows in the CSV file before the data starts.
-   *
-   * @var integer
-   */
-  protected $headerRowCount = 0;
-
-  /**
-   * The human-readable column headers, keyed by column index in the CSV.
-   *
-   * @var array
-   */
-  protected $columnNames = array();
-
-  /**
-   * {@inheritdoc}
-   */
-  public function __construct($file_name) {
-    // Necessary to use this approach because SplFileObject doesn't like NULL
-    // arguments passed to it.
-    call_user_func_array(array('parent', '__construct'), func_get_args());
-
-    $this->setFlags(CSVFileObject::READ_CSV | CSVFileObject::READ_AHEAD | CSVFileObject::DROP_NEW_LINE | CSVFileObject::SKIP_EMPTY);
-  }
-
-  /**
-   * {@inheritdoc}
-   */
-  public function rewind() {
-    $this->seek($this->getHeaderRowCount());
-  }
-
-  /**
-   * {@inheritdoc}
-   */
-  public function current() {
-    $row = parent::current();
-
-    if ($row && !empty($this->getColumnNames())) {
-      // Only use columns specified in the defined CSV columns.
-      $row = array_intersect_key($row, $this->getColumnNames());
-      // Set meaningful keys for the columns mentioned in $this->csvColumns.
-      foreach ($this->getColumnNames() as $int => $values) {
-        // Copy value to more descriptive string based key and unset original.
-        $row[key($values)] = isset($row[$int]) ? $row[$int] : NULL;
-        unset($row[$int]);
-      }
-    }
-
-    return $row;
-  }
-
-  /**
-   * Return a count of all available source records.
-   */
-  public function count() {
-    return iterator_count($this);
-  }
-
-  /**
-   * Number of header rows.
-   *
-   * @return int
-   *   Get the number of header rows, zero if no header row.
-   */
-  public function getHeaderRowCount() {
-    return $this->headerRowCount;
-  }
-
-  /**
-   * Number of header rows.
-   *
-   * @param int $header_row_count
-   *   Set the number of header rows, zero if no header row.
-   */
-  public function setHeaderRowCount($header_row_count) {
-    $this->headerRowCount = $header_row_count;
-  }
-
-  /**
-   * CSV column names.
-   *
-   * @return array
-   *   Get CSV column names.
-   */
-  public function getColumnNames() {
-    return $this->columnNames;
-  }
-
-  /**
-   * CSV column names.
-   *
-   * @param array $column_names
-   *   Set CSV column names.
-   */
-  public function setColumnNames(array $column_names) {
-    $this->columnNames = $column_names;
-  }
-
-}
diff --git a/migrate_source_csv/src/Plugin/migrate/source/CSV.php b/migrate_source_csv/src/Plugin/migrate/source/CSV.php
deleted file mode 100644
index 0b6a26e12100c40095bf13ccda20b1c4205d2254..0000000000000000000000000000000000000000
--- a/migrate_source_csv/src/Plugin/migrate/source/CSV.php
+++ /dev/null
@@ -1,140 +0,0 @@
-<?php
-/**
- * @file
- * Contains \Drupal\migrate_source_csv\Plugin\migrate\source\CSV.
- */
-
-namespace Drupal\migrate_source_csv\Plugin\migrate\source;
-
-use Drupal\migrate\Entity\MigrationInterface;
-use Drupal\migrate\MigrateException;
-use Drupal\migrate\Plugin\migrate\source\SourcePluginBase;
-use Drupal\migrate_source_csv\CSVFileObject;
-
-/**
- * Source for CSV.
- *
- * If the CSV file contains non-ASCII characters, make sure it includes a
- * UTF BOM (Byte Order Marker) so they are interpreted correctly.
- *
- * @MigrateSource(
- *   id = "csv"
- * )
- */
-class CSV extends SourcePluginBase {
-
-  /**
-   * List of available source fields.
-   *
-   * Keys are the field machine names as used in field mappings, values are
-   * descriptions.
-   *
-   * @var array
-   */
-  protected $fields = array();
-
-  /**
-   * The source ids, as indexes.
-   *
-   * @var array
-   */
-  protected $identifiers = array();
-
-  /**
-   * {@inheritdoc}
-   */
-  public function __construct(array $configuration, $plugin_id, $plugin_definition, MigrationInterface $migration) {
-    parent::__construct($configuration, $plugin_id, $plugin_definition, $migration);
-
-    // Path is required.
-    if (empty($this->configuration['path'])) {
-      throw new MigrateException('You must declare the "path" to the source CSV file in your source settings.');
-    }
-
-    // Identifier field(s) are required.
-    if (empty($this->configuration['identifiers'])) {
-      throw new MigrateException('You must declare "identifiers" as a unique array of fields in your source settings.');
-    }
-
-  }
-
-  /**
-   * Return a string representing the source query.
-   *
-   * @return string
-   *   The file path.
-   */
-  public function __toString() {
-    return $this->configuration['path'];
-  }
-
-  /**
-   * {@inheritdoc}
-   */
-  public function initializeIterator() {
-    // File handler using header-rows-respecting extension of SPLFileObject.
-    $file = new CSVFileObject($this->configuration['path']);
-
-    // Set basics of CSV behavior based on configuration.
-    $delimiter = !empty($this->configuration['delimiter']) ? $this->configuration['delimiter'] : ',';
-    $enclosure = !empty($this->configuration['enclosure']) ? $this->configuration['enclosure'] : '"';
-    $escape = !empty($this->configuration['escape']) ? $this->configuration['escape'] : '\\';
-    $file->setCsvControl($delimiter, $enclosure, $escape);
-
-    // Figure out what CSV column(s) to use.
-    if (!empty($this->configuration['header_row_count'])) {
-      $file->setHeaderRowCount($this->configuration['header_row_count']);
-
-      // Find the last header line.
-      $file->rewind();
-      $file->seek($file->getHeaderRowCount() - 1);
-
-      // Use the header row(s).
-      if (empty($this->configuration['column_names'])) {
-        $row = $file->current();
-        foreach ($row as $header) {
-          $header = trim($header);
-          $column_names[] = array($header => $header);
-        }
-        $file->setColumnNames($column_names);
-      }
-    }
-    // An explicit list of column name(s) is provided.
-    if (!empty($this->configuration['column_names'])) {
-      $file->setColumnNames($this->configuration['column_names']);
-    }
-
-    return $file;
-  }
-
-  /**
-   * {@inheritdoc}
-   */
-  public function getIds() {
-    $ids = array();
-    foreach ($this->configuration['identifiers'] as $key) {
-      $ids[$key]['type'] = 'string';
-    }
-    return $ids;
-  }
-
-  /**
-   * {@inheritdoc}
-   */
-  public function fields() {
-    $fields = array();
-    foreach ($this->getIterator()->getColumnNames() as $column) {
-      $key = key($column);
-      $fields[$key] = $key;
-    }
-
-    // Any caller-specified fields with the same names as extracted fields will
-    // override them; any others will be added.
-    if (!empty($this->configuration['fields'])) {
-      $fields = $this->configuration['fields'] + $fields;
-    }
-
-    return $fields;
-  }
-
-}
diff --git a/migrate_source_csv/tests/src/Unit/CSVUnitTestCase.php b/migrate_source_csv/tests/src/Unit/CSVUnitTestCase.php
deleted file mode 100644
index 69da1d533f6e4fb41a5b3c0f766d4f1014d5228b..0000000000000000000000000000000000000000
--- a/migrate_source_csv/tests/src/Unit/CSVUnitTestCase.php
+++ /dev/null
@@ -1,86 +0,0 @@
-<?php
-/**
- * @file
- * Code for CSVFileObjectTest.php.
- */
-
-namespace Drupal\Tests\migrate_source_csv\Unit;
-
-use Drupal\Tests\UnitTestCase;
-use org\bovigo\vfs\vfsStream;
-
-/**
- * Base unit test to build csv file contents.
- *
- * @group migrate_source_csv
- */
-abstract class CSVUnitTestCase extends UnitTestCase {
-
-  /**
-   * The happy path file url.
-   *
-   * @var string
-   */
-  protected $happyPath;
-
-  /**
-   * The un-happy path file url.
-   *
-   * @var string
-   */
-  protected $sad;
-
-  /**
-   * {@inheritdoc}
-   */
-  protected function setUp() {
-    $root_dir = vfsStream::setup('root');
-    $happy = <<<'EOD'
-id,first_name,last_name,email,country,ip_address
-1,Justin,Dean,jdean0@example.com,Indonesia,60.242.130.40
-2,Joan,Jordan,jjordan1@example.com,Thailand,137.230.209.171
-3,William,Ray,wray2@example.com,Germany,4.75.251.71
-4,Jack,Collins,jcollins3@example.com,Indonesia,118.241.243.64
-5,Jean,Moreno,jmoreno4@example.com,Portugal,12.24.215.20
-6,Dennis,Mitchell,dmitchell5@example.com,Mexico,185.24.131.116
-7,Harry,West,hwest6@example.com,Uzbekistan,101.74.110.171
-8,Rebecca,Hunt,rhunt7@example.com,France,253.107.6.23
-9,Rose,Rogers,rrogers8@example.com,China,21.2.126.228
-10,Juan,Walker,jwalker9@example.com,Angola,192.118.77.225
-11,Lois,Price,lpricea@example.com,Greece,231.185.100.19
-12,Patricia,Bell,pbellb@example.com,Sweden,226.2.254.94
-13,Gerald,Kelly,gkellyc@example.com,China,31.204.2.163
-14,Kimberly,Jackson,kjacksond@example.com,Thailand,19.187.65.116
-15,Jason,Mason,jmasone@example.com,Greece,225.129.68.203
-EOD;
-    $sad = <<<'EOD'
-1|%Justin%|Dean|jdean0@example.com|Indonesia|60.242.130.40
-2|Joan|Jordan|jjordan1@example.com|Thailand|137.230.209.171
-3|William|Ray|wray2@example.com|Germany|4.75.251.71
-4|Jack|Collins|jcollins3@example.com|Indonesia|118.241.243.64
-5|Jean|Moreno|jmoreno4@example.com|Portugal|12.24.215.20
-6|Dennis|Mitchell|dmitchell5@example.com|Mexico|185.24.131.116
-7|Harry|West|hwest6@example.com|Uzbekistan|101.74.110.171
-8|Rebecca|Hunt|rhunt7@example.com|France|253.107.6.23
-9|Rose|Rogers|rrogers8@example.com|China|21.2.126.228
-10|Juan|Walker|jwalker9@example.com|Angola|192.118.77.225
-11|Lois|Price|lpricea@example.com|Greece|231.185.100.19
-12|Patricia|Bell|pbellb@example.com|Sweden|226.2.254.94
-13|Gerald|Kelly|gkellyc@example.com|China|31.204.2.163
-14|Kimberly|Jackson|kjacksond@example.com|Thailand|19.187.65.116
-15|Jason|Mason|jmasone@example.com|Greece|225.129.68.203
-
-EOD;
-
-    $this->happyPath = vfsStream::newFile('data.csv')
-      ->at($root_dir)
-      ->withContent($happy)
-      ->url();
-    $this->sad = vfsStream::newFile('data_edge_case.csv')
-      ->at($root_dir)
-      ->withContent($sad)
-      ->url();
-
-  }
-
-}
diff --git a/migrate_source_csv/tests/src/Unit/Plugin/migrate/source/CSVTest.php b/migrate_source_csv/tests/src/Unit/Plugin/migrate/source/CSVTest.php
deleted file mode 100644
index c6347d7df99fcc20f249517fb4556c9ae60b5c6e..0000000000000000000000000000000000000000
--- a/migrate_source_csv/tests/src/Unit/Plugin/migrate/source/CSVTest.php
+++ /dev/null
@@ -1,273 +0,0 @@
-<?php
-/**
- * @file
- * Code for CSVTest.php.
- */
-
-namespace Drupal\Tests\migrate_source_csv\Unit\Plugin\migrate\source;
-
-use Drupal\migrate_source_csv\Plugin\migrate\source\CSV;
-use Drupal\Tests\migrate_source_csv\Unit\CSVUnitTestCase;
-
-/**
- * @coversDefaultClass \Drupal\migrate_source_csv\Plugin\migrate\source\CSV
- *
- * @group migrate_source_csv
- */
-class CSVTest extends CSVUnitTestCase {
-
-  /**
-   * The plugin id.
-   *
-   * @var string
-   */
-  protected $pluginId;
-
-  /**
-   * The plugin definition.
-   *
-   * @var array
-   */
-  protected $pluginDefinition;
-
-  /**
-   * The mock migration plugin.
-   *
-   * @var \Drupal\migrate\Entity\MigrationInterface
-   */
-  protected $plugin;
-
-  /**
-   * {@inheritdoc}
-   */
-  public function setUp() {
-    parent::setUp();
-
-    $this->pluginId = 'test csv migration';
-    $this->pluginDefinition = array();
-    $this->plugin = $this->getMock('\Drupal\migrate\Entity\MigrationInterface');
-  }
-
-  /**
-   * Tests the construction of CSV.
-   *
-   * @test
-   *
-   * @covers ::__construct
-   */
-  public function create() {
-    $configuration = array(
-      'path' => $this->happyPath,
-      'identifiers' => array('id'),
-      'header_row_count' => 1,
-    );
-
-    $csv = new CSV($configuration, $this->pluginId, $this->pluginDefinition, $this->plugin);
-
-    $this->assertInstanceOf('\Drupal\migrate_source_csv\Plugin\migrate\source\CSV', $csv);
-  }
-
-  /**
-   * Tests that a missing path will throw an exception.
-   *
-   * @test
-   *
-   * @expectedException \Drupal\migrate\MigrateException
-   *
-   * @expectedExceptionMessage You must declare the "path" to the source CSV file in your source settings.
-   */
-  public function migrateExceptionPathMissing() {
-    new CSV(array(), $this->pluginId, $this->pluginDefinition, $this->plugin);
-  }
-
-  /**
-   * Tests that missing identifiers will throw an exception.
-   *
-   * @test
-   *
-   * @expectedException \Drupal\migrate\MigrateException
-   *
-   * @expectedExceptionMessage You must declare "identifiers" as a unique array of fields in your source settings.
-   */
-  public function migrateExceptionIdentifiersMissing() {
-    $configuration = array(
-      'path' => $this->happyPath,
-    );
-
-    new CSV($configuration, $this->pluginId, $this->pluginDefinition, $this->plugin);
-  }
-
-  /**
-   * Tests that toString functions as expected.
-   *
-   * @test
-   *
-   * @covers ::__toString
-   */
-  public function toString() {
-    $configuration = array(
-      'path' => $this->happyPath,
-      'identifiers' => array('id'),
-      'header_row_count' => 1,
-    );
-
-    $csv = new CSV($configuration, $this->pluginId, $this->pluginDefinition, $this->plugin);
-
-    $this->assertEquals($configuration['path'], (string) $csv);
-  }
-
-  /**
-   * Tests initialization of the iterator.
-   *
-   * @test
-   *
-   * @covers ::initializeIterator
-   */
-  public function initializeIterator() {
-    $configuration = array(
-      'path' => $this->happyPath,
-      'identifiers' => array('id'),
-      'header_row_count' => 1,
-    );
-
-    $config_common = array(
-      'path' => $this->sad,
-      'identifiers' => array('id'),
-    );
-    $config_delimiter = array('delimiter' => '|');
-    $config_enclosure = array('enclosure' => '%');
-    $config_escape = array('escape' => '`');
-
-    $csv = new CSV($config_common + $config_delimiter, $this->pluginId, $this->pluginDefinition, $this->plugin);
-    $this->assertEquals(current($config_delimiter), $csv->initializeIterator()
-      ->getCsvControl()[0]);
-    $this->assertEquals('"', $csv->initializeIterator()->getCsvControl()[1]);
-
-    $csv = new CSV($config_common + $config_enclosure, $this->pluginId, $this->pluginDefinition, $this->plugin);
-    $this->assertEquals(',', $csv->initializeIterator()->getCsvControl()[0]);
-    $this->assertEquals(current($config_enclosure), $csv->initializeIterator()
-      ->getCsvControl()[1]);
-
-    $csv = new CSV($config_common + $config_delimiter + $config_enclosure + $config_escape, $this->pluginId, $this->pluginDefinition, $this->plugin);
-    $csv_file_object = $csv->getIterator();
-    $row = array(
-      '1',
-      'Justin',
-      'Dean',
-      'jdean0@example.com',
-      'Indonesia',
-      '60.242.130.40',
-    );
-    $csv_file_object->rewind();
-    $current = $csv_file_object->current();
-    $this->assertArrayEquals($row, $current);
-
-    $csv = new CSV($configuration, $this->pluginId, $this->pluginDefinition, $this->plugin);
-    $csv_file_object = $csv->getIterator();
-    $row = array(
-      'id' => '1',
-      'first_name' => 'Justin',
-      'last_name' => 'Dean',
-      'email' => 'jdean0@example.com',
-      'country' => 'Indonesia',
-      'ip_address' => '60.242.130.40',
-    );
-    $second_row = array(
-      'id' => '2',
-      'first_name' => 'Joan',
-      'last_name' => 'Jordan',
-      'email' => 'jjordan1@example.com',
-      'country' => 'Thailand',
-      'ip_address' => '137.230.209.171',
-    );
-
-    $csv_file_object->rewind();
-    $current = $csv_file_object->current();
-    $this->assertArrayEquals($row, $current);
-    $csv_file_object->next();
-    $next = $csv_file_object->current();
-    $this->assertArrayEquals($second_row, $next);
-
-    $column_names = array(
-      'column_names' => array(
-        0 => array('id' => 'identifier'),
-        2 => array('last_name' => 'User last name'),
-      ),
-    );
-    $csv = new CSV($configuration + $column_names, $this->pluginId, $this->pluginDefinition, $this->plugin);
-    $csv_file_object = $csv->getIterator();
-    $row = array(
-      'id' => '1',
-      'last_name' => 'Dean',
-    );
-    $second_row = array(
-      'id' => '2',
-      'last_name' => 'Jordan',
-    );
-
-    $csv_file_object->rewind();
-    $current = $csv_file_object->current();
-    $this->assertArrayEquals($row, $current);
-    $csv_file_object->next();
-    $next = $csv_file_object->current();
-    $this->assertArrayEquals($second_row, $next);
-  }
-
-  /**
-   * Tests that the identifier or key is properly identified.
-   *
-   * @test
-   *
-   * @covers ::getIds
-   */
-  public function getIds() {
-    $configuration = array(
-      'path' => $this->happyPath,
-      'identifiers' => array('id'),
-      'header_row_count' => 1,
-    );
-
-    $csv = new CSV($configuration, $this->pluginId, $this->pluginDefinition, $this->plugin);
-
-    $expected = array('id' => array('type' => 'string'));
-    $this->assertArrayEquals($expected, $csv->getIds());
-  }
-
-  /**
-   * Tests that fields have a machine name and description.
-   *
-   * @test
-   *
-   * @covers ::fields
-   */
-  public function fields() {
-    $configuration = array(
-      'path' => $this->happyPath,
-      'identifiers' => array('id'),
-      'header_row_count' => 1,
-    );
-    $fields = array(
-      'id' => 'identifier',
-      'first_name' => 'User first name',
-    );
-
-    $expected = $fields + array(
-      'last_name' => 'last_name',
-      'email' => 'email',
-      'country' => 'country',
-      'ip_address' => 'ip_address',
-    );
-
-    $csv = new CSV($configuration, $this->pluginId, $this->pluginDefinition, $this->plugin);
-    $csv = new CSV($configuration + array('fields' => $fields), $this->pluginId, $this->pluginDefinition, $this->plugin);
-    $this->assertArrayEquals($expected, $csv->fields());
-
-    $column_names = array(
-      0 => array('id' => 'identifier'),
-      2 => array('first_name' => 'User first name'),
-    );
-    $csv = new CSV($configuration + array('fields' => $fields, 'column_names' => $column_names), $this->pluginId, $this->pluginDefinition, $this->plugin);
-    $this->assertArrayEquals($fields, $csv->fields());
-  }
-
-}
diff --git a/migrate_tools/migrate_tools.drush.inc b/migrate_tools/migrate_tools.drush.inc
deleted file mode 100644
index dd7722ee79bf859290cc72dcc17ff1625c90f42b..0000000000000000000000000000000000000000
--- a/migrate_tools/migrate_tools.drush.inc
+++ /dev/null
@@ -1,476 +0,0 @@
-<?php
-
-/**
- * @file
- * Command-line tools to aid performing and developing migrations.
- */
-
-use Drupal\Component\Utility\Unicode;
-use Drupal\migrate\Entity\Migration;
-use Drupal\migrate\Entity\MigrationInterface;
-use Drupal\migrate_tools\MigrateExecutable;
-use Drupal\migrate_tools\DrushLogMigrateMessage;
-use Drupal\migrate_tools\MigrateManifest;
-use Drupal\Core\Datetime\DateFormatter;
-
-/**
- * Implements hook_drush_command().
- */
-function migrate_tools_drush_command() {
-  $items['migrate-status'] = [
-    'description' => 'List all migrations with current status.',
-    'options' => [
-      'group' => 'Name of the migration group to list',
-      'names-only' => 'Only return names, not all the details (faster)',
-    ],
-    'arguments' => [
-      'migration' => 'Restrict to a comma-separated list of migrations. Optional',
-    ],
-    'examples' => [
-      'migrate-status' => 'Retrieve status for all migrations',
-      'migrate-status --group=beer' => 'Retrieve status for all migrations in a given group',
-      'migrate-status BeerTerm,BeerNode' => 'Retrieve status for specific migrations',
-    ],
-    'drupal dependencies' => ['migrate_tools'],
-    'aliases' => ['ms'],
-  ];
-
-  $items['migrate-import'] = [
-    'description' => 'Perform one or more migration processes.',
-    'options' => [
-      'all' => 'Process all migrations.',
-      'group' => 'Name of the migration group to import',
-      'limit' => 'Limit on the number of items to process in each migration',
-      'feedback' => 'Frequency of progress messages, in items processed',
-      'idlist' => 'Comma-separated list of IDs to import',
-      'update' => ' In addition to processing unprocessed items from the source, update previously-imported items with the current data',
-      'force' => 'Force an operation to run, even if all dependencies are not satisfied',
-    ],
-    'arguments' => [
-      'migration' => 'Name of migration(s) to import. Delimit multiple using commas.',
-    ],
-    'examples' => [
-      'migrate-import --all' => 'Perform all migrations',
-      'migrate-import --group=beer' => 'Import all migrations in the beer group',
-      'migrate-import BeerTerm,BeerNode' => 'Import new terms and nodes',
-      'migrate-import BeerUser --limit=2' => 'Import no more than 2 users',
-      'migrate-import BeerUser --idlist=5' => 'Import the user record with source ID 5',
-    ],
-    'drupal dependencies' => ['migrate_tools'],
-    'aliases' => ['mi'],
-  ];
-
-  $items['migrate-rollback'] = array(
-    'description' => 'Rollback one or more migrations.',
-    'options' => array(
-      'all' => 'Process all migrations.',
-      'group' => 'Name of the migration group to rollback',
-      'feedback' => 'Frequency of progress messages, in items processed',
-    ),
-    'arguments' => array(
-      'migration' => 'Name of migration(s) to rollback. Delimit multiple using commas.',
-    ),
-    'examples' => array(
-      'migrate-rollback --all' => 'Perform all migrations',
-      'migrate-rollback --group=beer' => 'Rollback all migrations in the beer group',
-      'migrate-rollback BeerTerm,BeerNode' => 'Rollback imported terms and nodes',
-    ),
-    'drupal dependencies' => array('migrate_tools'),
-    'aliases' => array('mr'),
-  );
-
-  $items['migrate-stop'] = [
-    'description' => 'Stop an active migration operation.',
-    'arguments' => [
-      'migration' => 'Name of migration to stop',
-    ],
-    'drupal dependencies' => ['migrate_tools'],
-    'aliases' => ['mst'],
-  ];
-
-  $items['migrate-reset-status'] = [
-    'description' => 'Reset a active migration\'s status to idle.',
-    'arguments' => [
-      'migration' => 'Name of migration to reset',
-    ],
-    'drupal dependencies' => ['migrate_tools'],
-    'aliases' => ['mrs'],
-  ];
-
-  $items['migrate-manifest'] = [
-    'description' => 'Deprecated - please use the migrate-manifest2 command from the migrate_manifest module instead.',
-    'arguments' => [
-      'manifest' => 'The path to the manifest file',
-    ],
-    'required-arguments' => 1,
-    'options' => [
-      'legacy-db-url' => [
-        'description' => 'A Drupal 6 style database URL.',
-        'example-value' => 'mysql://root:pass@127.0.0.1/db',
-        'required' => TRUE,
-      ],
-    ],
-    'drupal dependencies' => ['migrate_tools'],
-  ];
-
-  $items['migrate-messages'] = [
-    'description' => 'View any messages associated with a migration.',
-    'arguments' => [
-      'migration' => 'Name of the migration',
-    ],
-    'options' => [
-      'csv' => 'Export messages as a CSV'
-    ],
-    'examples' => [
-      'migrate-messages MyNode' => 'Show all messages for the MyNode migration',
-    ],
-    'drupal dependencies' => ['migrate_tools'],
-    'aliases' => ['mmsg'],
-  ];
-
-  return $items;
-}
-
-/**
- * @param string $migration_names
- */
-function drush_migrate_tools_migrate_status($migration_names = '') {
-  $group_name = drush_get_option('group');
-  $names_only = drush_get_option('names-only');
-
-  $migrations = drush_migrate_tools_migration_list($group_name, $migration_names);
-
-  $table = [];
-  // Take it one group at a time, listing the migrations within each group.
-  foreach ($migrations as $group_id => $migration_list) {
-    if ($names_only) {
-      $table[] = [
-        dt('Group: @name', array('@name' => $group_id))
-      ];
-    }
-    else {
-      $table[] = [
-        dt('Group: @name', array('@name' => $group_id)),
-        dt('Status'),
-        dt('Total'),
-        dt('Imported'),
-        dt('Unprocessed'),
-        dt('Last imported'),
-      ];
-    }
-    foreach ($migration_list as $migration_id => $migration) {
-      try {
-        $map = $migration->getIdMap();
-        $imported = $map->importedCount();
-        $source_plugin = $migration->getSourcePlugin();
-      }
-      catch (Exception $e) {
-        drush_log(dt('Failure retrieving information on @migration: @message',
-          ['@migration' => $migration_id, '@message' => $e->getMessage()]));
-        continue;
-      }
-      try {
-        $source_rows = $source_plugin->count();
-        // -1 indicates uncountable sources.
-        if ($source_rows == -1) {
-          $source_rows = dt('N/A');
-          $unprocessed = dt('N/A');
-        }
-        else {
-          $unprocessed = $source_rows - $map->processedCount();
-        }
-      }
-      catch (Exception $e) {
-        drush_log(dt('Could not retrieve source count from @migration',
-                      ['@migration' => $migration_id]));
-        $source_rows = dt('N/A');
-        $unprocessed = dt('N/A');
-      }
-
-      if ($names_only) {
-        $table[] = [$migration_id];
-      }
-      else {
-        $status = $migration->getStatusLabel();
-        $migrate_last_imported_store = \Drupal::keyValue('migrate_last_imported');
-        $last_imported =  $migrate_last_imported_store->get($migration->id(), FALSE);
-        if ($last_imported) {
-          /** @var DateFormatter $date_formatter */
-          $date_formatter = \Drupal::service('date.formatter');
-          $last_imported = $date_formatter->format($last_imported / 1000,
-            'custom', 'Y-m-d H:i:s');
-        }
-        else {
-          $last_imported = '';
-        }
-        $table[] = [$migration_id, $status, $source_rows, $imported, $unprocessed, $last_imported];
-      }
-    }
-  }
-  drush_print_table($table);
-}
-
-/**
- * @param string $migration_names
- */
-function drush_migrate_tools_migrate_import($migration_names = '') {
-  $group_name = drush_get_option('group');
-  $all = drush_get_option('all');
-  $options = [];
-  if (!$all && !$group_name && !$migration_names) {
-    drush_set_error('MIGRATE_ERROR', dt('You must specify --all, --group, or one or more migration names separated by commas'));
-    return;
-  }
-
-  if (drush_get_option('limit')) {
-    $options['limit'] = drush_get_option('limit');
-  }
-  if (drush_get_option('feedback')) {
-    $options['feedback'] = drush_get_option('feedback');
-  }
-  if (drush_get_option('idlist')) {
-    $options['idlist'] = drush_get_option('idlist');
-  }
-  $update = drush_get_option('update');
-  $force = drush_get_option('force');
-
-  $log = new DrushLogMigrateMessage();
-
-  $migrations = drush_migrate_tools_migration_list($group_name, $migration_names);
-
-  // Take it one group at a time, importing the migrations within each group.
-  foreach ($migrations as $group_id => $migration_list) {
-    foreach ($migration_list as $migration_id => $migration) {
-      if ($force) {
-        $migration->set('requirements', []);
-      }
-      if ($update) {
-        $migration->getIdMap()->prepareUpdate();
-      }
-      $executable = new MigrateExecutable($migration, $log, $options);
-      // drush_op() provides --simulate support.
-      drush_op([$executable, 'import']);
-    }
-  }
-}
-
-/**
- * @param string $migration_names
- */
-function drush_migrate_tools_migrate_rollback($migration_names = '') {
-  $group_name = drush_get_option('group');
-  $all = drush_get_option('all');
-  $options = [];
-  if (!$all && !$group_name && !$migration_names) {
-    drush_set_error('MIGRATE_ERROR', dt('You must specify --all, --group, or one or more migration names separated by commas'));
-    return;
-  }
-
-  if (drush_get_option('feedback')) {
-    $options['feedback'] = drush_get_option('feedback');
-  }
-
-  $log = new DrushLogMigrateMessage();
-
-  $migrations = drush_migrate_tools_migration_list($group_name, $migration_names);
-
-  // Take it one group at a time, rolling back the migrations within each group.
-  foreach ($migrations as $group_id => $migration_list) {
-    // Roll back in reverse order.
-    $migration_list = array_reverse($migration_list);
-    foreach ($migration_list as $migration_id => $migration) {
-      $executable = new MigrateExecutable($migration, $log, $options);
-      // drush_op() provides --simulate support.
-      drush_op(array($executable, 'rollback'));
-    }
-  }
-}
-
-/**
- * @param string $migration_id
- */
-function drush_migrate_tools_migrate_stop($migration_id = '') {
-  /** @var Migration $migration */
-  $migration = Migration::load($migration_id);
-  if ($migration) {
-    $status = $migration->getStatus();
-    switch ($status) {
-      case MigrationInterface::STATUS_IDLE:
-        drush_log(dt('Migration @id is idle', ['@id' => $migration_id]), 'warning');
-        break;
-      case MigrationInterface::STATUS_DISABLED:
-        drush_log(dt('Migration @id is disabled', ['@id' => $migration_id]), 'warning');
-        break;
-      case MigrationInterface::STATUS_STOPPING:
-        drush_log(dt('Migration @id is already stopping', ['@id' => $migration_id]), 'warning');
-        break;
-      default:
-        $migration->interruptMigration(MigrationInterface::RESULT_STOPPED);
-        drush_log(dt('Migration @id requested to stop', ['@id' => $migration_id]), 'success');
-        break;
-    }
-  }
-  else {
-    drush_log(dt('Migration @id does not exist', ['@id' => $migration_id]), 'error');
-  }
-}
-
-/**
- * @param string $migration_id
- */
-function drush_migrate_tools_migrate_reset_status($migration_id = '') {
-  /** @var Migration $migration */
-  $migration = Migration::load($migration_id);
-  if ($migration) {
-    $status = $migration->getStatus();
-    if ($status == MigrationInterface::STATUS_IDLE) {
-      drush_log(dt('Migration @id is already Idle', ['@id' => $migration_id]), 'warning');
-    }
-    else {
-      $migration->setStatus(MigrationInterface::STATUS_IDLE);
-      drush_log(dt('Migration @id reset to Idle', ['@id' => $migration_id]), 'status');
-    }
-  }
-  else {
-    drush_log(dt('Migration @id does not exist', ['@id' => $migration_id]), 'error');
-  }
-}
-
-/**
- * @param string $migration_id
- */
-function drush_migrate_tools_migrate_messages($migration_id) {
-  /** @var Migration $migration */
-  $migration = Migration::load($migration_id);
-  if ($migration) {
-    $map = $migration->getIdMap();
-    $first = TRUE;
-    $table = [];
-    foreach ($map->getMessageIterator() as $row) {
-      unset($row->msgid);
-      if ($first) {
-        // @todo: Ideally, replace sourceid* with source key names. Or, should
-        // getMessageIterator() do that?
-        foreach ($row as $column => $value) {
-          $table[0][] = $column;
-        }
-        $first = FALSE;
-      }
-      $table[] = (array)$row;
-    }
-    if (empty($table)) {
-      drush_log(dt('No messages for this migration'), 'status');
-    }
-    else {
-      if (drush_get_option('csv')) {
-        foreach ($table as $row) {
-          fputcsv(STDOUT, $row);
-        }
-      }
-      else {
-        $widths = [];
-        foreach ($table[0] as $header) {
-          $widths[] = strlen($header) + 1;
-        }
-        drush_print_table($table, TRUE, $widths);
-      }
-    }
-  }
-  else {
-    drush_log(dt('Migration @id does not exist', ['@id' => $migration_id]), 'error');
-  }
-}
-
-/**
- * Retrieve a list of active migrations.
- *
- * @param string $group_id
- *  Group machine name - if present, return only migrations in this group.
- * @param string $migration_ids
- *  Comma-separated list of migrations - if present, return only these migrations.
- *
- * @return MigrationInterface[][]
- *   An array keyed by migration group, each value containing an array of migrations.
- */
-function drush_migrate_tools_migration_list($group_id = '', $migration_ids = '') {
-  $query = \Drupal::entityQuery('migration');
-  if ($group_id) {
-    $query->condition('migration_group', $group_id);
-  }
-  $names = $query->execute();
-
-  // Order the migrations according to their dependencies.
-  /** @var MigrationInterface[] $migrations */
-  $migrations = \Drupal::entityManager()
-     ->getStorage('migration')
-     ->loadMultiple($names);
-
-  if (!empty($migration_ids)) {
-    $migration_ids = explode(',', Unicode::strtolower($migration_ids));
-  }
-  else {
-    $migration_ids = [];
-  }
-
-  $return = [];
-  foreach ($migrations as $migration_id => $migration) {
-    if (empty($migration_ids) || in_array(Unicode::strtolower($migration_id), $migration_ids)) {
-      $group_id = $migration->get('migration_group');
-      if (!empty($group_id)) {
-        $return[$group_id][$migration_id] = $migration;
-      }
-      else {
-        $return['default'][$migration_id] = $migration;
-      }
-    }
-  }
-  return $return;
-}
-
-
-/**
- * Import from a manifest file.
- *
- * This command allows you to specify a list of migrations and their config in
- * a YAML file. An example of a simple migration may look like this:
- *
- * @code
- *  - d6_action_settings
- *  - d6_aggregator_feed
- * @endcode
- *
- * You can also provide configuration to a migration for both source and the
- * destination. An example as such:
- *
- * @code
- *  - d6_file:
- *    source:
- *      conf_path: sites/assets
- *    destination:
- *      source_base_path: destination/base/path
- *      destination_path_property: uri
- *  - d6_action_settings
- * @endcode
- *
- * @param string $manifest
- *   The path to the manifest file.
- */
-function drush_migrate_tools_migrate_manifest($manifest) {
-  if (\Drupal::moduleHandler()->moduleExists('migrate_manifest')) {
-    $path = drupal_get_path('module', 'migrate_manifest');
-    require_once \Drupal::root() . '/' . $path . '/migrate_manifest.drush.inc';
-    drush_migrate_manifest_migrate_manifest2($manifest);
-  }
-  else {
-    drush_log(dt('The migrate_plus version of the migrate-manifest command is deprecated and will be removed soon. Please install the migrate_manifest module and use its migrate-manifest2 command instead.'), 'warning');
-    try {
-      $manifest_runner = new MigrateManifest($manifest);
-      return $manifest_runner->import();
-    }
-    catch (\Exception $e) {
-      drush_set_error('MIGRATE_ERROR', $e->getMessage());
-    }
-
-    drush_invoke_process('@self', 'cache-rebuild', [], [], FALSE);
-  }
-}
diff --git a/migrate_tools/migrate_tools.info.yml b/migrate_tools/migrate_tools.info.yml
deleted file mode 100644
index 59c73ab6268f29c27f7739b3d36e3c1f93d224db..0000000000000000000000000000000000000000
--- a/migrate_tools/migrate_tools.info.yml
+++ /dev/null
@@ -1,7 +0,0 @@
-type: module
-name: Migrate Tools
-description: 'Tools to assist in developing and running migrations.'
-package: Migration
-core: 8.x
-dependencies:
-  - migrate_plus
diff --git a/migrate_tools/migrate_tools.links.action.yml b/migrate_tools/migrate_tools.links.action.yml
deleted file mode 100644
index 04b0e53fa6fce411d6f49af29daa1ff780ca3c2c..0000000000000000000000000000000000000000
--- a/migrate_tools/migrate_tools.links.action.yml
+++ /dev/null
@@ -1,11 +0,0 @@
-migrate_tools.add_group_action:
-  route_name: entity.migration_group.add_form
-  title: 'Add migration group'
-  appears_on:
-    - entity.migration_group.list
-
-migrate_tools.add_migration_action:
-  route_name: entity.migration.add_form
-  title: 'Add migration'
-  appears_on:
-    - entity.migration.list
diff --git a/migrate_tools/migrate_tools.links.menu.yml b/migrate_tools/migrate_tools.links.menu.yml
deleted file mode 100644
index d55ba56c133d03491d28dfd33827bd42cb8928db..0000000000000000000000000000000000000000
--- a/migrate_tools/migrate_tools.links.menu.yml
+++ /dev/null
@@ -1,5 +0,0 @@
-migrate_tools.menu:
-  title: Migrations
-  parent: system.admin_structure
-  description: Manage migration processes.
-  route_name: entity.migration_group.list
diff --git a/migrate_tools/migrate_tools.module b/migrate_tools/migrate_tools.module
deleted file mode 100644
index b4fc2080421634902f8246ea3b432d64c99b17aa..0000000000000000000000000000000000000000
--- a/migrate_tools/migrate_tools.module
+++ /dev/null
@@ -1,33 +0,0 @@
-<?php
-
-/**
- * @file
- * Provides tools for implementing and managing migrations.
- */
-
-/**
- * Implements hook_entity_type_alter().
- */
-function migrate_tools_entity_type_alter(array &$entity_types) {
-  // Inject our UI into the general migration and migration group config entities.
-  /** @var \Drupal\Core\Config\Entity\ConfigEntityType[] $entity_types */
-  $entity_types['migration']
-    ->set('admin_permission', 'administer migrations')
-    ->setHandlerClass('list_builder', 'Drupal\migrate_tools\Controller\MigrationListBuilder')
-    ->setFormClass('add', 'Drupal\migrate_tools\Form\MigrationAddForm')
-//    ->setFormClass('edit', 'Drupal\migrate_tools\Form\MigrationEditForm')
-//    ->setFormClass('delete', 'Drupal\migrate_tools\Form\MigrationDeleteForm')
-//    ->setLinkTemplate('edit-form', '/admin/structure/migrate/manage/{migration_group}/migrations/{migration}')
-    ->setLinkTemplate('list-form', '/admin/structure/migrate/manage/{migration_group}/migrations')
-/*    ->setLinkTemplate('delete-form', '/admin/structure/migrate/manage/{migration_group}/migrations/{migration}/delete')*/;
-
-  $entity_types['migration_group']
-    ->set('admin_permission', 'administer migrations')
-    ->setHandlerClass('list_builder', 'Drupal\migrate_tools\Controller\MigrationGroupListBuilder')
-    ->setFormClass('add', 'Drupal\migrate_tools\Form\MigrationGroupAddForm')
-    ->setFormClass('edit', 'Drupal\migrate_tools\Form\MigrationGroupEditForm')
-    ->setFormClass('delete', 'Drupal\migrate_tools\Form\MigrationGroupDeleteForm')
-    ->setLinkTemplate('edit-form', '/admin/structure/migrate/manage/{migration_group}')
-/*    ->setLinkTemplate('list-form', '/admin/structure/migrate/manage/{migration_group}/migrations')*/
-    ->setLinkTemplate('delete-form', '/admin/structure/migrate/manage/{migration_group}/delete');
-}
diff --git a/migrate_tools/migrate_tools.permissions.yml b/migrate_tools/migrate_tools.permissions.yml
deleted file mode 100644
index b5301e5c1f326186a48ba7f97a8aa9cee66b8343..0000000000000000000000000000000000000000
--- a/migrate_tools/migrate_tools.permissions.yml
+++ /dev/null
@@ -1,3 +0,0 @@
-'administer migrations':
-  title: 'Administer migrations'
-  description: Create, edit, and manage migration processed.
diff --git a/migrate_tools/migrate_tools.routing.yml b/migrate_tools/migrate_tools.routing.yml
deleted file mode 100644
index 7bf48db3213370477690c8cd07f25920956aaece..0000000000000000000000000000000000000000
--- a/migrate_tools/migrate_tools.routing.yml
+++ /dev/null
@@ -1,79 +0,0 @@
-# This is the router item for listing all migration group entities.
-entity.migration_group.list:
-  path: '/admin/structure/migrate'
-  defaults:
-    _entity_list: 'migration_group'
-    _title: 'Migrations'
-  requirements:
-    _permission: 'administer migrations'
-
-# This is the router item for adding our migration group entity.
-entity.migration_group.add_form:
-  path: '/admin/structure/migrate/add'
-  defaults:
-    _title: 'Add migration group'
-    _entity_form: migration_group.add
-  requirements:
-    _entity_create_access: migration_group
-
-# This is the router item for editing our migration group entity.
-entity.migration_group.edit_form:
-  path: '/admin/structure/migrate/manage/{migration_group}'
-  defaults:
-    _title: 'Edit migration group'
-    _entity_form: migration_group.edit
-  requirements:
-    _entity_access: migration_group.update
-
-# This is the router item for deleting an instance of our migration group entity.
-entity.migration_group.delete_form:
-  path: '/admin/structure/migrate/manage/{migration_group}/delete'
-  defaults:
-    _title: 'Delete migration group'
-    _entity_form: migration_group.delete
-  requirements:
-    _entity_access: migration_group.delete
-
-# This is the router item for listing all migration entities.
-entity.migration.list:
-  path: '/admin/structure/migrate/manage/{migration_group}/migrations'
-  defaults:
-    _entity_list: 'migration'
-    _title: 'Migrations'
-  requirements:
-    _permission: 'administer migrations'
-
-# This is the router item for adding our migration entity.
-entity.migration.add_form:
-  path: '/admin/structure/migrate/manage/{migration_group}/migrations/add'
-  defaults:
-    _title: 'Add migration'
-    _entity_form: migration.add
-  requirements:
-    _entity_create_access: migration
-
-# This is the router item for editing our migration entity.
-entity.migration.edit_form:
-  path: '/admin/structure/migrate/manage/{migration_group}/migrations/{migration}'
-  defaults:
-    _title: 'Edit migration'
-    _entity_form: migration.edit
-  requirements:
-    _entity_access: migration.update
-
-# This is the router item for deleting an instance of our migration entity.
-entity.migration.delete_form:
-  path: '/admin/structure/migrate/manage/{migration_group}/migrations/{migration}/delete'
-  defaults:
-    _title: 'Delete migration'
-    _entity_form: migration.delete
-  requirements:
-    _entity_access: migration.delete
-
-migrate_tools.messages:
-  path: '/admin/structure/migrate/manage/{migration_group}/migrations/{migration}/messages'
-  defaults:
-    _controller: '\Drupal\migrate_tools\Controller\MessageController::overview'
-    _title: 'Messages'
-  requirements:
-    _permission: 'administer migrations'
diff --git a/migrate_tools/src/Controller/MessageController.php b/migrate_tools/src/Controller/MessageController.php
deleted file mode 100644
index c7e4e9d648ad1aec519984d4ba08255775e9096a..0000000000000000000000000000000000000000
--- a/migrate_tools/src/Controller/MessageController.php
+++ /dev/null
@@ -1,129 +0,0 @@
-<?php
-
-/**
- * @file
- * Contains \Drupal\migrate_tools\Controller\MessageController.
- */
-
-namespace Drupal\migrate_tools\Controller;
-
-use Drupal\Component\Utility\Html;
-use Drupal\Core\Controller\ControllerBase;
-use Drupal\Core\Database\Connection;
-use Drupal\migrate\Entity\Migration;
-use Drupal\migrate\Entity\MigrationInterface;
-use Symfony\Component\DependencyInjection\ContainerInterface;
-
-/**
- * Returns responses for migrate_tools message routes.
- */
-class MessageController extends ControllerBase {
-
-  /**
-   * The database service.
-   *
-   * @var \Drupal\Core\Database\Connection
-   */
-  protected $database;
-
-  /**
-   * {@inheritdoc}
-   */
-  public static function create(ContainerInterface $container) {
-    return new static(
-      $container->get('database')
-    );
-  }
-
-  /**
-   * Constructs a MessageController object.
-   *
-   * @param \Drupal\Core\Database\Connection $database
-   *   A database connection.
-   */
-  public function __construct(Connection $database) {
-    $this->database = $database;
-  }
-
-  /**
-   * Gets an array of log level classes.
-   *
-   * @return array
-   *   An array of log level classes.
-   */
-  public static function getLogLevelClassMap() {
-    return [
-      MigrationInterface::MESSAGE_INFORMATIONAL => 'migrate-message-4',
-      MigrationInterface::MESSAGE_NOTICE => 'migrate-message-3',
-      MigrationInterface::MESSAGE_WARNING => 'migrate-message-2',
-      MigrationInterface::MESSAGE_ERROR => 'migrate-message-1',
-    ];
-  }
-
-  /**
-   * Displays a listing of migration messages.
-   *
-   * Messages are truncated at 56 chars.
-   *
-   * @return array
-   *   A render array as expected by drupal_render().
-   */
-  public function overview($migration_group, $migration) {
-    $rows = [];
-    $classes = static::getLogLevelClassMap();
-    /** @var MigrationInterface $migration */
-    $migration = Migration::load($migration);
-    $source_id_field_names = array_keys($migration->getSourcePlugin()->getIds());
-    $column_number = 1;
-    foreach ($source_id_field_names as $source_id_field_name) {
-      $header[] = [
-        'data' => $source_id_field_name,
-        'field' => 'sourceid' . $column_number++,
-        'class' => [RESPONSIVE_PRIORITY_MEDIUM],
-      ];
-    }
-    $header[] = [
-      'data' => $this->t('Severity level'),
-      'field' => 'level',
-      'class' => [RESPONSIVE_PRIORITY_LOW],
-    ];
-    $header[] = [
-      'data' => $this->t('Message'),
-      'field' => 'message',
-    ];
-
-    $message_table = $migration->getIdMap()->messageTableName();
-    $query = $this->database->select($message_table, 'm')
-      ->extend('\Drupal\Core\Database\Query\PagerSelectExtender')
-      ->extend('\Drupal\Core\Database\Query\TableSortExtender');
-    $query->fields('m');
-    $result = $query
-      ->limit(50)
-      ->orderByHeader($header)
-      ->execute();
-
-    foreach ($result as $message_row) {
-      $column_number = 1;
-      foreach ($source_id_field_names as $source_id_field_name) {
-        $column_name = 'sourceid' . $column_number++;
-        $row[$column_name] = $message_row->$column_name;
-      }
-      $row['level'] = $message_row->level;
-      $row['message'] = $message_row->message;
-      $row['class'] = [Html::getClass('migrate-message-' . $message_row->level), $classes[$message_row->level]];
-      $rows[] = $row;
-    }
-
-    $build['message_table'] = [
-      '#type' => 'table',
-      '#header' => $header,
-      '#rows' => $rows,
-      '#attributes' => ['id' => $message_table, 'class' => [$message_table]],
-      '#empty' => $this->t('No messages for this migration.'),
-    ];
-    $build['message_pager'] = ['#type' => 'pager'];
-
-    return $build;
-  }
-
-}
diff --git a/migrate_tools/src/Controller/MigrationGroupListBuilder.php b/migrate_tools/src/Controller/MigrationGroupListBuilder.php
deleted file mode 100644
index e2b6e53784b33495fd0a59b71b9b95160a17289f..0000000000000000000000000000000000000000
--- a/migrate_tools/src/Controller/MigrationGroupListBuilder.php
+++ /dev/null
@@ -1,73 +0,0 @@
-<?php
-/**
- * @file
- * Contains Drupal\migrate_tools\Controller\MigrationGroupListBuilder.
- */
-
-namespace Drupal\migrate_tools\Controller;
-
-use Drupal\Core\Config\Entity\ConfigEntityListBuilder;
-use Drupal\Core\Config\Entity\ConfigEntityInterface;
-use Drupal\Core\Entity\EntityInterface;
-use Drupal\Core\Url;
-
-/**
- * Provides a listing of migration group entities.
- *
- * @package Drupal\migrate_tools\Controller
- *
- * @ingroup migrate_tools
- */
-class MigrationGroupListBuilder extends ConfigEntityListBuilder {
-
-  /**
-   * Builds the header row for the entity listing.
-   *
-   * @return array
-   *   A render array structure of header strings.
-   *
-   * @see Drupal\Core\Entity\EntityListController::render()
-   */
-  public function buildHeader() {
-    $header['label'] = $this->t('Migration Group');
-    $header['machine_name'] = $this->t('Machine Name');
-    $header['description'] = $this->t('Description');
-    $header['source_type'] = $this->t('Source Type');
-    return $header + parent::buildHeader();
-  }
-
-  /**
-   * Builds a row for an entity in the entity listing.
-   *
-   * @param EntityInterface $entity
-   *   The entity for which to build the row.
-   *
-   * @return array
-   *   A render array of the table row for displaying the entity.
-   *
-   * @see Drupal\Core\Entity\EntityListController::render()
-   */
-  public function buildRow(ConfigEntityInterface $entity) {
-    $row['label'] = $this->getLabel($entity);
-    $row['machine_name'] = $entity->id();
-    $row['description'] = $entity->get('description');
-    $row['source_type'] = $entity->get('source_type');
-
-    return $row + parent::buildRow($entity);
-  }
-
-  /**
-   * {@inheritdoc}
-   */
-  public function getDefaultOperations(EntityInterface $entity) {
-    $operations = parent::getDefaultOperations($entity);
-    $operations['list'] = [
-      'title' => $this->t('List migrations'),
-      'weight' => 0,
-      'url' => Url::fromRoute('entity.migration.list', ['migration_group' => $entity->id()]),
-    ];
-
-    return $operations;
-  }
-
-}
diff --git a/migrate_tools/src/Controller/MigrationListBuilder.php b/migrate_tools/src/Controller/MigrationListBuilder.php
deleted file mode 100644
index 6395beb053b242187a7419f896f33bad1a381fc6..0000000000000000000000000000000000000000
--- a/migrate_tools/src/Controller/MigrationListBuilder.php
+++ /dev/null
@@ -1,189 +0,0 @@
-<?php
-/**
- * @file
- * Contains Drupal\migrate_tools\Controller\MigrationListBuilder.
- */
-
-namespace Drupal\migrate_tools\Controller;
-
-use Drupal\Core\Config\Entity\ConfigEntityListBuilder;
-use Drupal\migrate\Entity\MigrationInterface;
-use Drupal\Core\Entity\EntityInterface;
-use Drupal\Core\Entity\EntityHandlerInterface;
-use Drupal\Core\Entity\EntityStorageInterface;
-use Drupal\Core\Entity\EntityTypeInterface;
-use Drupal\Core\Routing\CurrentRouteMatch;
-use Drupal\Core\Url;
-use Symfony\Component\DependencyInjection\ContainerInterface;
-use Drupal\Core\Datetime\DateFormatter;
-
-/**
- * Provides a listing of migration entities in a given group.
- *
- * @package Drupal\migrate_tools\Controller
- *
- * @ingroup migrate_tools
- */
-class MigrationListBuilder extends ConfigEntityListBuilder implements EntityHandlerInterface {
-
-  /**
-   * @var \Drupal\Core\Routing\CurrentRouteMatch
-   */
-  protected $currentRouteMatch;
-
-  /**
-   * Constructs a new EntityListBuilder object.
-   *
-   * @param \Drupal\Core\Entity\EntityTypeInterface $entity_type
-   *   The entity type definition.
-   * @param \Drupal\Core\Entity\EntityStorageInterface $storage
-   *   The entity storage class.
-   */
-  public function __construct(EntityTypeInterface $entity_type, EntityStorageInterface $storage, CurrentRouteMatch $current_route_match) {
-    parent::__construct($entity_type, $storage);
-    $this->currentRouteMatch = $current_route_match;
-  }
-
-  /**
-   * {@inheritdoc}
-   */
-  public static function createInstance(ContainerInterface $container, EntityTypeInterface $entity_type) {
-    return new static(
-      $entity_type,
-      $container->get('entity.manager')->getStorage($entity_type->id()),
-      $container->get('current_route_match')
-    );
-  }
-
-  /**
-   * Builds the header row for the entity listing.
-   *
-   * @return array
-   *   A render array structure of header strings.
-   *
-   * @see Drupal\Core\Entity\EntityListController::render()
-   */
-  public function buildHeader() {
-    $header['label'] = $this->t('Migration');
-    $header['machine_name'] = $this->t('Machine Name');
-    $header['status'] = $this->t('Status');
-    $header['total'] = $this->t('Total');
-    $header['imported'] = $this->t('Imported');
-    $header['unprocessed'] = $this->t('Unprocessed');
-    $header['messages'] = $this->t('Messages');
-    $header['last_imported'] = $this->t('Last Imported');
-    return $header; // + parent::buildHeader();
-  }
-
-  /**
-   * Builds a row for an entity in the entity listing.
-   *
-   * @param EntityInterface $migration
-   *   The entity for which to build the row.
-   *
-   * @return array
-   *   A render array of the table row for displaying the entity.
-   *
-   * @see Drupal\Core\Entity\EntityListController::render()
-   */
-  public function buildRow(MigrationInterface $migration) {
-    $row['label'] = $migration->label();
-    $row['machine_name'] = $migration->id();
-    $row['status'] = $migration->getStatusLabel();
-
-    // Derive the stats
-    $source_plugin = $migration->getSourcePlugin();
-    $row['total'] = $source_plugin->count();
-    $map = $migration->getIdMap();
-    $row['imported'] = $map->importedCount();
-    // -1 indicates uncountable sources.
-    if ($row['total'] == -1) {
-      $row['total'] = $this->t('N/A');
-      $row['unprocessed'] = $this->t('N/A');
-    }
-    else {
-      $row['unprocessed'] = $row['total'] - $map->processedCount();
-    }
-    $group = $migration->get('migration_group');
-    if (!$group) {
-      $group = 'default';
-    }
-    // @todo: This is most likely not a Best Practice (tm).
-    $row['messages']['data']['#markup'] = '<a href="/admin/structure/migrate/manage/' . $group . '/migrations/' . $migration->id() . '/messages">' . $map->messageCount() .'</a>';
-    $migrate_last_imported_store = \Drupal::keyValue('migrate_last_imported');
-    $last_imported =  $migrate_last_imported_store->get($migration->id(), FALSE);
-    if ($last_imported) {
-      /** @var DateFormatter $date_formatter */
-      $date_formatter = \Drupal::service('date.formatter');
-      $row['last_imported'] = $date_formatter->format($last_imported / 1000,
-        'custom', 'Y-m-d H:i:s');
-    }
-    else {
-      $row['last_imported'] = '';
-    }
-    return $row; // + parent::buildRow($migration);
-  }
-
-  /**
-   * {@inheritdoc}
-   */
-  public function load() {
-    $entity_ids = $this->getEntityIds();
-    // We're already sorting the entities properly in loadMultiple, and
-    // ConfigEntityListBuilder's load() messes it up with an extra sort(). So,
-    // simply take the entities in the order loaded.
-    $entities = $this->storage->loadMultipleOverrideFree($entity_ids);
-    return $entities;
-  }
-
-  /**
-   * Retrieve the migrations belonging to the appropriate group.
-   *
-   * @return array
-   *   An array of entity IDs.
-   */
-  protected function getEntityIds() {
-    $query = $this->getStorage()->getQuery('OR');
-    $keys = $this->entityType->getKeys();
-    $migration_group = $this->currentRouteMatch->getParameter('migration_group');
-    // Add groupless migrations to the default group.
-    if ($migration_group == 'default') {
-      $query->notExists('migration_group');
-    }
-    return $query
-      ->condition('migration_group', $migration_group)
-      ->sort($keys['id'])
-      ->pager($this->limit)
-      ->execute();
-  }
-
-  /**
-   * {@inheritdoc}
-   */
-  public function getDefaultOperations(MigrationInterface $entity) {
-    $operations = parent::getDefaultOperations($entity);
-    $migration_group = $entity->get('migration_group');
-    if (!$migration_group) {
-      $migration_group = 'default';
-    }
-//    $this->addGroupParameter($operations['edit']['url'], $migration_group);
-    $this->addGroupParameter($operations['delete']['url'], $migration_group);
-    return $operations;
-  }
-
-  /**
-   * @param \Drupal\Core\Url $url
-   *   The URL associated with an operation.
-   *
-   * @param $migration_group
-   *   The migration's parent group.
-   */
-  protected function addGroupParameter(Url $url, $migration_group) {
-    if (!$migration_group) {
-      $migration_group = 'default';
-    }
-    $route_parameters = $url->getRouteParameters() + ['migration_group' => $migration_group];
-    $url->setRouteParameters($route_parameters);
-  }
-
-}
diff --git a/migrate_tools/src/DrushLogMigrateMessage.php b/migrate_tools/src/DrushLogMigrateMessage.php
deleted file mode 100644
index 6c4a5ed03dd471a6687bc0103078b0e42bfa2407..0000000000000000000000000000000000000000
--- a/migrate_tools/src/DrushLogMigrateMessage.php
+++ /dev/null
@@ -1,28 +0,0 @@
-<?php
-
-/**
- * @file
- * Contains \Drupal\migrate_tools\DrushLogMigrateMessage.
- */
-
-namespace Drupal\migrate_tools;
-
-use Drupal\migrate\MigrateMessageInterface;
-
-class DrushLogMigrateMessage implements MigrateMessageInterface {
-
-  /**
-   * Output a message from the migration.
-   *
-   * @param string $message
-   *   The message to display.
-   * @param string $type
-   *   The type of message to display.
-   *
-   * @see drush_log()
-   */
-  public function display($message, $type = 'status') {
-    drush_log($message, $type);
-  }
-
-}
diff --git a/migrate_tools/src/Form/MigrationAddForm.php b/migrate_tools/src/Form/MigrationAddForm.php
deleted file mode 100644
index e215dd306d681f2cde0139b1ff181f3b844013e6..0000000000000000000000000000000000000000
--- a/migrate_tools/src/Form/MigrationAddForm.php
+++ /dev/null
@@ -1,43 +0,0 @@
-<?php
-
-/**
- * @file
- * Contains Drupal\migrate_tools\Form\MigrationAddForm.
- */
-
-namespace Drupal\migrate_tools\Form;
-
-use Drupal\Core\Form\FormStateInterface;
-
-/**
- * Class MigrationAddForm.
- *
- * Provides the add form for our migration entity.
- *
- * @package Drupal\migrate_tools\Form
- *
- * @ingroup migrate_tools
- */
-class MigrationAddForm extends MigrationFormBase {
-
-  /**
-   * Returns the actions provided by this form.
-   *
-   * For our add form, we only need to change the text of the submit button.
-   *
-   * @param array $form
-   *   An associative array containing the structure of the form.
-   * @param \Drupal\Core\Form\FormStateInterface $form_state
-   *   An associative array containing the current state of the form.
-   *
-   * @return array
-   *   An array of supported actions for the current entity form.
-   */
-  protected function actions(array $form, FormStateInterface $form_state) {
-    $actions = parent::actions($form, $form_state);
-//    $actions['submit']['#value'] = $this->t('Create Migration');
-    unset($actions['submit']);
-    return $actions;
-  }
-
-}
diff --git a/migrate_tools/src/Form/MigrationDeleteForm.php b/migrate_tools/src/Form/MigrationDeleteForm.php
deleted file mode 100644
index e10d8ec883a3a416cdaf4bfe8307408b276ed00f..0000000000000000000000000000000000000000
--- a/migrate_tools/src/Form/MigrationDeleteForm.php
+++ /dev/null
@@ -1,77 +0,0 @@
-<?php
-
-/**
- * @file
- * Contains Drupal\migrate_tools\Form\MigrationDeleteForm.
- */
-
-namespace Drupal\migrate_tools\Form;
-
-use Drupal\Core\Entity\EntityConfirmFormBase;
-use Drupal\Core\Url;
-use Drupal\Core\Form\FormStateInterface;
-
-/**
- * Class MigrationDeleteForm.
- *
- * @package Drupal\migrate_tools\Form
- *
- * @ingroup migrate_tools
- */
-class MigrationDeleteForm extends EntityConfirmFormBase {
-
-  /**
-   * Gathers a confirmation question.
-   *
-   * @return string
-   *   Translated string.
-   */
-  public function getQuestion() {
-    return $this->t('Are you sure you want to delete migration %label?', array(
-        '%label' => $this->entity->label(),
-    ));
-  }
-
-  /**
-   * Gather the confirmation text.
-   *
-   * @return string
-   *   Translated string.
-   */
-  public function getConfirmText() {
-    return $this->t('Delete Migration');
-  }
-
-  /**
-   * Gets the cancel URL.
-   *
-   * @return \Drupal\Core\Url
-   *   The URL to go to if the user cancels the deletion.
-   */
-  public function getCancelUrl() {
-    return new Url('entity.migration.list', array('migration_group' => $this->entity->get('migration_group')));
-  }
-
-  /**
-   * The submit handler for the confirm form.
-   *
-   * @param array $form
-   *   An associative array containing the structure of the form.
-   * @param \Drupal\Core\Form\FormStateInterface $form_state
-   *   An associative array containing the current state of the form.
-   */
-  public function submitForm(array &$form, FormStateInterface $form_state) {
-    // Delete the entity.
-    $this->entity->delete();
-
-    // Set a message that the entity was deleted.
-    drupal_set_message(t('Migration %label was deleted.', array(
-      '%label' => $this->entity->label(),
-    )));
-
-    // Redirect the user to the list controller when complete.
-    $form_state->setRedirectUrl($this->getCancelUrl(),
-          array('migration_group' => $this->entity->get('migration_group')));
-  }
-
-}
diff --git a/migrate_tools/src/Form/MigrationEditForm.php b/migrate_tools/src/Form/MigrationEditForm.php
deleted file mode 100644
index 63aec86f3352fd097f5682445c05588c072d8d73..0000000000000000000000000000000000000000
--- a/migrate_tools/src/Form/MigrationEditForm.php
+++ /dev/null
@@ -1,59 +0,0 @@
-<?php
-
-/**
- * @file
- * Contains Drupal\migrate_tools\Form\MigrationEditForm.
- */
-
-namespace Drupal\migrate_tools\Form;
-
-use Drupal\Core\Form\FormStateInterface;
-use Drupal\Core\Url;
-
-/**
- * Class MigrationEditForm
- *
- * Provides the edit form for our Migration entity.
- *
- * @package Drupal\migrate_tools\Form
- *
- * @ingroup migrate_tools
- */
-class MigrationEditForm extends MigrationFormBase {
-
-  /**
-   * Returns the actions provided by this form.
-   *
-   * For the edit form, we only need to change the text of the submit button.
-   *
-   * @param array $form
-   *   An associative array containing the structure of the form.
-   * @param \Drupal\Core\Form\FormStateInterface $form_state
-   *   An associative array containing the current state of the form.
-   *
-   * @return array
-   *   An array of supported actions for the current entity form.
-   */
-  public function actions(array $form, FormStateInterface $form_state) {
-    $actions = parent::actions($form, $form_state);
-    $actions['submit']['#value'] = t('Update Migration');
-
-    // Add the group parameter to the delete URL.
-    $this->addGroupParameter($actions['delete']['#url'], $this->getEntity()->get('migration_group'));
-
-    return $actions;
-  }
-
-  /**
-   * @param \Drupal\Core\Url $url
-   *   The URL associated with an operation.
-   *
-   * @param $migration_group
-   *   The migration's parent group.
-   */
-  protected function addGroupParameter(Url $url, $migration_group) {
-    $route_parameters = $url->getRouteParameters() + array('migration_group' => $migration_group);
-    $url->setRouteParameters($route_parameters);
-  }
-
-}
diff --git a/migrate_tools/src/Form/MigrationFormBase.php b/migrate_tools/src/Form/MigrationFormBase.php
deleted file mode 100644
index 4ca5e362fd8b0174400f404657863e0a35eebeaa..0000000000000000000000000000000000000000
--- a/migrate_tools/src/Form/MigrationFormBase.php
+++ /dev/null
@@ -1,194 +0,0 @@
-<?php
-
-/**
- * @file
- * Contains Drupal\migrate_tools\Form\MigrationFormBase.
- */
-
-namespace Drupal\migrate_tools\Form;
-
-use Drupal\Core\Entity\EntityForm;
-use Drupal\Core\Entity\Query\QueryFactory;
-use Drupal\Core\Form\FormStateInterface;
-use Drupal\Core\Url;
-use Drupal\migrate_plus\Entity\MigrationGroup;
-use Symfony\Component\DependencyInjection\ContainerInterface;
-use Drupal\migrate\Entity\MigrationInterface;
-
-/**
- * Class MigrationFormBase.
- *
- * @package Drupal\migrate_tools\Form
- *
- * @ingroup migrate_tools
- */
-class MigrationFormBase extends EntityForm {
-
-  /**
-   * @var \Drupal\Core\Entity\Query\QueryFactory
-   */
-  protected $entityQueryFactory;
-
-  /**
-   * Construct the MigrationGroupFormBase.
-   *
-   * For simple entity forms, there's no need for a constructor. Our migration form
-   * base, however, requires an entity query factory to be injected into it
-   * from the container. We later use this query factory to build an entity
-   * query for the exists() method.
-   *
-   * @param \Drupal\Core\Entity\Query\QueryFactory $query_factory
-   *   An entity query factory for the migration group entity type.
-   */
-  public function __construct(QueryFactory $query_factory) {
-    $this->entityQueryFactory = $query_factory;
-  }
-
-  /**
-   * Factory method for MigrationFormBase.
-   */
-  public static function create(ContainerInterface $container) {
-    return new static($container->get('entity.query'));
-  }
-
-  /**
-   * Overrides Drupal\Core\Entity\EntityFormController::form().
-   *
-   * Builds the entity add/edit form.
-   *
-   * @param array $form
-   *   An associative array containing the structure of the form.
-   * @param array $form_state
-   *   An associative array containing the current state of the form.
-   *
-   * @return array
-   *   An associative array containing the migration add/edit form.
-   */
-  public function buildForm(array $form, FormStateInterface $form_state) {
-    // Get anything we need from the base class.
-    $form = parent::buildForm($form, $form_state);
-
-    /** @var MigrationInterface $migration */
-    $migration = $this->entity;
-
-    $form['warning'] = [
-      '#markup' => $this->t('Creating migrations is not yet supported. See <a href=":url">:url</a>', [
-        ':url' => 'https://www.drupal.org/node/2573241',
-      ])
-    ];
-
-    // Build the form.
-    $form['label'] = array(
-      '#type' => 'textfield',
-      '#title' => $this->t('Label'),
-      '#maxlength' => 255,
-      '#default_value' => $migration->label(),
-      '#required' => TRUE,
-    );
-    $form['id'] = array(
-      '#type' => 'machine_name',
-      '#title' => $this->t('Machine name'),
-      '#default_value' => $migration->id(),
-      '#machine_name' => array(
-        'exists' => array($this, 'exists'),
-        'replace_pattern' => '([^a-z0-9_]+)|(^custom$)',
-        'error' => 'The machine-readable name must be unique, and can only contain lowercase letters, numbers, and underscores. Additionally, it can not be the reserved word "custom".',
-      ),
-      '#disabled' => !$migration->isNew(),
-    );
-
-    $groups = MigrationGroup::loadMultiple();
-    $group_options = [];
-    foreach ($groups as $group) {
-      $group_options[$group->id()] = $group->label();
-    }
-    if (!$migration->get('migration_group') && isset($group_options['default'])) {
-      $migration->set('migration_group', 'default');
-    }
-
-    $form['migration_group'] = array(
-      '#type' => 'select',
-      '#title' => $this->t('Migration Group'),
-      '#empty_value' => '',
-      '#default_value' => $migration->get('migration_group'),
-      '#options' => $group_options,
-      '#description' => $this->t('Assign this migration to an existing group.'),
-    );
-
-    return $form;
-  }
-
-  /**
-   * Checks for an existing migration group.
-   *
-   * @param string|int $entity_id
-   *   The entity ID.
-   * @param array $element
-   *   The form element.
-   * @param FormStateInterface $form_state
-   *   The form state.
-   *
-   * @return bool
-   *   TRUE if this format already exists, FALSE otherwise.
-   */
-  public function exists($entity_id, array $element, FormStateInterface $form_state) {
-    // Use the query factory to build a new migration entity query.
-    $query = $this->entityQueryFactory->get('migration');
-
-    // Query the entity ID to see if its in use.
-    $result = $query->condition('id', $element['#field_prefix'] . $entity_id)
-      ->execute();
-
-    // We don't need to return the ID, only if it exists or not.
-    return (bool) $result;
-  }
-
-  /**
-   * Overrides Drupal\Core\Entity\EntityFormController::actions().
-   *
-   * @param array $form
-   *   An associative array containing the structure of the form.
-   * @param \Drupal\Core\Form\FormStateInterface $form_state
-   *   An associative array containing the current state of the form.
-   *
-   * @return array
-   *   An array of supported actions for the current entity form.
-   */
-  protected function actions(array $form, FormStateInterface $form_state) {
-    // Get the basic actins from the base class.
-    $actions = parent::actions($form, $form_state);
-
-    // Change the submit button text.
-    $actions['submit']['#value'] = $this->t('Save');
-
-    // Return the result.
-    return $actions;
-  }
-
-  /**
-   * Overrides Drupal\Core\Entity\EntityFormController::save().
-   *
-   * @param array $form
-   *   An associative array containing the structure of the form.
-   * @param \Drupal\Core\Form\FormStateInterface $form_state
-   *   An associative array containing the current state of the form.
-   */
-  public function save(array $form, FormStateInterface $form_state) {
-    $migration = $this->getEntity();
-    $status = $migration->save();
-
-    if ($status == SAVED_UPDATED) {
-      // If we edited an existing entity...
-      drupal_set_message($this->t('Migration %label has been updated.', array('%label' => $migration->label())));
-    }
-    else {
-      // If we created a new entity...
-      drupal_set_message($this->t('Migration %label has been added.', array('%label' => $migration->label())));
-    }
-
-    // Redirect the user back to the listing route after the save operation.
-    $form_state->setRedirect('entity.migration.list',
-      array('migration_group' => $migration->get('migration_group')));
-  }
-
-}
diff --git a/migrate_tools/src/Form/MigrationGroupAddForm.php b/migrate_tools/src/Form/MigrationGroupAddForm.php
deleted file mode 100644
index f6da5046e66a36078d20abcae7461de4feedfbcf..0000000000000000000000000000000000000000
--- a/migrate_tools/src/Form/MigrationGroupAddForm.php
+++ /dev/null
@@ -1,42 +0,0 @@
-<?php
-
-/**
- * @file
- * Contains Drupal\migrate_tools\Form\MigrationGroupAddForm.
- */
-
-namespace Drupal\migrate_tools\Form;
-
-use Drupal\Core\Form\FormStateInterface;
-
-/**
- * Class MigrationGroupAddForm.
- *
- * Provides the add form for our migration_group entity.
- *
- * @package Drupal\migrate_tools\Form
- *
- * @ingroup migrate_tools
- */
-class MigrationGroupAddForm extends MigrationGroupFormBase {
-
-  /**
-   * Returns the actions provided by this form.
-   *
-   * For our add form, we only need to change the text of the submit button.
-   *
-   * @param array $form
-   *   An associative array containing the structure of the form.
-   * @param \Drupal\Core\Form\FormStateInterface $form_state
-   *   An associative array containing the current state of the form.
-   *
-   * @return array
-   *   An array of supported actions for the current entity form.
-   */
-  protected function actions(array $form, FormStateInterface $form_state) {
-    $actions = parent::actions($form, $form_state);
-    $actions['submit']['#value'] = $this->t('Create Migration Group');
-    return $actions;
-  }
-
-}
diff --git a/migrate_tools/src/Form/MigrationGroupDeleteForm.php b/migrate_tools/src/Form/MigrationGroupDeleteForm.php
deleted file mode 100644
index 6b5194b200ab0b754c150ba5b7ac8e52f908a7f6..0000000000000000000000000000000000000000
--- a/migrate_tools/src/Form/MigrationGroupDeleteForm.php
+++ /dev/null
@@ -1,76 +0,0 @@
-<?php
-
-/**
- * @file
- * Contains Drupal\migrate_tools\Form\MigrationGroupDeleteForm.
- */
-
-namespace Drupal\migrate_tools\Form;
-
-use Drupal\Core\Entity\EntityConfirmFormBase;
-use Drupal\Core\Url;
-use Drupal\Core\Form\FormStateInterface;
-
-/**
- * Class MigrationGroupDeleteForm.
- *
- * @package Drupal\migrate_tools\Form
- *
- * @ingroup migrate_tools
- */
-class MigrationGroupDeleteForm extends EntityConfirmFormBase {
-
-  /**
-   * Gathers a confirmation question.
-   *
-   * @return string
-   *   Translated string.
-   */
-  public function getQuestion() {
-    return $this->t('Are you sure you want to delete migration group %label?', array(
-        '%label' => $this->entity->label(),
-    ));
-  }
-
-  /**
-   * Gather the confirmation text.
-   *
-   * @return string
-   *   Translated string.
-   */
-  public function getConfirmText() {
-    return $this->t('Delete Migration Group');
-  }
-
-  /**
-   * Gets the cancel URL.
-   *
-   * @return \Drupal\Core\Url
-   *   The URL to go to if the user cancels the deletion.
-   */
-  public function getCancelUrl() {
-    return new Url('entity.migration_group.list');
-  }
-
-  /**
-   * The submit handler for the confirm form.
-   *
-   * @param array $form
-   *   An associative array containing the structure of the form.
-   * @param \Drupal\Core\Form\FormStateInterface $form_state
-   *   An associative array containing the current state of the form.
-   */
-  public function submitForm(array &$form, FormStateInterface $form_state) {
-    // Delete the entity.
-    $this->entity->delete();
-
-    // Set a message that the entity was deleted.
-    drupal_set_message(t('Migration group %label was deleted.', array(
-      '%label' => $this->entity->label(),
-    )));
-
-    // Redirect the user to the list controller when complete.
-    $form_state->setRedirectUrl($this->getCancelUrl());
-  }
-
-}
diff --git a/migrate_tools/src/Form/MigrationGroupEditForm.php b/migrate_tools/src/Form/MigrationGroupEditForm.php
deleted file mode 100644
index ffacb3d3ff44e43eb35111129999a5c348766da8..0000000000000000000000000000000000000000
--- a/migrate_tools/src/Form/MigrationGroupEditForm.php
+++ /dev/null
@@ -1,42 +0,0 @@
-<?php
-
-/**
- * @file
- * Contains Drupal\migrate_tools\Form\MigrationGroupEditForm.
- */
-
-namespace Drupal\migrate_tools\Form;
-
-use Drupal\Core\Form\FormStateInterface;
-
-/**
- * Class MigrationGroupEditForm
- *
- * Provides the edit form for our Migration Group entity.
- *
- * @package Drupal\migrate_tools\Form
- *
- * @ingroup migrate_tools
- */
-class MigrationGroupEditForm extends MigrationGroupFormBase {
-
-  /**
-   * Returns the actions provided by this form.
-   *
-   * For the edit form, we only need to change the text of the submit button.
-   *
-   * @param array $form
-   *   An associative array containing the structure of the form.
-   * @param \Drupal\Core\Form\FormStateInterface $form_state
-   *   An associative array containing the current state of the form.
-   *
-   * @return array
-   *   An array of supported actions for the current entity form.
-   */
-  public function actions(array $form, FormStateInterface $form_state) {
-    $actions = parent::actions($form, $form_state);
-    $actions['submit']['#value'] = t('Update Migration Group');
-    return $actions;
-  }
-
-}
diff --git a/migrate_tools/src/Form/MigrationGroupFormBase.php b/migrate_tools/src/Form/MigrationGroupFormBase.php
deleted file mode 100644
index a3618d637c04e9066348acbafe6c5827b1f5e334..0000000000000000000000000000000000000000
--- a/migrate_tools/src/Form/MigrationGroupFormBase.php
+++ /dev/null
@@ -1,181 +0,0 @@
-<?php
-
-/**
- * @file
- * Contains Drupal\migrate_tools\Form\MigrationGroupFormBase.
- */
-
-namespace Drupal\migrate_tools\Form;
-
-use Drupal\Core\Entity\EntityForm;
-use Drupal\Core\Entity\Query\QueryFactory;
-use Drupal\Core\Form\FormStateInterface;
-use Symfony\Component\DependencyInjection\ContainerInterface;
-use Drupal\migrate_plus\Entity\MigrationGroupInterface;
-
-/**
- * Class MigrationGroupFormBase.
- *
- * @package Drupal\migrate_tools\Form
- *
- * @ingroup migrate_tools
- */
-class MigrationGroupFormBase extends EntityForm {
-
-  /**
-   * @var \Drupal\Core\Entity\Query\QueryFactory
-   */
-  protected $entityQueryFactory;
-
-  /**
-   * Construct the MigrationGroupFormBase.
-   *
-   * For simple entity forms, there's no need for a constructor. Our migration group form
-   * base, however, requires an entity query factory to be injected into it
-   * from the container. We later use this query factory to build an entity
-   * query for the exists() method.
-   *
-   * @param \Drupal\Core\Entity\Query\QueryFactory $query_factory
-   *   An entity query factory for the migration group entity type.
-   */
-  public function __construct(QueryFactory $query_factory) {
-    $this->entityQueryFactory = $query_factory;
-  }
-
-  /**
-   * Factory method for MigrationGroupFormBase.
-   */
-  public static function create(ContainerInterface $container) {
-    return new static($container->get('entity.query'));
-  }
-
-  /**
-   * Overrides Drupal\Core\Entity\EntityFormController::form().
-   *
-   * Builds the entity add/edit form.
-   *
-   * @param array $form
-   *   An associative array containing the structure of the form.
-   * @param array $form_state
-   *   An associative array containing the current state of the form.
-   *
-   * @return array
-   *   An associative array containing the migration group add/edit form.
-   */
-  public function buildForm(array $form, FormStateInterface $form_state) {
-    // Get anything we need from the base class.
-    $form = parent::buildForm($form, $form_state);
-
-    /** @var MigrationGroupInterface $migration_group */
-    $migration_group = $this->entity;
-
-    // Build the form.
-    $form['label'] = array(
-      '#type' => 'textfield',
-      '#title' => $this->t('Label'),
-      '#maxlength' => 255,
-      '#default_value' => $migration_group->label(),
-      '#required' => TRUE,
-    );
-    $form['id'] = array(
-      '#type' => 'machine_name',
-      '#title' => $this->t('Machine name'),
-      '#default_value' => $migration_group->id(),
-      '#machine_name' => array(
-        'exists' => array($this, 'exists'),
-        'replace_pattern' => '([^a-z0-9_]+)|(^custom$)',
-        'error' => 'The machine-readable name must be unique, and can only contain lowercase letters, numbers, and underscores. Additionally, it can not be the reserved word "custom".',
-      ),
-      '#disabled' => !$migration_group->isNew(),
-    );
-    $form['description'] = array(
-      '#type' => 'textfield',
-      '#title' => $this->t('Description'),
-      '#maxlength' => 255,
-      '#default_value' => $migration_group->get('description'),
-    );
-    $form['source_type'] = array(
-      '#type' => 'textfield',
-      '#title' => $this->t('Source type'),
-      '#description' => $this->t('Type of source system the group is migrating from, for example "Drupal 6" or "WordPress 4".'),
-      '#maxlength' => 255,
-      '#default_value' => $migration_group->get('source_type'),
-    );
-
-    // Return the form.
-    return $form;
-  }
-
-  /**
-   * Checks for an existing migration group.
-   *
-   * @param string|int $entity_id
-   *   The entity ID.
-   * @param array $element
-   *   The form element.
-   * @param FormStateInterface $form_state
-   *   The form state.
-   *
-   * @return bool
-   *   TRUE if this format already exists, FALSE otherwise.
-   */
-  public function exists($entity_id, array $element, FormStateInterface $form_state) {
-    // Use the query factory to build a new migration group entity query.
-    $query = $this->entityQueryFactory->get('migration_group');
-
-    // Query the entity ID to see if its in use.
-    $result = $query->condition('id', $element['#field_prefix'] . $entity_id)
-      ->execute();
-
-    // We don't need to return the ID, only if it exists or not.
-    return (bool) $result;
-  }
-
-  /**
-   * Overrides Drupal\Core\Entity\EntityFormController::actions().
-   *
-   * @param array $form
-   *   An associative array containing the structure of the form.
-   * @param \Drupal\Core\Form\FormStateInterface $form_state
-   *   An associative array containing the current state of the form.
-   *
-   * @return array
-   *   An array of supported actions for the current entity form.
-   */
-  protected function actions(array $form, FormStateInterface $form_state) {
-    // Get the basic actins from the base class.
-    $actions = parent::actions($form, $form_state);
-
-    // Change the submit button text.
-    $actions['submit']['#value'] = $this->t('Save');
-
-    // Return the result.
-    return $actions;
-  }
-
-  /**
-   * Overrides Drupal\Core\Entity\EntityFormController::save().
-   *
-   * @param array $form
-   *   An associative array containing the structure of the form.
-   * @param \Drupal\Core\Form\FormStateInterface $form_state
-   *   An associative array containing the current state of the form.
-   */
-  public function save(array $form, FormStateInterface $form_state) {
-    $migration_group = $this->getEntity();
-    $status = $migration_group->save();
-
-    if ($status == SAVED_UPDATED) {
-      // If we edited an existing entity...
-      drupal_set_message($this->t('Migration group %label has been updated.', array('%label' => $migration_group->label())));
-    }
-    else {
-      // If we created a new entity...
-      drupal_set_message($this->t('Migration group %label has been added.', array('%label' => $migration_group->label())));
-    }
-
-    // Redirect the user back to the listing route after the save operation.
-    $form_state->setRedirect('entity.migration_group.list');
-  }
-
-}
diff --git a/migrate_tools/src/MigrateExecutable.php b/migrate_tools/src/MigrateExecutable.php
deleted file mode 100644
index b883adf2446587c27ae6961bba21431e504d45b4..0000000000000000000000000000000000000000
--- a/migrate_tools/src/MigrateExecutable.php
+++ /dev/null
@@ -1,353 +0,0 @@
-<?php
-
-/**
- * @file
- * Contains \Drupal\migrate_tools\MigrateExecutable.
- */
-
-namespace Drupal\migrate_tools;
-
-use Drupal\migrate\Event\MigratePreRowSaveEvent;
-use Drupal\migrate\Event\MigrateRollbackEvent;
-use Drupal\migrate\Event\MigrateRowDeleteEvent;
-use Drupal\migrate\MigrateExecutable as MigrateExecutableBase;
-use Drupal\migrate\MigrateMessageInterface;
-use Drupal\migrate\Entity\MigrationInterface;
-use Drupal\migrate\MigrateSkipRowException;
-use Drupal\migrate\Plugin\MigrateIdMapInterface;
-use Drupal\migrate\Event\MigrateEvents;
-use Drupal\migrate_plus\Event\MigrateEvents as MigratePlusEvents;
-use Drupal\migrate\Event\MigrateMapSaveEvent;
-use Drupal\migrate\Event\MigrateMapDeleteEvent;
-use Drupal\migrate\Event\MigrateImportEvent;
-use Drupal\migrate\Event\MigratePostRowSaveEvent;
-use Drupal\migrate_plus\Event\MigratePrepareRowEvent;
-
-class MigrateExecutable extends MigrateExecutableBase {
-
-  /**
-   * Counters of map statuses.
-   *
-   * @var array
-   *   Set of counters, keyed by MigrateIdMapInterface::STATUS_* constant.
-   */
-  protected $saveCounters = array(
-    MigrateIdMapInterface::STATUS_FAILED => 0,
-    MigrateIdMapInterface::STATUS_IGNORED => 0,
-    MigrateIdMapInterface::STATUS_IMPORTED => 0,
-    MigrateIdMapInterface::STATUS_NEEDS_UPDATE => 0,
-  );
-
-  /**
-   * Counter of map deletions.
-   *
-   * @var int
-   */
-  protected $deleteCounter = 0;
-
-  /**
-   * Maximum number of items to process in this migration. 0 indicates no limit
-   * is to be applied.
-   *
-   * @var int
-   */
-  protected $itemLimit = 0;
-
-  /**
-   * Frequency (in items) at which progress messages should be emitted.
-   *
-   * @var int
-   */
-  protected $feedback = 0;
-
-  /**
-   * List of specific source IDs to import.
-   *
-   * @var array
-   */
-  protected $idlist = [];
-
-  /**
-   * Count of number of items processed so far in this migration.
-   * @var int
-   */
-  protected $counter = 0;
-
-  /**
-   * Whether the destination item exists before saving.
-   *
-   * @var bool
-   */
-  protected $preExistingItem = FALSE;
-
-  protected $listeners = [];
-
-  /**
-   * {@inheritdoc}
-   */
-  public function __construct(MigrationInterface $migration, MigrateMessageInterface $message, array $options = []) {
-    parent::__construct($migration, $message);
-    if (isset($options['limit'])) {
-      $this->itemLimit = $options['limit'];
-    }
-    if (isset($options['feedback'])) {
-      $this->feedback = $options['feedback'];
-    }
-    if (isset($options['idlist'])) {
-      $this->idlist = explode(',', $options['idlist']);
-    }
-
-    $this->listeners[MigrateEvents::MAP_SAVE] = [$this, 'onMapSave'];
-    $this->listeners[MigrateEvents::MAP_DELETE] = [$this, 'onMapDelete'];
-    $this->listeners[MigrateEvents::POST_IMPORT] = [$this, 'onPostImport'];
-    $this->listeners[MigrateEvents::POST_ROLLBACK] = [$this, 'onPostRollback'];
-    $this->listeners[MigrateEvents::PRE_ROW_SAVE] = [$this, 'onPreRowSave'];
-    $this->listeners[MigrateEvents::POST_ROW_SAVE] = [$this, 'onPostRowSave'];
-    $this->listeners[MigrateEvents::POST_ROW_DELETE] = [$this, 'onPostRowDelete'];
-    $this->listeners[MigratePlusEvents::PREPARE_ROW] = [$this, 'onPrepareRow'];
-    foreach ($this->listeners as $event => $listener) {
-      \Drupal::service('event_dispatcher')->addListener($event, $listener);
-    }
-  }
-
-  /**
-   * Count up any map save events.
-   *
-   * @param \Drupal\migrate\Event\MigrateMapSaveEvent $event
-   *   The map event.
-   */
-  public function onMapSave(MigrateMapSaveEvent $event) {
-    $fields = $event->getFields();
-    // Distinguish between creation and update.
-    if ($fields['source_row_status'] == MigrateIdMapInterface::STATUS_IMPORTED &&
-        $this->preExistingItem) {
-      $this->saveCounters[MigrateIdMapInterface::STATUS_NEEDS_UPDATE]++;
-    }
-    else {
-      $this->saveCounters[$fields['source_row_status']]++;
-    }
-  }
-
-  /**
-   * Count up any rollback events.
-   *
-   * @param \Drupal\migrate\Event\MigrateMapDeleteEvent $event
-   *   The map event.
-   */
-  public function onMapDelete(MigrateMapDeleteEvent $event) {
-    $this->deleteCounter++;
-  }
-
-  /**
-   * Return the number of items created.
-   *
-   * @return int
-   */
-  public function getCreatedCount() {
-    return $this->saveCounters[MigrateIdMapInterface::STATUS_IMPORTED];
-  }
-
-  /**
-   * Return the number of items updated.
-   *
-   * @return int
-   */
-  public function getUpdatedCount() {
-    return $this->saveCounters[MigrateIdMapInterface::STATUS_NEEDS_UPDATE];
-  }
-
-  /**
-   * Return the number of items ignored.
-   *
-   * @return int
-   */
-  public function getIgnoredCount() {
-    return $this->saveCounters[MigrateIdMapInterface::STATUS_IGNORED];
-  }
-
-  /**
-   * Return the number of items that failed.
-   *
-   * @return int
-   */
-  public function getFailedCount() {
-    return $this->saveCounters[MigrateIdMapInterface::STATUS_FAILED];
-  }
-
-  /**
-   * Return the total number of items processed. Note that STATUS_NEEDS_UPDATE
-   * is not counted, since this is typically set on stubs created as side
-   * effects, not on the primary item being imported.
-   *
-   * @return int
-   */
-  public function getProcessedCount() {
-    return $this->saveCounters[MigrateIdMapInterface::STATUS_IMPORTED] +
-      $this->saveCounters[MigrateIdMapInterface::STATUS_NEEDS_UPDATE] +
-      $this->saveCounters[MigrateIdMapInterface::STATUS_IGNORED] +
-      $this->saveCounters[MigrateIdMapInterface::STATUS_FAILED];
-  }
-
-  /**
-   * Return the number of items rolled back.
-   *
-   * @return int
-   */
-  public function getRollbackCount() {
-    return $this->deleteCounter;
-  }
-
-  /**
-   * Reset all the per-status counters to 0.
-   */
-  protected function resetCounters() {
-    foreach ($this->saveCounters as $status => $count) {
-      $this->saveCounters[$status] = 0;
-    }
-    $this->deleteCounter = 0;
-  }
-
-  /**
-   * React to migration completion.
-   *
-   * @param \Drupal\migrate\Event\MigrateImportEvent $event
-   *   The map event.
-   */
-  public function onPostImport(MigrateImportEvent $event) {
-    $migrate_last_imported_store = \Drupal::keyValue('migrate_last_imported');
-    $migrate_last_imported_store->set($event->getMigration()->id(), round(microtime(TRUE) * 1000));
-    $this->progressMessage();
-    $this->removeListeners();
-  }
-
-  /**
-   * Clean up all our event listeners.
-   */
-  protected function removeListeners() {
-    foreach ($this->listeners as $event => $listener) {
-      \Drupal::service('event_dispatcher')->removeListener($event, $listener);
-    }
-  }
-
-  /**
-   * Emit information on what we've done since the last feedback (or the
-   * beginning of this migration).
-   *
-   * @param bool $done
-   */
-  protected function progressMessage($done = TRUE) {
-    $processed = $this->getProcessedCount();
-    if ($done) {
-      $singular_message = "Processed 1 item (@created created, @updated updated, @failures failed, @ignored ignored) - done with '@name'";
-      $plural_message = "Processed @numitems items (@created created, @updated updated, @failures failed, @ignored ignored) - done with '@name'";
-    }
-    else {
-      $singular_message = "Processed 1 item (@created created, @updated updated, @failures failed, @ignored ignored) - continuing with '@name'";
-      $plural_message = "Processed @numitems items (@created created, @updated updated, @failures failed, @ignored ignored) - continuing with '@name'";
-    }
-    $this->message->display(\Drupal::translation()->formatPlural($processed,
-      $singular_message, $plural_message,
-        array('@numitems' => $processed,
-              '@created' => $this->getCreatedCount(),
-              '@updated' => $this->getUpdatedCount(),
-              '@failures' => $this->getFailedCount(),
-              '@ignored' => $this->getIgnoredCount(),
-              '@name' => $this->migration->id())));
-  }
-
-  /**
-   * React to rollback completion.
-   *
-   * @param \Drupal\migrate\Event\MigrateRollbackEvent $event
-   *   The map event.
-   */
-  public function onPostRollback(MigrateRollbackEvent $event) {
-    $this->rollbackMessage();
-    $this->removeListeners();
-  }
-
-  /**
-   * Emit information on what we've done since the last feedback (or the
-   * beginning of this migration).
-   *
-   * @param bool $done
-   */
-  protected function rollbackMessage($done = TRUE) {
-   $rolled_back = $this->getRollbackCount();
-   if ($done) {
-     $singular_message = "Rolled back 1 item - done with '@name'";
-     $plural_message = "Rolled back @numitems items - done with '@name'";
-   }
-   else {
-     $singular_message = "Rolled back 1 item - continuing with '@name'";
-     $plural_message = "Rolled back @numitems items - continuing with '@name'";
-   }
-   $this->message->display(\Drupal::translation()->formatPlural($rolled_back,
-     $singular_message, $plural_message,
-       array('@numitems' => $rolled_back,
-             '@name' => $this->migration->id())));
- }
-
-  /**
-   * React to an item about to be imported.
-   *
-   * @param \Drupal\migrate\Event\MigratePreRowSaveEvent $event
-   *   The pre-save event.
-   */
-  public function onPreRowSave(MigratePreRowSaveEvent $event) {
-    $id_map = $event->getRow()->getIdMap();
-    if (!empty($id_map['destid1'])) {
-      $this->preExistingItem = TRUE;
-    }
-    else {
-      $this->preExistingItem = FALSE;
-    }
-  }
-
-  /**
-   * React to item import.
-   *
-   * @param \Drupal\migrate\Event\MigratePostRowSaveEvent $event
-   *   The post-save event.
-   */
-  public function onPostRowSave(MigratePostRowSaveEvent $event) {
-    if ($this->feedback && ($this->counter) && $this->counter % $this->feedback == 0) {
-      $this->progressMessage(FALSE);
-      $this->resetCounters();
-    }
-    $this->counter++;
-    if ($this->itemLimit && $this->counter >= $this->itemLimit) {
-      $event->getMigration()->interruptMigration(MigrationInterface::RESULT_COMPLETED);
-    }
-  }
-
-  /**
-   * React to item rollback.
-   *
-   * @param \Drupal\migrate\Event\MigrateRowDeleteEvent $event
-   *   The post-save event.
-   */
-  public function onPostRowDelete(MigrateRowDeleteEvent $event) {
-    if ($this->feedback && ($this->deleteCounter) && $this->deleteCounter % $this->feedback == 0) {
-      $this->rollbackMessage(FALSE);
-      $this->resetCounters();
-    }
-  }
-
-  /**
-   * React to a new row.
-   *
-   * @param \Drupal\migrate_plus\Event\MigratePrepareRowEvent $event
-   *   The prepare-row event.
-   */
-  public function onPrepareRow(MigratePrepareRowEvent $event) {
-    if ($this->idlist) {
-      $row = $event->getRow();
-      $source_id = $row->getSourceIdValues();
-      if (!in_array(reset($source_id), $this->idlist)) {
-        throw new MigrateSkipRowException(NULL, FALSE);
-      }
-    }
-  }
-
-}
diff --git a/migrate_tools/src/MigrateManifest.php b/migrate_tools/src/MigrateManifest.php
deleted file mode 100644
index 797a88272c8d36d22dad4e00879e4711e48e4d95..0000000000000000000000000000000000000000
--- a/migrate_tools/src/MigrateManifest.php
+++ /dev/null
@@ -1,148 +0,0 @@
-<?php
-
-/**
- * @file
- * Contains \Drupal\migrate_tools\MigrateManifest
- */
-
-namespace Drupal\migrate_tools;
-
-use Drupal\Component\Utility\NestedArray;
-use Drupal\migrate\Entity\Migration;
-use Symfony\Component\HttpFoundation\File\Exception\FileNotFoundException;
-use Symfony\Component\Yaml\Exception\ParseException;
-use Symfony\Component\Yaml\Yaml;
-use Drupal\Core\Database\Database;
-
-class MigrateManifest {
-
-  /**
-   * The path to the manifest file.
-   *
-   * @var string
-   */
-  protected $manifestFile;
-
-  /**
-   * The list of migrations to run and their configuration.
-   *
-   * @var array
-   */
-  protected $migrationList;
-
-  /**
-   * The message log.
-   *
-   * @var \Drupal\migrate_tools\DrushLogMigrateMessage
-   */
-  protected $log;
-
-  /**
-   * Constructs a new MigrateManifest object.
-   */
-  public function __construct($manifest_file) {
-    $this->manifestFile = $manifest_file;
-    $this->migrationList = Yaml::parse($this->manifestFile);
-    $this->log = new DrushLogMigrateMessage();
-
-    if (!file_exists($this->manifestFile)) {
-      throw new FileNotFoundException('The manifest file does not exist.');
-    }
-
-    if (!is_array($this->migrationList)) {
-      throw new ParseException('The manifest file cannot be parsed.');
-    }
-  }
-
-  /**
-   * Drush execution method. Runs imports on the supplied manifest.
-   */
-  public function import() {
-    /** @var \Drupal\migrate\MigrateTemplateStorage $template_storage */
-    $template_storage = \Drupal::service('migrate.template_storage');
-
-    $this->setupLegacyDb();
-    $migration_ids = [];
-    $migrations = [];
-
-    foreach ($this->migrationList as $migration_info) {
-      if (is_array($migration_info)) {
-        // The migration is stored as the key in the info array.
-        $migration_id = key($migration_info);
-      }
-      else {
-        // If it wasn't an array then the info is just the migration_id.
-        $migration_id = $migration_info;
-      }
-      $migration_ids[] = $migration_id;
-
-      $template = $template_storage->getTemplateByName($migration_id) ?: [];
-      if (is_array($migration_info)) {
-        // If there is some existing global overrides then we merge them in.
-        if (isset($GLOBALS['config'][$migration_id])) {
-          $migration_info = NestedArray::mergeDeep($GLOBALS['config'][$migration_id], $migration_info);
-        }
-
-        $migration_info = NestedArray::mergeDeep($template, $migration_info);
-      }
-      else {
-        $migration_info = $template;
-      }
-
-      if ($migration_info && !Migration::load($migration_id)) {
-        $migration = Migration::create($migration_info);
-        $migration->save();
-      }
-    }
-
-    // Load all the migrations at once so they're correctly ordered.
-    foreach (entity_load_multiple('migration', $migration_ids) as $migration) {
-      $executable = $this->executeMigration($migration);
-      // Store all the migrations for later.
-      $migrations[$migration->id()] = array(
-        'executable' => $executable,
-        'migration' => $migration,
-        'source' => $migration->get('source'),
-        'destination' => $migration->get('destination'),
-      );
-    }
-
-    // Warn the user if any migrations were not found.
-    $nonexistent_migrations = array_diff($migration_ids, array_keys($migrations));
-    if (count($nonexistent_migrations) > 0) {
-      drush_log(dt('The following migrations were not found: @migrations', array(
-        '@migrations' => implode(', ', $nonexistent_migrations),
-      )), 'warning');
-    }
-
-    return $migrations;
-  }
-
-  /**
-   * Execute a single migration.
-   *
-   * @param \Drupal\migrate\Entity\Migration $migration
-   *   The migration to run.
-   *
-   * @return \Drupal\migrate_tools\MigrateExecutable
-   *   The migration executable.
-   */
-  protected function executeMigration($migration) {
-    drush_log('Running ' . $migration->id(), 'ok');
-    $executable = new MigrateExecutable($migration, $this->log);
-    // drush_op() provides --simulate support.
-    drush_op(array($executable, 'import'));
-
-    return $executable;
-  }
-
-  /**
-   * Setup the legacy database connection to migrate from.
-   */
-  protected function setupLegacyDb() {
-    $db_url = drush_get_option('legacy-db-url');
-    $db_spec = drush_convert_db_from_db_url($db_url);
-    Database::addConnectionInfo('migrate', 'default', $db_spec);
-  }
-
-}