diff --git a/core/modules/block/block.module b/core/modules/block/block.module
index ff804b2..35db096 100644
--- a/core/modules/block/block.module
+++ b/core/modules/block/block.module
@@ -316,7 +316,8 @@ function _block_get_renderable_region($list = array()) {
     !in_array($_SERVER['REQUEST_METHOD'], array('GET', 'HEAD'));
 
   foreach ($list as $key => $block) {
-    $settings = $block->get('settings');
+    $plugin = $block->getPlugin();
+    $settings = $plugin->getConfig();
     if ($not_cacheable || in_array($settings['cache'], array(DRUPAL_NO_CACHE, DRUPAL_CACHE_CUSTOM))) {
       // Non-cached blocks get built immediately.
       if ($block->access()) {
@@ -328,11 +329,11 @@ function _block_get_renderable_region($list = array()) {
       $id = array_pop($key_components);
       $build[$key] = array(
         '#block' => $block,
-        '#weight' => $block->get('weight'),
+        '#weight' => $settings['weight'],
         '#theme_wrappers' => array('block'),
         '#pre_render' => array('_block_get_renderable_block'),
         '#cache' => array(
-          'keys' => array($id, $block->get('module')),
+          'keys' => array($id, $settings['module']),
           'granularity' => $settings['cache'],
           'bin' => 'block',
           'tags' => array('content' => TRUE),
diff --git a/core/modules/block/lib/Drupal/block/BlockBase.php b/core/modules/block/lib/Drupal/block/BlockBase.php
index 9e5bf6c..9f32746 100644
--- a/core/modules/block/lib/Drupal/block/BlockBase.php
+++ b/core/modules/block/lib/Drupal/block/BlockBase.php
@@ -9,7 +9,6 @@
 
 use Drupal\Component\Plugin\PluginBase;
 use Drupal\block\Plugin\Core\Entity\Block;
-use Drupal\Component\Plugin\Discovery\DiscoveryInterface;
 
 /**
  * Defines a base block implementation that most blocks plugins will extend.
@@ -21,22 +20,6 @@
 abstract class BlockBase extends PluginBase implements BlockInterface {
 
   /**
-   * The entity using this plugin.
-   *
-   * @var \Drupal\block\Plugin\Core\Entity\Block
-   */
-  protected $entity;
-
-  /**
-   * Overrides \Drupal\Component\Plugin\PluginBase::__construct().
-   */
-  public function __construct(array $configuration, $plugin_id, DiscoveryInterface $discovery, Block $entity) {
-    parent::__construct($configuration, $plugin_id, $discovery);
-
-    $this->entity = $entity;
-  }
-
-  /**
    * Returns plugin-specific settings for the block.
    *
    * Block plugins only need to override this method if they override the
@@ -143,7 +126,7 @@ public function access() {
     global $user;
 
     // Deny access to disabled blocks.
-    if (!$this->entity->get('status')) {
+    if (!$this->configuration['status']) {
       return FALSE;
     }
 
@@ -151,7 +134,7 @@ public function access() {
     // If a block has no roles associated, it is displayed for every role.
     // For blocks with roles associated, if none of the user's roles matches
     // the settings from this block, access is denied.
-    $visibility = $this->entity->get('visibility');
+    $visibility = $this->configuration['visibility'];
     if (!empty($visibility['role']['roles']) && !array_intersect(array_filter($visibility['role']['roles']), array_keys($user->roles))) {
       // No match.
       return FALSE;
@@ -203,7 +186,7 @@ public function access() {
 
     // Check other modules for block access rules.
     foreach (module_implements('block_access') as $module) {
-      if (module_invoke($module, 'block_access', $this->entity) === FALSE) {
+      if (module_invoke($module, 'block_access', $this) === FALSE) {
         return FALSE;
       }
     }
diff --git a/core/modules/block/lib/Drupal/block/BlockRenderController.php b/core/modules/block/lib/Drupal/block/BlockRenderController.php
index e705310..fb24546 100644
--- a/core/modules/block/lib/Drupal/block/BlockRenderController.php
+++ b/core/modules/block/lib/Drupal/block/BlockRenderController.php
@@ -45,6 +45,7 @@ protected function getBuildDefaults(EntityInterface $entity, $view_mode, $langco
       return array();
     }
 
+    $configuration = $entity->getPlugin()->getConfig();
     return array(
       '#block' => $entity,
       '#weight' => $entity->get('weight'),
@@ -53,7 +54,7 @@ protected function getBuildDefaults(EntityInterface $entity, $view_mode, $langco
         'id' => $entity->get('plugin'),
         'region' => $entity->get('region'),
         'module' => $entity->get('module'),
-        'subject' => check_plain($entity->label()),
+        'subject' => check_plain($configuration['label']),
       ),
     );
   }
diff --git a/core/modules/block/lib/Drupal/block/Plugin/Core/Entity/Block.php b/core/modules/block/lib/Drupal/block/Plugin/Core/Entity/Block.php
index d2bf1a7..20cacc7 100644
--- a/core/modules/block/lib/Drupal/block/Plugin/Core/Entity/Block.php
+++ b/core/modules/block/lib/Drupal/block/Plugin/Core/Entity/Block.php
@@ -123,8 +123,7 @@ public function getPlugin() {
 
       // Create a plugin instance and store its configuration as settings.
       try {
-        $this->instance = drupal_container()->get('plugin.manager.block')->createInstance($this->plugin, $this->settings, $this);
-        $this->settings += $this->instance->getConfig();
+        $this->instance = drupal_container()->get('plugin.manager.block')->createInstance($this->plugin, $this->getExportProperties() + $this->settings);
       }
       catch (PluginException $e) {
         // Ignore blocks belonging to disabled modules, but re-throw valid
diff --git a/core/modules/block/lib/Drupal/block/Plugin/Type/BlockManager.php b/core/modules/block/lib/Drupal/block/Plugin/Type/BlockManager.php
index d5dedb9..228f3db 100644
--- a/core/modules/block/lib/Drupal/block/Plugin/Type/BlockManager.php
+++ b/core/modules/block/lib/Drupal/block/Plugin/Type/BlockManager.php
@@ -35,14 +35,7 @@ public function __construct(array $namespaces) {
     $this->discovery = new DerivativeDiscoveryDecorator($this->discovery);
     $this->discovery = new AlterDecorator($this->discovery, 'block');
     $this->discovery = new CacheDecorator($this->discovery, 'block_plugins:' . language(LANGUAGE_TYPE_INTERFACE)->langcode, 'cache_block', CacheBackendInterface::CACHE_PERMANENT, array('block'));
-  }
-
-  /**
-   * Overrides \Drupal\Component\Plugin\PluginManagerBase::createInstance().
-   */
-  public function createInstance($plugin_id, array $configuration = array(), Block $entity = NULL) {
-    $plugin_class = DefaultFactory::getPluginClass($plugin_id, $this->discovery);
-    return new $plugin_class($configuration, $plugin_id, $this->discovery, $entity);
+    $this->factory = new DefaultFactory($this);
   }
 
 }
diff --git a/core/modules/node/node.module b/core/modules/node/node.module
index 8019ff3..a668c61 100644
--- a/core/modules/node/node.module
+++ b/core/modules/node/node.module
@@ -2029,7 +2029,8 @@ function node_form_block_form_alter(&$form, &$form_state) {
  * if the visibility conditions are not met.
  */
 function node_block_access($block) {
-  $visibility = $block->get('visibility');
+  $configuration = $block->getConfig();
+  $visibility = $configuration['visibility'];
   if (!empty($visibility)) {
     $allowed_types = array();
     $node = menu_get_object();
diff --git a/core/modules/overlay/overlay.module b/core/modules/overlay/overlay.module
index cc29255..f5aebe7 100644
--- a/core/modules/overlay/overlay.module
+++ b/core/modules/overlay/overlay.module
@@ -486,7 +486,8 @@ function overlay_block_access($block) {
   // reason for duplicating effort here is performance; we do not even want
   // these blocks to be built if they are not going to be displayed.
   if ($regions_to_render = overlay_get_regions_to_render()) {
-    if (!in_array($block->get('region'), $regions_to_render)) {
+    $configuration = $block->getConfig;
+    if (!in_array($configuration['region'], $regions_to_render)) {
       return FALSE;
     }
   }
diff --git a/core/modules/views/lib/Drupal/views/Plugin/block/block/ViewsBlock.php b/core/modules/views/lib/Drupal/views/Plugin/block/block/ViewsBlock.php
index 7cac4f6..3729d86 100644
--- a/core/modules/views/lib/Drupal/views/Plugin/block/block/ViewsBlock.php
+++ b/core/modules/views/lib/Drupal/views/Plugin/block/block/ViewsBlock.php
@@ -42,8 +42,8 @@ class ViewsBlock extends BlockBase {
   /**
    * Overrides \Drupal\Component\Plugin\PluginBase::__construct().
    */
-  public function __construct(array $configuration, $plugin_id, DiscoveryInterface $discovery, Block $entity) {
-    parent::__construct($configuration, $plugin_id, $discovery, $entity);
+  public function __construct(array $configuration, $plugin_id, DiscoveryInterface $discovery) {
+    parent::__construct($configuration, $plugin_id, $discovery);
 
     list($plugin, $delta) = explode(':', $this->getPluginId());
     list($name, $this->displayID) = explode('-', $delta, 2);
@@ -77,7 +77,7 @@ public function form($form, &$form_state) {
   public function build() {
     $output = $this->view->executeDisplay($this->displayID);
     // Set the label to the title configured in the view.
-    $this->entity->set('label', filter_xss_admin($this->view->getTitle()));
+    $this->configuration['label'] = filter_xss_admin($this->view->getTitle());
     // Before returning the block output, convert it to a renderable array
     // with contextual links.
     $this->addContextualLinks($output);
