diff --git a/src/Plugin/DisplayVariant/BlockDisplayVariant.php b/src/Plugin/DisplayVariant/BlockDisplayVariant.php
index 461cc95..4961070 100644
--- a/src/Plugin/DisplayVariant/BlockDisplayVariant.php
+++ b/src/Plugin/DisplayVariant/BlockDisplayVariant.php
@@ -8,10 +8,12 @@
 namespace Drupal\page_manager\Plugin\DisplayVariant;
 
 use Drupal\Component\Plugin\ContextAwarePluginInterface;
+use Drupal\Component\Plugin\DerivativeInspectionInterface;
 use Drupal\Component\Serialization\Json;
 use Drupal\Component\Utility\NestedArray;
 use Drupal\Component\Uuid\UuidInterface;
 use Drupal\Core\Display\VariantBase;
+use Drupal\Component\Utility\String;
 use Drupal\Core\Plugin\ContainerFactoryPluginInterface;
 use Drupal\Core\Plugin\Context\ContextHandlerInterface;
 use Drupal\Core\Session\AccountInterface;
@@ -121,17 +123,25 @@ public function build() {
       $build[$region]['#suffix'] = '</div>';
 
       /** @var $blocks \Drupal\block\BlockPluginInterface[] */
+      $weight = 0;
       foreach ($blocks as $block_id => $block) {
         if ($block instanceof ContextAwarePluginInterface) {
           $this->contextHandler()->applyContextMapping($block, $contexts);
         }
         if ($block->access($this->account)) {
-          $row = $block->build();
-          $block_name = $this->drupalHtmlClass("block-$block_id");
-          $row['#prefix'] = '<div class="' . $block_name . '">';
-          $row['#suffix'] = '</div>';
+          $block_render_array = array(
+            '#theme' => 'block',
+            '#attributes' => array(),
+            '#weight' => $weight++,
+            '#configuration' => $block->getConfiguration(),
+            '#plugin_id' => $block->getPluginId(),
+            '#base_plugin_id' => $block->getBaseId(),
+            '#derivative_plugin_id' => $block->getDerivativeId(),
+          );
+          $block_render_array['#configuration']['label'] = String::checkPlain($block_render_array['#configuration']['label']);
+          $block_render_array['content'] = $block->build();
 
-          $build[$region][$block_id] = $row;
+          $build[$region][$block_id] = $block_render_array;
         }
       }
     }
