diff --git a/core/modules/migrate/config/schema/migrate.destination.schema.yml b/core/modules/migrate/config/schema/migrate.destination.schema.yml
index b295741..8945f7a 100644
--- a/core/modules/migrate/config/schema/migrate.destination.schema.yml
+++ b/core/modules/migrate/config/schema/migrate.destination.schema.yml
@@ -16,3 +16,11 @@ migrate.destination.config:
     config_name:
       type: string
       label: 'Configuration name'
+
+migrate.destination.i18n_config:
+  type: migrate_destination
+  label: 'Config'
+  mapping:
+    config_name:
+      type: string
+      label: 'Configuration name'
diff --git a/core/modules/migrate/src/Plugin/migrate/destination/i18nConfig.php b/core/modules/migrate/src/Plugin/migrate/destination/i18nConfig.php
new file mode 100644
index 0000000..333d952
--- /dev/null
+++ b/core/modules/migrate/src/Plugin/migrate/destination/i18nConfig.php
@@ -0,0 +1,124 @@
+<?php
+
+/**
+ * @file
+ * Contains \Drupal\migrate\Plugin\migrate\destination\i18nConfig.
+ *
+ * Provides Configuration Management destination plugin.
+ */
+
+namespace Drupal\migrate\Plugin\migrate\destination;
+
+use Drupal\Component\Plugin\DependentPluginInterface;
+use Drupal\Core\Config\ConfigFactoryInterface;
+use Drupal\Core\Entity\DependencyTrait;
+use Drupal\Core\Plugin\ContainerFactoryPluginInterface;
+use Drupal\migrate\Entity\MigrationInterface;
+use Drupal\migrate\Row;
+use Symfony\Component\DependencyInjection\ContainerInterface;
+use Drupal\language\ConfigurableLanguageManager;
+
+/**
+ * Persist data to the config system.
+ *
+ * When a property is NULL, the default is used unless the configuration option
+ * 'store null' is set to TRUE.
+ *
+ * @MigrateDestination(
+ *   id = "i18n_config"
+ * )
+ */
+class i18nConfig extends DestinationBase implements ContainerFactoryPluginInterface, DependentPluginInterface {
+  use DependencyTrait;
+
+  /**
+   * The config object.
+   *
+   * @var \Drupal\Core\Config\Config
+   */
+  protected $config_translation;
+
+  /**
+   * The language manager.
+   *
+   * @var \Drupal\language\ConfigurableLanguageManager
+   */
+  protected $language_manager;
+
+  /**
+   * Constructs a Config destination object.
+   *
+   * @param array $configuration
+   *   A configuration array containing information about the plugin instance.
+   * @param string $plugin_id
+   *   The plugin ID for the plugin instance.
+   * @param mixed $plugin_definition
+   *   The plugin implementation definition.
+   * @param \Drupal\migrate\Entity\MigrationInterface $migration
+   *   The migration entity.
+   * @param \Drupal\Core\Config\ConfigFactoryInterface $config_factory
+   *   The configuration factory.
+   * @param \Drupal\language\ConfigurableLanguageManager $language_manager
+   *   The language manager.
+   */
+  public function __construct(array $configuration, $plugin_id, $plugin_definition, MigrationInterface $migration, ConfigFactoryInterface $config_factory, ConfigurableLanguageManager $language_manager) {
+    parent::__construct($configuration, $plugin_id, $plugin_definition, $migration);
+    $this->config_translation = $config_factory->getEditable($configuration['config_name']);
+    $this->language_manager = $language_manager;
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  public static function create(ContainerInterface $container, array $configuration, $plugin_id, $plugin_definition, MigrationInterface $migration = NULL) {
+    return new static(
+      $configuration,
+      $plugin_id,
+      $plugin_definition,
+      $migration,
+      $container->get('config.factory'),
+      $container->get('language_manager')
+    );
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  public function import(Row $row, array $old_destination_id_values = array()) {
+    foreach ($row->getRawDestination() as $property => $lang_array) {
+      foreach ($lang_array as $langcode => $value) {
+        if (isset($value) || !empty($this->configuration['store null'])) {
+          $this->config_translation = $this->language_manager->getLanguageConfigOverride($langcode, $this->configuration['config_name']);
+          $this->config_translation->set(str_replace(Row::PROPERTY_SEPARATOR, '.', $property), $value);
+        }
+        $this->config_translation->save();
+      }
+    }
+    return [$this->config_translation->getName()];
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  public function fields(MigrationInterface $migration = NULL) {
+    // @todo Dynamically fetch fields using Config Schema API.
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  public function getIds() {
+    $ids['config_name']['type'] = 'string';
+    return $ids;
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  public function calculateDependencies() {
+    $provider = explode('.', $this->config_translation->getName(), 2)[0];
+    $this->addDependency('module', $provider);
+    return $this->dependencies;
+  }
+
+}
diff --git a/core/modules/migrate_drupal/config/schema/migrate_drupal.source.schema.yml b/core/modules/migrate_drupal/config/schema/migrate_drupal.source.schema.yml
index 6152f9e..96f5e65 100644
--- a/core/modules/migrate_drupal/config/schema/migrate_drupal.source.schema.yml
+++ b/core/modules/migrate_drupal/config/schema/migrate_drupal.source.schema.yml
@@ -151,3 +151,42 @@ migrate_entity_constant:
 migrate.source.md_empty:
   type: migrate.source.empty
   label: 'Empty source for migrate_drupal migrations'
+
+migrate.source.i18n_variable:
+  type: migrate_source_sql
+  label: 'i18n Variable'
+  mapping:
+    variables:
+      type: sequence
+      label: 'Variables'
+      sequence:
+        type: string
+        label: 'Variable'
+    constants:
+      type: mapping
+      label: 'Constants'
+      mapping:
+        entity_type:
+          type: string
+          label: 'Entity type'
+        id:
+          type: string
+          label: 'ID'
+        label:
+          type: label
+          label: 'Label'
+        description:
+          type: text
+          label: 'Description'
+        path:
+          type: string
+          label: 'Path'
+        plugin:
+          type: string
+          label: 'Plugin'
+        status:
+          type: boolean
+          label: 'Status'
+        slash:
+          type: string
+          label: 'Slash'
diff --git a/core/modules/migrate_drupal/src/Plugin/migrate/source/d6/i18nVariable.php b/core/modules/migrate_drupal/src/Plugin/migrate/source/d6/i18nVariable.php
new file mode 100644
index 0000000..4b4c721
--- /dev/null
+++ b/core/modules/migrate_drupal/src/Plugin/migrate/source/d6/i18nVariable.php
@@ -0,0 +1,103 @@
+<?php
+
+/**
+ * @file
+ * Contains \Drupal\migrate_drupal\Plugin\migrate\source\d6\i18nVariable.
+ */
+
+namespace Drupal\migrate_drupal\Plugin\migrate\source\d6;
+
+use Drupal\Core\Entity\EntityManagerInterface;
+use Drupal\Core\State\StateInterface;
+use Drupal\migrate\Entity\MigrationInterface;
+use Drupal\migrate_drupal\Plugin\migrate\source\DrupalSqlBase;
+
+/**
+ * Drupal variable source from database.
+ *
+ * This source class always returns a single row and as such is not a good
+ * example for any normal source class returning multiple rows.
+ *
+ * @MigrateSource(
+ *   id = "i18n_variable"
+ * )
+ */
+class i18nVariable extends DrupalSqlBase {
+
+  /**
+   * The variable names to fetch.
+   *
+   * @var array
+   */
+  protected $variables;
+
+  /**
+   * {@inheritdoc}
+   */
+  public function __construct(array $configuration, $plugin_id, $plugin_definition, MigrationInterface $migration, StateInterface $state, EntityManagerInterface $entity_manager) {
+    parent::__construct($configuration, $plugin_id, $plugin_definition, $migration, $state, $entity_manager);
+    $this->variables = $this->configuration['variables'];
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+
+  protected function initializeIterator() {
+    return new \ArrayIterator(array($this->values()));
+  }
+
+  /**
+   * Return the values of the variables specified in the plugin configuration.
+   *
+   * @return array
+   *   An associative array where the keys are the variables specified in the
+   *   plugin configuration and the values are an assiociative array of
+   *   langauge and the values found in the source.
+   */
+
+  protected function values() {
+    // Create an ID field so we can record migration in the map table.
+    // Arbitrarily, use the first variable name.
+    $values['id'] = reset($this->variables);
+    $results = $this->prepareQuery()->execute();
+    $x = [];
+    foreach ($results->fetchAll() as $result) {
+      $x[$result->name][$result->language] = unserialize($result->value);
+    }
+   return $values + $x;
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  public function count() {
+    return intval($this->query()->countQuery()->execute()->fetchField() > 0);
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  public function fields() {
+    return array_combine($this->variables, $this->variables);
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  public function query() {
+    return $this->getDatabase()
+      ->select('i18n_variable', 'v')
+      ->fields('v')
+      ->condition('name', $this->variables, 'IN');
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  public function getIds() {
+    $ids['id']['type'] = 'string';
+    return $ids;
+  }
+
+}
diff --git a/core/modules/migrate_drupal/tests/src/Unit/source/d6/i18nVariableTest.php b/core/modules/migrate_drupal/tests/src/Unit/source/d6/i18nVariableTest.php
new file mode 100644
index 0000000..2476505
--- /dev/null
+++ b/core/modules/migrate_drupal/tests/src/Unit/source/d6/i18nVariableTest.php
@@ -0,0 +1,67 @@
+<?php
+
+/**
+ * @file
+ * Contains \Drupal\Tests\migrate_drupal\Unit\source\d6\i18nVariableTest.
+ */
+
+namespace Drupal\Tests\migrate_drupal\Unit\source\d6;
+
+use Drupal\Tests\migrate\Unit\MigrateSqlSourceTestCase;
+
+/**
+ * Tests the variable source plugin.
+ *
+ * @group migrate_drupal
+ */
+class i18nVariableTest extends MigrateSqlSourceTestCase {
+
+  // The plugin system is not working during unit testing so the source plugin
+  // class needs to be manually specified.
+  const PLUGIN_CLASS = 'Drupal\migrate_drupal\Plugin\migrate\source\d6\i18nVariable';
+
+  /**
+   * Define bare minimum migration configuration.
+   */
+  protected $migrationConfiguration = [
+    'id' => 'test',
+    'highWaterProperty' => array('field' => 'test'),
+    'source' => [
+      'plugin' => 'i18n_variable',
+      'variables' => [
+        'site_slogan',
+        'site_name',
+      ],
+    ],
+  ];
+
+  /**
+   * Expected results from the source.
+   */
+  protected $expectedResults = [
+    [
+      'id' => 'site_slogan',
+      'site_slogan' => [
+        'fr' => 'Migrate est génial',
+        'mi' => 'Ko whakamataku heke',
+      ],
+      'site_name' => [
+        'fr' => 'nom de site',
+        'mi' => 'ingoa_pae',
+      ],
+    ]
+  ];
+
+  /**
+   * Database contents for tests.
+   */
+  protected $databaseContents = [
+    'i18n_variable' => [
+      array('name' => 'site_slogan', 'language' => 'mi', 'value' => 's:19:"Ko whakamataku heke";'),
+      array('name' => 'site_name', 'language' => 'mi', 'value' => 's:9:"ingoa_pae";'),
+      array('name' => 'site_slogan', 'language' => 'fr', 'value' => 's:19:"Migrate est génial";'),
+      array('name' => 'site_name', 'language' => 'fr', 'value' => 's:11:"nom de site";'),
+    ],
+  ];
+
+}
