diff -u b/core/lib/Drupal/Core/Booze/DrunkController.php b/core/lib/Drupal/Core/Booze/DrunkController.php
--- b/core/lib/Drupal/Core/Booze/DrunkController.php
+++ b/core/lib/Drupal/Core/Booze/DrunkController.php
@@ -125,12 +125,19 @@
     );
 
     foreach ($this->display->getAllBlockInfo() as $name => $info) {
-      $instance = block_manager()->getInstance(array('config' => $name));
+
+      //$instance = block_manager()->getInstance(array('config' => $name));
+      $instance = entity_load('block', $name);
       // @todo block/pane styles - we're keeping them, right?
       // @todo still need very much to handle context injection. yikes.
       // @todo handle out-of-band attached stuff from blocks, e.g. css/js
       if ($info['method'] === 'direct') {
         // this is the direct rendering approach.
+        // Should probably not be called like this and not keyed by name but instance - dysrama
+        $this->renderedBlocks[$name] = drupal_container()->get('plugin.manager.entity')
+          ->getRenderController($instance->entityType())
+          ->render($instance);
+        // Org code
         $this->renderedBlocks[$instance] = $instance->render();
       }
       elseif ($info['method'] === 'subrequest') {
@@ -163,7 +169,0 @@
-        $to_render[] = $this->renderedBlocks[$block];
-      }
-
-      $this->renderedRegions[$region] = $layout->renderRegion($region);
-    }
-  }
-}
only in patch2:
unchanged:
--- a/core/lib/Drupal/Core/CoreBundle.php
+++ b/core/lib/Drupal/Core/CoreBundle.php
@@ -270,6 +270,10 @@ public function build(ContainerBuilder $container) {
     $container->register('flood', 'Drupal\Core\Flood\DatabaseBackend')
       ->addArgument(new Reference('database'));
 
+    $container->register('drunk_controller_subscriber', 'Drupal\Core\EventSubscriber\DrunkControllerSubscriber')
+      ->addArgument(new Reference('content_negotiation'))
+      ->addTag('event_subscriber');
+
     $container->addCompilerPass(new RegisterMatchersPass());
     $container->addCompilerPass(new RegisterRouteFiltersPass());
     // Add a compiler pass for registering event subscribers.
only in patch2:
unchanged:
--- /dev/null
+++ b/core/lib/Drupal/Core/EventSubscriber/DrunkControllerSubscriber.php
@@ -0,0 +1,72 @@
+<?php
+
+/**
+ * @file
+ * Definition of Drupal\Core\EventSubscriber\DrunkControllerSubscriber.
+ */
+
+namespace Drupal\Core\EventSubscriber;
+
+use Symfony\Component\HttpKernel\KernelEvents;
+use Symfony\Component\HttpKernel\Event\FilterControllerEvent;
+use Symfony\Component\EventDispatcher\EventSubscriberInterface;
+
+use Drupal\Core\Config\Entity\Display;
+
+/**
+ * Controller injector for text/html responses.
+ */
+class DrunkControllerSubscriber implements EventSubscriberInterface {
+
+  /**
+   * Attaches a controller for blocks-driven HTML rendering, if appropriate.
+   *
+   * This determines if the Request and Route are appropriate candidates for
+   * passing through block-driven rendering, and if so, attaches a controller
+   * to do so.
+   *
+   * This is more or less the default case; we only don't take over if Drupal
+   * is doing things like form processing, returning JSON or other things that
+   * (generally) do not involve composing HTML.
+   *
+   */
+  public function onDrunkenKernelController(FilterControllerEvent $event) {
+    $request = $event->getRequest();
+    
+    // @todo implement a separate flag and remove this hardmapping
+    if ('\Drupal\Core\Booze\DrunkController::respond' !== $request->attributes->get('_controller')) {
+      return;
+    }
+
+    $route = $request->attributes->get('_route');
+    $info = entity_get_info();
+    
+    if (!empty($route)) {
+      $display = entity_load('booze_display', $route);
+    }
+
+    if (empty($display)) {
+      // @todo put a real, meaningful exception here. and/or figure out fallback behavior.
+      // throw new \Exception('no display');
+      // $display = new Display(array('id' => 'new'));
+      //return;
+      $display = entity_create('booze_display', array('id' => $route, 'layout' => 'one-col'));
+    }
+
+    $display->setMainContent($request->attributes->get('_content'));
+
+    $request->attributes->set('_display', $display);
+  }
+
+  /**
+   * Registers the methods in this class that should be listeners.
+   *
+   * @return array
+   *   An array of event listener definitions.
+   */
+  public static function getSubscribedEvents() {
+    $events[KernelEvents::CONTROLLER][] = array('onDrunkenKernelController', 100);
+
+    return $events;
+  }
+}
\ No newline at end of file
only in patch2:
unchanged:
--- a/core/modules/block/lib/Drupal/block/BlockRenderController.php
+++ b/core/modules/block/lib/Drupal/block/BlockRenderController.php
@@ -87,4 +87,14 @@ public function viewMultiple(array $entities = array(), $view_mode = 'full', $la
     return $build;
   }
 
+  /**
+   * Use render instead of view
+   * @param EntityInterface $entity
+   * @param type $view_mode
+   * @param type $langcode
+   * @return type
+   */
+  public function render(EntityInterface $entity, $langcode = NULL) {
+    return drupal_render($this->view($entity, NULL, $langcode));
+  }
 }
