diff --git a/core/modules/migrate/config/migrate.migration.d6_system_cron.yml b/core/modules/migrate/config/migrate.migration.d6_system_cron.yml
deleted file mode 100644
index 736af9b..0000000
--- a/core/modules/migrate/config/migrate.migration.d6_system_cron.yml
+++ /dev/null
@@ -1,13 +0,0 @@
-id: d6_system_cron
-source:
-    plugin: drupal6_variable
-    variables:
-        - cron_threshold_warning
-        - cron_threshold_error
-        - cron_last
-process:
-    'threshold:warning': cron_threshold_warning
-    'threshold:error': cron_threshold_error
-destination:
-    plugin: d8_config
-    config_name: system.cron
diff --git a/core/modules/migrate/config/migrate.migration.d6_system_rss.yml b/core/modules/migrate/config/migrate.migration.d6_system_rss.yml
deleted file mode 100644
index acce5e2..0000000
--- a/core/modules/migrate/config/migrate.migration.d6_system_rss.yml
+++ /dev/null
@@ -1,10 +0,0 @@
-id: d6_system_rss
-source:
-    plugin: drupal6_variable
-    variables:
-        - feed_default_items
-process:
-    'items:limit': feed_default_items
-destination:
-    plugin: d8_config
-    config_name: system.rss
diff --git a/core/modules/migrate/config/migrate.migration.d6_system_site.yml b/core/modules/migrate/config/migrate.migration.d6_system_site.yml
deleted file mode 100644
index bcfb712..0000000
--- a/core/modules/migrate/config/migrate.migration.d6_system_site.yml
+++ /dev/null
@@ -1,24 +0,0 @@
-id: d6_system_site
-source:
-    plugin: drupal6_variable
-    variables:
-        - site_name
-        - site_mail
-        - site_slogan
-        - site_frontpage
-        - site_403
-        - site_404
-        - drupal_weight_select_max
-        - admin_compact_mode
-process:
-    name: site_name
-    mail: site_mail
-    slogan: site_slogan
-    'page:front': site_frontpage
-    'page:403': site_403
-    'page:404': site_404
-    weight_select_max: drupal_weight_select_max
-    admin_compact_mode: admin_compact_mode
-destination:
-    plugin: d8_config
-    config_name: system.site
diff --git a/core/modules/migrate/lib/Drupal/migrate/Plugin/migrate/source/D6Variable.php b/core/modules/migrate/lib/Drupal/migrate/Plugin/migrate/source/D6Variable.php
deleted file mode 100644
index 3160d53..0000000
--- a/core/modules/migrate/lib/Drupal/migrate/Plugin/migrate/source/D6Variable.php
+++ /dev/null
@@ -1,59 +0,0 @@
-<?php
-
-/**
- * @file
- * Contains \Drupal\migrate\Plugin\migrate\source\d6\Variable.
- */
-
-namespace Drupal\migrate\Plugin\migrate\source;
-
-use Drupal\migrate\Entity\MigrationInterface;
-use Drupal\migrate\Plugin\migrate\source\d6\Drupal6SqlBase;
-
-/**
- * Drupal 6 variable source from database.
- *
- * @PluginID("drupal6_variable")
- */
-class D6Variable extends Drupal6SqlBase {
-
-  /**
-   * The variable names to fetch.
-   *
-   * @var array
-   */
-  protected $variables;
-
-  /**
-   * {@inheritdoc}
-   */
-  function __construct(array $configuration, $plugin_id, array $plugin_definition, MigrationInterface $migration) {
-    parent::__construct($configuration, $plugin_id, $plugin_definition, $migration);
-    $this->variables = $this->configuration['variables'];
-  }
-
-  protected function runQuery() {
-    return new \ArrayIterator(array(array_map('unserialize', $this->query()->execute()->fetchAllKeyed())));
-  }
-
-  public function count() {
-    return intval($this->query()->countQuery()->execute()->fetchField() > 0);
-  }
-
-  /**
-   * {@inheritdoc}
-   */
-  public function fields() {
-    return drupal_map_assoc($this->variables);
-  }
-
-  /**
-   * {@inheritdoc}
-   */
-  function query() {
-    return $this->getDatabase()
-      ->select('variable', 'v')
-      ->fields('v', array('name', 'value'))
-      ->condition('name', $this->variables, 'IN');
-  }
-}
diff --git a/core/modules/migrate/lib/Drupal/migrate/Plugin/migrate/source/d6/Drupal6SqlBase.php b/core/modules/migrate/lib/Drupal/migrate/Plugin/migrate/source/d6/Drupal6SqlBase.php
deleted file mode 100644
index 579d87a..0000000
--- a/core/modules/migrate/lib/Drupal/migrate/Plugin/migrate/source/d6/Drupal6SqlBase.php
+++ /dev/null
@@ -1,82 +0,0 @@
-<?php
-
-/**
- * @file
- * Contains \Drupal\migrate\Plugin\migrate\source\d6\Drupal6SqlBase.
- */
-
-namespace Drupal\migrate\Plugin\migrate\source\d6;
-
-use Drupal\migrate\Plugin\migrate\source\SqlBase;
-
-/**
- * A base source class for Drupal 6 migrate sources.
- *
- * Mainly to let children retrieve information from the origin system in an
- * easier way.
- */
-abstract class Drupal6SqlBase extends SqlBase {
-
-  /**
-   * Retrieves all system data information from origin system.
-   *
-   * @return array
-   *   List of system table information keyed by type and name.
-   */
-  public function getSystemData() {
-    static $system_data;
-    if (isset($system_data)) {
-      return $system_data;
-    }
-    $results = $this->database
-      ->select('system', 's')
-      ->fields('s')
-      ->execute();
-    foreach ($results as $result) {
-      $system_data[$result['type']][$result['name']] = $result;
-    }
-    return $system_data;
-  }
-
-  /**
-   * Get a module schema_version value in the source installation.
-   *
-   * @param string $module
-   *   Name of module.
-   *
-   * @return mixed
-   *   The current module schema version on the origin system table or FALSE if
-   *   not found.
-   */
-  protected function getModuleSchemaVersion($module) {
-    $system_data = $this->getSystemData();
-    return isset($system_data['module'][$module]['schema_version']) ? $system_data['module'][$module]['schema_version'] : FALSE;
-  }
-
-  /**
-   * Check to see if a given module is enabled in the source installation.
-   *
-   * @param string $module
-   *   Name of module to check.
-   *
-   * @return bool
-   *   TRUE if module is enabled on the origin system, FALSE if not.
-   */
-  protected function moduleExists($module) {
-    return isset($system_data['module'][$module]['status']) ? (bool) $system_data['module'][$module]['status'] : FALSE;
-  }
-
-  protected function variableGet($name, $default) {
-    try {
-      $result = $this->database
-        ->query('SELECT value FROM {variable} WHERE name = :name', array(':name' => $name))
-        ->fetchField();
-    }
-    // The table might not exist.
-    catch (\Exception $e) {
-      $result = FALSE;
-    }
-    return $result !== FALSE ? unserialize($result) : $default;
-  }
-
-}
diff --git a/core/modules/migrate/lib/Drupal/migrate/Tests/Dump/Drupal6SystemCron.php b/core/modules/migrate/lib/Drupal/migrate/Tests/Dump/Drupal6SystemCron.php
deleted file mode 100644
index 9171fff..0000000
--- a/core/modules/migrate/lib/Drupal/migrate/Tests/Dump/Drupal6SystemCron.php
+++ /dev/null
@@ -1,59 +0,0 @@
-<?php
-
-/**
- * @file
- * Contains \Drupal\migrate\Tests\Drupal6SystemCron.
- */
-
-namespace Drupal\migrate\Tests\Dump;
-
-use Drupal\Core\Database\Connection;
-
-/**
- * Database dump for testing system.cron.yml migration.
- */
-class Drupal6SystemCron {
-
-  /**
-   * Sample database schema and values.
-   *
-   * @param \Drupal\Core\Database\Connection $database
-   *   The database connection.
-   */
-  public static function load(Connection $database) {
-    $database->schema()->createTable('variable', array(
-      'fields' => array(
-        'name' => array(
-          'type' => 'varchar',
-          'length' => 128,
-          'not null' => TRUE,
-          'default' => '',
-        ),
-        'value' => array(
-          'type' => 'blob',
-          'not null' => TRUE,
-          'size' => 'big',
-          'translatable' => TRUE,
-        ),
-      ),
-      'primary key' => array(
-        'name',
-      ),
-      'module' => 'system',
-      'name' => 'variable',
-    ));
-    $database->insert('variable')->fields(array(
-      'name',
-      'value',
-    ))
-    ->values(array(
-      'name' => 'cron_threshold_warning',
-      'value' => 'i:172800;',
-    ))
-    ->values(array(
-      'name' => 'cron_threshold_error',
-      'value' => 'i:1209600;',
-    ))
-    ->execute();
-  }
-}
diff --git a/core/modules/migrate/lib/Drupal/migrate/Tests/Dump/Drupal6SystemRss.php b/core/modules/migrate/lib/Drupal/migrate/Tests/Dump/Drupal6SystemRss.php
deleted file mode 100644
index da4468f..0000000
--- a/core/modules/migrate/lib/Drupal/migrate/Tests/Dump/Drupal6SystemRss.php
+++ /dev/null
@@ -1,55 +0,0 @@
-<?php
-
-/**
- * @file
- * Contains \Drupal\migrate\Tests\Drupal6SystemRss.
- */
-
-namespace Drupal\migrate\Tests\Dump;
-
-use Drupal\Core\Database\Connection;
-
-/**
- * Database dump for testing system.settings.yml migration.
- */
-class Drupal6SystemRss {
-
-  /**
-   * Sample database schema and values.
-   *
-   * @param \Drupal\Core\Database\Connection $database
-   *   The database connection.
-   */
-  public static function load(Connection $database) {
-    $database->schema()->createTable('variable', array(
-      'fields' => array(
-        'name' => array(
-          'type' => 'varchar',
-          'length' => 128,
-          'not null' => TRUE,
-          'default' => '',
-        ),
-        'value' => array(
-          'type' => 'blob',
-          'not null' => TRUE,
-          'size' => 'big',
-          'translatable' => TRUE,
-        ),
-      ),
-      'primary key' => array(
-        'name',
-      ),
-      'module' => 'system',
-      'name' => 'variable',
-    ));
-    $database->insert('variable')->fields(array(
-      'name',
-      'value',
-    ))
-    ->values(array(
-      'name' => 'feed_default_items',
-      'value' => 'i:10;',
-    ))
-    ->execute();
-  }
-}
diff --git a/core/modules/migrate/lib/Drupal/migrate/Tests/Dump/Drupal6SystemSite.php b/core/modules/migrate/lib/Drupal/migrate/Tests/Dump/Drupal6SystemSite.php
deleted file mode 100644
index 69ef685..0000000
--- a/core/modules/migrate/lib/Drupal/migrate/Tests/Dump/Drupal6SystemSite.php
+++ /dev/null
@@ -1,75 +0,0 @@
-<?php
-
-namespace Drupal\migrate\Tests\Dump;
-
-use Drupal\Core\Database\Connection;
-
-/**
- * Database dump for testing system.site.yml migration.
- */
-class Drupal6SystemSite {
-
-  /**
-   * @param \Drupal\Core\Database\Connection $database
-   */
-  public static function load(Connection $database) {
-    $database->schema()->createTable('variable', array(
-      'fields' => array(
-        'name' => array(
-          'type' => 'varchar',
-          'length' => 128,
-          'not null' => TRUE,
-          'default' => '',
-        ),
-        'value' => array(
-          'type' => 'blob',
-          'not null' => TRUE,
-          'size' => 'big',
-          'translatable' => TRUE,
-        ),
-      ),
-      'primary key' => array(
-        'name',
-      ),
-      'module' => 'system',
-      'name' => 'variable',
-    ));
-    $database->insert('variable')->fields(array(
-      'name',
-      'value',
-    ))
-    ->values(array(
-      'name' => 'site_name',
-      'value' => 's:6:"drupal";',
-    ))
-    ->values(array(
-      'name' => 'site_mail',
-      'value' => 's:17:"admin@example.com";',
-    ))
-    ->values(array(
-      'name' => 'site_slogan',
-      'value' => 's:13:"Migrate rocks";',
-    ))
-    ->values(array(
-      'name' => 'site_frontpage',
-      'value' => 's:12:"anonymous-hp";',
-    ))
-    ->values(array(
-      'name' => 'site_403',
-      'value' => 's:4:"user";',
-    ))
-    ->values(array(
-      'name' => 'site_404',
-      'value' => 's:14:"page-not-found";',
-    ))
-    ->values(array(
-      'name' => 'drupal_weight_select_max',
-      'value' => 'i:99;',
-    ))
-    ->values(array(
-      'name' => 'admin_compact_mode',
-      'value' => 'b:0;',
-    ))
-    ->execute();
-  }
-}
diff --git a/core/modules/migrate/lib/Drupal/migrate/Tests/MigrateSystemConfigsTest.php b/core/modules/migrate/lib/Drupal/migrate/Tests/MigrateSystemConfigsTest.php
deleted file mode 100644
index 09529c1..0000000
--- a/core/modules/migrate/lib/Drupal/migrate/Tests/MigrateSystemConfigsTest.php
+++ /dev/null
@@ -1,75 +0,0 @@
-<?php
-
-/**
- * @file
- * Contains \Drupal\system\Tests\Upgrade\MigrateSystemSiteTest.
- */
-
-namespace Drupal\migrate\Tests;
-
-use Drupal\migrate\MigrateMessage;
-use Drupal\migrate\MigrateExecutable;
-
-class MigrateSystemConfigsTest extends MigrateTestBase {
-
-  /**
-   * {@inheritdoc}
-   */
-  public static function getInfo() {
-    return array(
-      'name'  => 'Migrate variables to system.*.yml',
-      'description'  => 'Upgrade variables to system.*.yml',
-      'group' => 'Migrate',
-    );
-  }
-
-  function testSystemSite() {
-    $migration = entity_load('migration', 'd6_system_site');
-    $dumps = array(
-      drupal_get_path('module', 'migrate') . '/lib/Drupal/migrate/Tests/Dump/Drupal6SystemSite.php',
-    );
-    $this->prepare($migration, $dumps);
-    $executable = new MigrateExecutable($migration, new MigrateMessage);
-    $executable->import();
-    $config = \Drupal::config('system.site');
-    $this->assertIdentical($config->get('name'), 'drupal');
-    $this->assertIdentical($config->get('mail'), 'admin@example.com');
-    $this->assertIdentical($config->get('slogan'), 'Migrate rocks');
-    $this->assertIdentical($config->get('page.front'), 'anonymous-hp');
-    $this->assertIdentical($config->get('page.403'), 'user');
-    $this->assertIdentical($config->get('page.404'), 'page-not-found');
-    $this->assertIdentical($config->get('weight_select_max'), 99);
-    $this->assertIdentical($config->get('admin_compact_mode'), FALSE);
-  }
-
-  /**
-   * Tests migration of system (cron) variables to system.cron.yml.
-   */
-  public function testSystemCron() {
-    $migration = entity_load('migration', 'd6_system_cron');
-    $dumps = array(
-      drupal_get_path('module', 'migrate') . '/lib/Drupal/migrate/Tests/Dump/Drupal6SystemCron.php',
-    );
-    $this->prepare($migration, $dumps);
-    $executable = new MigrateExecutable($migration, new MigrateMessage());
-    $executable->import();
-    $config = \Drupal::config('system.cron');
-    $this->assertIdentical($config->get('threshold.warning'), 172800);
-    $this->assertIdentical($config->get('threshold.error'), 1209600);
-  }
-
-  /**
-   * Tests migration of system (rss) variables to system.rss.yml.
-   */
-  public function testSystemRss() {
-    $migration = entity_load('migration', 'd6_system_rss');
-    $dumps = array(
-      drupal_get_path('module', 'migrate') . '/lib/Drupal/migrate/Tests/Dump/Drupal6SystemRss.php',
-    );
-    $this->prepare($migration, $dumps);
-    $executable = new MigrateExecutable($migration, new MigrateMessage());
-    $executable->import();
-    $config = \Drupal::config('system.rss');
-    $this->assertIdentical($config->get('items.limit'), 10);
-  }
-}
diff --git a/core/modules/migrate/tests/Drupal/migrate/Tests/D6VariableTest.php b/core/modules/migrate/tests/Drupal/migrate/Tests/D6VariableTest.php
deleted file mode 100644
index cc903bf..0000000
--- a/core/modules/migrate/tests/Drupal/migrate/Tests/D6VariableTest.php
+++ /dev/null
@@ -1,75 +0,0 @@
-<?php
-
-/**
- * @file
- * Contains \Drupal\migrate\Tests\D6VariableSourceTest.
- */
-
-namespace Drupal\migrate\Tests;
-
-/**
- * @group migrate
- * @group Drupal
- */
-class D6VariableTest extends MigrateSqlSourceTestCase {
-
-  const PLUGIN_CLASS = 'Drupal\migrate\Plugin\migrate\source\D6Variable';
-
-  protected $migrationConfiguration = array(
-    'id' => 'test',
-    'highwaterProperty' => array('field' => 'test'),
-    'idlist' => array(),
-    'source' => array(
-      'plugin' => 'drupal6_variable',
-      'variables' => array(
-        'foo',
-        'bar',
-      ),
-    ),
-    'sourceIds' => array(),
-    'destinationIds' => array(),
-  );
-
-  protected $mapJoinable = FALSE;
-
-  protected $expectedResults = array(
-    array(
-      'foo' => 1,
-      'bar' => FALSE,
-    ),
-  );
-
-  protected $databaseContents = array(
-    'variable' => array(
-      array('name' => 'foo', 'value' => 'i:1;'),
-      array('name' => 'bar', 'value' => 'b:0;'),
-    ),
-  );
-
-  /**
-   * {@inheritdoc}
-   */
-  public static function getInfo() {
-    return array(
-      'name' => 'D6 variable source functionality',
-      'description' => 'Tests D6 variable source plugin.',
-      'group' => 'Migrate',
-    );
-  }
-
-}
-
-namespace Drupal\migrate\Tests\source;
-
-use Drupal\Core\Database\Connection;
-use Drupal\Core\Extension\ModuleHandlerInterface;
-use Drupal\migrate\Plugin\migrate\source\D6Variable;
-
-class TestD6Variable extends D6Variable {
-  function setDatabase(Connection $database) {
-    $this->database = $database;
-  }
-  function setModuleHandler(ModuleHandlerInterface $module_handler) {
-    $this->moduleHandler = $module_handler;
-  }
-}
diff --git a/core/modules/migrate_drupal/config/migrate.migration.d6_system_cron.yml b/core/modules/migrate_drupal/config/migrate.migration.d6_system_cron.yml
new file mode 100644
index 0000000..1e0e452
--- /dev/null
+++ b/core/modules/migrate_drupal/config/migrate.migration.d6_system_cron.yml
@@ -0,0 +1,13 @@
+id: d6_system_cron
+source:
+  plugin: drupal6_variable
+  variables:
+    - cron_threshold_warning
+    - cron_threshold_error
+    - cron_last
+process:
+  'threshold:warning': cron_threshold_warning
+  'threshold:error': cron_threshold_error
+destination:
+  plugin: d8_config
+  config_name: system.cron
diff --git a/core/modules/migrate_drupal/config/migrate.migration.d6_system_performance.yml b/core/modules/migrate_drupal/config/migrate.migration.d6_system_performance.yml
new file mode 100644
index 0000000..6498d9e
--- /dev/null
+++ b/core/modules/migrate_drupal/config/migrate.migration.d6_system_performance.yml
@@ -0,0 +1,14 @@
+id: d6_system_performance
+source:
+  plugin: drupal6_variable
+  variables:
+    - preprocess_css
+    - preprocess_js
+    - cache_lifetime
+process:
+  'css:preprocess': preprocess_css
+  'js:preprocess': preprocess_js
+  'cache:page:max_age': cache_lifetime
+destination:
+  plugin: d8_config
+  config_name: system.performance
diff --git a/core/modules/migrate_drupal/config/migrate.migration.d6_system_rss.yml b/core/modules/migrate_drupal/config/migrate.migration.d6_system_rss.yml
new file mode 100644
index 0000000..ca8498f
--- /dev/null
+++ b/core/modules/migrate_drupal/config/migrate.migration.d6_system_rss.yml
@@ -0,0 +1,10 @@
+id: d6_system_rss
+source:
+  plugin: drupal6_variable
+  variables:
+    - feed_default_items
+process:
+  'items:limit': feed_default_items
+destination:
+  plugin: d8_config
+  config_name: system.rss
diff --git a/core/modules/migrate_drupal/config/migrate.migration.d6_system_site.yml b/core/modules/migrate_drupal/config/migrate.migration.d6_system_site.yml
new file mode 100644
index 0000000..de88ed4
--- /dev/null
+++ b/core/modules/migrate_drupal/config/migrate.migration.d6_system_site.yml
@@ -0,0 +1,24 @@
+id: d6_system_site
+source:
+  plugin: drupal6_variable
+  variables:
+    - site_name
+    - site_mail
+    - site_slogan
+    - site_frontpage
+    - site_403
+    - site_404
+    - drupal_weight_select_max
+    - admin_compact_mode
+process:
+  name: site_name
+  mail: site_mail
+  slogan: site_slogan
+  'page:front': site_frontpage
+  'page:403': site_403
+  'page:404': site_404
+  weight_select_max: drupal_weight_select_max
+  admin_compact_mode: admin_compact_mode
+destination:
+  plugin: d8_config
+  config_name: system.site
diff --git a/core/modules/migrate_drupal/lib/Drupal/migrate_drupal/Plugin/migrate/source/D6Variable.php b/core/modules/migrate_drupal/lib/Drupal/migrate_drupal/Plugin/migrate/source/D6Variable.php
new file mode 100644
index 0000000..0c66396
--- /dev/null
+++ b/core/modules/migrate_drupal/lib/Drupal/migrate_drupal/Plugin/migrate/source/D6Variable.php
@@ -0,0 +1,59 @@
+<?php
+
+/**
+ * @file
+ * Contains \Drupal\migrate\Plugin\migrate\source\d6\Variable.
+ */
+
+namespace Drupal\migrate_drupal\Plugin\migrate\source;
+
+use Drupal\migrate\Entity\MigrationInterface;
+use Drupal\migrate_drupal\Plugin\migrate\source\d6\Drupal6SqlBase;
+
+/**
+ * Drupal 6 variable source from database.
+ *
+ * @PluginID("drupal6_variable")
+ */
+class D6Variable extends Drupal6SqlBase {
+
+  /**
+   * The variable names to fetch.
+   *
+   * @var array
+   */
+  protected $variables;
+
+  /**
+   * {@inheritdoc}
+   */
+  function __construct(array $configuration, $plugin_id, array $plugin_definition, MigrationInterface $migration) {
+    parent::__construct($configuration, $plugin_id, $plugin_definition, $migration);
+    $this->variables = $this->configuration['variables'];
+  }
+
+  protected function runQuery() {
+    return new \ArrayIterator(array(array_map('unserialize', $this->query()->execute()->fetchAllKeyed())));
+  }
+
+  public function count() {
+    return intval($this->query()->countQuery()->execute()->fetchField() > 0);
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  public function fields() {
+    return drupal_map_assoc($this->variables);
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  function query() {
+    return $this->getDatabase()
+      ->select('variable', 'v')
+      ->fields('v', array('name', 'value'))
+      ->condition('name', $this->variables, 'IN');
+  }
+}
diff --git a/core/modules/migrate_drupal/lib/Drupal/migrate_drupal/Plugin/migrate/source/d6/Drupal6SqlBase.php b/core/modules/migrate_drupal/lib/Drupal/migrate_drupal/Plugin/migrate/source/d6/Drupal6SqlBase.php
new file mode 100644
index 0000000..f83f669
--- /dev/null
+++ b/core/modules/migrate_drupal/lib/Drupal/migrate_drupal/Plugin/migrate/source/d6/Drupal6SqlBase.php
@@ -0,0 +1,82 @@
+<?php
+
+/**
+ * @file
+ * Contains \Drupal\migrate\Plugin\migrate\source\d6\Drupal6SqlBase.
+ */
+
+namespace Drupal\migrate_drupal\Plugin\migrate\source\d6;
+
+use Drupal\migrate\Plugin\migrate\source\SqlBase;
+
+/**
+ * A base source class for Drupal 6 migrate sources.
+ *
+ * Mainly to let children retrieve information from the origin system in an
+ * easier way.
+ */
+abstract class Drupal6SqlBase extends SqlBase {
+
+  /**
+   * Retrieves all system data information from origin system.
+   *
+   * @return array
+   *   List of system table information keyed by type and name.
+   */
+  public function getSystemData() {
+    static $system_data;
+    if (isset($system_data)) {
+      return $system_data;
+    }
+    $results = $this->database
+      ->select('system', 's')
+      ->fields('s')
+      ->execute();
+    foreach ($results as $result) {
+      $system_data[$result['type']][$result['name']] = $result;
+    }
+    return $system_data;
+  }
+
+  /**
+   * Get a module schema_version value in the source installation.
+   *
+   * @param string $module
+   *   Name of module.
+   *
+   * @return mixed
+   *   The current module schema version on the origin system table or FALSE if
+   *   not found.
+   */
+  protected function getModuleSchemaVersion($module) {
+    $system_data = $this->getSystemData();
+    return isset($system_data['module'][$module]['schema_version']) ? $system_data['module'][$module]['schema_version'] : FALSE;
+  }
+
+  /**
+   * Check to see if a given module is enabled in the source installation.
+   *
+   * @param string $module
+   *   Name of module to check.
+   *
+   * @return bool
+   *   TRUE if module is enabled on the origin system, FALSE if not.
+   */
+  protected function moduleExists($module) {
+    return isset($system_data['module'][$module]['status']) ? (bool) $system_data['module'][$module]['status'] : FALSE;
+  }
+
+  protected function variableGet($name, $default) {
+    try {
+      $result = $this->database
+        ->query('SELECT value FROM {variable} WHERE name = :name', array(':name' => $name))
+        ->fetchField();
+    }
+    // The table might not exist.
+    catch (\Exception $e) {
+      $result = FALSE;
+    }
+    return $result !== FALSE ? unserialize($result) : $default;
+  }
+
+}
diff --git a/core/modules/migrate_drupal/lib/Drupal/migrate_drupal/Tests/Dump/Drupal6SystemCron.php b/core/modules/migrate_drupal/lib/Drupal/migrate_drupal/Tests/Dump/Drupal6SystemCron.php
new file mode 100644
index 0000000..6c68424
--- /dev/null
+++ b/core/modules/migrate_drupal/lib/Drupal/migrate_drupal/Tests/Dump/Drupal6SystemCron.php
@@ -0,0 +1,59 @@
+<?php
+
+/**
+ * @file
+ * Contains \Drupal\migrate\Tests\Drupal6SystemCron.
+ */
+
+namespace Drupal\migrate_drupal\Tests\Dump;
+
+use Drupal\Core\Database\Connection;
+
+/**
+ * Database dump for testing system.cron.yml migration.
+ */
+class Drupal6SystemCron {
+
+  /**
+   * Sample database schema and values.
+   *
+   * @param \Drupal\Core\Database\Connection $database
+   *   The database connection.
+   */
+  public static function load(Connection $database) {
+    $database->schema()->createTable('variable', array(
+      'fields' => array(
+        'name' => array(
+          'type' => 'varchar',
+          'length' => 128,
+          'not null' => TRUE,
+          'default' => '',
+        ),
+        'value' => array(
+          'type' => 'blob',
+          'not null' => TRUE,
+          'size' => 'big',
+          'translatable' => TRUE,
+        ),
+      ),
+      'primary key' => array(
+        'name',
+      ),
+      'module' => 'system',
+      'name' => 'variable',
+    ));
+    $database->insert('variable')->fields(array(
+      'name',
+      'value',
+    ))
+    ->values(array(
+      'name' => 'cron_threshold_warning',
+      'value' => 'i:172800;',
+    ))
+    ->values(array(
+      'name' => 'cron_threshold_error',
+      'value' => 'i:1209600;',
+    ))
+    ->execute();
+  }
+}
diff --git a/core/modules/migrate_drupal/lib/Drupal/migrate_drupal/Tests/Dump/Drupal6SystemPerformance.php b/core/modules/migrate_drupal/lib/Drupal/migrate_drupal/Tests/Dump/Drupal6SystemPerformance.php
new file mode 100644
index 0000000..91f1a23
--- /dev/null
+++ b/core/modules/migrate_drupal/lib/Drupal/migrate_drupal/Tests/Dump/Drupal6SystemPerformance.php
@@ -0,0 +1,64 @@
+<?php
+
+/**
+ * @file
+ * Contains \Drupal\migrate\Tests\Drupal6SystemPerformance.
+ */
+
+namespace Drupal\migrate_drupal\Tests\Dump;
+
+use Drupal\Core\Database\Connection;
+
+/**
+ * Database dump for testing system.performance.yml migration.
+ */
+class Drupal6SystemPerformance {
+
+  /**
+   * Sample database schema and values.
+   *
+   * @param \Drupal\Core\Database\Connection $database
+   *   The database connection.
+   */
+  public static function load(Connection $database) {
+    $database->schema()->createTable('variable', array(
+      'fields' => array(
+        'name' => array(
+          'type' => 'varchar',
+          'length' => 128,
+          'not null' => TRUE,
+          'default' => '',
+        ),
+        'value' => array(
+          'type' => 'blob',
+          'not null' => TRUE,
+          'size' => 'big',
+          'translatable' => TRUE,
+        ),
+      ),
+      'primary key' => array(
+        'name',
+      ),
+      'module' => 'system',
+      'name' => 'variable',
+    ));
+    $database->insert('variable')->fields(array(
+      'name',
+      'value',
+    ))
+    ->values(array(
+      'name' => 'preprocess_css',
+      'value' => 'i:0;',
+    ))
+    ->values(array(
+      'name' => 'preprocess_js',
+      'value' => 'i:0;',
+    ))
+    ->values(array(
+      'name' => 'cache_lifetime',
+      'value' => 'i:0;',
+    ))
+    ->execute();
+  }
+
+}
diff --git a/core/modules/migrate_drupal/lib/Drupal/migrate_drupal/Tests/Dump/Drupal6SystemRss.php b/core/modules/migrate_drupal/lib/Drupal/migrate_drupal/Tests/Dump/Drupal6SystemRss.php
new file mode 100644
index 0000000..f6f1cf8
--- /dev/null
+++ b/core/modules/migrate_drupal/lib/Drupal/migrate_drupal/Tests/Dump/Drupal6SystemRss.php
@@ -0,0 +1,55 @@
+<?php
+
+/**
+ * @file
+ * Contains \Drupal\migrate\Tests\Drupal6SystemRss.
+ */
+
+namespace Drupal\migrate_drupal\Tests\Dump;
+
+use Drupal\Core\Database\Connection;
+
+/**
+ * Database dump for testing system.settings.yml migration.
+ */
+class Drupal6SystemRss {
+
+  /**
+   * Sample database schema and values.
+   *
+   * @param \Drupal\Core\Database\Connection $database
+   *   The database connection.
+   */
+  public static function load(Connection $database) {
+    $database->schema()->createTable('variable', array(
+      'fields' => array(
+        'name' => array(
+          'type' => 'varchar',
+          'length' => 128,
+          'not null' => TRUE,
+          'default' => '',
+        ),
+        'value' => array(
+          'type' => 'blob',
+          'not null' => TRUE,
+          'size' => 'big',
+          'translatable' => TRUE,
+        ),
+      ),
+      'primary key' => array(
+        'name',
+      ),
+      'module' => 'system',
+      'name' => 'variable',
+    ));
+    $database->insert('variable')->fields(array(
+      'name',
+      'value',
+    ))
+    ->values(array(
+      'name' => 'feed_default_items',
+      'value' => 'i:10;',
+    ))
+    ->execute();
+  }
+}
diff --git a/core/modules/migrate_drupal/lib/Drupal/migrate_drupal/Tests/Dump/Drupal6SystemSite.php b/core/modules/migrate_drupal/lib/Drupal/migrate_drupal/Tests/Dump/Drupal6SystemSite.php
new file mode 100644
index 0000000..e320417
--- /dev/null
+++ b/core/modules/migrate_drupal/lib/Drupal/migrate_drupal/Tests/Dump/Drupal6SystemSite.php
@@ -0,0 +1,75 @@
+<?php
+
+namespace Drupal\migrate_drupal\Tests\Dump;
+
+use Drupal\Core\Database\Connection;
+
+/**
+ * Database dump for testing system.site.yml migration.
+ */
+class Drupal6SystemSite {
+
+  /**
+   * @param \Drupal\Core\Database\Connection $database
+   */
+  public static function load(Connection $database) {
+    $database->schema()->createTable('variable', array(
+      'fields' => array(
+        'name' => array(
+          'type' => 'varchar',
+          'length' => 128,
+          'not null' => TRUE,
+          'default' => '',
+        ),
+        'value' => array(
+          'type' => 'blob',
+          'not null' => TRUE,
+          'size' => 'big',
+          'translatable' => TRUE,
+        ),
+      ),
+      'primary key' => array(
+        'name',
+      ),
+      'module' => 'system',
+      'name' => 'variable',
+    ));
+    $database->insert('variable')->fields(array(
+      'name',
+      'value',
+    ))
+    ->values(array(
+      'name' => 'site_name',
+      'value' => 's:6:"drupal";',
+    ))
+    ->values(array(
+      'name' => 'site_mail',
+      'value' => 's:17:"admin@example.com";',
+    ))
+    ->values(array(
+      'name' => 'site_slogan',
+      'value' => 's:13:"Migrate rocks";',
+    ))
+    ->values(array(
+      'name' => 'site_frontpage',
+      'value' => 's:12:"anonymous-hp";',
+    ))
+    ->values(array(
+      'name' => 'site_403',
+      'value' => 's:4:"user";',
+    ))
+    ->values(array(
+      'name' => 'site_404',
+      'value' => 's:14:"page-not-found";',
+    ))
+    ->values(array(
+      'name' => 'drupal_weight_select_max',
+      'value' => 'i:99;',
+    ))
+    ->values(array(
+      'name' => 'admin_compact_mode',
+      'value' => 'b:0;',
+    ))
+    ->execute();
+  }
+}
diff --git a/core/modules/migrate_drupal/lib/Drupal/migrate_drupal/Tests/MigrateDrupalTestBase.php b/core/modules/migrate_drupal/lib/Drupal/migrate_drupal/Tests/MigrateDrupalTestBase.php
new file mode 100644
index 0000000..370351c
--- /dev/null
+++ b/core/modules/migrate_drupal/lib/Drupal/migrate_drupal/Tests/MigrateDrupalTestBase.php
@@ -0,0 +1,15 @@
+<?php
+
+/**
+ * @file
+ * Contains \Drupal\migrate_drupal\Tests\MigrateDrupalTestBase.
+ */
+
+namespace Drupal\migrate_drupal\Tests;
+
+use Drupal\migrate\Tests\MigrateTestBase;
+
+class MigrateDrupalTestBase extends MigrateTestBase {
+
+  public static $modules = array('migrate_drupal');
+}
diff --git a/core/modules/migrate_drupal/lib/Drupal/migrate_drupal/Tests/MigrateSystemConfigsTest.php b/core/modules/migrate_drupal/lib/Drupal/migrate_drupal/Tests/MigrateSystemConfigsTest.php
new file mode 100644
index 0000000..c09c390
--- /dev/null
+++ b/core/modules/migrate_drupal/lib/Drupal/migrate_drupal/Tests/MigrateSystemConfigsTest.php
@@ -0,0 +1,92 @@
+<?php
+
+/**
+ * @file
+ * Contains \Drupal\system\Tests\Upgrade\MigrateSystemSiteTest.
+ */
+
+namespace Drupal\migrate_drupal\Tests;
+
+use Drupal\migrate\MigrateMessage;
+use Drupal\migrate\MigrateExecutable;
+
+class MigrateSystemConfigsTest extends MigrateDrupalTestBase {
+
+  /**
+   * {@inheritdoc}
+   */
+  public static function getInfo() {
+    return array(
+      'name'  => 'Migrate variables to system.*.yml',
+      'description'  => 'Upgrade variables to system.*.yml',
+      'group' => 'Migrate Drupal',
+    );
+  }
+
+  function testSystemSite() {
+    $migration = entity_load('migration', 'd6_system_site');
+    $dumps = array(
+      drupal_get_path('module', 'migrate_drupal') . '/lib/Drupal/migrate_drupal/Tests/Dump/Drupal6SystemSite.php',
+    );
+    $this->prepare($migration, $dumps);
+    $executable = new MigrateExecutable($migration, new MigrateMessage);
+    $executable->import();
+    $config = \Drupal::config('system.site');
+    $this->assertIdentical($config->get('name'), 'drupal');
+    $this->assertIdentical($config->get('mail'), 'admin@example.com');
+    $this->assertIdentical($config->get('slogan'), 'Migrate rocks');
+    $this->assertIdentical($config->get('page.front'), 'anonymous-hp');
+    $this->assertIdentical($config->get('page.403'), 'user');
+    $this->assertIdentical($config->get('page.404'), 'page-not-found');
+    $this->assertIdentical($config->get('weight_select_max'), 99);
+    $this->assertIdentical($config->get('admin_compact_mode'), FALSE);
+  }
+
+  /**
+   * Tests migration of system (cron) variables to system.cron.yml.
+   */
+  public function testSystemCron() {
+    $migration = entity_load('migration', 'd6_system_cron');
+    $dumps = array(
+      drupal_get_path('module', 'migrate_drupal') . '/lib/Drupal/migrate_drupal/Tests/Dump/Drupal6SystemCron.php',
+    );
+    $this->prepare($migration, $dumps);
+    $executable = new MigrateExecutable($migration, new MigrateMessage());
+    $executable->import();
+    $config = \Drupal::config('system.cron');
+    $this->assertIdentical($config->get('threshold.warning'), 172800);
+    $this->assertIdentical($config->get('threshold.error'), 1209600);
+  }
+
+  /**
+   * Tests migration of system (rss) variables to system.rss.yml.
+   */
+  public function testSystemRss() {
+    $migration = entity_load('migration', 'd6_system_rss');
+    $dumps = array(
+      drupal_get_path('module', 'migrate_drupal') . '/lib/Drupal/migrate_drupal/Tests/Dump/Drupal6SystemRss.php',
+    );
+    $this->prepare($migration, $dumps);
+    $executable = new MigrateExecutable($migration, new MigrateMessage());
+    $executable->import();
+    $config = \Drupal::config('system.rss');
+    $this->assertIdentical($config->get('items.limit'), 10);
+  }
+
+  /**
+   * Tests migration of system (Performance) variables to system.performance.yml.
+   */
+  public function testSystemPerformance() {
+    $migration = entity_load('migration', 'd6_system_performance');
+    $dumps = array(
+      drupal_get_path('module', 'migrate_drupal') . '/lib/Drupal/migrate_drupal/Tests/Dump/Drupal6SystemPerformance.php',
+    );
+    $this->prepare($migration, $dumps);
+    $executable = new MigrateExecutable($migration, new MigrateMessage());
+    $executable->import();
+    $config = \Drupal::config('system.performance');
+    $this->assertIdentical($config->get('css.preprocess'), 0);
+    $this->assertIdentical($config->get('js.preprocess'), 0);
+    $this->assertIdentical($config->get('cache.page.max_age'), 0);
+  }
+}
diff --git a/core/modules/migrate_drupal/migrate_drupal.info.yml b/core/modules/migrate_drupal/migrate_drupal.info.yml
new file mode 100644
index 0000000..ccd4a50
--- /dev/null
+++ b/core/modules/migrate_drupal/migrate_drupal.info.yml
@@ -0,0 +1,6 @@
+name: Migrate Drupal
+type: module
+description: 'Contains migrations from olders Drupal versions.'
+package: Core
+version: VERSION
+core: 8.x
diff --git a/core/modules/migrate_drupal/migrate_drupal.module b/core/modules/migrate_drupal/migrate_drupal.module
new file mode 100644
index 0000000..e69de29
diff --git a/core/modules/migrate_drupal/tests/Drupal/migrate_drupal/Tests/D6VariableTest.php b/core/modules/migrate_drupal/tests/Drupal/migrate_drupal/Tests/D6VariableTest.php
new file mode 100644
index 0000000..ecc0977
--- /dev/null
+++ b/core/modules/migrate_drupal/tests/Drupal/migrate_drupal/Tests/D6VariableTest.php
@@ -0,0 +1,77 @@
+<?php
+
+/**
+ * @file
+ * Contains \Drupal\migrate\Tests\D6VariableSourceTest.
+ */
+
+namespace Drupal\migrate_drupal\Tests;
+
+use Drupal\migrate\Tests\MigrateSqlSourceTestCase;
+
+/**
+ * @group migrate_drupal
+ * @group Drupal
+ */
+class D6VariableTest extends MigrateSqlSourceTestCase {
+
+  const PLUGIN_CLASS = 'Drupal\migrate_drupal\Plugin\migrate\source\D6Variable';
+
+  protected $migrationConfiguration = array(
+    'id' => 'test',
+    'highwaterProperty' => array('field' => 'test'),
+    'idlist' => array(),
+    'source' => array(
+      'plugin' => 'drupal6_variable',
+      'variables' => array(
+        'foo',
+        'bar',
+      ),
+    ),
+    'sourceIds' => array(),
+    'destinationIds' => array(),
+  );
+
+  protected $mapJoinable = FALSE;
+
+  protected $expectedResults = array(
+    array(
+      'foo' => 1,
+      'bar' => FALSE,
+    ),
+  );
+
+  protected $databaseContents = array(
+    'variable' => array(
+      array('name' => 'foo', 'value' => 'i:1;'),
+      array('name' => 'bar', 'value' => 'b:0;'),
+    ),
+  );
+
+  /**
+   * {@inheritdoc}
+   */
+  public static function getInfo() {
+    return array(
+      'name' => 'D6 variable source functionality',
+      'description' => 'Tests D6 variable source plugin.',
+      'group' => 'Migrate Drupal',
+    );
+  }
+
+}
+
+namespace Drupal\migrate_drupal\Tests\source;
+
+use Drupal\Core\Database\Connection;
+use Drupal\Core\Extension\ModuleHandlerInterface;
+use Drupal\migrate_drupal\Plugin\migrate\source\D6Variable;
+
+class TestD6Variable extends D6Variable {
+  function setDatabase(Connection $database) {
+    $this->database = $database;
+  }
+  function setModuleHandler(ModuleHandlerInterface $module_handler) {
+    $this->moduleHandler = $module_handler;
+  }
+}
