diff --git a/core/config/schema/core.entity.schema.yml b/core/config/schema/core.entity.schema.yml
index b4adf40..e020c01 100644
--- a/core/config/schema/core.entity.schema.yml
+++ b/core/config/schema/core.entity.schema.yml
@@ -77,6 +77,14 @@ core.entity_view_display.*.*.*:
       sequence:
         - type: boolean
           label: 'Value'
+    dependencies:
+      type: config_dependencies
+      label: 'Dependencies'
+    third_party_settings:
+      type: sequence
+      label: 'Third party settings'
+      sequence:
+        - type: entity_view_display.third_party.[%key]
 
 # Overview configuration information for form mode displays.
 core.entity_form_display.*.*.*:
@@ -112,6 +120,11 @@ core.entity_form_display.*.*.*:
     dependencies:
       type: config_dependencies
       label: 'Dependencies'
+    third_party_settings:
+      type: sequence
+      label: 'Third party settings'
+      sequence:
+        - type: entity_form_display.third_party.[%key]
 
 # Default schema for entity display field with undefined type.
 entity_view_display.field.*:
diff --git a/core/lib/Drupal/Core/Entity/Display/EntityDisplayInterface.php b/core/lib/Drupal/Core/Entity/Display/EntityDisplayInterface.php
index 719d865..0a23bd2 100644
--- a/core/lib/Drupal/Core/Entity/Display/EntityDisplayInterface.php
+++ b/core/lib/Drupal/Core/Entity/Display/EntityDisplayInterface.php
@@ -7,10 +7,12 @@
 
 namespace Drupal\Core\Entity\Display;
 
+use Drupal\Core\Config\Entity\ThirdPartySettingsInterface;
+
 /**
  * Provides a common interface for entity displays.
  */
-interface EntityDisplayInterface {
+interface EntityDisplayInterface extends ThirdPartySettingsInterface {
 
   /**
    * Creates a duplicate of the entity display object on a different view mode.
diff --git a/core/lib/Drupal/Core/Entity/EntityDisplayBase.php b/core/lib/Drupal/Core/Entity/EntityDisplayBase.php
index 3710507..bd5a35d 100644
--- a/core/lib/Drupal/Core/Entity/EntityDisplayBase.php
+++ b/core/lib/Drupal/Core/Entity/EntityDisplayBase.php
@@ -11,12 +11,15 @@
 use Drupal\Core\Field\FieldDefinitionInterface;
 use Drupal\Core\Entity\Display\EntityDisplayInterface;
 use Drupal\field\Entity\FieldInstanceConfig;
+use Drupal\Core\Config\Entity\ThirdPartySettingsTrait;
 
 /**
  * Provides a common base class for entity view and form displays.
  */
 abstract class EntityDisplayBase extends ConfigEntityBase implements EntityDisplayInterface {
 
+  use ThirdPartySettingsTrait;
+
   /**
    * Unique ID for the config entity.
    *
diff --git a/core/modules/entity/src/Tests/EntityDisplayTest.php b/core/modules/entity/src/Tests/EntityDisplayTest.php
index 2e3657d..44043dd 100644
--- a/core/modules/entity/src/Tests/EntityDisplayTest.php
+++ b/core/modules/entity/src/Tests/EntityDisplayTest.php
@@ -8,14 +8,14 @@
 namespace Drupal\entity\Tests;
 
 use Drupal\Core\Entity\Entity\EntityViewMode;
-use Drupal\simpletest\DrupalUnitTestBase;
+use Drupal\simpletest\KernelTestBase;
 
 /**
  * Tests the entity display configuration entities.
  *
  * @group entity
  */
-class EntityDisplayTest extends DrupalUnitTestBase {
+class EntityDisplayTest extends KernelTestBase {
 
   public static $modules = array('entity', 'field', 'entity_test', 'user', 'text', 'field_test', 'node', 'system');
 
@@ -58,6 +58,11 @@ public function testEntityDisplayCRUD() {
       $this->assertEqual($display->getComponent($name), $expected[$name]);
     }
 
+    // Ensure that third party settings were added to the config entity.
+    // These are added by entity_test_entity_presave() implemented in
+    // entity_test module.
+    $this->assertEqual('bar', $display->getThirdPartySetting('entity_test', 'foo'), 'Third party settings were added to the entity view display.');
+
     // Check that getComponents() returns options for all components.
     $expected['name'] = array(
       'label' => 'hidden',
@@ -288,7 +293,7 @@ public function testRenameDeleteBundle() {
 
     $expected_view_dependencies = array(
       'entity' => array('field.instance.node.article_rename.body', 'node.type.article_rename'),
-      'module' => array('text', 'user')
+      'module' => array('entity_test', 'text', 'user')
     );
     // Check that the display has dependencies on the bundle, fields and the
     // modules that provide the formatters.
diff --git a/core/modules/system/tests/modules/entity_test/config/schema/entity_test.schema.yml b/core/modules/system/tests/modules/entity_test/config/schema/entity_test.schema.yml
new file mode 100644
index 0000000..85a19e8
--- /dev/null
+++ b/core/modules/system/tests/modules/entity_test/config/schema/entity_test.schema.yml
@@ -0,0 +1,7 @@
+entity_view_display.third_party.entity_test:
+  type: mapping
+  label: 'Schema for entity_test module additions to entity_view_display entity'
+  mapping:
+    foo:
+      type: string
+      label: 'Label for foo'
diff --git a/core/modules/system/tests/modules/entity_test/entity_test.module b/core/modules/system/tests/modules/entity_test/entity_test.module
index df110c2..a8fe2e9 100644
--- a/core/modules/system/tests/modules/entity_test/entity_test.module
+++ b/core/modules/system/tests/modules/entity_test/entity_test.module
@@ -369,6 +369,10 @@ function entity_test_entity_presave(EntityInterface $entity) {
   if (isset($GLOBALS['entity_test_throw_exception'])) {
     throw new Exception('Entity presave exception', 1);
   }
+
+  if ($entity->getEntityType()->id() == 'entity_view_display') {
+    $entity->setThirdPartySetting('entity_test', 'foo', 'bar');
+  }
 }
 
 /**