only in patch2:
unchanged:
--- /dev/null
+++ b/core/modules/booze_display/booze_display.info
@@ -0,0 +1,5 @@
+name = Booze Display
+description = Booze display functionality.
+package = Core
+version = VERSION
+core = 8.x
only in patch2:
unchanged:
--- /dev/null
+++ b/core/modules/booze_display/booze_display.install
@@ -0,0 +1,6 @@
+<?php
+
+/**
+ * @file
+ * Install, update and uninstall functions for the booze_display module.
+ */
only in patch2:
unchanged:
--- /dev/null
+++ b/core/modules/booze_display/booze_display.module
@@ -0,0 +1 @@
+<?php
only in patch2:
unchanged:
--- /dev/null
+++ b/core/modules/booze_display/lib/Drupal/booze_display/Plugin/Core/Entity/BoozeDisplay.php
@@ -0,0 +1,144 @@
+<?php
+
+/**
+ * @file
+ * Definition of Drupal\booze_display\Plugin\Core\Entity\BoozeDisplay.
+ */
+
+namespace Drupal\booze_display\Plugin\Core\Entity;
+
+use Drupal\Core\Config\Entity\ConfigEntityInterface;
+use Drupal\Core\Config\Entity\ConfigEntityBase;
+use Drupal\Core\Annotation\Plugin;
+use Drupal\Core\Annotation\Translation;
+use Drupal\layout\Plugin\Core\Entity\Display;
+
+/**
+ * Configuration encapsulator that provides all the data needed by block-driven
+ * controllers to render a page.
+ *
+ * @Plugin(
+ *   id = "booze_display",
+ *   label = @Translation("Booze display"),
+ *   module = "booze_display",
+ *   controller_class = "Drupal\Core\Config\Entity\ConfigStorageController",
+ *   config_prefix = "boozedisplay.boozedisplay",
+ *   fieldable = FALSE,
+ *   entity_keys = {
+ *     "id" = "id",
+ *     "uuid" = "uuid"
+ *   }
+ * )
+ */
+class BoozeDisplay extends ConfigEntityBase implements ConfigEntityInterface {
+
+  /**
+   * The ID (config name) identifying a specific display object.
+   *
+   * @var string
+   */
+  public $id;
+
+  /**
+   * The human-readable label of this display.
+   * @todo we probably don't need/want to have this.
+   *
+   * @var string
+   */
+  public $label;
+
+  /**
+   * The UUID identifying a specific display object.
+   *
+   * @var string
+   */
+  public $uuid;
+
+  /**
+   * The layout plugin instance being used to serve this page.
+   *
+   * @var Drupal\layout\Plugin\LayoutInterface
+   */
+  protected $layoutPlugin;
+
+  /**
+   * The name of the layout plugin to use.
+   *
+   * @var string
+   */
+  protected $layout;
+
+  public function __construct(array $values, $entity_type) {
+    $this->layout = $values['layout'];
+    // @todo oh so much, but really, blocks for now.
+    parent::__construct($values, 'booze_display');
+  }
+
+  /**
+   * Sets the controller that should be used to serve the main page content.
+   *
+   * "Main page content" is analogous to the callback specified in
+   * 'page callback' in Drupal 6 and 7. In a blocks-driven world, such direct
+   * callbacks run a bit against the grain. However, the simplicity of
+   * implementing and understanding it is so beneficial to developer experience
+   * that we provide this 'main' content option, which simulates the old
+   * behavior by injecting a virtualized 'main' block that passes through
+   * to a specified callback.
+   *
+   * We normalize the main content block here in the configuration object so
+   * that various controllers consuming the display need not repeatedly
+   * implement this special handling for the main callback.
+   *
+   * @param Callable $callback
+   *   Any form of callable. @todo PHP 5.4 allows type hinting as Callable.
+   * @param array $args
+   *   An array of arguments to pass to the callable.
+   */
+  public function setMainContent($callback, array $args = array()) {
+    // @todo need to wrap the callback up in a passthru block
+    // @todo consider throwing an exception if this display instance doesn't appear to support main content
+  }
+
+
+  /**
+   * Returns the config info about all blocks on this display.
+   *
+   * There are two levels of configuration that are being captured here: the
+   * configuration for the block itself (i.e., config generated by a user saving
+   * the block's edit form), and configuration for how the particular block
+   * instance behaves in *this* display. The former is typically its own config
+   * object, and only a reference to that config key is stored directly on this
+   * object. The most important examples of the latter are the region in which
+   * the block is placed, and its weighting within the region.
+   *
+   * @todo we need to explore a *lot* more just how freestanding we make blocks.
+   *
+   * @return array
+   *   An array of block info, keyed on each block's config name.
+   *
+   * @todo implement batch-loading logic to try to minimize discrete queries.
+   */
+  public function getAllBlockInfo() {
+    // pseudo code
+    return array('bartik.powered' => array('method' => 'direct'));
+  }
+
+  public function getBlocksByRegion($region) {
+    return array('bartik.powered');
+  }
+
+  /**
+   * Returns the layout plugin to be used with this display.
+   *
+   * @return Drupal\layout\Plugin\LayoutInterface
+   */
+  public function getLayoutPluginInstance() {
+    if ($this->layoutPlugin === NULL) {
+      // @todo if we're doing any magic resolution/hotswapping of layouts, this
+      // is a place it could happen.
+      $this->layoutPlugin = layout_manager()->createInstance('static_layout:layout__one-col', array());
+    }
+
+    return $this->layoutPlugin;
+  }
+}
