diff --git a/core/modules/block/lib/Drupal/block/BlockBase.php b/core/modules/block/lib/Drupal/block/BlockBase.php
index 48e469b..d278663 100644
--- a/core/modules/block/lib/Drupal/block/BlockBase.php
+++ b/core/modules/block/lib/Drupal/block/BlockBase.php
@@ -108,6 +108,10 @@ public function buildConfigurationForm(array $form, array &$form_state) {
       '#default_value' => ($this->configuration['label_display'] === BlockInterface::BLOCK_LABEL_VISIBLE),
       '#return_value' => BlockInterface::BLOCK_LABEL_VISIBLE,
     );
+    $form['cache'] = array(
+      '#type' => 'value',
+      '#value' => $this->configuration['cache'],
+    );
 
     // Add plugin-specific settings for this block type.
     $form += $this->blockForm($form, $form_state);
diff --git a/core/modules/block/lib/Drupal/block/Entity/Block.php b/core/modules/block/lib/Drupal/block/Entity/Block.php
index 9437e77..84cfdb4 100644
--- a/core/modules/block/lib/Drupal/block/Entity/Block.php
+++ b/core/modules/block/lib/Drupal/block/Entity/Block.php
@@ -158,6 +158,17 @@ public function preSave(EntityStorageControllerInterface $storage_controller) {
   }
 
   /**
+   * {@inheritdoc}
+   */
+  public function set($property_name, $value) {
+    if ($property_name == 'settings') {
+      $this->getPlugin()->setConfiguration($value);
+    }
+
+    parent::set($property_name, $value);
+  }
+
+  /**
    * Sorts active blocks by weight; sorts inactive blocks by name.
    */
   public static function sort($a, $b) {
diff --git a/core/modules/block/lib/Drupal/block/Tests/BlockImportTest.php b/core/modules/block/lib/Drupal/block/Tests/BlockImportTest.php
new file mode 100644
index 0000000..35b543c
--- /dev/null
+++ b/core/modules/block/lib/Drupal/block/Tests/BlockImportTest.php
@@ -0,0 +1,52 @@
+<?php
+
+/**
+ * @file
+ * Contains \Drupal\block\Tests\BlockImportTest.
+ */
+
+namespace Drupal\block\Tests;
+
+use Drupal\system\Tests\Entity\ConfigEntityImportTestBase;
+
+/**
+ * Tests block importing.
+ */
+class BlockImportTest extends ConfigEntityImportTestBase {
+
+  /**
+   * Modules to enable.
+   *
+   * @var array
+   */
+  public static $modules = array('block');
+
+  /**
+   * {@inheritdoc}
+   */
+  public static function getInfo() {
+    return array(
+      'name' => 'Block import',
+      'description' => 'Tests importing blocks.',
+      'group' => 'Block',
+    );
+  }
+
+  /**
+   * Tests updating a block during import.
+   */
+  public function testBlockUpdate() {
+    // Create a test block with a known label.
+    $name = 'block.block.apple';
+    $this->drupalPlaceBlock('system_powered_by_block', array(
+      'id' => 'apple',
+      'label' => 'Red Delicious',
+    ));
+
+    // Read the existing data, and prepare an altered version in staging.
+    $custom_data = $original_data = $this->container->get('config.storage')->read($name);
+    $custom_data['settings']['label'] = 'Granny Smith';
+    $this->assertConfigUpdateImport($name, $original_data, $custom_data);
+  }
+
+}
diff --git a/core/modules/block/lib/Drupal/block/Tests/BlockInterfaceTest.php b/core/modules/block/lib/Drupal/block/Tests/BlockInterfaceTest.php
index 3f22caa..a694b4e 100644
--- a/core/modules/block/lib/Drupal/block/Tests/BlockInterfaceTest.php
+++ b/core/modules/block/lib/Drupal/block/Tests/BlockInterfaceTest.php
@@ -83,6 +83,10 @@ public function testBlockInterface() {
         '#default_value' => TRUE,
         '#return_value' => 'visible',
       ),
+      'cache' => array(
+        '#type' => 'value',
+        '#value' => DRUPAL_NO_CACHE,
+      ),
       'display_message' => array(
         '#type' => 'textfield',
         '#title' => t('Display message'),
diff --git a/core/modules/filter/lib/Drupal/filter/Plugin/Filter/FilterHtml.php b/core/modules/filter/lib/Drupal/filter/Plugin/Filter/FilterHtml.php
index a49f5f4..a7c73c4 100644
--- a/core/modules/filter/lib/Drupal/filter/Plugin/Filter/FilterHtml.php
+++ b/core/modules/filter/lib/Drupal/filter/Plugin/Filter/FilterHtml.php
@@ -18,8 +18,8 @@
  *   type = Drupal\filter\Plugin\FilterInterface::TYPE_HTML_RESTRICTOR,
  *   settings = {
  *     "allowed_html" = "<a> <em> <strong> <cite> <blockquote> <code> <ul> <ol> <li> <dl> <dt> <dd> <h4> <h5> <h6>",
- *     "filter_html_help" = 1,
- *     "filter_html_nofollow" = 0
+ *     "filter_html_help" = TRUE,
+ *     "filter_html_nofollow" = FALSE
  *   },
  *   weight = -10
  * )
diff --git a/core/modules/filter/lib/Drupal/filter/Tests/FilterFormatImportTest.php b/core/modules/filter/lib/Drupal/filter/Tests/FilterFormatImportTest.php
new file mode 100644
index 0000000..78cd410
--- /dev/null
+++ b/core/modules/filter/lib/Drupal/filter/Tests/FilterFormatImportTest.php
@@ -0,0 +1,48 @@
+<?php
+
+/**
+ * @file
+ * Contains \Drupal\filter\Tests\FilterFormatImportTest.
+ */
+
+namespace Drupal\filter\Tests;
+
+use Drupal\system\Tests\Entity\ConfigEntityImportTestBase;
+
+/**
+ * Tests filter format importing.
+ */
+class FilterFormatImportTest extends ConfigEntityImportTestBase {
+
+  /**
+   * Modules to enable.
+   *
+   * @var array
+   */
+  public static $modules = array('filter');
+
+  /**
+   * {@inheritdoc}
+   */
+  public static function getInfo() {
+    return array(
+      'name' => 'Filter format import',
+      'description' => 'Tests importing filter formats.',
+      'group' => 'Filter',
+    );
+  }
+
+  /**
+   * Tests updating a filter format during import.
+   */
+  public function testFilterFormatUpdate() {
+    // Create a test filter format with a known label.
+    $name = 'filter.format.plain_text';
+
+    // Read the existing data, and prepare an altered version in staging.
+    $custom_data = $original_data = $this->container->get('config.storage')->read($name);
+    $custom_data['filters']['filter_html_escape']['weight'] = 100;
+    $this->assertConfigUpdateImport($name, $original_data, $custom_data);
+  }
+
+}
diff --git a/core/modules/image/lib/Drupal/image/Tests/ImageStyleImportTest.php b/core/modules/image/lib/Drupal/image/Tests/ImageStyleImportTest.php
new file mode 100644
index 0000000..c839096
--- /dev/null
+++ b/core/modules/image/lib/Drupal/image/Tests/ImageStyleImportTest.php
@@ -0,0 +1,50 @@
+<?php
+
+/**
+ * @file
+ * Contains \Drupal\image\Tests\ImageStyleImportTest.
+ */
+
+namespace Drupal\image\Tests;
+
+use Drupal\system\Tests\Entity\ConfigEntityImportTestBase;
+
+/**
+ * Tests importing image styles.
+ */
+class ImageStyleImportTest extends ConfigEntityImportTestBase {
+
+  /**
+   * Modules to enable.
+   *
+   * @var array
+   */
+  public static $modules = array('image');
+
+  /**
+   * {@inheritdoc}
+   */
+  public static function getInfo() {
+    return array(
+      'name' => 'Image style import',
+      'description' => 'Tests importing image styles.',
+      'group' => 'Image',
+    );
+  }
+
+  /**
+   * Tests updating an image style during import.
+   */
+  public function testImageStyleUpdate() {
+    // Create a test image style with a known label.
+    $name = 'image.style.thumbnail';
+
+    // Read the existing data, and prepare an altered version in staging.
+    $custom_data = $original_data = $this->container->get('config.storage')->read($name);
+    $effect_name = key($original_data['effects']);
+
+    $custom_data['effects'][$effect_name]['data']['upscale'] = FALSE;
+    $this->assertConfigUpdateImport($name, $original_data, $custom_data);
+  }
+
+}
diff --git a/core/modules/search/lib/Drupal/search/Entity/SearchPage.php b/core/modules/search/lib/Drupal/search/Entity/SearchPage.php
index c640abe..1f379f5 100644
--- a/core/modules/search/lib/Drupal/search/Entity/SearchPage.php
+++ b/core/modules/search/lib/Drupal/search/Entity/SearchPage.php
@@ -207,6 +207,21 @@ public function preSave(EntityStorageControllerInterface $storage_controller) {
   /**
    * {@inheritdoc}
    */
+  public function set($property_name, $value) {
+    if ($property_name == 'configuration') {
+      // If this plugin has any configuration, ensure that it is set.
+      $plugin = $this->getPlugin();
+      if ($plugin instanceof ConfigurablePluginInterface) {
+        $plugin->setConfiguration($value);
+      }
+    }
+
+    parent::set($property_name, $value);
+  }
+
+  /**
+   * {@inheritdoc}
+   */
   public function postSave(EntityStorageControllerInterface $storage_controller, $update = TRUE) {
     parent::postSave($storage_controller, $update);
     $this->routeBuilder()->setRebuildNeeded();
diff --git a/core/modules/search/lib/Drupal/search/Tests/SearchPageImportTest.php b/core/modules/search/lib/Drupal/search/Tests/SearchPageImportTest.php
new file mode 100644
index 0000000..2cdb3b4
--- /dev/null
+++ b/core/modules/search/lib/Drupal/search/Tests/SearchPageImportTest.php
@@ -0,0 +1,52 @@
+<?php
+
+/**
+ * @file
+ * Contains \Drupal\search\Tests\SearchPageImportTest.
+ */
+
+namespace Drupal\search\Tests;
+
+use Drupal\system\Tests\Entity\ConfigEntityImportTestBase;
+
+/**
+ * Tests importing search pages.
+ */
+class SearchPageImportTest extends ConfigEntityImportTestBase {
+
+  /**
+   * Modules to enable.
+   *
+   * @var array
+   */
+  public static $modules = array('search', 'search_extra_type');
+
+  /**
+   * {@inheritdoc}
+   */
+  public static function getInfo() {
+    return array(
+      'name' => 'Search page import',
+      'description' => 'Tests importing search pages.',
+      'group' => 'Search',
+    );
+  }
+
+  /**
+   * Tests updating a search page during import.
+   */
+  public function testSearchPageUpdate() {
+    // Create a test search page with a known label.
+    $name = 'search.page.apple';
+    entity_create('search_page', array(
+      'id' => 'apple',
+      'plugin' => 'search_extra_type_search',
+    ))->save();
+
+    // Read the existing data, and prepare an altered version in staging.
+    $custom_data = $original_data = $this->container->get('config.storage')->read($name);
+    $custom_data['configuration']['boost'] = 'asdf';
+    $this->assertConfigUpdateImport($name, $original_data, $custom_data);
+  }
+
+}
diff --git a/core/modules/system/lib/Drupal/system/Entity/Action.php b/core/modules/system/lib/Drupal/system/Entity/Action.php
index 7df6352..c14479a 100644
--- a/core/modules/system/lib/Drupal/system/Entity/Action.php
+++ b/core/modules/system/lib/Drupal/system/Entity/Action.php
@@ -165,11 +165,24 @@ public function getExportProperties() {
   public function preSave(EntityStorageControllerInterface $storage_controller) {
     parent::preSave($storage_controller);
 
-    $plugin = $this->getPlugin();
     // If this plugin has any configuration, ensure that it is set.
-    if ($plugin instanceof ConfigurablePluginInterface) {
-      $this->set('configuration', $plugin->getConfiguration());
+    if ($this->isConfigurable()) {
+      $this->set('configuration', $this->getPlugin()->getConfiguration());
     }
   }
 
+  /**
+   * {@inheritdoc}
+   */
+  public function set($property_name, $value) {
+    if ($property_name == 'configuration') {
+      // If this plugin has any configuration, ensure that it is set.
+      if ($this->isConfigurable()) {
+        $this->getPlugin()->setConfiguration($value);
+      }
+    }
+
+    parent::set($property_name, $value);
+  }
+
 }
diff --git a/core/modules/system/lib/Drupal/system/Tests/Action/ActionImportTest.php b/core/modules/system/lib/Drupal/system/Tests/Action/ActionImportTest.php
new file mode 100644
index 0000000..e6ad0e0
--- /dev/null
+++ b/core/modules/system/lib/Drupal/system/Tests/Action/ActionImportTest.php
@@ -0,0 +1,52 @@
+<?php
+
+/**
+ * @file
+ * Contains \Drupal\system\Tests\Action\ActionImportTest.
+ */
+
+namespace Drupal\system\Tests\Action;
+
+use Drupal\system\Tests\Entity\ConfigEntityImportTestBase;
+
+/**
+ * Tests importing actions.
+ */
+class ActionImportTest extends ConfigEntityImportTestBase {
+
+  /**
+   * Modules to enable.
+   *
+   * @var array
+   */
+  public static $modules = array('action');
+
+  /**
+   * {@inheritdoc}
+   */
+  public static function getInfo() {
+    return array(
+      'name' => 'Action import',
+      'description' => 'Tests importing actions.',
+      'group' => 'Action',
+    );
+  }
+
+  /**
+   * Tests updating a action during import.
+   */
+  public function testActionUpdate() {
+    // Create a test action with a known label.
+    $name = 'system.action.apple';
+    entity_create('action', array(
+      'id' => 'apple',
+      'plugin' => 'action_message_action',
+    ))->save();
+
+    // Read the existing data, and prepare an altered version in staging.
+    $custom_data = $original_data = $this->container->get('config.storage')->read($name);
+    $custom_data['configuration']['message'] = 'Granny Smith';
+    $this->assertConfigUpdateImport($name, $original_data, $custom_data);
+  }
+
+}
diff --git a/core/modules/system/lib/Drupal/system/Tests/Entity/ConfigEntityImportTestBase.php b/core/modules/system/lib/Drupal/system/Tests/Entity/ConfigEntityImportTestBase.php
new file mode 100644
index 0000000..5deb143
--- /dev/null
+++ b/core/modules/system/lib/Drupal/system/Tests/Entity/ConfigEntityImportTestBase.php
@@ -0,0 +1,52 @@
+<?php
+
+/**
+ * @file
+ * Contains \Drupal\system\Tests\Entity\ConfigEntityImportTestBase.
+ */
+
+namespace Drupal\system\Tests\Entity;
+
+use Drupal\simpletest\WebTestBase;
+
+/**
+ * Provides a base class for testing importing config entities.
+ */
+abstract class ConfigEntityImportTestBase extends WebTestBase {
+
+  /**
+   * {@inheritdoc}
+   */
+  protected function setUp() {
+    parent::setUp();
+
+    $this->copyConfig($this->container->get('config.storage'), $this->container->get('config.storage.staging'));
+  }
+
+  /**
+   * Asserts that config entities are updated during import.
+   *
+   * @param string $name
+   *   The name of the config object.
+   * @param array $original_data
+   *   The original data stored in the config object.
+   * @param array $custom_data
+   *   The new data to store in the config object.
+   */
+  public function assertConfigUpdateImport($name, $original_data, $custom_data) {
+    $this->container->get('config.storage.staging')->write($name, $custom_data);
+
+    // Verify the active configuration still returns the default values.
+    $config = $this->container->get('config.factory')->get($name);
+    $this->assertIdentical($config->get(), $original_data);
+
+    // Import.
+    $this->configImporter()->import();
+
+    // Verify the values were updated.
+    $this->container->get('config.factory')->reset($name);
+    $config = $this->container->get('config.factory')->get($name);
+    $this->assertIdentical($config->get(), $custom_data);
+  }
+
+}
