diff --git a/core/modules/ckeditor/ckeditor.admin.inc b/core/modules/ckeditor/ckeditor.admin.inc
index 7d763c7..2037610 100644
--- a/core/modules/ckeditor/ckeditor.admin.inc
+++ b/core/modules/ckeditor/ckeditor.admin.inc
@@ -37,23 +37,15 @@ function template_preprocess_ckeditor_settings_toolbar(&$variables) {
       $buttons[$button_name] = $button;
     }
   }
-  $button_groups = array();
-  $active_buttons = array();
-  foreach ($editor->settings['toolbar']['rows'] as $row_number => $row) {
-    $button_groups[$row_number] = array();
-    foreach ($row as $group) {
-      foreach ($group['items'] as $button_name) {
-        if (isset($buttons[$button_name])) {
-          // Save a reference to the button's configured toolbar group.
-          $buttons[$button_name]['group'] = $group['name'];
-          $active_buttons[$row_number][] = $buttons[$button_name];
-          if (empty($buttons[$button_name]['multiple'])) {
-            unset($buttons[$button_name]);
-          }
-          // Create a list of all the toolbar button groups.
-          if (!in_array($group['name'], $button_groups[$row_number])) {
-            array_push($button_groups[$row_number], $group['name']);
-          }
+
+  $variables['active_buttons'] = array();
+  $settings = $editor->getSettings();
+  foreach ($settings['toolbar']['buttons'] as $row_number => $row) {
+    foreach ($row as $button_name) {
+      if (isset($buttons[$button_name])) {
+        $variables['active_buttons'][$row_number][] = $buttons[$button_name];
+        if (empty($buttons[$button_name]['multiple'])) {
+          unset($buttons[$button_name]);
         }
       }
     }
diff --git a/core/modules/ckeditor/lib/Drupal/ckeditor/CKEditorPluginInterface.php b/core/modules/ckeditor/lib/Drupal/ckeditor/CKEditorPluginInterface.php
index c070fbd..4c3bf48 100644
--- a/core/modules/ckeditor/lib/Drupal/ckeditor/CKEditorPluginInterface.php
+++ b/core/modules/ckeditor/lib/Drupal/ckeditor/CKEditorPluginInterface.php
@@ -79,11 +79,15 @@ public function getFile();
   /**
    * Returns the additions to CKEDITOR.config for a specific CKEditor instance.
    *
-   * The editor's settings can be found in $editor->settings, but be aware that
-   * it may not yet contain plugin-specific settings, because the user may not
-   * yet have configured the form.
+   * The editor's settings can be found in $editor->getSettings(), but be aware
+   * that it may not yet contain plugin-specific settings, because the user may
+   * not yet have configured the form.
    * If there are plugin-specific settings (verify with isset()), they can be
-   * found at $editor->settings['plugins'][$plugin_id].
+   * found at
+   * @code
+   * $settings = $editor->getSettings();
+   * $plugin_specific_settings = $settings['plugins'][$plugin_id];
+   * @encode
    *
    * @param \Drupal\editor\Entity\Editor $editor
    *   A configured text editor object.
diff --git a/core/modules/ckeditor/lib/Drupal/ckeditor/CKEditorPluginManager.php b/core/modules/ckeditor/lib/Drupal/ckeditor/CKEditorPluginManager.php
index 7cc3b19..364dc49 100644
--- a/core/modules/ckeditor/lib/Drupal/ckeditor/CKEditorPluginManager.php
+++ b/core/modules/ckeditor/lib/Drupal/ckeditor/CKEditorPluginManager.php
@@ -65,14 +65,8 @@ public function __construct(\Traversable $namespaces, CacheBackendInterface $cac
    */
   public function getEnabledPluginFiles(Editor $editor, $include_internal_plugins = FALSE) {
     $plugins = array_keys($this->getDefinitions());
-    // Flatten each row.
-    $toolbar_rows = array();
-    foreach ($editor->settings['toolbar']['rows'] as $row_number => $row) {
-      $toolbar_rows[] = array_reduce($editor->settings['toolbar']['rows'][$row_number], function (&$result, $button_group) {
-        return array_merge($result, $button_group['items']);
-      }, array());
-    }
-    $toolbar_buttons = array_unique(NestedArray::mergeDeepArray($toolbar_rows));
+    $settings = $editor->getSettings();
+    $toolbar_buttons = array_unique(NestedArray::mergeDeepArray($settings['toolbar']['buttons']));
     $enabled_plugins = array();
     $additional_plugins = array();
 
diff --git a/core/modules/ckeditor/lib/Drupal/ckeditor/Plugin/CKEditorPlugin/Internal.php b/core/modules/ckeditor/lib/Drupal/ckeditor/Plugin/CKEditorPlugin/Internal.php
index c683e3e..1ddf0c2 100644
--- a/core/modules/ckeditor/lib/Drupal/ckeditor/Plugin/CKEditorPlugin/Internal.php
+++ b/core/modules/ckeditor/lib/Drupal/ckeditor/Plugin/CKEditorPlugin/Internal.php
@@ -54,13 +54,8 @@ public function getConfig(Editor $editor) {
     $config['allowedContent'] = $this->generateAllowedContentSetting($editor);
 
     // Add the format_tags setting, if its button is enabled.
-    $toolbar_rows = array();
-    foreach ($editor->settings['toolbar']['rows'] as $row_number => $row) {
-      $toolbar_rows[] = array_reduce($editor->settings['toolbar']['rows'][$row_number], function (&$result, $button_group) {
-        return array_merge($result, $button_group['items']);
-      }, array());
-    }
-    $toolbar_buttons = array_unique(NestedArray::mergeDeepArray($toolbar_rows));
+    $settings = $editor->getSettings();
+    $toolbar_buttons = array_unique(NestedArray::mergeDeepArray($settings['toolbar']['buttons']));
     if (in_array('Format', $toolbar_buttons)) {
       $config['format_tags'] = $this->generateFormatTagsSetting($editor);
     }
@@ -259,7 +254,7 @@ protected function generateFormatTagsSetting(Editor $editor) {
     $possible_format_tags = array('h1', 'h2', 'h3', 'h4', 'h5', 'h6', 'pre');
     foreach ($possible_format_tags as $tag) {
       $input = '<' . $tag . '>TEST</' . $tag . '>';
-      $output = trim(check_markup($input, $editor->format, '', TRUE));
+      $output = trim(check_markup($input, $editor->id()));
       if ($input == $output) {
         $format_tags[] = $tag;
       }
@@ -286,9 +281,8 @@ protected function generateFormatTagsSetting(Editor $editor) {
    */
   protected function generateAllowedContentSetting(Editor $editor) {
     // When nothing is disallowed, set allowedContent to true.
-    $format = entity_load('filter_format', $editor->format);
-    $filter_types = $format->getFilterTypes();
-    if (!in_array(FilterInterface::TYPE_HTML_RESTRICTOR, $filter_types)) {
+    $filter_types = filter_get_filter_types_by_format($editor->id());
+    if (!in_array(FILTER_TYPE_HTML_RESTRICTOR, $filter_types)) {
       return TRUE;
     }
     // Generate setting that accurately reflects allowed tags and attributes.
@@ -305,7 +299,8 @@ protected function generateAllowedContentSetting(Editor $editor) {
         }
       };
 
-      $html_restrictions = $format->getHtmlRestrictions();
+      $html_restrictions = filter_get_html_restrictions_by_format($editor->id());
+
       // When all HTML is allowed, also set allowedContent to true.
       if ($html_restrictions === FALSE) {
         return TRUE;
diff --git a/core/modules/ckeditor/lib/Drupal/ckeditor/Plugin/CKEditorPlugin/StylesCombo.php b/core/modules/ckeditor/lib/Drupal/ckeditor/Plugin/CKEditorPlugin/StylesCombo.php
index aa23043..eefac44 100644
--- a/core/modules/ckeditor/lib/Drupal/ckeditor/Plugin/CKEditorPlugin/StylesCombo.php
+++ b/core/modules/ckeditor/lib/Drupal/ckeditor/Plugin/CKEditorPlugin/StylesCombo.php
@@ -42,10 +42,11 @@ public function getFile() {
    */
   public function getConfig(Editor $editor) {
     $config = array();
-    if (!isset($editor->settings['plugins']['stylescombo']['styles'])) {
+    $settings = $editor->getSettings();
+    if (!isset($settings['plugins']['stylescombo']['styles'])) {
       return $config;
     }
-    $styles = $editor->settings['plugins']['stylescombo']['styles'];
+    $styles = $settings['plugins']['stylescombo']['styles'];
     $config['stylesSet'] = $this->generateStylesSetSetting($styles);
     return $config;
   }
@@ -68,8 +69,9 @@ public function getButtons() {
   public function settingsForm(array $form, array &$form_state, Editor $editor) {
     // Defaults.
     $config = array('styles' => '');
-    if (isset($editor->settings['plugins']['stylescombo'])) {
-      $config = $editor->settings['plugins']['stylescombo'];
+    $settings = $editor->getSettings();
+    if (isset($settings['plugins']['stylescombo'])) {
+      $config = $settings['plugins']['stylescombo'];
     }
 
     $form['styles'] = array(
diff --git a/core/modules/ckeditor/lib/Drupal/ckeditor/Plugin/Editor/CKEditor.php b/core/modules/ckeditor/lib/Drupal/ckeditor/Plugin/Editor/CKEditor.php
index 5decf40..1a5c032 100644
--- a/core/modules/ckeditor/lib/Drupal/ckeditor/Plugin/Editor/CKEditor.php
+++ b/core/modules/ckeditor/lib/Drupal/ckeditor/Plugin/Editor/CKEditor.php
@@ -128,6 +128,11 @@ public function getDefaultSettings() {
    * {@inheritdoc}
    */
   public function settingsForm(array $form, array &$form_state, EditorEntity $editor) {
+
+    $settings = $editor->getSettings();
+
+    $module_path = drupal_get_path('module', 'ckeditor');
+
     $ckeditor_settings_toolbar = array(
       '#theme' => 'ckeditor_settings_toolbar',
       '#editor' => $editor,
@@ -152,7 +157,7 @@ public function settingsForm(array $form, array &$form_state, EditorEntity $edit
     $form['toolbar']['button_groups'] = array(
       '#type' => 'textarea',
       '#title' => t('Toolbar buttons'),
-      '#default_value' => json_encode($editor->settings['toolbar']['rows']),
+      '#default_value' => json_encode($settings['toolbar']['buttons']),
       '#attributes' => array('class' => array('ckeditor-toolbar-textarea')),
     );
 
@@ -194,18 +199,9 @@ public function settingsForm(array $form, array &$form_state, EditorEntity $edit
       'format' => $editor->id(),
       'editor' => 'ckeditor',
       'settings' => array(
-        // Single toolbar row, single button group, all existing buttons.
-        'toolbar' => array(
-         'rows' => array(
-           0 => array(
-             0 => array(
-               'name' => 'All existing buttons',
-               'items' => $all_buttons,
-             )
-           )
-         ),
-        ),
-        'plugins' => $editor->settings['plugins'],
+        // Single toolbar row that contains all existing buttons.
+        'toolbar' => array('buttons' => array(0 => $all_buttons)),
+        'plugins' => $settings['plugins'],
       ),
     ));
     $config = $this->getJSSettings($fake_editor);
@@ -381,9 +377,19 @@ public function getLibraries(EditorEntity $editor) {
    */
   public function buildToolbarJSSetting(EditorEntity $editor) {
     $toolbar = array();
-    foreach ($editor->settings['toolbar']['rows'] as $row) {
-      foreach ($row as $group) {
-        $toolbar[] = $group;
+
+    $settings = $editor->getSettings();
+    foreach ($settings['toolbar']['buttons'] as $row_number => $row) {
+      $button_group = array();
+      foreach ($row as $button_name) {
+        // Change the toolbar separators into groups.
+        if ($button_name === '|') {
+          $toolbar[] = $button_group;
+          $button_group = array();
+        }
+        else {
+          $button_group['items'][] = $button_name;
+        }
       }
       $toolbar[] = '/';
     }
diff --git a/core/modules/ckeditor/lib/Drupal/ckeditor/Tests/CKEditorAdminTest.php b/core/modules/ckeditor/lib/Drupal/ckeditor/Tests/CKEditorAdminTest.php
index f984160..812f6ed 100644
--- a/core/modules/ckeditor/lib/Drupal/ckeditor/Tests/CKEditorAdminTest.php
+++ b/core/modules/ckeditor/lib/Drupal/ckeditor/Tests/CKEditorAdminTest.php
@@ -130,7 +130,7 @@ function testAdmin() {
     $expected_settings['plugins']['stylescombo']['styles'] = '';
     $editor = entity_load('editor', 'filtered_html');
     $this->assertTrue($editor instanceof Editor, 'An Editor config entity exists now.');
-    $this->assertIdentical($expected_settings, $editor->settings, 'The Editor config entity has the correct settings.');
+    $this->assertIdentical($expected_settings, $editor->getSettings(), 'The Editor config entity has the correct settings.');
 
     // Configure the Styles plugin, and ensure the updated settings are saved.
     $this->drupalGet('admin/config/content/formats/manage/filtered_html');
@@ -141,7 +141,7 @@ function testAdmin() {
     $expected_settings['plugins']['stylescombo']['styles'] = "h1.title|Title\np.callout|Callout\n\n";
     $editor = entity_load('editor', 'filtered_html');
     $this->assertTrue($editor instanceof Editor, 'An Editor config entity exists.');
-    $this->assertIdentical($expected_settings, $editor->settings, 'The Editor config entity has the correct settings.');
+    $this->assertIdentical($expected_settings, $editor->getSettings(), 'The Editor config entity has the correct settings.');
 
     // Change the buttons that appear on the toolbar (in JavaScript, this is
     // done via drag and drop, but here we can only emulate the end result of
@@ -158,7 +158,7 @@ function testAdmin() {
     $this->drupalPostForm(NULL, $edit, t('Save configuration'));
     $editor = entity_load('editor', 'filtered_html');
     $this->assertTrue($editor instanceof Editor, 'An Editor config entity exists.');
-    $this->assertIdentical($expected_settings, $editor->settings, 'The Editor config entity has the correct settings.');
+    $this->assertIdentical($expected_settings, $editor->getSettings(), 'The Editor config entity has the correct settings.');
 
     // Now enable the ckeditor_test module, which provides one configurable
     // CKEditor plugin — this should not affect the Editor config entity.
@@ -169,7 +169,7 @@ function testAdmin() {
     $this->assertTrue(count($ultra_llama_mode_checkbox) === 1, 'The "Ultra llama mode" checkbox exists and is not checked.');
     $editor = entity_load('editor', 'filtered_html');
     $this->assertTrue($editor instanceof Editor, 'An Editor config entity exists.');
-    $this->assertIdentical($expected_settings, $editor->settings, 'The Editor config entity has the correct settings.');
+    $this->assertIdentical($expected_settings, $editor->getSettings(), 'The Editor config entity has the correct settings.');
 
     // Finally, check the "Ultra llama mode" checkbox.
     $this->drupalGet('admin/config/content/formats/manage/filtered_html');
@@ -183,7 +183,7 @@ function testAdmin() {
     $expected_settings['plugins']['llama_contextual_and_button']['ultra_llama_mode'] = 1;
     $editor = entity_load('editor', 'filtered_html');
     $this->assertTrue($editor instanceof Editor, 'An Editor config entity exists.');
-    $this->assertIdentical($expected_settings, $editor->settings);
+    $this->assertIdentical($expected_settings, $editor->getSettings(), 'The Editor config entity has the correct settings.');
   }
 
 }
diff --git a/core/modules/ckeditor/lib/Drupal/ckeditor/Tests/CKEditorLoadingTest.php b/core/modules/ckeditor/lib/Drupal/ckeditor/Tests/CKEditorLoadingTest.php
index fa3fc7a..f42325e 100644
--- a/core/modules/ckeditor/lib/Drupal/ckeditor/Tests/CKEditorLoadingTest.php
+++ b/core/modules/ckeditor/lib/Drupal/ckeditor/Tests/CKEditorLoadingTest.php
@@ -123,7 +123,8 @@ function testLoading() {
     // don't test that here.
     \Drupal::moduleHandler()->install(array('ckeditor_test'));
     $this->container->get('plugin.manager.ckeditor.plugin')->clearCachedDefinitions();
-    $editor->settings['toolbar']['buttons'][0][] = 'Llama';
+    $editor_settings = &$editor->getSettings();
+    $editor_settings['toolbar']['buttons'][0][] = 'Llama';
     $editor->save();
     $this->drupalGet('node/add/article');
     list($settings, $editor_settings_present, $editor_js_present, $body, $format_selector) = $this->getThingsToCheck();
diff --git a/core/modules/ckeditor/lib/Drupal/ckeditor/Tests/CKEditorPluginManagerTest.php b/core/modules/ckeditor/lib/Drupal/ckeditor/Tests/CKEditorPluginManagerTest.php
index db1c6a4..929064e 100644
--- a/core/modules/ckeditor/lib/Drupal/ckeditor/Tests/CKEditorPluginManagerTest.php
+++ b/core/modules/ckeditor/lib/Drupal/ckeditor/Tests/CKEditorPluginManagerTest.php
@@ -103,23 +103,25 @@ function testEnabledPlugins() {
     // cause the LlamaContextual and LlamaContextualAndButton plugins to be
     // enabled. Finally, we will add the "Strike" button back again, which would
     // cause all three plugins to be enabled.
-    $original_toolbar = $editor->settings['toolbar'];
-    $editor->settings['toolbar']['rows'][0][0]['items'][] = 'Llama';
+
+    $settings = &$editor->getSettings();
+    $original_toolbar = $settings['toolbar']['buttons'][0];
+    $settings['toolbar']['buttons'][0][] = 'Llama';
     $editor->save();
     $file = array();
     $file['b'] = 'core/modules/ckeditor/tests/modules/js/llama_button.js';
     $file['c'] = 'core/modules/ckeditor/tests/modules/js/llama_contextual.js';
     $file['cb'] = 'core/modules/ckeditor/tests/modules/js/llama_contextual_and_button.js';
     $expected = $enabled_plugins + array('llama_button' => $file['b'], 'llama_contextual_and_button' => $file['cb']);
-    $this->assertIdentical($expected, $this->manager->getEnabledPluginFiles($editor), 'The LlamaButton and LlamaContextualAndButton plugins are enabled.');
-    $this->assertIdentical(array('internal' => NULL) + $expected, $this->manager->getEnabledPluginFiles($editor, TRUE), 'The LlamaButton and LlamaContextualAndButton plugins are enabled.');
-    $editor->settings['toolbar'] = $original_toolbar;
-    $editor->settings['toolbar']['rows'][0][0]['items'][] = 'Strike';
+    $this->assertIdentical($expected, $this->manager->getEnabledPlugins($editor), 'The LlamaButton and LlamaContextualAndButton plugins are enabled.');
+    $this->assertIdentical(array('internal' => NULL) + $expected, $this->manager->getEnabledPlugins($editor, TRUE), 'The LlamaButton and LlamaContextualAndButton plugins are enabled.');
+    $settings['toolbar']['buttons'][0] = $original_toolbar;
+    $settings['toolbar']['buttons'][0][] = 'Strike';
     $editor->save();
     $expected = $enabled_plugins + array('llama_contextual' => $file['c'], 'llama_contextual_and_button' => $file['cb']);
-    $this->assertIdentical($expected, $this->manager->getEnabledPluginFiles($editor), 'The  LLamaContextual and LlamaContextualAndButton plugins are enabled.');
-    $this->assertIdentical(array('internal' => NULL) + $expected, $this->manager->getEnabledPluginFiles($editor, TRUE), 'The LlamaContextual and LlamaContextualAndButton plugins are enabled.');
-    $editor->settings['toolbar']['rows'][0][0]['items'][] = 'Llama';
+    $this->assertIdentical($expected, $this->manager->getEnabledPlugins($editor), 'The  LLamaContextual and LlamaContextualAndButton plugins are enabled.');
+    $this->assertIdentical(array('internal' => NULL) + $expected, $this->manager->getEnabledPlugins($editor, TRUE), 'The LlamaContextual and LlamaContextualAndButton plugins are enabled.');
+    $settings['toolbar']['buttons'][0][] = 'Llama';
     $editor->save();
     $expected = $enabled_plugins + array('llama_button' => $file['b'], 'llama_contextual' => $file['c'], 'llama_contextual_and_button' => $file['cb']);
     $this->assertIdentical($expected, $this->manager->getEnabledPluginFiles($editor), 'The LlamaButton, LlamaContextual and LlamaContextualAndButton plugins are enabled.');
diff --git a/core/modules/ckeditor/tests/modules/lib/Drupal/ckeditor_test/Plugin/CKEditorPlugin/LlamaContextual.php b/core/modules/ckeditor/tests/modules/lib/Drupal/ckeditor_test/Plugin/CKEditorPlugin/LlamaContextual.php
index dcb60a8..28e44f6 100644
--- a/core/modules/ckeditor/tests/modules/lib/Drupal/ckeditor_test/Plugin/CKEditorPlugin/LlamaContextual.php
+++ b/core/modules/ckeditor/tests/modules/lib/Drupal/ckeditor_test/Plugin/CKEditorPlugin/LlamaContextual.php
@@ -26,11 +26,10 @@ class LlamaContextual extends Llama implements CKEditorPluginContextualInterface
    */
   function isEnabled(Editor $editor) {
     // Automatically enable this plugin if the Underline button is enabled.
-    foreach ($editor->settings['toolbar']['rows'] as $row) {
-      foreach ($row as $group) {
-        if (in_array('Strike', $group['items'])) {
-          return TRUE;
-        }
+    $settings = $editor->getSettings();
+    foreach ($settings['toolbar']['buttons'] as $row) {
+      if (in_array('Strike', $row)) {
+        return TRUE;
       }
     }
     return FALSE;
diff --git a/core/modules/ckeditor/tests/modules/lib/Drupal/ckeditor_test/Plugin/CKEditorPlugin/LlamaContextualAndButton.php b/core/modules/ckeditor/tests/modules/lib/Drupal/ckeditor_test/Plugin/CKEditorPlugin/LlamaContextualAndButton.php
index c2ab8c5..976a90d 100644
--- a/core/modules/ckeditor/tests/modules/lib/Drupal/ckeditor_test/Plugin/CKEditorPlugin/LlamaContextualAndButton.php
+++ b/core/modules/ckeditor/tests/modules/lib/Drupal/ckeditor_test/Plugin/CKEditorPlugin/LlamaContextualAndButton.php
@@ -29,11 +29,10 @@ class LlamaContextualAndButton extends Llama implements CKEditorPluginContextual
    */
   function isEnabled(Editor $editor) {
     // Automatically enable this plugin if the Strike button is enabled.
-    foreach ($editor->settings['toolbar']['rows'] as $row) {
-      foreach ($row as $group) {
-        if (in_array('Strike', $group['items'])) {
-          return TRUE;
-        }
+    $settings = $editor->getSettings();
+    foreach ($settings['toolbar']['buttons'] as $row) {
+      if (in_array('Strike', $row)) {
+        return TRUE;
       }
     }
     return FALSE;
@@ -63,8 +62,9 @@ function getFile() {
   function settingsForm(array $form, array &$form_state, Editor $editor) {
     // Defaults.
     $config = array('ultra_llama_mode' => FALSE);
-    if (isset($editor->settings['plugins']['llama_contextual_and_button'])) {
-      $config = $editor->settings['plugins']['llama_contextual_and_button'];
+    $settings = $editor->getSettings();
+    if (isset($settings['plugins']['llama_contextual_and_button'])) {
+      $config = $settings['plugins']['llama_contextual_and_button'];
     }
 
     $form['ultra_llama_mode'] = array(
diff --git a/core/modules/editor/editor.module b/core/modules/editor/editor.module
index 9266911..462f632 100644
--- a/core/modules/editor/editor.module
+++ b/core/modules/editor/editor.module
@@ -79,7 +79,7 @@ function editor_form_filter_admin_overview_alter(&$form, $form_state) {
   $editors = \Drupal::service('plugin.manager.editor')->getDefinitions();
   foreach (element_children($form['formats']) as $format_id) {
     $editor = editor_load($format_id);
-    $editor_name = ($editor && isset($editors[$editor->editor])) ? $editors[$editor->editor]['label'] : drupal_placeholder('—');
+    $editor_name = ($editor && isset($editors[$editor->getEditor()])) ? $editors[$editor->getEditor()]['label'] : drupal_placeholder('—');
     $editor_column['editor'] = array('#markup' => $editor_name);
     $position = array_search('name', array_keys($form['formats'][$format_id])) + 1;
     $start = array_splice($form['formats'][$format_id], 0, $position, $editor_column);
@@ -110,7 +110,7 @@ function editor_form_filter_format_form_alter(&$form, &$form_state) {
     '#title' => t('Text editor'),
     '#options' => $editor_options,
     '#empty_option' => t('None'),
-    '#default_value' => $editor ? $editor->editor : '',
+    '#default_value' => $editor ? $editor->getEditor() : '',
     '#ajax' => array(
       'trigger_as' => array('name' => 'editor_configure'),
       'callback' => 'editor_form_filter_admin_form_ajax',
@@ -152,7 +152,7 @@ function editor_form_filter_format_form_alter(&$form, &$form_state) {
 
   // Add editor-specific validation and submit handlers.
   if ($editor) {
-    $plugin = $manager->createInstance($editor->editor);
+    $plugin = $manager->createInstance($editor->getEditor());
     $settings_form = array();
     $settings_form['#element_validate'][] = array($plugin, 'settingsFormValidate');
     $form['editor']['settings']['subform'] = $plugin->settingsForm($settings_form, $form_state, $editor);
@@ -173,7 +173,7 @@ function editor_form_filter_admin_format_editor_configure($form, &$form_state) {
     if ($form_state['values']['editor']['editor'] === '') {
       $form_state['editor'] = FALSE;
     }
-    elseif (empty($editor) || $form_state['values']['editor']['editor'] !== $editor->editor) {
+    elseif (empty($editor) || $form_state['values']['editor']['editor'] !== $editor->getEditor()) {
       $editor = entity_create('editor', array(
         'format' => $form_state['controller']->getEntity()->id(),
         'editor' => $form_state['values']['editor']['editor'],
diff --git a/core/modules/editor/lib/Drupal/editor/EditorInterface.php b/core/modules/editor/lib/Drupal/editor/EditorInterface.php
index 71897f9..97c295a 100644
--- a/core/modules/editor/lib/Drupal/editor/EditorInterface.php
+++ b/core/modules/editor/lib/Drupal/editor/EditorInterface.php
@@ -10,8 +10,24 @@
 use Drupal\Core\Config\Entity\ConfigEntityInterface;
 
 /**
- * Provides an interface defining a editor entity.
+ * Provides an interface defining a text editor entity.
  */
 interface EditorInterface extends ConfigEntityInterface {
 
+  /**
+   * Get the text editor used by this configured text editor entity.
+   *
+   * @return string
+   *   The text editor plugin ID.
+   */
+  public function getEditor();
+
+  /**
+   * Get the text editor settings used by this configured text editor entity.
+   *
+   * @return &array
+   *   The (nested) array containing all text editor settings.
+   */
+  public function &getSettings();
+
 }
diff --git a/core/modules/editor/lib/Drupal/editor/Entity/Editor.php b/core/modules/editor/lib/Drupal/editor/Entity/Editor.php
index 0053de4..9cf9511 100644
--- a/core/modules/editor/lib/Drupal/editor/Entity/Editor.php
+++ b/core/modules/editor/lib/Drupal/editor/Entity/Editor.php
@@ -46,21 +46,33 @@ class Editor extends ConfigEntityBase implements EditorInterface {
   public $settings = array();
 
   /**
-   * The array of image upload settings for the text editor.
-   *
-   * @var array
+   * {@inheritdoc}
    */
   public $image_upload = array();
 
   /**
-   * Overrides Drupal\Core\Entity\Entity::id().
+   * {@inheritdoc}
    */
   public function id() {
     return $this->format;
   }
 
   /**
-   * Overrides Drupal\Core\Entity\Entity::__construct()
+   * {@inheritdoc}
+   */
+  public function getEditor() {
+    return $this->editor;
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  public function &getSettings() {
+    return $this->settings;
+  }
+
+  /**
+   * {@inheritdoc}
    */
   public function __construct(array $values, $entity_type) {
     parent::__construct($values, $entity_type);
diff --git a/core/modules/editor/lib/Drupal/editor/Plugin/EditorManager.php b/core/modules/editor/lib/Drupal/editor/Plugin/EditorManager.php
index 85aa79d..510fdc6 100644
--- a/core/modules/editor/lib/Drupal/editor/Plugin/EditorManager.php
+++ b/core/modules/editor/lib/Drupal/editor/Plugin/EditorManager.php
@@ -80,7 +80,7 @@ public function getAttachments(array $format_ids) {
       // Format-specific JavaScript settings.
       $settings['editor']['formats'][$format_id] = array(
         'format' => $format_id,
-        'editor' => $editor->editor,
+        'editor' => $editor->getEditor(),
         'editorSettings' => $plugin->getJSSettings($editor),
         'editorSupportsContentFiltering' => $plugin_definition['supports_content_filtering'],
         'isXssSafe' => $plugin_definition['is_xss_safe'],
diff --git a/core/modules/editor/lib/Drupal/editor/Plugin/InPlaceEditor/Editor.php b/core/modules/editor/lib/Drupal/editor/Plugin/InPlaceEditor/Editor.php
index 8752efb..20e823e 100644
--- a/core/modules/editor/lib/Drupal/editor/Plugin/InPlaceEditor/Editor.php
+++ b/core/modules/editor/lib/Drupal/editor/Plugin/InPlaceEditor/Editor.php
@@ -35,9 +35,10 @@ public function isCompatible(FieldItemListInterface $items) {
     // This editor is compatible with processed ("rich") text fields; but only
     // if there is a currently active text format, that text format has an
     // associated editor and that editor supports inline editing.
-    elseif ($field_definition->getSetting('text_processing')) {
-      if ($editor = editor_load($items[0]->format)) {
-        $definition = \Drupal::service('plugin.manager.editor')->getDefinition($editor->editor);
+    elseif ($field_definition->getFieldSetting('text_processing')) {
+      $format_id = $items[0]['format'];
+      if (isset($format_id) && $editor = editor_load($format_id)) {
+        $definition = \Drupal::service('plugin.manager.editor')->getDefinition($editor->getEditor());
         if ($definition['supports_inline_editing'] === TRUE) {
           return TRUE;
         }
@@ -79,7 +80,8 @@ public function getAttachments() {
     $formats = array();
     foreach ($user_format_ids as $format_id) {
       $editor = editor_load($format_id);
-      if ($editor && isset($definitions[$editor->editor]) && isset($definitions[$editor->editor]['supports_inline_editing']) && $definitions[$editor->editor]['supports_inline_editing'] === TRUE) {
+      $editor_id = $editor->getEditor();
+      if ($editor && isset($definitions[$editor_id]) && isset($definitions[$editor_id]['supports_inline_editing']) && $definitions[$editor_id]['supports_inline_editing'] === TRUE) {
         $formats[] = $format_id;
       }
     }
diff --git a/core/modules/editor/lib/Drupal/editor/Tests/EditorAdminTest.php b/core/modules/editor/lib/Drupal/editor/Tests/EditorAdminTest.php
index 177e050..8d95a8b 100644
--- a/core/modules/editor/lib/Drupal/editor/Tests/EditorAdminTest.php
+++ b/core/modules/editor/lib/Drupal/editor/Tests/EditorAdminTest.php
@@ -150,11 +150,12 @@ protected function selectUnicornEditor() {
    */
   protected function verifyUnicornEditorConfiguration($format_id, $foo = 'bar') {
     $editor = editor_load($format_id);
-    $this->assertIdentical($editor->editor, 'unicorn', 'The text editor is configured correctly.');
-    $this->assertIdentical($editor->settings['foo'], $foo, 'The text editor settings are stored correctly.');
-    $this->assertIdentical($editor->settings['ponies too'], true, 'The text editor defaults are retrieved correctly.');
-    $this->assertIdentical($editor->settings['rainbows'], true, 'The text editor defaults added by hook_editor_settings_defaults() are retrieved correctly.');
-    $this->assertIdentical($editor->settings['sparkles'], false, 'The text editor defaults modified by hook_editor_settings_defaults_alter() are retrieved correctly.');
+    $settings = $editor->getSettings();
+    $this->assertIdentical($editor->getEditor(), 'unicorn', 'The text editor is configured correctly.');
+    $this->assertIdentical($settings['foo'], $foo, 'The text editor settings are stored correctly.');
+    $this->assertIdentical($settings['ponies too'], true, 'The text editor defaults are retrieved correctly.');
+    $this->assertIdentical($settings['rainbows'], true, 'The text editor defaults added by hook_editor_settings_defaults() are retrieved correctly.');
+    $this->assertIdentical($settings['sparkles'], false, 'The text editor defaults modified by hook_editor_settings_defaults_alter() are retrieved correctly.');
     $this->drupalGet('admin/config/content/formats/manage/'. $format_id);
     $select = $this->xpath('//select[@name="editor[editor]"]');
     $select_is_disabled = $this->xpath('//select[@name="editor[editor]" and @disabled="disabled"]');
diff --git a/core/modules/editor/tests/modules/lib/Drupal/editor_test/Plugin/Editor/UnicornEditor.php b/core/modules/editor/tests/modules/lib/Drupal/editor_test/Plugin/Editor/UnicornEditor.php
index 53d565c..890e1dc 100644
--- a/core/modules/editor/tests/modules/lib/Drupal/editor_test/Plugin/Editor/UnicornEditor.php
+++ b/core/modules/editor/tests/modules/lib/Drupal/editor_test/Plugin/Editor/UnicornEditor.php
@@ -46,11 +46,12 @@ function settingsForm(array $form, array &$form_state, EditorEntity $editor) {
    * {@inheritdoc}
    */
   function getJSSettings(EditorEntity $editor) {
-    $settings = array();
-    if ($editor->settings['ponies too']) {
-      $settings['ponyModeEnabled'] = TRUE;
+    $js_settings = array();
+    $settings = $editor->getSettings();
+    if ($settings['ponies too']) {
+      $js_settings['ponyModeEnabled'] = TRUE;
     }
-    return $settings;
+    return $js_settings;
   }
 
   /**
