diff --git a/src/PanelizerDisplay.php b/src/PanelizerDisplay.php
new file mode 100644
index 0000000..d92f111
--- /dev/null
+++ b/src/PanelizerDisplay.php
@@ -0,0 +1,184 @@
+<?php
+
+namespace Drupal\panelizer;
+
+
+use Drupal\Core\Entity\FieldableEntityInterface;
+use Drupal\panels\Plugin\DisplayVariant\PanelsDisplayVariant;
+
+class PanelizerDisplay {
+
+  const TYPE_ENTITY = 'entity';
+  const TYPE_DEFAULT = 'default';
+
+  /**
+   * The type of display.
+   *
+   * @var string
+   */
+  protected $type;
+
+  /**
+   * @var string
+   */
+  protected $viewMode;
+
+  /**
+   * @var mixed
+   */
+  protected $entityTypeId;
+
+  /**
+   * @var string
+   */
+  protected $bundle;
+
+  /**
+   * @param \Drupal\Core\Entity\FieldableEntityInterface $entity
+   */
+  protected $entity;
+
+  /**
+   * @var string
+   */
+  protected $name;
+
+  /**
+   * @var \Drupal\panels\Plugin\DisplayVariant\PanelsDisplayVariant
+   */
+  protected $panelsDisplay;
+
+  /**
+   * @var array
+   */
+  protected $panelizerSettings;
+
+  /**
+   * Constructs a PanelizerDisplay.
+   *
+   * @param $type
+   * @param $view_mode
+   * @param \Drupal\panels\Plugin\DisplayVariant\PanelsDisplayVariant $panels_display
+   * @param array $panelizer_settings
+   */
+  protected function __construct($type, $view_mode, PanelsDisplayVariant $panels_display, array $panelizer_settings) {
+    $this->type = $type;
+    $this->viewMode = $view_mode;
+    $this->panelsDisplay = $panels_display;
+    $this->panelizerSettings = $panelizer_settings;
+  }
+
+  /**
+   * Creates an entity-based Panelizer display.
+   *
+   * @param \Drupal\Core\Entity\FieldableEntityInterface $entity
+   * @param $view_mode
+   * @param \Drupal\panels\Plugin\DisplayVariant\PanelsDisplayVariant $panels_display
+   * @param array $panelizer_settings
+   *
+   * @return \Drupal\panelizer\PanelizerDisplay
+   */
+  public static function create(FieldableEntityInterface $entity, $view_mode, PanelsDisplayVariant $panels_display, array $panelizer_settings) {
+    $display = new PanelizerDisplay(PanelizerDisplay::TYPE_ENTITY, $view_mode, $panels_display, $panelizer_settings);
+    $display->entity = $entity;
+    $display->bundle = $entity->bundle();
+    $display->entityTypeId = $entity->getEntityTypeId();
+    return $display;
+  }
+
+  /**
+   * Creates a default Panelizer display.
+   *
+   * @param $name
+   * @param $entity_type_id
+   * @param $bundle
+   * @param $view_mode
+   * @param \Drupal\panels\Plugin\DisplayVariant\PanelsDisplayVariant $panels_display
+   * @param array $panelizer_settings
+   *
+   * @return \Drupal\panelizer\PanelizerDisplay
+   */
+  public static function createDefault($name, $entity_type_id, $bundle, $view_mode, PanelsDisplayVariant $panels_display, array $panelizer_settings) {
+    $display = new PanelizerDisplay(PanelizerDisplay::TYPE_DEFAULT, $view_mode, $panels_display, $panelizer_settings);
+    $display->name = $name;
+    $display->entityTypeId = $entity_type_id;
+    $display->bundle = $bundle;
+    return $display;
+  }
+
+  /**
+   * @return string
+   */
+  public function getType() {
+    return $this->type;
+  }
+
+  /**
+   * @return string
+   */
+  public function getViewMode() {
+    return $this->viewMode;
+  }
+
+  /**
+   * @return mixed
+   */
+  public function getEntityTypeId() {
+    return $this->entityTypeId;
+  }
+
+  /**
+   * @return string
+   */
+  public function getBundle() {
+    return $this->bundle;
+  }
+
+  /**
+   * @return mixed
+   */
+  public function getEntity() {
+    return $this->entity;
+  }
+
+  /**
+   * @return string
+   */
+  public function getName() {
+    return $this->name;
+  }
+
+  /**
+   * @return \Drupal\panels\Plugin\DisplayVariant\PanelsDisplayVariant
+   */
+  public function getPanelsDisplay() {
+    return $this->panelsDisplay;
+  }
+
+  /**
+   * @param \Drupal\panels\Plugin\DisplayVariant\PanelsDisplayVariant $panels_display
+   * @return $this
+   */
+  public function setPanelsDisplay(PanelsDisplayVariant $panels_display) {
+    $this->panelsDisplay = $panels_display;
+    return $this;
+  }
+
+  /**
+   * @return array
+   */
+  public function getPanelizerSettings() {
+    return $this->panelizerSettings;
+  }
+
+  /**
+   * @param array $panelizerSettings
+   *
+   * @return $this
+   */
+  public function setPanelizerSettings(array $panelizerSettings) {
+    $this->panelizerSettings = $panelizerSettings;
+    return $this;
+  }
+
+}
diff --git a/src/PanelizerInterface.php b/src/PanelizerInterface.php
index 0372277..ff8aa29 100644
--- a/src/PanelizerInterface.php
+++ b/src/PanelizerInterface.php
@@ -20,7 +20,7 @@ use Drupal\panels\Plugin\DisplayVariant\PanelsDisplayVariant;
 interface PanelizerInterface {
 
   /**
-   * Gets the Panels display for a given entity and view mode.
+   * Gets the Panelizer display for a given entity and view mode.
    *
    * @param \Drupal\Core\Entity\EntityInterface $entity
    *   The entity.
@@ -31,31 +31,13 @@ interface PanelizerInterface {
    *   passed in here so the Panelizer service doesn't have to look it up;
    *   otherwise, this argument can bo omitted.
    *
-   * @return \Drupal\panels\Plugin\DisplayVariant\PanelsDisplayVariant|NULL
-   *   The Panels display if panelized; NULL otherwise.
+   * @return \Drupal\panelizer\PanelizerDisplay
+   *   The Panelizer display if panelized; NULL otherwise.
    */
-  public function getPanelsDisplay(FieldableEntityInterface $entity, $view_mode, EntityViewDisplayInterface $display = NULL);
+  public function getDisplay(FieldableEntityInterface $entity, $view_mode, EntityViewDisplayInterface $display = NULL);
 
   /**
-   * Sets the Panels display for a given entity and view mode.
-   *
-   * @param \Drupal\Core\Entity\FieldableEntityInterface $entity
-   *   The entity.
-   * @param string $view_mode
-   *   The entity view mode.
-   * @param string|NULL $default
-   *   The name of the default if setting to a default; otherwise NULL.
-   * @param \Drupal\panels\Plugin\DisplayVariant\PanelsDisplayVariant|NULL $panels_display
-   *   The Panels display if this is an override; otherwise NULL.
-   *
-   * @throws \Drupal\panelizer\Exception\PanelizerException
-   *   When custom overrides aren't enabled on this entity, bundle and view
-   *   mode.
-   */
-  public function setPanelsDisplay(FieldableEntityInterface $entity, $view_mode, $default, PanelsDisplayVariant $panels_display = NULL);
-
-  /**
-   * Gets the default Panels displays for an entity type, bundle and view mode.
+   * Gets the default Panelizer displays for an entity type, bundle and view mode.
    *
    * @param string $entity_type_id
    *   The entity type id.
@@ -68,15 +50,15 @@ interface PanelizerInterface {
    *   passed in here so the Panelizer service doesn't have to look it up;
    *   otherwise, this argument can bo omitted.
    *
-   * @return \Drupal\panels\Plugin\DisplayVariant\PanelsDisplayVariant[]
-   *   An associative array of Panels displays, keyed by the machine name of
+   * @return \Drupal\panelizer\PanelizerDisplay[]
+   *   An associative array of Panelizer displays, keyed by the machine name of
    *   the default if panelized; NULL otherwise. All panelized view modes will
    *   have at least one named 'default'.
    */
-  public function getDefaultPanelsDisplays($entity_type_id, $bundle, $view_mode, EntityViewDisplayInterface $display = NULL);
+  public function getDefaultDisplays($entity_type_id, $bundle, $view_mode, EntityViewDisplayInterface $display = NULL);
 
   /**
-   * Gets one default Panels display for an entity type, bundle and view mode.
+   * Gets one default Panelizer display for an entity type, bundle and view mode.
    *
    * @param string $name
    *   The name of the default.
@@ -91,29 +73,18 @@ interface PanelizerInterface {
    *   passed in here so the Panelizer service doesn't have to look it up;
    *   otherwise, this argument can bo omitted.
    *
-   * @return \Drupal\panels\Plugin\DisplayVariant\PanelsDisplayVariant|NULL
-   *   The default Panels display with the given name if it exists; otherwise
+   * @return \Drupal\panelizer\PanelizerDisplay
+   *   The default Panelizer display with the given name if it exists; otherwise
    *   NULL.
    */
-  public function getDefaultPanelsDisplay($name, $entity_type_id, $bundle, $view_mode, EntityViewDisplayInterface $display = NULL);
+  public function getDefaultDisplay($name, $entity_type_id, $bundle, $view_mode, EntityViewDisplayInterface $display = NULL);
 
   /**
-   * @param $name
-   *   The name of the default.
-   * @param $entity_type_id
-   *   The entity type id.
-   * @param $bundle
-   *   The bundle.
-   * @param $view_mode
-   *   The view mode.
-   * @param \Drupal\panels\Plugin\DisplayVariant\PanelsDisplayVariant $panels_display
-   *   The Panels display to use as the default.
+   * Saves a Panelizer display.
    *
-   * @throws \Drupal\panelizer\Exception\PanelizerException
-   *   When a display can't be found for the given entity type, bundle and view
-   *   mode.
+   * @param \Drupal\panelizer\PanelizerDisplay $display
    */
-  public function setDefaultPanelsDisplay($name, $entity_type_id, $bundle, $view_mode, PanelsDisplayVariant $panels_display);
+  public function saveDisplay(PanelizerDisplay $display);
 
   /**
    * Checks if the given entity type, bundle and view mode are panelized.
@@ -135,46 +106,6 @@ interface PanelizerInterface {
   public function isPanelized($entity_type_id, $bundle, $view_mode, EntityViewDisplayInterface $display = NULL);
 
   /**
-   * Get the Panelizer settings for an entity type, bundle and view mode.
-   *
-   * @param string $entity_type_id
-   *   The entity type id.
-   * @param string $bundle
-   *   The bundle.
-   * @param string $view_mode
-   *   The view mode.
-   * @param \Drupal\Core\Entity\Display\EntityViewDisplayInterface|NULL $display
-   *   If the caller already has the correct display, it can optionally be
-   *   passed in here so the Panelizer service doesn't have to look it up;
-   *   otherwise, this argument can bo omitted.
-   *
-   * @return array
-   *   An associative array with the following keys:
-   *   - enable (bool): Whether or not this view mode is panelized.
-   *   - field (bool): Whether or not the field is present.
-   */
-  public function getPanelizerSettings($entity_type_id, $bundle, $view_mode, EntityViewDisplayInterface $display = NULL);
-
-  /**
-   * @param string $entity_type_id
-   *   The entity type id.
-   * @param string $bundle
-   *   The bundle.
-   * @param string $view_mode
-   *   The view mode.
-   * @param array $settings
-   *   An associative array with the same keys as the associative array
-   *   returned by getPanelizerSettings().
-   * @param \Drupal\Core\Entity\Display\EntityViewDisplayInterface|NULL $display
-   *   If the caller already has the correct display, it can optionally be
-   *   passed in here so the Panelizer service doesn't have to look it up;
-   *   otherwise, this argument can bo omitted.
-   *
-   * @see PanelizerInterface::getPanelizerSettings()
-   */
-  public function setPanelizerSettings($entity_type_id, $bundle, $view_mode, array $settings, EntityViewDisplayInterface $display = NULL);
-
-  /**
    * Get permissions for all panelized entity types and bundles.
    *
    * @return array