diff --git a/src/Tests/PageManagerAdminTest.php b/src/Tests/PageManagerAdminTest.php
index 1c2aee0..d4a549b 100644
--- a/src/Tests/PageManagerAdminTest.php
+++ b/src/Tests/PageManagerAdminTest.php
@@ -52,6 +52,7 @@ public function testAdmin() {
     $this->doTestDisablePage();
     $this->doTestAddDisplayVariant();
     $this->doTestAddBlock();
+    $this->doTestEditBlock();
     $this->doTestEditDisplayVariant();
     $this->doTestReorderDisplayVariants();
     $this->doTestAddPageWithDuplicatePath();
@@ -153,20 +154,40 @@ protected function doTestAddBlock() {
     // Test that the block is displayed.
     $this->drupalGet('admin/foo');
     $this->assertResponse(200);
-    $elements = $this->xpath('//div[@class="block-region-top"]/div/ul[@class="menu"]/li/a');
+    $elements = $this->xpath('//div[@class="block-region-top"]/div/div/ul[@class="menu"]/li/a');
     $expected = array('My account', 'Log out');
     $links = array();
     foreach ($elements as $element) {
       $links[] = (string) $element;
     }
     $this->assertEqual($expected, $links);
+    // Check the block label.
+    $this->assertRaw('<h2>User account menu</h2>');
+  }
+
+  /**
+   * Tests editing a block.
+   */
+  protected function doTestEditBlock() {
+    $this->drupalGet('admin/structure/page_manager/manage/foo');
+    $this->clickLink('Edit');
+    $this->clickLink('Edit');
+    $edit = array(
+      'settings[label]' => 'Updated block label',
+    );
+    $this->drupalPostForm(NULL, $edit, 'Update block');
+    // Test that the block is displayed.
+    $this->drupalGet('admin/foo');
+    $this->assertResponse(200);
+    // Check the block label.
+    $this->assertRaw('<h2>' . $edit['settings[label]'] . '</h2>');
   }
 
   /**
    * Tests editing a display variant.
    */
   protected function doTestEditDisplayVariant() {
-    if (!$block = $this->findBlockByLabel('foo', 'First', 'User account menu')) {
+    if (!$block = $this->findBlockByLabel('foo', 'First', 'Updated block label')) {
       $this->fail('Block not found');
       return;
     }
@@ -197,7 +218,7 @@ protected function doTestEditDisplayVariant() {
   protected function doTestReorderDisplayVariants() {
     $this->drupalGet('admin/foo');
     $this->assertResponse(200);
-    $elements = $this->xpath('//div[@class="block-region-bottom"]/div/ul[@class="menu"]/li/a');
+    $elements = $this->xpath('//div[@class="block-region-bottom"]/div/div/ul[@class="menu"]/li/a');
     $expected = array('My account', 'Log out');
     $links = array();
     foreach ($elements as $element) {
@@ -267,7 +288,7 @@ protected function doTestRemoveBlock() {
     // Assert that the block is displayed.
     $this->drupalGet('admin/foo');
     $this->assertResponse(200);
-    $elements = $this->xpath('//div[@class="block-region-bottom"]/div/ul[@class="menu"]/li/a');
+    $elements = $this->xpath('//div[@class="block-region-bottom"]/div/div/ul[@class="menu"]/li/a');
     $expected = array('My account', 'Log out');
     $links = array();
     foreach ($elements as $element) {
@@ -278,9 +299,9 @@ protected function doTestRemoveBlock() {
     $this->drupalGet('admin/structure/page_manager/manage/foo');
     $this->clickLink('Edit');
     $this->clickLink('Delete');
-    $this->assertRaw(String::format('Are you sure you want to delete the block %label?', array('%label' => 'User account menu')));
+    $this->assertRaw(String::format('Are you sure you want to delete the block %label?', array('%label' => 'Updated block label')));
     $this->drupalPostForm(NULL, array(), 'Delete');
-    $this->assertRaw(String::format('The block %label has been removed.', array('%label' => 'User account menu')));
+    $this->assertRaw(String::format('The block %label has been removed.', array('%label' => 'Updated block label')));
 
     // Assert that the block is now gone.
     $this->drupalGet('admin/foo');
diff --git a/tests/src/BlockDisplayVariantTest.php b/tests/src/BlockDisplayVariantTest.php
index 57fdb56..c3db9d7 100644
--- a/tests/src/BlockDisplayVariantTest.php
+++ b/tests/src/BlockDisplayVariantTest.php
@@ -70,6 +70,18 @@ public function testBuild() {
       ->will($this->returnValue(array(
         '#markup' => 'block1_build_value',
       )));
+    $block1->expects($this->once())
+      ->method('getConfiguration')
+      ->will($this->returnValue(array('label' => 'Block label')));
+    $block1->expects($this->once())
+      ->method('getPluginId')
+      ->will($this->returnValue('block_plugin_id'));
+    $block1->expects($this->once())
+      ->method('getBaseId')
+      ->will($this->returnValue('block_base_plugin_id'));
+    $block1->expects($this->once())
+      ->method('getDerivativeId')
+      ->will($this->returnValue('block_derivative_plugin_id'));
     $block2 = $this->getMock('Drupal\page_manager\Tests\TestContextAwareBlockPluginInterface');
     $block2->expects($this->once())
       ->method('access')
@@ -99,7 +111,7 @@ public function testBuild() {
       ->setConstructorArgs(array(array(), 'test', array(), $context_handler, $account, $uuid_generator))
       ->setMethods(array('getBlockBag', 'drupalHtmlClass'))
       ->getMock();
-    $display_variant->expects($this->exactly(2))
+    $display_variant->expects($this->exactly(1))
       ->method('drupalHtmlClass')
       ->will($this->returnArgument(0));
     $display_variant->expects($this->once())
@@ -111,9 +123,18 @@ public function testBuild() {
         '#prefix' => '<div class="block-region-top">',
         '#suffix' => '</div>',
         'block1' => array(
-          '#markup' => 'block1_build_value',
-          '#prefix' => '<div class="block-block1">',
-          '#suffix' => '</div>',
+          '#theme' => 'block',
+          '#attributes' => array(),
+          '#weight' => 0,
+          '#configuration' => array(
+            'label' => 'Block label'
+          ),
+          '#plugin_id' => 'block_plugin_id',
+          '#base_plugin_id' => 'block_base_plugin_id',
+          '#derivative_plugin_id' => 'block_derivative_plugin_id',
+          'content' => array(
+            '#markup' => 'block1_build_value',
+          ),
         ),
       ),
     );
