diff --git a/core/modules/block/src/Plugin/migrate/process/d6/BlockRegion.php b/core/modules/block/src/Plugin/migrate/process/d6/BlockRegion.php
index 672645b..372c862 100644
--- a/core/modules/block/src/Plugin/migrate/process/d6/BlockRegion.php
+++ b/core/modules/block/src/Plugin/migrate/process/d6/BlockRegion.php
@@ -7,29 +7,58 @@
 
 namespace Drupal\block\Plugin\migrate\process\d6;
 
+use Drupal\Core\Extension\ThemeHandlerInterface;
+use Drupal\Core\Plugin\ContainerFactoryPluginInterface;
 use Drupal\migrate\MigrateExecutableInterface;
 use Drupal\migrate\ProcessPluginBase;
 use Drupal\migrate\Row;
+use Symfony\Component\DependencyInjection\ContainerInterface;
 
 /**
  * @MigrateProcessPlugin(
  *   id = "d6_block_region"
  * )
  */
-class BlockRegion extends ProcessPluginBase {
+class BlockRegion extends ProcessPluginBase implements ContainerFactoryPluginInterface {
+
   /**
-   * {@inheritdoc}
+   * The theme_handler service.
    *
-   * Set the destination block region, based on the source region and theme as
-   * well as the current destination default theme.
+   * @var \Drupal\Core\Extension\ThemeHandlerInterface
+   */
+  protected $themeHandler;
+
+  public function __construct(array $configuration, $plugin_id, $plugin_definition, ThemeHandlerInterface $theme_handler) {
+    parent::__construct($configuration, $plugin_id, $plugin_definition);
+    $this->themeHandler = $theme_handler;
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  public static function create(ContainerInterface $container, array $configuration, $plugin_id, $plugin_definition) {
+    return new static(
+      $configuration,
+      $plugin_id,
+      $plugin_definition,
+      $container->get('theme_handler')
+    );
+  }
+
+  /**
+   * {@inheritdoc}
    */
   public function transform($value, MigrateExecutableInterface $migrate_executable, Row $row, $destination_property) {
+    // Set the destination region, based on the source region and theme as well
+    // as the current destination default theme.
     list($region, $source_theme, $destination_theme) = $value;
 
-    // Theme is the same on both source and destination, we will assume they
-    // have the same regions.
+    // Theme is the same on both source and destination, so ensure that the
+    // region exists in the destination theme.
     if (strtolower($source_theme) == strtolower($destination_theme)) {
-      return $region;
+      if (array_key_exists($region, $this->themeHandler->getTheme($destination_theme)->info['regions'])) {
+        return $region;
+      }
     }
 
     // If the source and destination theme are different, try to use the
diff --git a/core/modules/block/tests/src/Unit/Plugin/migrate/process/BlockRegionTest.php b/core/modules/block/tests/src/Unit/Plugin/migrate/process/BlockRegionTest.php
new file mode 100644
index 0000000..d284ac5
--- /dev/null
+++ b/core/modules/block/tests/src/Unit/Plugin/migrate/process/BlockRegionTest.php
@@ -0,0 +1,82 @@
+<?php
+
+/**
+ * @file
+ * Contains \Drupal\Tests\block\Unit\migrate\process\BlockRegionTest.
+ */
+
+namespace Drupal\Tests\block\Unit\migrate\process;
+
+use Drupal\block\Plugin\migrate\process\d6\BlockRegion;
+use Drupal\Core\Extension\ThemeHandlerInterface;
+use Drupal\migrate\MigrateExecutableInterface;
+use Drupal\migrate\Row;
+use Drupal\Tests\UnitTestCase;
+
+/**
+ * @coversDefaultClass \Drupal\block\Plugin\migrate\process\d6\BlockRegion
+ * @group block
+ */
+class BlockRegionTest extends UnitTestCase {
+
+  /**
+   * Theme handler prophecy.
+   */
+  protected $themeHandler;
+
+  public function setUp() {
+    $this->themeHandler = $this->prophesize(ThemeHandlerInterface::class);
+
+    $theme = new \stdClass();
+    $theme->info = array(
+      'regions' => array(
+        'triptych_first' => 'Triptych first',
+        'triptych_second' => 'Triptych second',
+        'triptych_third' => 'Triptych third',
+      ),
+    );
+    $this->themeHandler->getTheme('bartik')->willReturn($theme);
+  }
+
+  /**
+   * Transforms a value through the block_region plugin.
+   *
+   * @param array $value
+   *   The value to transform.
+   * @param \Drupal\migrate\Row|NULL $row
+   *   (optional) The mocked row.
+   *
+   * @return array|string
+   *   The transformed value.
+   */
+  protected function transform(array $value, Row $row = NULL) {
+    $executable = $this->prophesize(MigrateExecutableInterface::class)->reveal();
+    if (empty($row)) {
+      $row = $this->prophesize(Row::class)->reveal();
+    }
+
+    $plugin = new BlockRegion(['region_map' => []], 'block_region', [], $this->themeHandler->reveal());
+    return $plugin->transform($value, $executable, $row, 'foo');
+  }
+
+  /**
+   * If the source and destination themes are identical, the region should only
+   * be passed through if it actually exists in the destination theme.
+   *
+   * @covers ::transform
+   */
+  public function testTransformSameThemeRegionExists() {
+    $this->assertSame('triptych_second', $this->transform(['triptych_second', 'bartik', 'bartik']));
+  }
+
+  /**
+   * If the source and destination themes are identical, the region should be
+   * changed to 'content' if it doesn't exist in the destination theme.
+   *
+   * @covers ::transform
+   */
+  public function testTransformSameThemeRegionNotExists() {
+    $this->assertSame('content', $this->transform(['footer', 'bartik', 'bartik']));
+  }
+
+}
