diff --git a/core/modules/block/block.api.php b/core/modules/block/block.api.php
index 954402a..85707c1 100644
--- a/core/modules/block/block.api.php
+++ b/core/modules/block/block.api.php
@@ -154,8 +154,8 @@ function hook_block_view_BASE_BLOCK_ID_alter(array &$build, \Drupal\Core\Block\B
 function hook_block_access(\Drupal\block\Entity\Block $block, $operation, \Drupal\user\Entity\User $account, $langcode) {
   // Example code that would prevent displaying the 'Powered by Drupal' block in
   // a region different than the footer.
-  if ($operation == 'view' && $block->get('plugin') == 'system_powered_by_block') {
-    return AccessResult::forbiddenIf($block->get('region') != 'footer')->cacheUntilEntityChanges($block);
+  if ($operation == 'view' && $block->getPlugin() == 'system_powered_by_block') {
+    return AccessResult::forbiddenIf($block->getRegion() != 'footer')->cacheUntilEntityChanges($block);
   }
 
   // No opinion.
diff --git a/core/modules/block/block.module b/core/modules/block/block.module
index 39e15ea..d16536d 100644
--- a/core/modules/block/block.module
+++ b/core/modules/block/block.module
@@ -124,7 +124,7 @@ function _block_rehash($theme = NULL) {
       unset($blocks[$block_id]);
       continue;
     }
-    $region = $block->get('region');
+    $region = $block->getRegion();
     $status = $block->status();
     // Disable blocks in invalid regions.
     if (!empty($region) && $region != BlockInterface::BLOCK_REGION_NONE && !isset($regions[$region]) && $status) {
@@ -135,7 +135,7 @@ function _block_rehash($theme = NULL) {
     }
     // Set region to none if not enabled.
     if (!$status && $region != BlockInterface::BLOCK_REGION_NONE) {
-      $block->set('region', BlockInterface::BLOCK_REGION_NONE);
+      $block->setRegion(BlockInterface::BLOCK_REGION_NONE);
       $block->save();
     }
   }
@@ -185,8 +185,8 @@ function block_theme_initialize($theme) {
       $block->set('theme', $theme);
       // If the region isn't supported by the theme, assign the block to the
       // theme's default region.
-      if (!isset($regions[$block->get('region')])) {
-        $block->set('region', system_default_region($theme));
+      if (!isset($regions[$block->getRegion()])) {
+        $block->setRegion(system_default_region($theme));
       }
       $block->save();
     }
@@ -303,7 +303,7 @@ function block_user_role_delete($role) {
 function block_menu_delete(Menu $menu) {
   if (!$menu->isSyncing()) {
     foreach (Block::loadMultiple() as $block) {
-      if ($block->get('plugin') == 'system_menu_block:' . $menu->id()) {
+      if ($block->getPlugin() == 'system_menu_block:' . $menu->id()) {
         $block->delete();
       }
     }
diff --git a/core/modules/block/src/BlockForm.php b/core/modules/block/src/BlockForm.php
index 73e7ea4..6e45c17 100644
--- a/core/modules/block/src/BlockForm.php
+++ b/core/modules/block/src/BlockForm.php
@@ -112,7 +112,7 @@ public function form(array $form, FormStateInterface $form_state) {
       '#type' => 'select',
       '#title' => $this->t('Region'),
       '#description' => $this->t('Select the region where this block should be displayed.'),
-      '#default_value' => $entity->get('region'),
+      '#default_value' => $entity->getRegion(),
       '#empty_value' => BlockInterface::BLOCK_REGION_NONE,
       '#options' => system_region_list($theme, REGIONS_VISIBLE),
       '#prefix' => '<div id="edit-block-region-wrapper">',
diff --git a/core/modules/block/src/BlockInterface.php b/core/modules/block/src/BlockInterface.php
index 432e799..cf46724 100644
--- a/core/modules/block/src/BlockInterface.php
+++ b/core/modules/block/src/BlockInterface.php
@@ -40,4 +40,40 @@ public function getPlugin();
    */
   public function getVisibility();
 
+  /**
+   * Returns the region this block is placed in.
+   *
+   * @return string
+   *   The region this block is placed in.
+   */
+  public function getRegion();
+
+  /**
+   * Sets the region this block is placed in.
+   *
+   * @param string $region
+   *   The region to place this block in.
+   *
+   * @return $this
+   */
+  public function setRegion($region);
+
+  /**
+   * Returns the weight of this block (used for sorting).
+   *
+   * @return int
+   *   The block weight.
+   */
+  public function getWeight();
+
+  /**
+   * Sets the block weight.
+   *
+   * @param int $weight
+   *   The desired weight.
+   *
+   * @return $this
+   */
+  public function setWeight($weight);
+
 }
diff --git a/core/modules/block/src/BlockListBuilder.php b/core/modules/block/src/BlockListBuilder.php
index 1d11f99..1d094d6 100644
--- a/core/modules/block/src/BlockListBuilder.php
+++ b/core/modules/block/src/BlockListBuilder.php
@@ -185,10 +185,10 @@ public function buildForm(array $form, FormStateInterface $form_state) {
     // Build blocks first for each region.
     foreach ($entities as $entity_id => $entity) {
       $definition = $entity->getPlugin()->getPluginDefinition();
-      $blocks[$entity->get('region')][$entity_id] = array(
+      $blocks[$entity->getRegion()][$entity_id] = array(
         'label' => $entity->label(),
         'entity_id' => $entity_id,
-        'weight' => $entity->get('weight'),
+        'weight' => $entity->getWeight(),
         'entity' => $entity,
         'category' => $definition['category'],
       );
@@ -402,9 +402,9 @@ public function submitForm(array &$form, FormStateInterface $form_state) {
     $entities = $this->storage->loadMultiple(array_keys($form_state->getValue('blocks')));
     foreach ($entities as $entity_id => $entity) {
       $entity_values = $form_state->getValue(array('blocks', $entity_id));
-      $entity->set('weight', $entity_values['weight']);
-      $entity->set('region', $entity_values['region']);
-      if ($entity->get('region') == BlockInterface::BLOCK_REGION_NONE) {
+      $entity->setWeight($entity_values['weight']);
+      $entity->setRegion($entity_values['region']);
+      if ($entity->getRegion() == BlockInterface::BLOCK_REGION_NONE) {
         $entity->disable();
       }
       else {
diff --git a/core/modules/block/src/BlockViewBuilder.php b/core/modules/block/src/BlockViewBuilder.php
index 32d75cf..a21cb68 100644
--- a/core/modules/block/src/BlockViewBuilder.php
+++ b/core/modules/block/src/BlockViewBuilder.php
@@ -57,7 +57,7 @@ public function viewMultiple(array $entities = array(), $view_mode = 'full', $la
             'route_parameters' => array('block' => $entity->id()),
           ),
         ),
-        '#weight' => $entity->get('weight'),
+        '#weight' => $entity->getWeight(),
         '#configuration' => $configuration,
         '#plugin_id' => $plugin_id,
         '#base_plugin_id' => $base_id,
diff --git a/core/modules/block/src/Entity/Block.php b/core/modules/block/src/Entity/Block.php
index 20d70a4..dbccbbe 100644
--- a/core/modules/block/src/Entity/Block.php
+++ b/core/modules/block/src/Entity/Block.php
@@ -47,7 +47,7 @@ class Block extends ConfigEntityBase implements BlockInterface, EntityWithPlugin
    *
    * @var string
    */
-  public $id;
+  protected $id;
 
   /**
    * The plugin instance settings.
@@ -68,7 +68,7 @@ class Block extends ConfigEntityBase implements BlockInterface, EntityWithPlugin
    *
    * @var int
    */
-  public $weight;
+  protected $weight;
 
   /**
    * The plugin instance ID.
@@ -190,4 +190,34 @@ public function getVisibility() {
     return $this->getPlugin()->getVisibilityConditions()->getConfiguration();
   }
 
+  /**
+   * {@inheritdoc}
+   */
+  public function getRegion() {
+    return $this->region;
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  public function setRegion($region) {
+    $this->weight = (string) $region;
+    return $this;
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  public function getWeight() {
+    return $this->weight;
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  public function setWeight($weight) {
+    $this->weight = (int) $weight;
+    return $this;
+  }
+
 }
diff --git a/core/modules/block/src/Plugin/DisplayVariant/FullPageVariant.php b/core/modules/block/src/Plugin/DisplayVariant/FullPageVariant.php
index 7243362..2c77e29 100644
--- a/core/modules/block/src/Plugin/DisplayVariant/FullPageVariant.php
+++ b/core/modules/block/src/Plugin/DisplayVariant/FullPageVariant.php
@@ -155,7 +155,7 @@ protected function getRegionAssignments() {
 
     $full = array();
     foreach ($this->blockStorage->loadByProperties(array('theme' => $this->getTheme())) as $block_id => $block) {
-      $full[$block->get('region')][$block_id] = $block;
+      $full[$block->getRegion()][$block_id] = $block;
     }
 
     // Merge it with the actual values to maintain the region ordering.
diff --git a/core/modules/block/src/Tests/BlockInvalidRegionTest.php b/core/modules/block/src/Tests/BlockInvalidRegionTest.php
index 246684b..43075d1 100644
--- a/core/modules/block/src/Tests/BlockInvalidRegionTest.php
+++ b/core/modules/block/src/Tests/BlockInvalidRegionTest.php
@@ -42,7 +42,7 @@ protected function setUp() {
   function testBlockInInvalidRegion() {
     // Enable a test block and place it in an invalid region.
     $block = $this->drupalPlaceBlock('test_html');
-    $block->set('region', 'invalid_region');
+    $block->setRegion('invalid_region');
     $block->save();
 
     $warning_message = t('The block %info was assigned to the invalid region %region and has been disabled.', array('%info' => $block->id(), '%region' => 'invalid_region'));
@@ -57,7 +57,7 @@ function testBlockInInvalidRegion() {
 
     // Place disabled test block in the invalid region of the default theme.
     $block = Block::load($block->id());
-    $block->set('region', 'invalid_region');
+    $block->setRegion('invalid_region');
     $block->save();
 
     // Clear the cache to check if the warning message is not triggered.
diff --git a/core/modules/block/src/Tests/BlockStorageUnitTest.php b/core/modules/block/src/Tests/BlockStorageUnitTest.php
index 5fb4e8b..34a71c9 100644
--- a/core/modules/block/src/Tests/BlockStorageUnitTest.php
+++ b/core/modules/block/src/Tests/BlockStorageUnitTest.php
@@ -120,7 +120,7 @@ protected function loadTests() {
     $this->assertTrue($entity instanceof Block, 'The loaded entity is a Block.');
 
     // Verify several properties of the block.
-    $this->assertEqual($entity->get('region'), '-1');
+    $this->assertEqual($entity->getRegion(), '-1');
     $this->assertTrue($entity->get('status'));
     $this->assertEqual($entity->get('theme'), 'stark');
     $this->assertTrue($entity->uuid());
diff --git a/core/modules/block/src/Tests/BlockTest.php b/core/modules/block/src/Tests/BlockTest.php
index 1996c9b..9b504d0 100644
--- a/core/modules/block/src/Tests/BlockTest.php
+++ b/core/modules/block/src/Tests/BlockTest.php
@@ -314,7 +314,7 @@ public function testBlockCacheTags() {
     $this->assertIdentical($cache_entry->tags, $expected_cache_tags);
 
     // The "Powered by Drupal" block is modified; verify a cache miss.
-    $block->set('region', 'content');
+    $block->setRegion('content');
     $block->save();
     $this->drupalGet('<front>');
     $this->assertEqual($this->drupalGetHeader('X-Drupal-Cache'), 'MISS');
diff --git a/core/modules/migrate_drupal/src/Tests/d6/MigrateBlockTest.php b/core/modules/migrate_drupal/src/Tests/d6/MigrateBlockTest.php
index 4b15b05..813fe18 100644
--- a/core/modules/migrate_drupal/src/Tests/d6/MigrateBlockTest.php
+++ b/core/modules/migrate_drupal/src/Tests/d6/MigrateBlockTest.php
@@ -88,77 +88,77 @@ public function testBlockMigration() {
     // User blocks
     $test_block_user = $blocks['user'];
     $this->assertNotNull($test_block_user);
-    $this->assertEqual('sidebar_first', $test_block_user->get('region'));
+    $this->assertEqual('sidebar_first', $test_block_user->getRegion());
     $this->assertEqual('bartik', $test_block_user->get('theme'));
     $visibility = $test_block_user->getVisibility();
     $this->assertEqual(TRUE, $visibility['request_path']['negate']);
     $this->assertEqual('', $visibility['request_path']['pages']);
-    $this->assertEqual(0, $test_block_user->weight);
+    $this->assertEqual(0, $test_block_user->getWeight());
 
     $test_block_user_1 = $blocks['user_1'];
     $this->assertNotNull($test_block_user_1);
-    $this->assertEqual('sidebar_first', $test_block_user_1->get('region'));
+    $this->assertEqual('sidebar_first', $test_block_user_1->getRegion());
     $this->assertEqual('bartik', $test_block_user_1->get('theme'));
     $visibility = $test_block_user_1->getVisibility();
     $this->assertEqual(TRUE, $visibility['request_path']['negate']);
     $this->assertEqual('', $visibility['request_path']['pages']);
-    $this->assertEqual(0, $test_block_user_1->weight);
+    $this->assertEqual(0, $test_block_user_1->getWeight());
 
     // Check system block
     $test_block_system = $blocks['system'];
     $this->assertNotNull($test_block_system);
-    $this->assertEqual('footer', $test_block_system->get('region'));
+    $this->assertEqual('footer', $test_block_system->getRegion());
     $this->assertEqual('bartik', $test_block_system->get('theme'));
     $visibility = $test_block_system->getVisibility();
     $this->assertEqual(TRUE, $visibility['request_path']['negate']);
     $this->assertEqual('', $visibility['request_path']['pages']);
-    $this->assertEqual(-5, $test_block_system->weight);
+    $this->assertEqual(-5, $test_block_system->getWeight());
 
     // Check menu blocks
     $test_block_menu = $blocks['menu'];
     $this->assertNotNull($test_block_menu);
-    $this->assertEqual('header', $test_block_menu->get('region'));
+    $this->assertEqual('header', $test_block_menu->getRegion());
     $this->assertEqual('bartik', $test_block_menu->get('theme'));
     $visibility = $test_block_menu->getVisibility();
     $this->assertEqual(TRUE, $visibility['request_path']['negate']);
     $this->assertEqual('', $visibility['request_path']['pages']);
-    $this->assertEqual(-5, $test_block_menu->weight);
+    $this->assertEqual(-5, $test_block_menu->getWeight());
 
     // Check custom blocks
     $test_block_block = $blocks['block'];
     $this->assertNotNull($test_block_block);
-    $this->assertEqual('content', $test_block_block->get('region'));
+    $this->assertEqual('content', $test_block_block->getRegion());
     $this->assertEqual('bartik', $test_block_block->get('theme'));
     $visibility = $test_block_block->getVisibility();
     $this->assertEqual(FALSE, $visibility['request_path']['negate']);
     $this->assertEqual('<front>', $visibility['request_path']['pages']);
-    $this->assertEqual(0, $test_block_block->weight);
+    $this->assertEqual(0, $test_block_block->getWeight());
 
     $test_block_block_1 = $blocks['block_1'];
     $this->assertNotNull($test_block_block_1);
-    $this->assertEqual('right', $test_block_block_1->get('region'));
+    $this->assertEqual('right', $test_block_block_1->getRegion());
     $this->assertEqual('bluemarine', $test_block_block_1->get('theme'));
     $visibility = $test_block_block_1->getVisibility();
     $this->assertEqual(FALSE, $visibility['request_path']['negate']);
     $this->assertEqual('node', $visibility['request_path']['pages']);
-    $this->assertEqual(-4, $test_block_block_1->weight);
+    $this->assertEqual(-4, $test_block_block_1->getWeight());
 
     $test_block_block_2 = $blocks['block_2'];
     $this->assertNotNull($test_block_block_2);
-    $this->assertEqual('right', $test_block_block_2->get('region'));
+    $this->assertEqual('right', $test_block_block_2->getRegion());
     $this->assertEqual('test_theme', $test_block_block_2->get('theme'));
     $visibility = $test_block_block_2->getVisibility();
     $this->assertEqual(TRUE, $visibility['request_path']['negate']);
     $this->assertEqual('', $visibility['request_path']['pages']);
-    $this->assertEqual(-7, $test_block_block_2->weight);
+    $this->assertEqual(-7, $test_block_block_2->getWeight());
 
     $test_block_block_3 = $blocks['block_3'];
     $this->assertNotNull($test_block_block_3);
-    $this->assertEqual('left', $test_block_block_3->get('region'));
+    $this->assertEqual('left', $test_block_block_3->getRegion());
     $this->assertEqual('test_theme', $test_block_block_3->get('theme'));
     $visibility = $test_block_block_3->getVisibility();
     $this->assertEqual(TRUE, $visibility['request_path']['negate']);
     $this->assertEqual('', $visibility['request_path']['pages']);
-    $this->assertEqual(-2, $test_block_block_3->weight);
+    $this->assertEqual(-2, $test_block_block_3->getWeight());
   }
 }
