diff --git a/core/lib/Drupal/Core/Config/Entity/ConfigEntityStorage.php b/core/lib/Drupal/Core/Config/Entity/ConfigEntityStorage.php
index 4656897..0ab9a60 100644
--- a/core/lib/Drupal/Core/Config/Entity/ConfigEntityStorage.php
+++ b/core/lib/Drupal/Core/Config/Entity/ConfigEntityStorage.php
@@ -131,7 +131,7 @@ public function loadMultiple(array $ids = NULL) {
       // Remove any invalid ids from the array.
       $passed_ids = array_intersect_key($passed_ids, $entities);
       foreach ($entities as $entity) {
-        $passed_ids[$entity->{$this->idKey}] = $entity;
+        $passed_ids[$entity->id()] = $entity;
       }
       $entities = $passed_ids;
     }
@@ -310,11 +310,6 @@ public function save(EntityInterface $entity) {
       $entity->original = $this->loadUnchanged($id);
     }
 
-    // Build an ID if none is set.
-    if (!isset($entity->{$this->idKey})) {
-      $entity->{$this->idKey} = $entity->id();
-    }
-
     $entity->preSave($this);
     $this->invokeHook('presave', $entity);
 
diff --git a/core/lib/Drupal/Core/Entity/ContentEntityDatabaseStorage.php b/core/lib/Drupal/Core/Entity/ContentEntityDatabaseStorage.php
index 6b7de03..f4a82fa 100644
--- a/core/lib/Drupal/Core/Entity/ContentEntityDatabaseStorage.php
+++ b/core/lib/Drupal/Core/Entity/ContentEntityDatabaseStorage.php
@@ -1070,7 +1070,7 @@ public function onFieldDelete(FieldConfigInterface $field) {
     // Move the table to a unique name while the table contents are being
     // deleted.
     $deleted_field = clone $field;
-    $deleted_field->deleted = TRUE;
+    $deleted_field->setDeleted(TRUE);
     $new_table = static::_fieldTableName($deleted_field);
     $revision_new_table = static::_fieldRevisionTableName($deleted_field);
     $this->database->schema()->renameTable($table, $new_table);
@@ -1176,16 +1176,16 @@ public function onFieldPurge(FieldConfigInterface $field) {
    * @see hook_schema()
    */
   public static function _fieldSqlSchema(FieldConfigInterface $field, array $schema = NULL) {
-    if ($field->deleted) {
-      $description_current = "Data storage for deleted field {$field->uuid()} ({$field->entity_type}, {$field->getName()}).";
-      $description_revision = "Revision archive storage for deleted field {$field->uuid()} ({$field->entity_type}, {$field->getName()}).";
+    if ($field->isDeleted()) {
+      $description_current = "Data storage for deleted field {$field->uuid()} ({$field->getTargetEntityTypeId()}, {$field->getName()}).";
+      $description_revision = "Revision archive storage for deleted field {$field->uuid()} ({$field->getTargetEntityTypeId()}, {$field->getName()}).";
     }
     else {
-      $description_current = "Data storage for {$field->entity_type} field {$field->getName()}.";
-      $description_revision = "Revision archive storage for {$field->entity_type} field {$field->getName()}.";
+      $description_current = "Data storage for {$field->getTargetEntityTypeId()} field {$field->getName()}.";
+      $description_revision = "Revision archive storage for {$field->getTargetEntityTypeId()} field {$field->getName()}.";
     }
 
-    $entity_type_id = $field->entity_type;
+    $entity_type_id = $field->getTargetEntityTypeId();
     $entity_manager = \Drupal::entityManager();
     $entity_type = $entity_manager->getDefinition($entity_type_id);
     $definitions = $entity_manager->getBaseFieldDefinitions($entity_type_id);
@@ -1341,7 +1341,7 @@ public static function _fieldSqlSchema(FieldConfigInterface $field, array $schem
    *
    */
   static public function _fieldTableName(FieldConfigInterface $field) {
-    if ($field->deleted) {
+    if ($field->isDeleted()) {
       // When a field is a deleted, the table is renamed to
       // {field_deleted_data_FIELD_UUID}. To make sure we don't end up with
       // table names longer than 64 characters, we hash the uuid and return the
@@ -1370,7 +1370,7 @@ static public function _fieldTableName(FieldConfigInterface $field) {
    *   A string containing the generated name for the database table.
    */
   static public function _fieldRevisionTableName(FieldConfigInterface $field) {
-    if ($field->deleted) {
+    if ($field->isDeleted()) {
       // When a field is a deleted, the table is renamed to
       // {field_deleted_revision_FIELD_UUID}. To make sure we don't end up with
       // table names longer than 64 characters, we hash the uuid and return the
@@ -1398,7 +1398,7 @@ static public function _fieldRevisionTableName(FieldConfigInterface $field) {
    */
   static protected function _generateFieldTableName(FieldConfigInterface $field, $revision) {
     $separator = $revision ? '_revision__' : '__';
-    $table_name = $field->entity_type . $separator .  $field->name;
+    $table_name = $field->getTargetEntityTypeId() . $separator .  $field->getName();
     // Limit the string to 48 characters, keeping a 16 characters margin for db
     // prefixes.
     if (strlen($table_name) > 48) {
@@ -1406,8 +1406,8 @@ static protected function _generateFieldTableName(FieldConfigInterface $field, $
       // field UUID.
       $separator = $revision ? '_r__' : '__';
       // Truncate to the same length for the current and revision tables.
-      $entity_type = substr($field->entity_type, 0, 34);
-      $field_hash = substr(hash('sha256', $field->uuid), 0, 10);
+      $entity_type = substr($field->getTargetEntityTypeId(), 0, 34);
+      $field_hash = substr(hash('sha256', $field->uuid()), 0, 10);
       $table_name = $entity_type . $separator . $field_hash;
     }
     return $table_name;
diff --git a/core/modules/comment/comment.install b/core/modules/comment/comment.install
index 40fb1a0..1c29463 100644
--- a/core/modules/comment/comment.install
+++ b/core/modules/comment/comment.install
@@ -12,7 +12,7 @@ function comment_uninstall() {
   // Remove the comment fields.
   $fields = entity_load_multiple_by_properties('field_config', array('type' => 'comment'));
   foreach ($fields as $field) {
-    entity_invoke_bundle_hook('delete', 'comment', $field->entity_type . '__' . $field->name);
+    entity_invoke_bundle_hook('delete', 'comment', $field->getTargetEntityTypeId() . '__' . $field->getName());
     $field->delete();
   }
 
diff --git a/core/modules/comment/comment.module b/core/modules/comment/comment.module
index 103c5c8..f6caaa2 100644
--- a/core/modules/comment/comment.module
+++ b/core/modules/comment/comment.module
@@ -252,7 +252,7 @@ function comment_field_instance_config_update(FieldInstanceConfigInterface $inst
 function comment_field_config_delete(FieldConfigInterface $field) {
   if ($field->getType() == 'comment') {
     // Delete all fields and displays attached to the comment bundle.
-    entity_invoke_bundle_hook('delete', 'comment', $field->entity_type . '__' . $field->getName());
+    entity_invoke_bundle_hook('delete', 'comment', $field->getTargetEntityTypeId() . '__' . $field->getName());
   }
 }
 
diff --git a/core/modules/comment/lib/Drupal/comment/Tests/CommentLanguageTest.php b/core/modules/comment/lib/Drupal/comment/Tests/CommentLanguageTest.php
index 56444a9..a10c04a 100644
--- a/core/modules/comment/lib/Drupal/comment/Tests/CommentLanguageTest.php
+++ b/core/modules/comment/lib/Drupal/comment/Tests/CommentLanguageTest.php
@@ -75,7 +75,7 @@ function setUp() {
 
     // Make comment body translatable.
     $field = field_info_field('comment', 'comment_body');
-    $field->translatable = TRUE;
+    $field->setTranslatable(TRUE);
     $field->save();
     $this->assertTrue($field->isTranslatable(), 'Comment body is translatable.');
   }
diff --git a/core/modules/comment/lib/Drupal/comment/Tests/CommentTranslationUITest.php b/core/modules/comment/lib/Drupal/comment/Tests/CommentTranslationUITest.php
index ce52ee2..3adad86 100644
--- a/core/modules/comment/lib/Drupal/comment/Tests/CommentTranslationUITest.php
+++ b/core/modules/comment/lib/Drupal/comment/Tests/CommentTranslationUITest.php
@@ -78,7 +78,7 @@ protected function getTranslatorPermissions() {
   function setupTestFields() {
     parent::setupTestFields();
     $field = field_info_field('comment', 'comment_body');
-    $field->translatable = TRUE;
+    $field->setTranslatable(TRUE);
     $field->save();
   }
 
diff --git a/core/modules/config/lib/Drupal/config/Tests/ConfigExportImportUITest.php b/core/modules/config/lib/Drupal/config/Tests/ConfigExportImportUITest.php
index 0a01bd1..fd61820 100644
--- a/core/modules/config/lib/Drupal/config/Tests/ConfigExportImportUITest.php
+++ b/core/modules/config/lib/Drupal/config/Tests/ConfigExportImportUITest.php
@@ -78,21 +78,21 @@ public function testExportImport() {
     ));
     $this->field->save();
     entity_create('field_instance_config', array(
-      'field_name' => $this->field->name,
+      'field_name' => $this->field->getName(),
       'entity_type' => 'node',
       'bundle' => $this->content_type->type,
     ))->save();
     entity_get_form_display('node', $this->content_type->type, 'default')
-      ->setComponent($this->field->name, array(
+      ->setComponent($this->field->getName(), array(
         'type' => 'text_textfield',
       ))
       ->save();
     entity_get_display('node', $this->content_type->type, 'full')
-      ->setComponent($this->field->name)
+      ->setComponent($this->field->getName())
       ->save();
 
     $this->drupalGet('node/add/' . $this->content_type->type);
-    $this->assertFieldByName("{$this->field->name}[0][value]", '', 'Widget is displayed');
+    $this->assertFieldByName("{$this->field->getName()}[0][value]", '', 'Widget is displayed');
 
     // Export the configuration.
     $this->drupalPostForm('admin/config/development/configuration/full/export', array(), 'Export');
@@ -106,18 +106,18 @@ public function testExportImport() {
     // Delete the custom field.
     $field_instances = entity_load_multiple('field_instance_config');
     foreach ($field_instances as $field_instance) {
-      if ($field_instance->field_name == $this->field->name) {
+      if ($field_instance->field_name == $this->field->getName()) {
         $field_instance->delete();
       }
     }
     $fields = entity_load_multiple('field_config');
     foreach ($fields as $field) {
-      if ($field->name == $this->field->name) {
+      if ($field->getName() == $this->field->getName()) {
         $field->delete();
       }
     }
     $this->drupalGet('node/add/' . $this->content_type->type);
-    $this->assertNoFieldByName("{$this->field->name}[0][value]", '', 'Widget is not displayed');
+    $this->assertNoFieldByName("{$this->field->getName()}[0][value]", '', 'Widget is not displayed');
 
     // Import the configuration.
     $filename = 'temporary://' . $this->randomName();
@@ -128,6 +128,6 @@ public function testExportImport() {
     $this->assertEqual(\Drupal::config('system.site')->get('slogan'), $this->newSlogan);
 
     $this->drupalGet('node/add');
-    $this->assertFieldByName("{$this->field->name}[0][value]", '', 'Widget is displayed');
+    $this->assertFieldByName("{$this->field->getName()}[0][value]", '', 'Widget is displayed');
   }
 }
diff --git a/core/modules/contact/lib/Drupal/contact/Tests/Views/ContactFieldsTest.php b/core/modules/contact/lib/Drupal/contact/Tests/Views/ContactFieldsTest.php
index 28216aa..60d63cf 100644
--- a/core/modules/contact/lib/Drupal/contact/Tests/Views/ContactFieldsTest.php
+++ b/core/modules/contact/lib/Drupal/contact/Tests/Views/ContactFieldsTest.php
@@ -53,7 +53,7 @@ protected function setUp() {
     ))->save();
 
     entity_create('field_instance_config', array(
-      'field_name' => $this->field->name,
+      'field_name' => $this->field->getName(),
       'entity_type' => 'contact_message',
       'bundle' => 'contact_message',
     ))->save();
diff --git a/core/modules/content_translation/content_translation.admin.inc b/core/modules/content_translation/content_translation.admin.inc
index 96b8d3c..8b0012b 100644
--- a/core/modules/content_translation/content_translation.admin.inc
+++ b/core/modules/content_translation/content_translation.admin.inc
@@ -357,7 +357,7 @@ function _content_translation_update_field_translatability($settings) {
     // Store updated fields.
     foreach ($fields as $field_name => $translatable) {
       $field = FieldService::fieldInfo()->getField($entity_type, $field_name);
-      $field->translatable = $translatable;
+      $field->setTranslatable($translatable);
       $field->save();
     }
   }
diff --git a/core/modules/content_translation/content_translation.module b/core/modules/content_translation/content_translation.module
index 469c1ea..4dfabac 100644
--- a/core/modules/content_translation/content_translation.module
+++ b/core/modules/content_translation/content_translation.module
@@ -709,7 +709,7 @@ function content_translation_field_extra_fields() {
 function content_translation_form_field_ui_field_edit_form_alter(array &$form, array &$form_state, $form_id) {
   $field = $form['#field'];
   $bundle = $form['#bundle'];
-  $bundle_is_translatable = content_translation_enabled($field->entity_type, $bundle);
+  $bundle_is_translatable = content_translation_enabled($field->getTargetEntityTypeId(), $bundle);
   $form['field']['translatable'] = array(
     '#type' => 'checkbox',
     '#title' => t('Users may translate this field.'),
diff --git a/core/modules/datetime/lib/Drupal/datetime/Tests/DateTimeFieldTest.php b/core/modules/datetime/lib/Drupal/datetime/Tests/DateTimeFieldTest.php
index 76b4cb9..9aac48d 100644
--- a/core/modules/datetime/lib/Drupal/datetime/Tests/DateTimeFieldTest.php
+++ b/core/modules/datetime/lib/Drupal/datetime/Tests/DateTimeFieldTest.php
@@ -66,14 +66,14 @@ function setUp() {
     ));
     $this->field->save();
     $this->instance = entity_create('field_instance_config', array(
-      'field_name' => $this->field->name,
+      'field_name' => $this->field->getName(),
       'entity_type' => 'entity_test',
       'bundle' => 'entity_test',
     ));
     $this->instance->save();
 
     entity_get_form_display($this->instance->entity_type, $this->instance->bundle, 'default')
-      ->setComponent($this->field->name, array(
+      ->setComponent($this->field->getName(), array(
         'type' => 'datetime_default',
       ))
       ->save();
@@ -84,7 +84,7 @@ function setUp() {
       'settings' => array('format_type' => 'medium'),
     );
     entity_get_display($this->instance->entity_type, $this->instance->bundle, 'full')
-      ->setComponent($this->field->name, $this->display_options)
+      ->setComponent($this->field->getName(), $this->display_options)
       ->save();
   }
 
@@ -92,7 +92,7 @@ function setUp() {
    * Tests date field functionality.
    */
   function testDateField() {
-    $field_name = $this->field->name;
+    $field_name = $this->field->getName();
 
     // Display creation form.
     $this->drupalGet('entity_test/add');
@@ -159,9 +159,9 @@ function testDateField() {
    * Tests date and time field.
    */
   function testDatetimeField() {
-    $field_name = $this->field->name;
+    $field_name = $this->field->getName();
     // Change the field to a datetime field.
-    $this->field->settings['datetime_type'] = 'datetime';
+    $this->field->setSetting('datetime_type', 'datetime');
     $this->field->save();
 
     // Display creation form.
@@ -227,9 +227,9 @@ function testDatetimeField() {
    * Tests Date List Widget functionality.
    */
   function testDatelistWidget() {
-    $field_name = $this->field->name;
+    $field_name = $this->field->getName();
     // Change the field to a datetime field.
-    $this->field->settings['datetime_type'] = 'datetime';
+    $this->field->setSetting('datetime_type', 'datetime');
     $this->field->save();
 
     // Change the widget to a datelist widget.
@@ -305,7 +305,7 @@ function testDefaultValue() {
     $field->save();
 
     $instance = entity_create('field_instance_config', array(
-      'field_name' => $field->name,
+      'field_name' => $field->getName(),
       'entity_type' => 'node',
       'bundle' => 'date_content',
     ));
@@ -315,14 +315,14 @@ function testDefaultValue() {
     $instance_edit = array(
       'default_value_input[default_date]' => 'now',
     );
-    $this->drupalPostForm('admin/structure/types/manage/date_content/fields/node.date_content.' . $field->name, $instance_edit, t('Save settings'));
+    $this->drupalPostForm('admin/structure/types/manage/date_content/fields/node.date_content.' . $field->getName(), $instance_edit, t('Save settings'));
 
     // Check that default value is selected in default value form.
-    $this->drupalGet('admin/structure/types/manage/date_content/fields/node.date_content.' . $field->name);
+    $this->drupalGet('admin/structure/types/manage/date_content/fields/node.date_content.' . $field->getName());
     $this->assertRaw('<option value="now" selected="selected">The current date</option>', 'The default value is selected in instance settings page');
 
     // Check if default_date has been stored successfully.
-    $config_entity = $this->container->get('config.factory')->get('field.instance.node.date_content.' . $field->name)->get();
+    $config_entity = $this->container->get('config.factory')->get('field.instance.node.date_content.' . $field->getName())->get();
     $this->assertEqual($config_entity['default_value'][0]['default_date'], 'now', 'Default value has been stored successfully');
 
     // Clean field_info cache in order to avoid stale cache values.
@@ -331,20 +331,20 @@ function testDefaultValue() {
     // Create a new node to check that datetime field default value is today.
     $new_node = entity_create('node', array('type' => 'date_content'));
     $expected_date = new DrupalDateTime('now', DATETIME_STORAGE_TIMEZONE);
-    $this->assertEqual($new_node->get($field->name)->offsetGet(0)->value, $expected_date->format(DATETIME_DATE_STORAGE_FORMAT));
+    $this->assertEqual($new_node->get($field->getName())->offsetGet(0)->value, $expected_date->format(DATETIME_DATE_STORAGE_FORMAT));
 
     // Remove default value.
     $instance_edit = array(
       'default_value_input[default_date]' => '',
     );
-    $this->drupalPostForm('admin/structure/types/manage/date_content/fields/node.date_content.' . $field->name, $instance_edit, t('Save settings'));
+    $this->drupalPostForm('admin/structure/types/manage/date_content/fields/node.date_content.' . $field->getName(), $instance_edit, t('Save settings'));
 
     // Check that default value is selected in default value form.
-    $this->drupalGet('admin/structure/types/manage/date_content/fields/node.date_content.' . $field->name);
+    $this->drupalGet('admin/structure/types/manage/date_content/fields/node.date_content.' . $field->getName());
     $this->assertRaw('<option value="" selected="selected">' . t('- None -') . '</option>', 'The default value is selected in instance settings page');
 
     // Check if default_date has been stored successfully.
-    $config_entity = $this->container->get('config.factory')->get('field.instance.node.date_content.' . $field->name)->get();
+    $config_entity = $this->container->get('config.factory')->get('field.instance.node.date_content.' . $field->getName())->get();
     $this->assertTrue(empty($config_entity['default_value']), 'Empty default value has been stored successfully');
 
     // Clean field_info cache in order to avoid stale cache values.
@@ -352,7 +352,7 @@ function testDefaultValue() {
 
     // Create a new node to check that datetime field default value is today.
     $new_node = entity_create('node', array('type' => 'date_content'));
-    $this->assertNull($new_node->get($field->name)->offsetGet(0)->value, 'Default value is not set');
+    $this->assertNull($new_node->get($field->getName())->offsetGet(0)->value, 'Default value is not set');
   }
 
   /**
@@ -361,9 +361,9 @@ function testDefaultValue() {
   function testInvalidField() {
 
     // Change the field to a datetime field.
-    $this->field->settings['datetime_type'] = 'datetime';
+    $this->field->setting('datetime_type', 'datetime');
     $this->field->save();
-    $field_name = $this->field->name;
+    $field_name = $this->field->getName();
 
     // Display creation form.
     $this->drupalGet('entity_test/add');
diff --git a/core/modules/edit/lib/Drupal/edit/Tests/EditorSelectionTest.php b/core/modules/edit/lib/Drupal/edit/Tests/EditorSelectionTest.php
index edd1089..96be8d1 100644
--- a/core/modules/edit/lib/Drupal/edit/Tests/EditorSelectionTest.php
+++ b/core/modules/edit/lib/Drupal/edit/Tests/EditorSelectionTest.php
@@ -93,7 +93,7 @@ public function testText() {
     $this->assertEqual('plain_text', $this->getSelectedEditor($this->entity->id(), $field_name), "Without text processing again, cardinality 1, the 'plain_text' editor is selected.");
 
     // Editor selection without text processing, cardinality >1
-    $this->field_text_field->cardinality = 2;
+    $this->field_text_field->getCardinality() = 2;
     $this->field_text_field->save();
     $this->assertEqual('form', $this->getSelectedEditor($this->entity->id(), $field_name), "Without text processing, cardinality >1, the 'form' editor is selected.");
 
@@ -142,7 +142,7 @@ public function testTextWysiwyg() {
     $this->assertEqual('wysiwyg', $this->getSelectedEditor($this->entity->id(), $field_name), "With cardinality 1, and the full_html text format, the 'wysiwyg' editor is selected.");
 
     // Editor selection with text processing, cardinality >1
-    $this->field_textarea_field->cardinality = 2;
+    $this->field_textarea_field->getCardinality() = 2;
     $this->field_textarea_field->save();
     $this->assertEqual('form', $this->getSelectedEditor($this->entity->id(), $field_name), "With cardinality >1, and both items using the full_html text format, the 'form' editor is selected.");
   }
@@ -173,7 +173,7 @@ public function testNumber() {
     $this->assertEqual('form', $this->getSelectedEditor($this->entity->id(), $field_name), "With cardinality 1, the 'form' editor is selected.");
 
     // Editor selection with cardinality >1.
-    $this->field_nr_field->cardinality = 2;
+    $this->field_nr_field->getCardinality() = 2;
     $this->field_nr_field->save();
     $this->assertEqual('form', $this->getSelectedEditor($this->entity->id(), $field_name), "With cardinality >1, the 'form' editor is selected.");
   }
diff --git a/core/modules/editor/lib/Drupal/editor/Tests/EditIntegrationTest.php b/core/modules/editor/lib/Drupal/editor/Tests/EditIntegrationTest.php
index b0075d2..eff394b 100644
--- a/core/modules/editor/lib/Drupal/editor/Tests/EditIntegrationTest.php
+++ b/core/modules/editor/lib/Drupal/editor/Tests/EditIntegrationTest.php
@@ -142,7 +142,7 @@ public function testEditorSelection() {
     $this->assertEqual('editor', $this->getSelectedEditor($this->entity->id(), $this->field_name), "With cardinality 1, and the full_html text format, the 'editor' editor is selected.");
 
     // Editor selection with text processing, cardinality >1
-    $this->field_textarea_field->cardinality = 2;
+    $this->field_textarea_field->setCardinality(2);
     $this->field_textarea_field->save();
     $this->assertEqual('form', $this->getSelectedEditor($this->entity->id(), $this->field_name), "With cardinality >1, and both items using the full_html text format, the 'form' editor is selected.");
   }
diff --git a/core/modules/entity/lib/Drupal/entity/Tests/EntityDisplayTest.php b/core/modules/entity/lib/Drupal/entity/Tests/EntityDisplayTest.php
index 31ea4e8..df0163e 100644
--- a/core/modules/entity/lib/Drupal/entity/Tests/EntityDisplayTest.php
+++ b/core/modules/entity/lib/Drupal/entity/Tests/EntityDisplayTest.php
@@ -160,7 +160,7 @@ public function testFieldComponent() {
 
     // Check that providing no options results in default values being used.
     $display->setComponent($field_name);
-    $field_type_info = \Drupal::service('plugin.manager.field.field_type')->getDefinition($field->type);
+    $field_type_info = \Drupal::service('plugin.manager.field.field_type')->getDefinition($field->getType());
     $default_formatter = $field_type_info['default_formatter'];
     $formatter_settings =  \Drupal::service('plugin.manager.field.formatter')->getDefaultSettings($default_formatter);
     $expected = array(
diff --git a/core/modules/entity/lib/Drupal/entity/Tests/EntityFormDisplayTest.php b/core/modules/entity/lib/Drupal/entity/Tests/EntityFormDisplayTest.php
index eb0477f..2ec940f 100644
--- a/core/modules/entity/lib/Drupal/entity/Tests/EntityFormDisplayTest.php
+++ b/core/modules/entity/lib/Drupal/entity/Tests/EntityFormDisplayTest.php
@@ -78,7 +78,7 @@ public function testFieldComponent() {
 
     // Check that providing no options results in default values being used.
     $form_display->setComponent($field_name);
-    $field_type_info = \Drupal::service('plugin.manager.field.field_type')->getDefinition($field->type);
+    $field_type_info = \Drupal::service('plugin.manager.field.field_type')->getDefinition($field->getType());
     $default_widget = $field_type_info['default_widget'];
     $widget_settings = \Drupal::service('plugin.manager.field.widget')->getDefaultSettings($default_widget);
     $expected = array(
diff --git a/core/modules/entity_reference/entity_reference.module b/core/modules/entity_reference/entity_reference.module
index 75d9dfd..24a15e0 100644
--- a/core/modules/entity_reference/entity_reference.module
+++ b/core/modules/entity_reference/entity_reference.module
@@ -66,7 +66,7 @@ function entity_reference_field_widget_info_alter(&$info) {
  * Reset the instance handler settings, when the target type is changed.
  */
 function entity_reference_field_config_update(FieldConfigInterface $field) {
-  if ($field->type != 'entity_reference') {
+  if ($field->getType() != 'entity_reference') {
     // Only act on entity reference fields.
     return;
   }
@@ -76,14 +76,14 @@ function entity_reference_field_config_update(FieldConfigInterface $field) {
     return;
   }
 
-  if (empty($field->bundles)) {
+  if (!$field->getBundles()) {
     // Field has no instances.
     return;
   }
 
   $field_name = $field->getName();
 
-  foreach ($field->bundles() as $entity_type => $bundles) {
+  foreach ($field->getBundles() as $entity_type => $bundles) {
     foreach ($bundles as $bundle) {
       $instance = field_info_instance($entity_type, $field_name, $bundle);
       $instance->settings['handler_settings'] = array();
diff --git a/core/modules/entity_reference/lib/Drupal/entity_reference/Tests/EntityReferenceFieldDefaultValueTest.php b/core/modules/entity_reference/lib/Drupal/entity_reference/Tests/EntityReferenceFieldDefaultValueTest.php
index 9c316a5..e0a774e 100644
--- a/core/modules/entity_reference/lib/Drupal/entity_reference/Tests/EntityReferenceFieldDefaultValueTest.php
+++ b/core/modules/entity_reference/lib/Drupal/entity_reference/Tests/EntityReferenceFieldDefaultValueTest.php
@@ -56,7 +56,7 @@ function testEntityReferenceDefaultValue() {
     ));
     $this->field->save();
     $this->instance = entity_create('field_instance_config', array(
-      'field_name' => $this->field->name,
+      'field_name' => $this->field->getName(),
       'entity_type' => 'node',
       'bundle' => 'reference_content',
       'settings' => array(
@@ -71,16 +71,16 @@ function testEntityReferenceDefaultValue() {
 
     // Set created node as default_value.
     $instance_edit = array(
-      'default_value_input[' . $this->field->name . '][0][target_id]' => $referenced_node->getTitle() . ' (' .$referenced_node->id() . ')',
+      'default_value_input[' . $this->field->getName() . '][0][target_id]' => $referenced_node->getTitle() . ' (' .$referenced_node->id() . ')',
     );
-    $this->drupalPostForm('admin/structure/types/manage/reference_content/fields/node.reference_content.' . $this->field->name, $instance_edit, t('Save settings'));
+    $this->drupalPostForm('admin/structure/types/manage/reference_content/fields/node.reference_content.' . $this->field->getName(), $instance_edit, t('Save settings'));
 
     // Check that default value is selected in default value form.
-    $this->drupalGet('admin/structure/types/manage/reference_content/fields/node.reference_content.' . $this->field->name);
-    $this->assertRaw('name="default_value_input[' . $this->field->name . '][0][target_id]" value="' . $referenced_node->getTitle() .' (' .$referenced_node->id() . ')', 'The default value is selected in instance settings page');
+    $this->drupalGet('admin/structure/types/manage/reference_content/fields/node.reference_content.' . $this->field->getName());
+    $this->assertRaw('name="default_value_input[' . $this->field->getName() . '][0][target_id]" value="' . $referenced_node->getTitle() .' (' .$referenced_node->id() . ')', 'The default value is selected in instance settings page');
 
     // Check if the ID has been converted to UUID in config entity.
-    $config_entity = $this->container->get('config.factory')->get('field.instance.node.reference_content.' . $this->field->name)->get();
+    $config_entity = $this->container->get('config.factory')->get('field.instance.node.reference_content.' . $this->field->getName())->get();
     $this->assertTrue(isset($config_entity['default_value'][0]['target_uuid']), 'Default value contains target_uuid property');
     $this->assertEqual($config_entity['default_value'][0]['target_uuid'], $referenced_node->uuid(), 'Content uuid and config entity uuid are the same');
 
@@ -89,7 +89,7 @@ function testEntityReferenceDefaultValue() {
 
     // Create a new node to check that UUID has been converted to numeric ID.
     $new_node = entity_create('node', array('type' => 'reference_content'));
-    $this->assertEqual($new_node->get($this->field->name)->offsetGet(0)->target_id, $referenced_node->id());
+    $this->assertEqual($new_node->get($this->field->getName())->offsetGet(0)->target_id, $referenced_node->id());
   }
 
 }
diff --git a/core/modules/field/field.info.inc b/core/modules/field/field.info.inc
index 119f6fa..b4674e2 100644
--- a/core/modules/field/field.info.inc
+++ b/core/modules/field/field.info.inc
@@ -61,7 +61,7 @@ function field_info_cache_clear() {
 function field_info_fields() {
   // Filter out deleted fields.
   return array_filter(Field::fieldInfo()->getFields(), function ($field) {
-    return !$field->deleted;
+    return !$field->isDeleted();
   });
 }
 
diff --git a/core/modules/field/field.module b/core/modules/field/field.module
index 52f3996..2bfb870 100644
--- a/core/modules/field/field.module
+++ b/core/modules/field/field.module
@@ -152,7 +152,7 @@ function field_system_info_alter(&$info, Extension $file, $type) {
       // remains no actual, non-deleted fields)
       $non_deleted = FALSE;
       foreach ($fields as $field) {
-        if (empty($field->deleted)) {
+        if (!$field->isDeleted()) {
           $non_deleted = TRUE;
           break;
         }
diff --git a/core/modules/field/field.purge.inc b/core/modules/field/field.purge.inc
index 212c2b5..6cfadd0 100644
--- a/core/modules/field/field.purge.inc
+++ b/core/modules/field/field.purge.inc
@@ -120,7 +120,7 @@ function field_purge_batch($batch_size) {
     // We cannot purge anything if the entity type is unknown (e.g. the
     // providing module was uninstalled).
     // @todo Revisit after https://drupal.org/node/2080823.
-    if (!isset($info[$field->entity_type])) {
+    if (!isset($info[$field->getTargetEntityTypeId()])) {
       continue;
     }
 
diff --git a/core/modules/field/field.views.inc b/core/modules/field/field.views.inc
index c142163..337caa7 100644
--- a/core/modules/field/field.views.inc
+++ b/core/modules/field/field.views.inc
@@ -22,7 +22,7 @@ function field_views_data() {
 
   foreach (field_info_fields() as $field) {
     if (_field_views_is_sql_entity_type($field)) {
-      $result = (array) $module_handler->invoke($field->module, 'field_views_data', array($field));
+      $result = (array) $module_handler->invoke($field->getModule(), 'field_views_data', array($field));
       if (empty($result)) {
         $result = field_views_field_default_views_data($field);
       }
@@ -48,7 +48,7 @@ function field_views_data() {
 function field_views_data_alter(&$data) {
   foreach (field_info_fields() as $field) {
     if (_field_views_is_sql_entity_type($field)) {
-      $function = $field->module . '_field_views_data_views_data_alter';
+      $function = $field->getModule() . '_field_views_data_views_data_alter';
       if (function_exists($function)) {
         $function($data, $field);
       }
@@ -67,7 +67,7 @@ function field_views_data_alter(&$data) {
  */
 function _field_views_is_sql_entity_type(FieldConfigInterface $field) {
   $entity_manager = \Drupal::entityManager();
-  if ($entity_manager->getDefinition($field->entity_type) && $entity_manager->getStorage($field->entity_type) instanceof ContentEntityDatabaseStorage) {
+  if ($entity_manager->getDefinition($field->getTargetEntityTypeId()) && $entity_manager->getStorage($field->getEntityTypeId()) instanceof ContentEntityDatabaseStorage) {
     return TRUE;
   }
 }
@@ -125,7 +125,7 @@ function field_views_field_default_views_data(FieldConfigInterface $field) {
 
   // Grab information about the entity type tables.
   $entity_manager = \Drupal::entityManager();
-  $entity_type_id = $field->entity_type;
+  $entity_type_id = $field->getTargetEntityTypeId();
   $entity_type = $entity_manager->getDefinition($entity_type_id);
   if (!$entity_table = $entity_type->getBaseTable()) {
     return $data;
diff --git a/core/modules/field/lib/Drupal/field/Entity/FieldConfig.php b/core/modules/field/lib/Drupal/field/Entity/FieldConfig.php
index ff54ff4..935e612 100644
--- a/core/modules/field/lib/Drupal/field/Entity/FieldConfig.php
+++ b/core/modules/field/lib/Drupal/field/Entity/FieldConfig.php
@@ -50,7 +50,7 @@ class FieldConfig extends ConfigEntityBase implements FieldConfigInterface {
    *
    * @var string
    */
-  public $id;
+  protected $id;
 
   /**
    * The field name.
@@ -63,14 +63,14 @@ class FieldConfig extends ConfigEntityBase implements FieldConfigInterface {
    *
    * @var string
    */
-  public $name;
+  protected $name;
 
   /**
    * The name of the entity type the field can be attached to.
    *
    * @var string
    */
-  public $entity_type;
+  protected $entity_type;
 
   /**
    * The field type.
@@ -79,14 +79,14 @@ class FieldConfig extends ConfigEntityBase implements FieldConfigInterface {
    *
    * @var string
    */
-  public $type;
+  protected $type;
 
   /**
    * The name of the module that provides the field type.
    *
    * @var string
    */
-  public $module;
+  protected $module;
 
   /**
    * Field-type specific settings.
@@ -96,7 +96,7 @@ class FieldConfig extends ConfigEntityBase implements FieldConfigInterface {
    *
    * @var array
    */
-  public $settings = array();
+  protected $settings = array();
 
   /**
    * The field cardinality.
@@ -107,7 +107,7 @@ class FieldConfig extends ConfigEntityBase implements FieldConfigInterface {
    *
    * @var integer
    */
-  public $cardinality = 1;
+  protected $cardinality = 1;
 
   /**
    * Flag indicating whether the field is translatable.
@@ -116,7 +116,7 @@ class FieldConfig extends ConfigEntityBase implements FieldConfigInterface {
    *
    * @var bool
    */
-  public $translatable = FALSE;
+  protected $translatable = FALSE;
 
   /**
    * Flag indicating whether the field is available for editing.
@@ -130,7 +130,7 @@ class FieldConfig extends ConfigEntityBase implements FieldConfigInterface {
    *
    * @var bool
    */
-  public $locked = FALSE;
+  protected $locked = FALSE;
 
   /**
    * The custom storage indexes for the field data storage.
@@ -148,7 +148,7 @@ class FieldConfig extends ConfigEntityBase implements FieldConfigInterface {
    *
    * @var array
    */
-  public $indexes = array();
+  protected $indexes = array();
 
   /**
    * Flag indicating whether the field is deleted.
@@ -163,7 +163,7 @@ class FieldConfig extends ConfigEntityBase implements FieldConfigInterface {
    *
    * @var bool
    */
-  public $deleted = FALSE;
+  protected $deleted = FALSE;
 
   /**
    * The field schema.
@@ -231,7 +231,7 @@ public function __construct(array $values, $entity_type = 'field_config') {
    * {@inheritdoc}
    */
   public function id() {
-    return $this->entity_type . '.' . $this->name;
+    return $this->getTargetEntityTypeId() . '.' . $this->getName();
   }
 
   /**
@@ -303,34 +303,34 @@ protected function preSaveNew(EntityStorageInterface $storage) {
     // Field name cannot be longer than FieldConfig::NAME_MAX_LENGTH characters.
     // We use Unicode::strlen() because the DB layer assumes that column widths
     // are given in characters rather than bytes.
-    if (Unicode::strlen($this->name) > static::NAME_MAX_LENGTH) {
+    if (Unicode::strlen($this->getName()) > static::NAME_MAX_LENGTH) {
       throw new FieldException(format_string(
         'Attempt to create a field with an ID longer than @max characters: %name', array(
           '@max' => static::NAME_MAX_LENGTH,
-          '%name' => $this->name,
+          '%name' => $this->getName(),
         )
       ));
     }
 
     // Disallow reserved field names.
-    $disallowed_field_names = array_keys($entity_manager->getBaseFieldDefinitions($this->entity_type));
-    if (in_array($this->name, $disallowed_field_names)) {
-      throw new FieldException(format_string('Attempt to create field %name which is reserved by entity type %type.', array('%name' => $this->name, '%type' => $this->entity_type)));
+    $disallowed_field_names = array_keys($entity_manager->getBaseFieldDefinitions($this->getTargetEntityTypeId()));
+    if (in_array($this->getName(), $disallowed_field_names)) {
+      throw new FieldException(format_string('Attempt to create field %name which is reserved by entity type %type.', array('%name' => $this->getName(), '%type' => $this->getTargetEntityTypeId())));
     }
 
     // Check that the field type is known.
-    $field_type = $field_type_manager->getDefinition($this->type);
+    $field_type = $field_type_manager->getDefinition($this->getType());
     if (!$field_type) {
-      throw new FieldException(format_string('Attempt to create a field of unknown type %type.', array('%type' => $this->type)));
+      throw new FieldException(format_string('Attempt to create a field of unknown type %type.', array('%type' => $this->getType())));
     }
-    $this->module = $field_type['provider'];
+    $this->setModule($field_type['provider']);
 
     // Make sure all settings are present, so that a complete field
     // definition is passed to the various hooks and written to config.
-     $this->settings += $field_type_manager->getDefaultSettings($this->type);
+     $this->settings += $field_type_manager->getDefaultSettings($this->getType());
 
     // Notify the entity storage.
-    $entity_manager->getStorage($this->entity_type)->onFieldCreate($this);
+    $entity_manager->getStorage($this->getTargetEntityTypeId())->onFieldCreate($this);
   }
 
   /**
@@ -339,7 +339,7 @@ protected function preSaveNew(EntityStorageInterface $storage) {
   public function calculateDependencies() {
     parent::calculateDependencies();
     // Ensure the field is dependent on the providing module.
-    $this->addDependency('module', $this->module);
+    $this->addDependency('module', $this->getModule());
     return $this->dependencies;
   }
 
@@ -355,16 +355,16 @@ protected function preSaveUpdated(EntityStorageInterface $storage) {
     $field_type_manager = \Drupal::service('plugin.manager.field.field_type');
 
     // Some updates are always disallowed.
-    if ($this->type != $this->original->type) {
+    if ($this->getType() != $this->original->getType()) {
       throw new FieldException("Cannot change an existing field's type.");
     }
-    if ($this->entity_type != $this->original->entity_type) {
+    if ($this->getTargetEntityTypeId() != $this->original->getTargetEntityTypeId()) {
       throw new FieldException("Cannot change an existing field's entity_type.");
     }
 
     // Make sure all settings are present, so that a complete field
     // definition is passed to the various hooks and written to config.
-    $this->settings += $field_type_manager->getDefaultSettings($this->type);
+    $this->settings += $field_type_manager->getDefaultSettings($this->getType());
 
     // See if any module forbids the update by throwing an exception. This
     // invokes hook_field_config_update_forbid().
@@ -373,7 +373,7 @@ protected function preSaveUpdated(EntityStorageInterface $storage) {
     // Notify the storage. The controller can reject the definition
     // update as invalid by raising an exception, which stops execution before
     // the definition is written to config.
-    $entity_manager->getStorage($this->entity_type)->onFieldUpdate($this);
+    $entity_manager->getStorage($this->getTargetEntityTypeId())->onFieldUpdate($this);
   }
 
   /**
@@ -405,9 +405,9 @@ public static function preDelete(EntityStorageInterface $storage, array $fields)
     // no instances will be found here.
     $instance_ids = array();
     foreach ($fields as $field) {
-      if (!$field->deleted) {
+      if (!$field->isDeleted()) {
         foreach ($field->getBundles() as $bundle) {
-          $instance_ids[] = "{$field->entity_type}.$bundle.{$field->name}";
+          $instance_ids[] = "{$field->entity_type}.$bundle.{$field->getName()}";
         }
       }
     }
@@ -424,11 +424,11 @@ public static function preDelete(EntityStorageInterface $storage, array $fields)
     // during field_purge_batch().
     $deleted_fields = $state->get('field.field.deleted') ?: array();
     foreach ($fields as $field) {
-      if (!$field->deleted) {
+      if (!$field->isDeleted()) {
         $config = $field->toArray();
         $config['deleted'] = TRUE;
         $config['bundles'] = $field->getBundles();
-        $deleted_fields[$field->uuid] = $config;
+        $deleted_fields[$field->uuid()] = $config;
       }
     }
 
@@ -441,8 +441,8 @@ public static function preDelete(EntityStorageInterface $storage, array $fields)
   public static function postDelete(EntityStorageInterface $storage, array $fields) {
     // Notify the storage.
     foreach ($fields as $field) {
-      if (!$field->deleted) {
-        \Drupal::entityManager()->getStorage($field->entity_type)->onFieldDelete($field);
+      if (!$field->isDeleted()) {
+        \Drupal::entityManager()->getStorage($field->getTargetEntityTypeId())->onFieldDelete($field);
       }
     }
 
@@ -463,12 +463,12 @@ public function getSchema() {
 
       // Check that the schema does not include forbidden column names.
       if (array_intersect(array_keys($schema['columns']), static::getReservedColumns())) {
-        throw new FieldException(format_string('Illegal field type @field_type on @field_name.', array('@field_type' => $this->type, '@field_name' => $this->name)));
+        throw new FieldException(format_string('Illegal field type @field_type on @field_name.', array('@field_type' => $this->getType(), '@field_name' => $this->getName())));
       }
 
       // Merge custom indexes with those specified by the field type. Custom
       // indexes prevail.
-      $schema['indexes'] = $this->indexes + $schema['indexes'];
+      $schema['indexes'] = $this->getIndexes() + $schema['indexes'];
 
       $this->schema = $schema;
     }
@@ -501,16 +501,30 @@ public function getColumns() {
    * {@inheritdoc}
    */
   public function getBundles() {
-    if (empty($this->deleted)) {
+    $deleted = $this->isDeleted();
+    if (empty($deleted)) {
       $map = field_info_field_map();
-      if (isset($map[$this->entity_type][$this->name]['bundles'])) {
-        return $map[$this->entity_type][$this->name]['bundles'];
+      if (isset($map[$this->getTargetEntityTypeId()][$this->getName()]['bundles'])) {
+        return $map[$this->getTargetEntityTypeId()][$this->getName()]['bundles'];
       }
     }
     return array();
   }
 
   /**
+   * Sets the field config name.
+   *
+   * @param string $name
+   *   The field config name.
+   *
+   * @return $this
+   */
+  public function setName($name) {
+    $this->set('name', $name);
+    return $this;
+  }
+
+  /**
    * {@inheritdoc}
    */
   public function getName() {
@@ -518,6 +532,88 @@ public function getName() {
   }
 
   /**
+   * Sets the field config indexes.
+   *
+   * @param array $indexes
+   *   The field config indexes.
+   *
+   * @return $this
+   */
+  public function setIndexes($indexes) {
+    $this->set('indexes', $indexes);
+    return $this;
+  }
+
+  /**
+   * Returns the indexes array of the field config.
+   *
+   * @return array
+   *   The indexes array.
+   */
+  public function getIndexes() {
+    return $this->indexes;
+  }
+
+  /**
+   * Sets the field config deleted property.
+   *
+   * @param bool $deleted
+   *   The field config deleted property.
+   *
+   * @return $this
+   */
+  public function setDeleted($deleted) {
+    $this->set('deleted', $deleted);
+    return $this;
+  }
+
+  /**
+   * Returns the deleted property of the field config.
+   *
+   * @return bool
+   *   The deleted property.
+   */
+  public function isDeleted() {
+    return $this->deleted;
+  }
+
+  /**
+   * Sets the field config module.
+   *
+   * @param string $module
+   *   The field config module.
+   *
+   * @return $this
+   */
+  public function setModule($module) {
+    $this->set('module', $module);
+    return $this;
+  }
+
+  /**
+   * Returns the name of the module providing the field type.
+   *
+   * @return string
+   *   The name of the module that provides the field type.
+   */
+  public function getModule() {
+    return $this->module;
+  }
+
+  /**
+   * Sets the field type.
+   *
+   * @param string $type
+   *   The field type.
+   *
+   * @return $this
+   */
+  public function setType($type) {
+    $this->type = $type;
+    return $this;
+  }
+
+  /**
    * {@inheritdoc}
    */
   public function getType() {
@@ -534,8 +630,8 @@ public function getSettings() {
     //   $this.
     $field_type_manager = \Drupal::service('plugin.manager.field.field_type');
 
-    $settings = $field_type_manager->getDefaultSettings($this->type);
-    $instance_settings = $field_type_manager->getDefaultInstanceSettings($this->type);
+    $settings = $field_type_manager->getDefaultSettings($this->getType());
+    $instance_settings = $field_type_manager->getDefaultInstanceSettings($this->getType());
     return $this->settings + $settings + $instance_settings;
   }
 
@@ -559,6 +655,34 @@ public function getSetting($setting_name) {
   }
 
   /**
+   * Sets the value for a field setting.
+   *
+   * @param string $setting_name
+   *   The name of the setting.
+   * @param mixed $value
+   *   The value of the setting.
+   *
+   * @return $this
+   */
+  public function setSetting($setting_name, $value) {
+    $this->settings[$setting_name] = $value;
+    return $this;
+  }
+
+  /**
+   * Sets field settings.
+   *
+   * @param string $settings
+   *   The array of field settings.
+   *
+   * @return $this
+   */
+  public function setSettings($settings) {
+    $this->set('settings', $settings);
+    return $this;
+  }
+
+  /**
    * {@inheritdoc}
    */
   public function isTranslatable() {
@@ -615,6 +739,19 @@ public function getCardinality() {
   }
 
   /**
+   * Sets the maximum number of items allowed for the field.
+   *
+   * @param integer $cardinality
+   *   The cardinality value.
+   *
+   * @return $this
+   */
+  public function setCardinality($cardinality) {
+    $this->set('cardinality', $cardinality);
+    return $this;
+  }
+
+  /**
    * {@inheritdoc}
    */
   public function isRequired() {
@@ -637,6 +774,18 @@ public function isLocked() {
   }
 
   /**
+   * Sets the locked flag.
+   *
+   * @param bool $locked
+   *
+   * @return $this
+   */
+  public function setLocked($locked) {
+    $this->set('locked', $locked);
+    return $this;
+  }
+
+  /**
    * {@inheritdoc}
    */
   public function getDefaultValue(EntityInterface $entity) { }
@@ -657,6 +806,19 @@ public function getDisplayOptions($display_context) {
   }
 
   /**
+   * Sets the entity type of the field config.
+   *
+   * @param string $entity_type
+   *   The entity type.
+   *
+   * @return $this
+   */
+  public function setTargetEntityTypeId($entity_type) {
+    $this->set('entity_type', $entity_type);
+    return $this;
+  }
+
+  /**
    * {@inheritdoc}
    */
   public function getTargetEntityTypeId() {
@@ -691,14 +853,14 @@ public function hasData() {
       $columns = array_keys($storage_details['columns']);
       $factory = \Drupal::service('entity.query');
       // Entity Query throws an exception if there is no base table.
-      $entity_type = \Drupal::entityManager()->getDefinition($this->entity_type);
+      $entity_type = \Drupal::entityManager()->getDefinition($this->getTargetEntityTypeId());
       if (!$entity_type->getBaseTable()) {
         return FALSE;
       }
-      $query = $factory->get($this->entity_type);
+      $query = $factory->get($this->getTargetEntityTypeId());
       $group = $query->orConditionGroup();
       foreach ($columns as $column) {
-        $group->exists($this->name . '.' . $column);
+        $group->exists($this->getName() . '.' . $column);
       }
       $result = $query
         ->condition($group)
diff --git a/core/modules/field/lib/Drupal/field/Entity/FieldInstanceConfig.php b/core/modules/field/lib/Drupal/field/Entity/FieldInstanceConfig.php
index aa77ef8..88f085a 100644
--- a/core/modules/field/lib/Drupal/field/Entity/FieldInstanceConfig.php
+++ b/core/modules/field/lib/Drupal/field/Entity/FieldInstanceConfig.php
@@ -265,16 +265,16 @@ public function __construct(array $values, $entity_type = 'field_instance_config
 
     // Check required properties.
     if (empty($values['entity_type'])) {
-      throw new FieldException(format_string('Attempt to create an instance of field @field_name without an entity_type.', array('@field_name' => $this->field->name)));
+      throw new FieldException(format_string('Attempt to create an instance of field @field_name without an entity_type.', array('@field_name' => $this->field->getName())));
     }
     if (empty($values['bundle'])) {
-      throw new FieldException(format_string('Attempt to create an instance of field @field_name without a bundle.', array('@field_name' => $this->field->name)));
+      throw new FieldException(format_string('Attempt to create an instance of field @field_name without a bundle.', array('@field_name' => $this->field->getName())));
     }
 
     // 'Label' defaults to the field name (mostly useful for field instances
     // created in tests).
     $values += array(
-      'label' => $this->field->name,
+      'label' => $this->field->getName(),
     );
     parent::__construct($values, $entity_type);
   }
@@ -283,7 +283,7 @@ public function __construct(array $values, $entity_type = 'field_instance_config
    * {@inheritdoc}
    */
   public function id() {
-    return $this->entity_type . '.' . $this->bundle . '.' . $this->field->name;
+    return $this->entity_type . '.' . $this->bundle . '.' . $this->field->getName();
   }
 
   /**
@@ -314,8 +314,8 @@ public function toArray() {
 
     // Additionally, include the field type, that is needed to be able to
     // generate the field-type-dependant parts of the config schema.
-    if (isset($this->field->type)) {
-      $properties['field_type'] = $this->field->type;
+    if (isset($this->field)) {
+      $properties['field_type'] = $this->field->getType();
     }
 
     return $properties;
@@ -335,7 +335,7 @@ public function preSave(EntityStorageInterface $storage) {
 
     if ($this->isNew()) {
       // Set the default instance settings.
-      $this->settings += $field_type_manager->getDefaultInstanceSettings($this->field->type);
+      $this->settings += $field_type_manager->getDefaultInstanceSettings($this->field->getType());
       // Notify the entity storage.
       $entity_manager->getStorage($this->entity_type)->onInstanceCreate($this);
     }
@@ -351,7 +351,7 @@ public function preSave(EntityStorageInterface $storage) {
         throw new FieldException("Cannot change an existing instance's field.");
       }
       // Set the default instance settings.
-      $this->settings += $field_type_manager->getDefaultInstanceSettings($this->field->type);
+      $this->settings += $field_type_manager->getDefaultInstanceSettings($this->field->getType());
       // Notify the entity storage.
       $entity_manager->getStorage($this->entity_type)->onInstanceUpdate($this);
     }
@@ -454,11 +454,11 @@ public static function postDelete(EntityStorageInterface $storage, array $instan
       if (!$instance->deleted) {
         $view_modes = \Drupal::entityManager()->getViewModeOptions($instance->entity_type, TRUE);
         foreach (array_keys($view_modes) as $mode) {
-          $displays_to_update['entity_view_display'][$instance->entity_type . '.' . $instance->bundle . '.' . $mode][] = $instance->field->name;
+          $displays_to_update['entity_view_display'][$instance->entity_type . '.' . $instance->bundle . '.' . $mode][] = $instance->field->getName();
         }
         $form_modes = \Drupal::entityManager()->getFormModeOptions($instance->entity_type, TRUE);
         foreach (array_keys($form_modes) as $mode) {
-          $displays_to_update['entity_form_display'][$instance->entity_type . '.' . $instance->bundle . '.' . $mode][] = $instance->field->name;
+          $displays_to_update['entity_form_display'][$instance->entity_type . '.' . $instance->bundle . '.' . $mode][] = $instance->field->getName();
         }
       }
     }
@@ -483,14 +483,14 @@ public function getField() {
    * {@inheritdoc}
    */
   public function getName() {
-    return $this->field->name;
+    return $this->field->getName();
   }
 
   /**
    * {@inheritdoc}
    */
   public function getType() {
-    return $this->field->type;
+    return $this->field->getType();
   }
 
   /**
@@ -523,7 +523,7 @@ public function getProvider() {
    * {@inheritdoc}
    */
   public function isTranslatable() {
-    return $this->field->translatable;
+    return $this->field->isTranslatable();
   }
 
   /**
@@ -575,7 +575,7 @@ public function getDescription() {
    * {@inheritdoc}
    */
   public function getCardinality() {
-    return $this->field->cardinality;
+    return $this->field->getCardinality();
   }
 
   /**
diff --git a/core/modules/field/lib/Drupal/field/FieldConfigStorage.php b/core/modules/field/lib/Drupal/field/FieldConfigStorage.php
index ba1803a..d3e1130 100644
--- a/core/modules/field/lib/Drupal/field/FieldConfigStorage.php
+++ b/core/modules/field/lib/Drupal/field/FieldConfigStorage.php
@@ -119,11 +119,11 @@ public function loadByProperties(array $conditions = array()) {
         // Extract the actual value against which the condition is checked.
         switch ($key) {
           case 'field_name';
-            $checked_value = $field->name;
+            $checked_value = $field->getName();
             break;
 
           default:
-            $checked_value = $field->$key;
+            $checked_value = $field->get($key);
             break;
         }
 
@@ -135,7 +135,7 @@ public function loadByProperties(array $conditions = array()) {
 
       // When returning deleted fields, key the results by UUID since they can
       // include several fields with the same ID.
-      $key = $include_deleted ? $field->uuid : $field->id;
+      $key = $include_deleted ? $field->uuid() : $field->id();
       $matching_fields[$key] = $field;
     }
 
diff --git a/core/modules/field/lib/Drupal/field/FieldInfo.php b/core/modules/field/lib/Drupal/field/FieldInfo.php
index 969b719..119f55f 100644
--- a/core/modules/field/lib/Drupal/field/FieldInfo.php
+++ b/core/modules/field/lib/Drupal/field/FieldInfo.php
@@ -251,8 +251,8 @@ public function getFields() {
 
     // Fill the name/ID map.
     foreach ($this->fieldsById as $field) {
-      if (!$field->deleted) {
-        $this->fieldIdsByName[$field->entity_type][$field->getName()] = $field->uuid();
+      if (!$field->isDeleted()) {
+        $this->fieldIdsByName[$field->getTargetEntityTypeId()][$field->getName()] = $field->uuid();
       }
     }
 
@@ -375,8 +375,8 @@ public function getFieldById($field_id) {
 
       // Store in the static cache.
       $this->fieldsById[$field->uuid()] = $field;
-      if (!$field->deleted) {
-        $this->fieldIdsByName[$field->entity_type][$field->getName()] = $field->uuid();
+      if (!$field->isDeleted()) {
+        $this->fieldIdsByName[$field->getTargetEntityTypeId()][$field->getName()] = $field->uuid();
       }
 
       return $field;
@@ -419,8 +419,8 @@ public function getBundleInstances($entity_type, $bundle) {
       foreach ($fields as $field) {
         if (!isset($this->fieldsById[$field->uuid()])) {
           $this->fieldsById[$field->uuid()] = $field;
-          if (!$field->deleted) {
-            $this->fieldIdsByName[$field->entity_type][$field->getName()] = $field->uuid();
+          if (!$field->isDeleted()) {
+            $this->fieldIdsByName[$field->getTargetEntityTypeId()][$field->getName()] = $field->uuid();
           }
         }
       }
@@ -468,7 +468,7 @@ public function getBundleInstances($entity_type, $bundle) {
             $field = $this->prepareField($field);
 
             $this->fieldsById[$field->uuid()] = $field;
-            $this->fieldIdsByName[$field->entity_type][$field->getName()] = $field->uuid();
+            $this->fieldIdsByName[$field->getEntityTypeId()][$field->getName()] = $field->uuid();
           }
 
           $fields[] = $this->fieldsById[$field->uuid()];
@@ -573,7 +573,7 @@ public function getBundleExtraFields($entity_type, $bundle) {
    */
   public function prepareField(FieldConfigInterface $field) {
     // Make sure all expected field settings are present.
-    $field->settings += $this->fieldTypeManager->getDefaultSettings($field->getType());
+    $field->setSettings($field->getSettings() + $this->fieldTypeManager->getDefaultSettings($field->getType()));
 
     return $field;
   }
diff --git a/core/modules/field/lib/Drupal/field/FieldInstanceConfigStorage.php b/core/modules/field/lib/Drupal/field/FieldInstanceConfigStorage.php
index 1942ef5..82cee79 100644
--- a/core/modules/field/lib/Drupal/field/FieldInstanceConfigStorage.php
+++ b/core/modules/field/lib/Drupal/field/FieldInstanceConfigStorage.php
@@ -130,7 +130,7 @@ public function loadByProperties(array $conditions = array()) {
         // Extract the actual value against which the condition is checked.
         switch ($key) {
           case 'field_name':
-            $checked_value = $field->name;
+            $checked_value = $field->getName();
             break;
 
           case 'field_id':
diff --git a/core/modules/field/lib/Drupal/field/Tests/BulkDeleteTest.php b/core/modules/field/lib/Drupal/field/Tests/BulkDeleteTest.php
index 2b74370..448df47 100644
--- a/core/modules/field/lib/Drupal/field/Tests/BulkDeleteTest.php
+++ b/core/modules/field/lib/Drupal/field/Tests/BulkDeleteTest.php
@@ -135,7 +135,7 @@ function setUp() {
     foreach ($this->bundles as $bundle) {
       foreach ($this->fields as $field) {
         entity_create('field_instance_config', array(
-          'field_name' => $field->name,
+          'field_name' => $field->getName(),
           'entity_type' => $this->entity_type,
           'bundle' => $bundle,
         ))->save();
@@ -166,7 +166,7 @@ function setUp() {
   function testDeleteFieldInstance() {
     $bundle = reset($this->bundles);
     $field = reset($this->fields);
-    $field_name = $field->name;
+    $field_name = $field->getName();
     $factory = \Drupal::service('entity.query');
 
     // There are 10 entities of this bundle.
@@ -176,11 +176,11 @@ function testDeleteFieldInstance() {
     $this->assertEqual(count($found), 10, 'Correct number of entities found before deleting');
 
     // Delete the instance.
-    $instance = field_info_instance($this->entity_type, $field->name, $bundle);
+    $instance = field_info_instance($this->entity_type, $field->getName(), $bundle);
     $instance->delete();
 
     // The instance still exists, deleted.
-    $instances = entity_load_multiple_by_properties('field_instance_config', array('field_id' => $field->uuid, 'deleted' => TRUE, 'include_deleted' => TRUE));
+    $instances = entity_load_multiple_by_properties('field_instance_config', array('field_id' => $field->uuid(), 'deleted' => TRUE, 'include_deleted' => TRUE));
     $this->assertEqual(count($instances), 1, 'There is one deleted instance');
     $instance = $instances[0];
     $this->assertEqual($instance->bundle, $bundle, 'The deleted instance is for the correct bundle');
@@ -193,7 +193,7 @@ function testDeleteFieldInstance() {
       ->fields('t', array_keys($schema[$table]['fields']))
       ->execute();
     foreach ($result as $row) {
-      $this->assertEqual($this->entities[$row->entity_id]->{$field->name}->value, $row->$column);
+      $this->assertEqual($this->entities[$row->entity_id]->{$field->getName()}->value, $row->$column);
     }
 
     // There are 0 entities of this bundle with non-deleted data.
@@ -226,7 +226,7 @@ function testPurgeInstance() {
     $field = reset($this->fields);
 
     // Delete the instance.
-    $instance = field_info_instance($this->entity_type, $field->name, $bundle);
+    $instance = field_info_instance($this->entity_type, $field->getName(), $bundle);
     $instance->delete();
 
     // No field hooks were called.
@@ -241,7 +241,7 @@ function testPurgeInstance() {
       // There are $count deleted entities left.
       $found = \Drupal::entityQuery('entity_test')
         ->condition('type', $bundle)
-        ->condition($field->name . '.deleted', 1)
+        ->condition($field->getName() . '.deleted', 1)
         ->execute();
       $this->assertEqual(count($found), $count, 'Correct number of entities found after purging 2');
     }
@@ -258,19 +258,19 @@ function testPurgeInstance() {
     $this->checkHooksInvocations($hooks, $actual_hooks);
 
     // The instance still exists, deleted.
-    $instances = entity_load_multiple_by_properties('field_instance_config', array('field_id' => $field->uuid, 'deleted' => TRUE, 'include_deleted' => TRUE));
+    $instances = entity_load_multiple_by_properties('field_instance_config', array('field_id' => $field->uuid(), 'deleted' => TRUE, 'include_deleted' => TRUE));
     $this->assertEqual(count($instances), 1, 'There is one deleted instance');
 
     // Purge the instance.
     field_purge_batch($batch_size);
 
     // The instance is gone.
-    $instances = entity_load_multiple_by_properties('field_instance_config', array('field_id' => $field->uuid, 'deleted' => TRUE, 'include_deleted' => TRUE));
+    $instances = entity_load_multiple_by_properties('field_instance_config', array('field_id' => $field->uuid(), 'deleted' => TRUE, 'include_deleted' => TRUE));
     $this->assertEqual(count($instances), 0, 'The instance is gone');
 
     // The field still exists, not deleted, because it has a second instance.
-    $fields = entity_load_multiple_by_properties('field_config', array('uuid' => $field->uuid, 'include_deleted' => TRUE));
-    $this->assertTrue(isset($fields[$field->uuid]), 'The field exists and is not deleted');
+    $fields = entity_load_multiple_by_properties('field_config', array('uuid' => $field->uuid(), 'include_deleted' => TRUE));
+    $this->assertTrue(isset($fields[$field->uuid()]), 'The field exists and is not deleted');
   }
 
   /**
@@ -285,7 +285,7 @@ function testPurgeField() {
 
     // Delete the first instance.
     $bundle = reset($this->bundles);
-    $instance = field_info_instance($this->entity_type, $field->name, $bundle);
+    $instance = field_info_instance($this->entity_type, $field->getName(), $bundle);
     $instance->delete();
 
     // Assert that FieldItemInterface::delete() was not called yet.
@@ -310,12 +310,12 @@ function testPurgeField() {
     field_purge_batch(0);
 
     // The field still exists, not deleted.
-    $fields = entity_load_multiple_by_properties('field_config', array('uuid' => $field->uuid, 'include_deleted' => TRUE));
-    $this->assertTrue(isset($fields[$field->uuid]) && !$fields[$field->uuid]->deleted, 'The field exists and is not deleted');
+    $fields = entity_load_multiple_by_properties('field_config', array('uuid' => $field->uuid(), 'include_deleted' => TRUE));
+    $this->assertTrue(isset($fields[$field->uuid()]) && !$fields[$field->uuid()]->isDeleted(), 'The field exists and is not deleted');
 
     // Delete the second instance.
     $bundle = next($this->bundles);
-    $instance = field_info_instance($this->entity_type, $field->name, $bundle);
+    $instance = field_info_instance($this->entity_type, $field->getName(), $bundle);
     $instance->delete();
 
     // Assert that FieldItemInterface::delete() was not called yet.
@@ -335,14 +335,14 @@ function testPurgeField() {
     $this->checkHooksInvocations($hooks, $actual_hooks);
 
     // The field still exists, deleted.
-    $fields = entity_load_multiple_by_properties('field_config', array('uuid' => $field->uuid, 'include_deleted' => TRUE));
-    $this->assertTrue(isset($fields[$field->uuid]) && $fields[$field->uuid]->deleted, 'The field exists and is deleted');
+    $fields = entity_load_multiple_by_properties('field_config', array('uuid' => $field->uuid(), 'include_deleted' => TRUE));
+    $this->assertTrue(isset($fields[$field->uuid()]) && $fields[$field->uuid()]->deleted, 'The field exists and is deleted');
 
     // Purge again to purge the instance and the field.
     field_purge_batch(0);
 
     // The field is gone.
-    $fields = entity_load_multiple_by_properties('field_config', array('uuid' => $field->uuid, 'include_deleted' => TRUE));
+    $fields = entity_load_multiple_by_properties('field_config', array('uuid' => $field->uuid(), 'include_deleted' => TRUE));
     $this->assertEqual(count($fields), 0, 'The field is purged.');
   }
 
diff --git a/core/modules/field/lib/Drupal/field/Tests/CrudTest.php b/core/modules/field/lib/Drupal/field/Tests/CrudTest.php
index 36a2770..a01edab 100644
--- a/core/modules/field/lib/Drupal/field/Tests/CrudTest.php
+++ b/core/modules/field/lib/Drupal/field/Tests/CrudTest.php
@@ -311,13 +311,13 @@ function testDeleteField() {
 
     // Test that the first field is not deleted, and then delete it.
     $field = current(entity_load_multiple_by_properties('field_config', array('field_name' => $this->field['name'], 'include_deleted' => TRUE)));
-    $this->assertTrue(!empty($field) && empty($field->deleted), 'A new field is not marked for deletion.');
+    $this->assertTrue(!empty($field) && !$field->isDeleted(), 'A new field is not marked for deletion.');
     field_info_field('entity_test', $this->field['name'])->delete();
 
     // Make sure that the field is marked as deleted when it is specifically
     // loaded.
     $field = current(entity_load_multiple_by_properties('field_config', array('field_name' => $this->field['name'], 'include_deleted' => TRUE)));
-    $this->assertTrue(!empty($field->deleted), 'A deleted field is marked for deletion.');
+    $this->assertTrue($field->isDeleted(), 'A deleted field is marked for deletion.');
 
     // Make sure that this field's instance is marked as deleted when it is
     // specifically loaded.
@@ -334,16 +334,16 @@ function testDeleteField() {
 
     // Make sure the other field (and its field instance) are not deleted.
     $another_field = entity_load('field_config', 'entity_test.' . $this->another_field['name']);
-    $this->assertTrue(!empty($another_field) && empty($another_field->deleted), 'A non-deleted field is not marked for deletion.');
+    $this->assertTrue(!empty($another_field) && !$another_field->isDeleted(), 'A non-deleted field is not marked for deletion.');
     $another_instance = entity_load('field_instance_config', 'entity_test.' . $another_instance_definition['bundle'] . '.' . $another_instance_definition['field_name']);
-    $this->assertTrue(!empty($another_instance) && empty($another_instance->deleted), 'An instance of a non-deleted field is not marked for deletion.');
+    $this->assertTrue(!empty($another_instance) && !$another_instance->isDeleted(), 'An instance of a non-deleted field is not marked for deletion.');
 
     // Try to create a new field the same name as a deleted field and
     // write data into it.
     entity_create('field_config', $this->field)->save();
     entity_create('field_instance_config', $this->instance_definition)->save();
     $field = entity_load('field_config', 'entity_test.' . $this->field['name']);
-    $this->assertTrue(!empty($field) && empty($field->deleted), 'A new field with a previously used name is created.');
+    $this->assertTrue(!empty($field) && !$field->isDeleted(), 'A new field with a previously used name is created.');
     $instance = entity_load('field_instance_config', 'entity_test.' . $this->instance_definition['bundle'] . '.' . $this->instance_definition['field_name'] );
     $this->assertTrue(!empty($instance) && empty($instance->deleted), 'A new instance for a previously used field name is created.');
 
@@ -410,13 +410,13 @@ function testUpdateField() {
       }
       // Load back and assert there are $cardinality number of values.
       $entity = $this->entitySaveReload($entity);
-      $this->assertEqual(count($entity->field_update), $field->cardinality);
+      $this->assertEqual(count($entity->field_update), $field->getCardinality());
       // Now check the values themselves.
       for ($delta = 0; $delta < $cardinality; $delta++) {
         $this->assertEqual($entity->field_update[$delta]->value, $delta + 1);
       }
       // Increase $cardinality and set the field cardinality to the new value.
-      $field->cardinality = ++$cardinality;
+      $field->setCardinality(++$cardinality);
       $field->save();
     } while ($cardinality < 6);
   }
@@ -434,7 +434,8 @@ function testUpdateFieldForbid() {
         'unchangeable' => 0
     )));
     $field->save();
-    $field->settings['changeable']++;
+    $changeable = $field->getSetting('changeable') + 1;
+    $field->setSetting('changeable', $changeable);
     try {
       $field->save();
       $this->pass(t("A changeable setting can be updated."));
@@ -442,7 +443,8 @@ function testUpdateFieldForbid() {
     catch (FieldException $e) {
       $this->fail(t("An unchangeable setting cannot be updated."));
     }
-    $field->settings['unchangeable']++;
+    $unchangeable = $field->getSetting('unchangeable') + 1;
+    $field->setSetting('unchangeable', $unchangeable);
     try {
       $field->save();
       $this->fail(t("An unchangeable setting can be updated."));
diff --git a/core/modules/field/lib/Drupal/field/Tests/FieldInfoTest.php b/core/modules/field/lib/Drupal/field/Tests/FieldInfoTest.php
index 3f2e116..7ecdc54 100644
--- a/core/modules/field/lib/Drupal/field/Tests/FieldInfoTest.php
+++ b/core/modules/field/lib/Drupal/field/Tests/FieldInfoTest.php
@@ -51,14 +51,14 @@ function testFieldInfo() {
     $field->save();
     $fields = field_info_fields();
     $this->assertEqual(count($fields), count($core_fields) + 1, 'One new field exists');
-    $this->assertEqual($fields[$field->uuid]->getName(), $field->getName(), 'info fields contains field name');
-    $this->assertEqual($fields[$field->uuid]->getType(), $field->getType(), 'info fields contains field type');
-    $this->assertEqual($fields[$field->uuid]->module, 'field_test', 'info fields contains field module');
+    $this->assertEqual($fields[$field->uuid()]->getName(), $field->getName(), 'info fields contains field name');
+    $this->assertEqual($fields[$field->uuid()]->getType(), $field->getType(), 'info fields contains field type');
+    $this->assertEqual($fields[$field->uuid()]->module, 'field_test', 'info fields contains field module');
     $settings = array('test_field_setting' => 'dummy test string');
     foreach ($settings as $key => $val) {
-      $this->assertEqual($fields[$field->uuid]->getSetting($key), $val, format_string('Field setting %key has correct default value %value', array('%key' => $key, '%value' => $val)));
+      $this->assertEqual($fields[$field->uuid()]->getSetting($key), $val, format_string('Field setting %key has correct default value %value', array('%key' => $key, '%value' => $val)));
     }
-    $this->assertEqual($fields[$field->uuid]->getCardinality(), 1, 'info fields contains cardinality 1');
+    $this->assertEqual($fields[$field->uuid()]->getCardinality(), 1, 'info fields contains cardinality 1');
 
     // Create an instance, verify that it shows up
     $instance_definition = array(
@@ -134,7 +134,7 @@ function testFieldPrepare() {
 
     // Check that all expected settings are in place.
     $field_type_manager = \Drupal::service('plugin.manager.field.field_type');
-    $this->assertEqual($field->settings, $field_type_manager->getDefaultSettings($field_definition['type']), 'All expected default field settings are present.');
+    $this->assertEqual($field->getSettings(), $field_type_manager->getDefaultSettings($field_definition['type']), 'All expected default field settings are present.');
   }
 
   /**
@@ -311,7 +311,7 @@ function testFieldInfoCache() {
     ));
     $field->save();
     $fields = field_info_fields();
-    $this->assertTrue(isset($fields[$field->uuid]), 'The test field is initially found in the array returned by field_info_fields().');
+    $this->assertTrue(isset($fields[$field->uuid()]), 'The test field is initially found in the array returned by field_info_fields().');
 
     // Now rebuild the field info cache, and set a variable which will cause
     // the cache to be cleared while it's being rebuilt; see
@@ -320,7 +320,7 @@ function testFieldInfoCache() {
     field_info_cache_clear();
     \Drupal::state()->set('field_test.clear_info_cache_in_hook_entity_type_build', TRUE);
     $fields = field_info_fields();
-    $this->assertTrue(isset($fields[$field->uuid]), 'The test field is found in the array returned by field_info_fields() even if its cache is cleared while being rebuilt.');
+    $this->assertTrue(isset($fields[$field->uuid()]), 'The test field is found in the array returned by field_info_fields() even if its cache is cleared while being rebuilt.');
   }
 
   /**
diff --git a/core/modules/field/lib/Drupal/field/Tests/FieldInstanceCrudTest.php b/core/modules/field/lib/Drupal/field/Tests/FieldInstanceCrudTest.php
index f8a02ab..ccb9dca 100644
--- a/core/modules/field/lib/Drupal/field/Tests/FieldInstanceCrudTest.php
+++ b/core/modules/field/lib/Drupal/field/Tests/FieldInstanceCrudTest.php
@@ -188,8 +188,8 @@ function testDeleteFieldInstanceCrossDeletion() {
     entity_create('field_instance_config', $this->instance_definition)->save();
     entity_create('field_instance_config', $instance_definition_2)->save();
     $field->delete();
-    $this->assertFalse(field_info_instance('entity_test', $this->instance_definition['bundle'], $field->name));
-    $this->assertFalse(field_info_instance('entity_test', $instance_definition_2['bundle'], $field->name));
+    $this->assertFalse(field_info_instance('entity_test', $this->instance_definition['bundle'], $field->getName()));
+    $this->assertFalse(field_info_instance('entity_test', $instance_definition_2['bundle'], $field->getName()));
 
     // Chack that deletion of the last instance deletes the field.
     $field = entity_create('field_config', $this->field_definition);
@@ -199,9 +199,9 @@ function testDeleteFieldInstanceCrossDeletion() {
     $instance_2 = entity_create('field_instance_config', $instance_definition_2);
     $instance_2->save();
     $instance->delete();
-    $this->assertTrue(field_info_field('entity_test', $field->name));
+    $this->assertTrue(field_info_field('entity_test', $field->getName()));
     $instance_2->delete();
-    $this->assertFalse(field_info_field('entity_test', $field->name));
+    $this->assertFalse(field_info_field('entity_test', $field->getName()));
 
     // Check that deletion of all instances of the same field simultaneously
     // deletes the field.
@@ -213,7 +213,7 @@ function testDeleteFieldInstanceCrossDeletion() {
     $instance_2->save();
     $instance_storage = $this->container->get('entity.manager')->getStorage('field_instance_config');
     $instance_storage->delete(array($instance, $instance_2));
-    $this->assertFalse(field_info_field('entity_test', $field->name));
+    $this->assertFalse(field_info_field('entity_test', $field->getName()));
   }
 
 }
diff --git a/core/modules/field/lib/Drupal/field/Tests/FieldValidationTest.php b/core/modules/field/lib/Drupal/field/Tests/FieldValidationTest.php
index 1a57a4c..508684b 100644
--- a/core/modules/field/lib/Drupal/field/Tests/FieldValidationTest.php
+++ b/core/modules/field/lib/Drupal/field/Tests/FieldValidationTest.php
@@ -41,7 +41,7 @@ public function setUp() {
    * Tests that the number of values is validated against the field cardinality.
    */
   function testCardinalityConstraint() {
-    $cardinality = $this->field->cardinality;
+    $cardinality = $this->field->getCardinality();
     $entity = $this->entity;
 
     for ($delta = 0; $delta < $cardinality + 1; $delta++) {
diff --git a/core/modules/field/tests/Drupal/field/Tests/FieldInstanceConfigEntityUnitTest.php b/core/modules/field/tests/Drupal/field/Tests/FieldInstanceConfigEntityUnitTest.php
index d8a43d4..e74d39f 100644
--- a/core/modules/field/tests/Drupal/field/Tests/FieldInstanceConfigEntityUnitTest.php
+++ b/core/modules/field/tests/Drupal/field/Tests/FieldInstanceConfigEntityUnitTest.php
@@ -94,7 +94,7 @@ public function testCalculateDependencies() {
     $field = $this->getMock('\Drupal\field\FieldConfigInterface');
     // The field name property is public and accessed this way in the field
     // instance config entity constructor.
-    $field->name = 'test_field';
+    $field->setName('test_field');
     $field->expects($this->once())
       ->method('getConfigDependencyName')
       ->will($this->returnValue('field.field.test_entity_type.test_field'));
diff --git a/core/modules/field_ui/lib/Drupal/field_ui/FieldConfigListBuilder.php b/core/modules/field_ui/lib/Drupal/field_ui/FieldConfigListBuilder.php
index e1d96c6..f6d6c69 100644
--- a/core/modules/field_ui/lib/Drupal/field_ui/FieldConfigListBuilder.php
+++ b/core/modules/field_ui/lib/Drupal/field_ui/FieldConfigListBuilder.php
@@ -97,24 +97,24 @@ public function buildHeader() {
    * {@inheritdoc}
    */
   public function buildRow(EntityInterface $field) {
-    if ($field->locked) {
+    if ($field->isLocked()) {
       $row['class'] = array('menu-disabled');
-      $row['data']['id'] =  t('@field_name (Locked)', array('@field_name' => $field->name));
+      $row['data']['id'] =  t('@field_name (Locked)', array('@field_name' => $field->getName()));
     }
     else {
-      $row['data']['id'] = $field->name;
+      $row['data']['id'] = $field->getName();
     }
 
-    $field_type = $this->fieldTypes[$field->type];
+    $field_type = $this->fieldTypes[$field->getType()];
     $row['data']['type'] = t('@type (module: @module)', array('@type' => $field_type['label'], '@module' => $field_type['provider']));
 
     $usage = array();
     foreach ($field->getBundles() as $bundle) {
-      if ($route_info = FieldUI::getOverviewRouteInfo($field->entity_type, $bundle)) {
-        $usage[] = \Drupal::l($this->bundles[$field->entity_type][$bundle]['label'], $route_info['route_name'], $route_info['route_parameters'], $route_info['options']);
+      if ($route_info = FieldUI::getOverviewRouteInfo($field->getTargetEntityTypeId(), $bundle)) {
+        $usage[] = \Drupal::l($this->bundles[$field->getTargetEntityTypeId()][$bundle]['label'], $route_info['route_name'], $route_info['route_parameters'], $route_info['options']);
       }
       else {
-        $usage[] = $this->bundles[$field->entity_type][$bundle]['label'];
+        $usage[] = $this->bundles[$field->getTargetEntityTypeId()][$bundle]['label'];
       }
     }
     $row['data']['usage'] = implode(', ', $usage);
diff --git a/core/modules/field_ui/lib/Drupal/field_ui/FieldOverview.php b/core/modules/field_ui/lib/Drupal/field_ui/FieldOverview.php
index 01c65ed..316cef1 100644
--- a/core/modules/field_ui/lib/Drupal/field_ui/FieldOverview.php
+++ b/core/modules/field_ui/lib/Drupal/field_ui/FieldOverview.php
@@ -171,7 +171,8 @@ public function buildForm(array $form, array &$form_state, $entity_type_id = NUL
         '#links' => $links,
       );
 
-      if (!empty($field->locked)) {
+      $locked = $field->isLocked();
+      if (!empty($locked)) {
         $table[$name]['operations'] = array('#markup' => $this->t('Locked'));
         $table[$name]['#attributes']['class'][] = 'menu-disabled';
       }
@@ -449,7 +450,8 @@ public function submitForm(array &$form, array &$form_state) {
       $values = $form_values['_add_existing_field'];
       $field_name = $values['field_name'];
       $field = field_info_field($this->entity_type, $field_name);
-      if (!empty($field->locked)) {
+      $locked = $field->isLocked();
+      if (!empty($locked)) {
         drupal_set_message($this->t('The field %label cannot be added because it is locked.', array('%label' => $values['label'])), 'error');
       }
       else {
@@ -537,7 +539,8 @@ protected function getExistingFieldOptions() {
         // - fields that should not be added via user interface.
         $field_type = $instance->getType();
         $field = $instance->getField();
-        if (empty($field->locked) && empty($field_types[$field_type]['no_ui'])) {
+        $locked = $field->isLocked();
+        if (empty($locked) && empty($field_types[$field_type]['no_ui'])) {
           $options[$instance->getName()] = array(
             'type' => $field_type,
             'type_label' => $field_types[$field_type]['label'],
diff --git a/core/modules/field_ui/lib/Drupal/field_ui/Form/FieldEditForm.php b/core/modules/field_ui/lib/Drupal/field_ui/Form/FieldEditForm.php
index 3739368..d522ce9 100644
--- a/core/modules/field_ui/lib/Drupal/field_ui/Form/FieldEditForm.php
+++ b/core/modules/field_ui/lib/Drupal/field_ui/Form/FieldEditForm.php
@@ -146,7 +146,7 @@ public function buildForm(array $form, array &$form_state, FieldInstanceConfigIn
     // Build the non-configurable field values.
     $form['field']['field_name'] = array('#type' => 'value', '#value' => $field->getName());
     $form['field']['type'] = array('#type' => 'value', '#value' => $field->getType());
-    $form['field']['module'] = array('#type' => 'value', '#value' => $field->module);
+    $form['field']['module'] = array('#type' => 'value', '#value' => $field->getModule());
 
     // Add settings provided by the field module. The field module is
     // responsible for not returning settings that cannot be changed if
@@ -196,7 +196,7 @@ public function submitForm(array &$form, array &$form_state) {
     // Merge incoming form values into the existing field.
     $field = $this->instance->getField();
     foreach ($field_values as $key => $value) {
-      $field->{$key} = $value;
+      $field->set($key, $value);
     }
 
     // Update the field.
diff --git a/core/modules/field_ui/lib/Drupal/field_ui/Form/FieldInstanceConfigDeleteForm.php b/core/modules/field_ui/lib/Drupal/field_ui/Form/FieldInstanceConfigDeleteForm.php
index 87dfafc..2d4b95f 100644
--- a/core/modules/field_ui/lib/Drupal/field_ui/Form/FieldInstanceConfigDeleteForm.php
+++ b/core/modules/field_ui/lib/Drupal/field_ui/Form/FieldInstanceConfigDeleteForm.php
@@ -72,7 +72,7 @@ public function submit(array $form, array &$form_state) {
     $bundles = entity_get_bundles();
     $bundle_label = $bundles[$this->entity->entity_type][$this->entity->bundle]['label'];
 
-    if ($field && !$field->locked) {
+    if ($field && !$field->isLocked()) {
       $this->entity->delete();
       drupal_set_message($this->t('The field %field has been deleted from the %type content type.', array('%field' => $this->entity->label(), '%type' => $bundle_label)));
     }
diff --git a/core/modules/field_ui/lib/Drupal/field_ui/Form/FieldInstanceEditForm.php b/core/modules/field_ui/lib/Drupal/field_ui/Form/FieldInstanceEditForm.php
index 9c4de60..8859291 100644
--- a/core/modules/field_ui/lib/Drupal/field_ui/Form/FieldInstanceEditForm.php
+++ b/core/modules/field_ui/lib/Drupal/field_ui/Form/FieldInstanceEditForm.php
@@ -82,7 +82,8 @@ public function buildForm(array $form, array &$form_state, FieldInstanceConfigIn
     $form['#entity'] = _field_create_entity_from_ids($ids);
     $items = $form['#entity']->get($this->instance->getName());
 
-    if (!empty($field->locked)) {
+    $locked = $field->isLocked();
+    if (!empty($locked)) {
       $form['locked'] = array(
         '#markup' => $this->t('The field %field is locked and cannot be edited.', array('%field' => $this->instance->getLabel())),
       );
diff --git a/core/modules/field_ui/lib/Drupal/field_ui/Tests/ManageFieldsTest.php b/core/modules/field_ui/lib/Drupal/field_ui/Tests/ManageFieldsTest.php
index 979d68b..2cc1b9f 100644
--- a/core/modules/field_ui/lib/Drupal/field_ui/Tests/ManageFieldsTest.php
+++ b/core/modules/field_ui/lib/Drupal/field_ui/Tests/ManageFieldsTest.php
@@ -424,25 +424,25 @@ function testLockedField() {
     ));
     $field->save();
     entity_create('field_instance_config', array(
-      'field_name' => $field->name,
+      'field_name' => $field->getName(),
       'entity_type' => 'node',
       'bundle' => $this->type,
     ))->save();
     entity_get_form_display('node', $this->type, 'default')
-      ->setComponent($field->name, array(
+      ->setComponent($field->getName(), array(
         'type' => 'test_field_widget',
       ))
       ->save();
 
     // Check that the links for edit and delete are not present.
     $this->drupalGet('admin/structure/types/manage/' . $this->type . '/fields');
-    $locked = $this->xpath('//tr[@id=:field_name]/td[4]', array(':field_name' => $field->name));
+    $locked = $this->xpath('//tr[@id=:field_name]/td[4]', array(':field_name' => $field->getName()));
     $this->assertTrue(in_array('Locked', $locked), 'Field is marked as Locked in the UI');
-    $edit_link = $this->xpath('//tr[@id=:field_name]/td[4]', array(':field_name' => $field->name));
+    $edit_link = $this->xpath('//tr[@id=:field_name]/td[4]', array(':field_name' => $field->getName()));
     $this->assertFalse(in_array('edit', $edit_link), 'Edit option for locked field is not present the UI');
-    $delete_link = $this->xpath('//tr[@id=:field_name]/td[4]', array(':field_name' => $field->name));
+    $delete_link = $this->xpath('//tr[@id=:field_name]/td[4]', array(':field_name' => $field->getName));
     $this->assertFalse(in_array('delete', $delete_link), 'Delete option for locked field is not present the UI');
-    $this->drupalGet('admin/structure/types/manage/' . $this->type . '/fields/node.' . $this->type . '.' . $field->name . '/delete');
+    $this->drupalGet('admin/structure/types/manage/' . $this->type . '/fields/node.' . $this->type . '.' . $field->getName() . '/delete');
     $this->assertResponse(403);
   }
 
diff --git a/core/modules/file/file.views.inc b/core/modules/file/file.views.inc
index 6c3ff40..ab97024 100644
--- a/core/modules/file/file.views.inc
+++ b/core/modules/file/file.views.inc
@@ -502,7 +502,7 @@ function file_field_views_data(FieldConfigInterface $field) {
  * Views integration to provide reverse relationships on file fields.
  */
 function file_field_views_data_views_data_alter(array &$data, FieldConfigInterface $field) {
-  $entity_type_id = $field->entity_type;
+  $entity_type_id = $field->getTargetEntityTypeId();
   $entity_type = \Drupal::entityManager()->getDefinition($entity_type_id);
   $field_name = $field->getName();
   $pseudo_field_name = 'reverse_' . $field_name . '_' . $entity_type_id;
diff --git a/core/modules/file/lib/Drupal/file/Plugin/Field/FieldWidget/FileWidget.php b/core/modules/file/lib/Drupal/file/Plugin/Field/FieldWidget/FileWidget.php
index 460b95e..d8c8bf2 100644
--- a/core/modules/file/lib/Drupal/file/Plugin/Field/FieldWidget/FileWidget.php
+++ b/core/modules/file/lib/Drupal/file/Plugin/Field/FieldWidget/FileWidget.php
@@ -313,15 +313,15 @@ public static function validateMultipleCount($element, &$form_state, $form) {
     $field = Field::fieldInfo()->getField($element['#entity_type'], $element['#field_name']);
     $uploaded = count($values['fids']);
     $count = $uploaded + $current;
-    if ($count > $field->cardinality) {
-      $keep = $uploaded - $count + $field->cardinality;
+    if ($count > $field->getCardinality()) {
+      $keep = $uploaded - $count + $field->getCardinality();
       $removed_files = array_slice($values['fids'], $keep);
       $removed_names = array();
       foreach ($removed_files as $fid) {
         $file = file_load($fid);
         $removed_names[] = $file->getFilename();
       }
-      $args = array('%field' => $field->getFieldName(), '@max' => $field->cardinality, '@count' => $keep, '%list' => implode(', ', $removed_names));
+      $args = array('%field' => $field->getFieldName(), '@max' => $field->getCardinality(), '@count' => $keep, '%list' => implode(', ', $removed_names));
       $message = t('Field %field can only hold @max values but there were @count uploaded. The following files have been omitted as a result: %list.', $args);
       drupal_set_message($message, 'warning');
       $values['fids'] = array_slice($values['fids'], 0, $keep);
diff --git a/core/modules/image/image.module b/core/modules/image/image.module
index 472cad4..80bed26 100644
--- a/core/modules/image/image.module
+++ b/core/modules/image/image.module
@@ -395,7 +395,7 @@ function image_entity_presave(EntityInterface $entity) {
     $field = $entity;
   }
   // Exit, if not saving an image field or image field instance entity.
-  if (!$field || $field->type != 'image') {
+  if (!$field || $field->getType() != 'image') {
     return;
   }
 
@@ -423,7 +423,7 @@ function image_entity_presave(EntityInterface $entity) {
  * Implements hook_ENTITY_TYPE_update() for 'field_config'.
  */
 function image_field_config_update(FieldConfigInterface $field) {
-  if ($field->type != 'image') {
+  if ($field->getType() != 'image') {
     // Only act on image fields.
     return;
   }
@@ -431,8 +431,10 @@ function image_field_config_update(FieldConfigInterface $field) {
   $prior_field = $field->original;
 
   // The value of a managed_file element can be an array if #extended == TRUE.
-  $fid_new = $field->settings['default_image']['fid'];
-  $fid_old = $prior_field->settings['default_image']['fid'];
+  $default_image = $field->getSetting('default_image');
+  $fid_new = $default_image['fid'];
+  $default_image_old = $prior_field->getSetting('default_image');
+  $fid_old = $default_image_old['fid'];
 
   $file_new = $fid_new ? file_load($fid_new) : FALSE;
 
@@ -442,18 +444,18 @@ function image_field_config_update(FieldConfigInterface $field) {
     if ($file_new) {
       $file_new->status = FILE_STATUS_PERMANENT;
       $file_new->save();
-      \Drupal::service('file.usage')->add($file_new, 'image', 'default_image', $field->uuid);
+      \Drupal::service('file.usage')->add($file_new, 'image', 'default_image', $field->uuid());
     }
 
     // Is there an old file?
     if ($fid_old && ($file_old = file_load($fid_old))) {
-      \Drupal::service('file.usage')->delete($file_old, 'image', 'default_image', $field->uuid);
+      \Drupal::service('file.usage')->delete($file_old, 'image', 'default_image', $field->uuid());
     }
   }
 
   // If the upload destination changed, then move the file.
-  if ($file_new && (file_uri_scheme($file_new->getFileUri()) != $field->settings['uri_scheme'])) {
-    $directory = $field->settings['uri_scheme'] . '://default_images/';
+  if ($file_new && (file_uri_scheme($file_new->getFileUri()) != $field->getSettings('uri_scheme'))) {
+    $directory = $field->getSetting('uri_scheme') . '://default_images/';
     file_prepare_directory($directory, FILE_CREATE_DIRECTORY);
     file_move($file_new, $directory . $file_new->filename);
   }
@@ -464,7 +466,7 @@ function image_field_config_update(FieldConfigInterface $field) {
  */
 function image_field_instance_config_update(FieldInstanceConfigInterface $field_instance) {
   $field = $field_instance->getField();
-  if ($field->type != 'image') {
+  if ($field->getType() != 'image') {
     // Only act on image fields.
     return;
   }
@@ -490,8 +492,8 @@ function image_field_instance_config_update(FieldInstanceConfigInterface $field_
   }
 
   // If the upload destination changed, then move the file.
-  if ($file_new && (file_uri_scheme($file_new->getFileUri()) != $field->settings['uri_scheme'])) {
-    $directory = $field->settings['uri_scheme'] . '://default_images/';
+  if ($file_new && (file_uri_scheme($file_new->getFileUri()) != $field->getSetting('uri_scheme'))) {
+    $directory = $field->getSetting('uri_scheme') . '://default_images/';
     file_prepare_directory($directory, FILE_CREATE_DIRECTORY);
     file_move($file_new, $directory . $file_new->filename);
   }
@@ -501,15 +503,16 @@ function image_field_instance_config_update(FieldInstanceConfigInterface $field_
  * Implements hook_ENTITY_TYPE_delete() for 'field_config'.
  */
 function image_field_config_delete(FieldConfigInterface $field) {
-  if ($field->type != 'image') {
+  if ($field->getType() != 'image') {
     // Only act on image fields.
     return;
   }
 
   // The value of a managed_file element can be an array if #extended == TRUE.
-  $fid = $field->settings['default_image']['fid'];
+  $default_image = $field->getSetting('default_image');
+  $fid = $default_image['fid'];
   if ($fid && ($file = file_load($fid))) {
-    \Drupal::service('file.usage')->delete($file, 'image', 'default_image', $field->uuid);
+    \Drupal::service('file.usage')->delete($file, 'image', 'default_image', $field->uuid());
   }
 }
 
@@ -518,7 +521,7 @@ function image_field_config_delete(FieldConfigInterface $field) {
  */
 function image_field_instance_config_delete(FieldInstanceConfigInterface $field_instance) {
   $field = $field_instance->getField();
-  if ($field->type != 'image') {
+  if ($field->getType() != 'image') {
     // Only act on image fields.
     return;
   }
diff --git a/core/modules/image/image.views.inc b/core/modules/image/image.views.inc
index fe2d59a..b611352 100644
--- a/core/modules/image/image.views.inc
+++ b/core/modules/image/image.views.inc
@@ -37,7 +37,7 @@ function image_field_views_data(FieldConfigInterface $field) {
  * Views integration to provide reverse relationships on image fields.
  */
 function image_field_views_data_views_data_alter(array &$data, FieldConfigInterface $field) {
-  $entity_type_id = $field->entity_type;
+  $entity_type_id = $field->getTargetEntityTypeId();
   $field_name = $field->getName();
   $entity_type = \Drupal::entityManager()->getDefinition($entity_type_id);
   $pseudo_field_name = 'reverse_' . $field_name . '_' . $entity_type_id;
diff --git a/core/modules/image/lib/Drupal/image/Tests/ImageFieldDefaultImagesTest.php b/core/modules/image/lib/Drupal/image/Tests/ImageFieldDefaultImagesTest.php
index d162cd3..93f4dd3 100644
--- a/core/modules/image/lib/Drupal/image/Tests/ImageFieldDefaultImagesTest.php
+++ b/core/modules/image/lib/Drupal/image/Tests/ImageFieldDefaultImagesTest.php
@@ -89,7 +89,7 @@ public function testDefaultImages() {
 
     // Add another instance with another default image to the page content type.
     $instance2 = entity_create('field_instance_config', array(
-      'field_name' => $field->name,
+      'field_name' => $field->getName(),
       'entity_type' => 'node',
       'bundle' => 'page',
       'label' => $instance->label(),
@@ -181,7 +181,9 @@ public function testDefaultImages() {
     );
 
     // Upload a new default for the field.
-    $field->settings['default_image']['fid'] = $default_images['field_new']->id();
+    $settings = $field->getSettings();
+    $settings['default_image']['fid'] = $default_images['field_new']->id();
+    $field->setSettings($settings);
     $field->save();
 
     // Confirm that the new default is used on the article field settings form.
diff --git a/core/modules/node/lib/Drupal/node/Tests/NodeFieldMultilingualTestCase.php b/core/modules/node/lib/Drupal/node/Tests/NodeFieldMultilingualTestCase.php
index 67b34e7..6380a4a 100644
--- a/core/modules/node/lib/Drupal/node/Tests/NodeFieldMultilingualTestCase.php
+++ b/core/modules/node/lib/Drupal/node/Tests/NodeFieldMultilingualTestCase.php
@@ -61,7 +61,7 @@ function setUp() {
 
     // Make node body translatable.
     $field = field_info_field('node', 'body');
-    $field->translatable = TRUE;
+    $field->setTranslatable(TRUE);
     $field->save();
   }
 
diff --git a/core/modules/options/lib/Drupal/options/Tests/OptionsFieldTest.php b/core/modules/options/lib/Drupal/options/Tests/OptionsFieldTest.php
index a1d2c14..c679420 100644
--- a/core/modules/options/lib/Drupal/options/Tests/OptionsFieldTest.php
+++ b/core/modules/options/lib/Drupal/options/Tests/OptionsFieldTest.php
@@ -45,7 +45,7 @@ function testUpdateAllowedValues() {
     $entity = entity_create('entity_test');
     $entity->{$this->fieldName}->value = 1;
     $entity->save();
-    $this->field->settings['allowed_values'] = array(2 => 'Two');
+    $this->field->setSetting('allowed_values', array(2 => 'Two'));
     try {
       $this->field->save();
       $this->fail(t('Cannot update a list field to not include keys with existing data.'));
@@ -58,7 +58,7 @@ function testUpdateAllowedValues() {
     $entity->save();
 
     // Removed options do not appear.
-    $this->field->settings['allowed_values'] = array(2 => 'Two');
+    $this->field->setSetting('allowed_values', array(2 => 'Two'));
     $this->field->save();
     $entity = entity_create('entity_test');
     $form = \Drupal::service('entity.form_builder')->getForm($entity);
@@ -67,7 +67,7 @@ function testUpdateAllowedValues() {
     $this->assertTrue(empty($form[$this->fieldName]['widget'][3]), 'Option 3 does not exist');
 
     // Completely new options appear.
-    $this->field->settings['allowed_values'] = array(10 => 'Update', 20 => 'Twenty');
+    $this->field->setSetting('allowed_values', array(10 => 'Update', 20 => 'Twenty'));
     $this->field->save();
     // The entity holds an outdated field object with the old allowed values
     // setting, so we need to reintialize the entity object.
diff --git a/core/modules/options/options.module b/core/modules/options/options.module
index 66fcb42..5a667f5 100644
--- a/core/modules/options/options.module
+++ b/core/modules/options/options.module
@@ -93,12 +93,12 @@ function options_allowed_values(FieldDefinitionInterface $field_definition, Enti
  * Implements hook_field_config_update_forbid().
  */
 function options_field_config_update_forbid(FieldConfigInterface $field, FieldConfigInterface $prior_field) {
-  if ($field->module == 'options' && $field->hasData()) {
+  if ($field->getModule() == 'options' && $field->hasData()) {
     // Forbid any update that removes allowed values with actual data.
     $allowed_values = $field->getSetting('allowed_values');
     $prior_allowed_values = $prior_field->getSetting('allowed_values');
     $lost_keys = array_diff(array_keys($prior_allowed_values), array_keys($allowed_values));
-    if (_options_values_in_use($field->entity_type, $field->getName(), $lost_keys)) {
+    if (_options_values_in_use($field->getTargetEntityTypeId(), $field->getName(), $lost_keys)) {
       throw new FieldConfigUpdateForbiddenException(t('A list field (@field_name) with existing data cannot have its keys changed.', array('@field_name' => $field->getName())));
     }
   }
diff --git a/core/modules/search/lib/Drupal/search/Tests/SearchLanguageTest.php b/core/modules/search/lib/Drupal/search/Tests/SearchLanguageTest.php
index 8dcec89..f0519c0 100644
--- a/core/modules/search/lib/Drupal/search/Tests/SearchLanguageTest.php
+++ b/core/modules/search/lib/Drupal/search/Tests/SearchLanguageTest.php
@@ -48,7 +48,7 @@ function setUp() {
     // definition. The parent class has already created the article and page
     // content types.
     $field = Field::fieldInfo()->getField('node', 'body');
-    $field->translatable = TRUE;
+    $field->setTranslatable(TRUE);
     $field->save();
 
     // Create a few page nodes with multilingual body values.
diff --git a/core/modules/search/lib/Drupal/search/Tests/SearchMultilingualEntityTest.php b/core/modules/search/lib/Drupal/search/Tests/SearchMultilingualEntityTest.php
index 90cc165..01301ca 100644
--- a/core/modules/search/lib/Drupal/search/Tests/SearchMultilingualEntityTest.php
+++ b/core/modules/search/lib/Drupal/search/Tests/SearchMultilingualEntityTest.php
@@ -52,7 +52,7 @@ function setUp() {
     // definition. The parent class has already created the article and page
     // content types.
     $field = Field::fieldInfo()->getField('node', 'body');
-    $field->translatable = TRUE;
+    $field->setTranslatable(TRUE);
     $field->save();
 
     // Create a few page nodes with multilingual body values.
diff --git a/core/modules/simpletest/lib/Drupal/simpletest/Tests/DrupalUnitTestBaseTest.php b/core/modules/simpletest/lib/Drupal/simpletest/Tests/DrupalUnitTestBaseTest.php
index 2acf138..6e2d133 100644
--- a/core/modules/simpletest/lib/Drupal/simpletest/Tests/DrupalUnitTestBaseTest.php
+++ b/core/modules/simpletest/lib/Drupal/simpletest/Tests/DrupalUnitTestBaseTest.php
@@ -242,7 +242,7 @@ function testEnableModulesFixedList() {
     ));
     $field->save();
     entity_create('field_instance_config', array(
-      'field_name' => $field->name,
+      'field_name' => $field->getName(9),
       'entity_type' => 'entity_test',
       'bundle' => 'entity_test',
     ))->save();
diff --git a/core/modules/system/lib/Drupal/system/Tests/Entity/EntityLanguageTestBase.php b/core/modules/system/lib/Drupal/system/Tests/Entity/EntityLanguageTestBase.php
index bd2ceb9..1f8ff4f 100644
--- a/core/modules/system/lib/Drupal/system/Tests/Entity/EntityLanguageTestBase.php
+++ b/core/modules/system/lib/Drupal/system/Tests/Entity/EntityLanguageTestBase.php
@@ -135,7 +135,7 @@ protected function toggleFieldTranslatability($entity_type) {
     foreach ($fields as $field_name) {
       $field = FieldService::fieldInfo()->getField($entity_type, $field_name);
       $translatable = !$field->isTranslatable();
-      $field->set('translatable', $translatable);
+      $field->setTranslatable($translatable);
       $field->save();
       FieldService::fieldInfo()->flush();
       $field = FieldService::fieldInfo()->getField($entity_type, $field_name);
diff --git a/core/modules/system/lib/Drupal/system/Tests/Entity/EntityQueryTest.php b/core/modules/system/lib/Drupal/system/Tests/Entity/EntityQueryTest.php
index 70f180e..98c3d99 100644
--- a/core/modules/system/lib/Drupal/system/Tests/Entity/EntityQueryTest.php
+++ b/core/modules/system/lib/Drupal/system/Tests/Entity/EntityQueryTest.php
@@ -83,7 +83,7 @@ function setUp() {
       entity_test_create_bundle($bundle);
       foreach ($fields as $field) {
         entity_create('field_instance_config', array(
-          'field_name' => $field->name,
+          'field_name' => $field->getName(),
           'entity_type' => 'entity_test_mulrev',
           'bundle' => $bundle,
         ))->save();
diff --git a/core/modules/system/lib/Drupal/system/Tests/Entity/EntityTranslationFormTest.php b/core/modules/system/lib/Drupal/system/Tests/Entity/EntityTranslationFormTest.php
index 46b81bf..c806db0 100644
--- a/core/modules/system/lib/Drupal/system/Tests/Entity/EntityTranslationFormTest.php
+++ b/core/modules/system/lib/Drupal/system/Tests/Entity/EntityTranslationFormTest.php
@@ -103,7 +103,7 @@ function testEntityFormLanguage() {
 
     // Make body translatable.
     $field = field_info_field('node', 'body');
-    $field->translatable = TRUE;
+    $field->setTranslatable(TRUE);
     $field->save();
     $field = field_info_field('node', 'body');
     $this->assertTrue($field->isTranslatable(), 'Field body is translatable.');
diff --git a/core/modules/system/lib/Drupal/system/Tests/Entity/FieldSqlStorageTest.php b/core/modules/system/lib/Drupal/system/Tests/Entity/FieldSqlStorageTest.php
index 82e63b2..f5a7fcb 100644
--- a/core/modules/system/lib/Drupal/system/Tests/Entity/FieldSqlStorageTest.php
+++ b/core/modules/system/lib/Drupal/system/Tests/Entity/FieldSqlStorageTest.php
@@ -318,7 +318,7 @@ function testUpdateFieldSchemaWithData() {
     $entity->save();
 
     // Attempt to update the field in a way that would work without data.
-    $field->settings['scale'] = 3;
+    $field->setSetting('scale', 3);
     try {
       $field->save();
       $this->fail(t('Cannot update field schema with data.'));
@@ -343,7 +343,7 @@ function testFieldUpdateFailure() {
 
     // Attempt to update the field in a way that would break the storage.
     $prior_field = $field;
-    $field->settings['max_length'] = -1;
+    $field->setSetting('max_length', -1);
     try {
       $field->save();
       $this->fail(t('Update succeeded.'));
@@ -395,14 +395,14 @@ function testFieldUpdateIndexesWithData() {
     $entity->save();
 
     // Add an index.
-    $field->indexes = array('value' => array(array('value', 255)));
+    $field->setIndexes(array('value' => array(array('value', 255))));
     $field->save();
     foreach ($tables as $table) {
       $this->assertTrue(Database::getConnection()->schema()->indexExists($table, "{$field_name}_value"), t("Index on value created in $table"));
     }
 
     // Add a different index, removing the existing custom one.
-    $field->indexes = array('value_format' => array(array('value', 127), array('format', 127)));
+    $field->setIndexes(array('value_format' => array(array('value', 127), array('format', 127))));
     $field->save();
     foreach ($tables as $table) {
       $this->assertTrue(Database::getConnection()->schema()->indexExists($table, "{$field_name}_value_format"), t("Index on value_format created in $table"));
@@ -439,7 +439,7 @@ function testFieldSqlStorageForeignKeys() {
 
     // Update the field settings, it should update the foreign key definition too.
     $foreign_key_name = 'color';
-    $field->settings['foreign_key_name'] = $foreign_key_name;
+    $field->setSetting('foreign_key_name', $foreign_key_name);
     $field->save();
     // Reload the field schema after the update.
     $schema = $field->getSchema();
@@ -469,7 +469,7 @@ function testFieldSqlStorageBundleRename() {
     $value = mt_rand(1, 127);
     $entity = entity_create($entity_type, array(
       'type' => $bundle,
-      $this->field->name => $value,
+      $this->field->getName() => $value,
     ));
     $entity->save();
 
@@ -479,12 +479,12 @@ function testFieldSqlStorageBundleRename() {
 
     // Check that the 'bundle' column has been updated in storage.
     $row = db_select($this->table, 't')
-      ->fields('t', array('bundle', $this->field->name . '_value'))
+      ->fields('t', array('bundle', $this->field->getName() . '_value'))
       ->condition('entity_id', $entity->id())
       ->execute()
       ->fetch();
     $this->assertEqual($row->bundle, $bundle_new);
-    $this->assertEqual($row->{$this->field->name . '_value'}, $value);
+    $this->assertEqual($row->{$this->field->getName() . '_value'}, $value);
   }
 
   /**
@@ -516,9 +516,9 @@ public function testTableNames() {
       'name' => $field_name,
       'type' => 'test_field',
     ));
-    $expected = 'short_entity_type__' . substr(hash('sha256', $field->uuid), 0, 10);
+    $expected = 'short_entity_type__' . substr(hash('sha256', $field->uuid()), 0, 10);
     $this->assertEqual(ContentEntityDatabaseStorage::_fieldTableName($field), $expected);
-    $expected = 'short_entity_type_r__' . substr(hash('sha256', $field->uuid), 0, 10);
+    $expected = 'short_entity_type_r__' . substr(hash('sha256', $field->uuid()), 0, 10);
     $this->assertEqual(ContentEntityDatabaseStorage::_fieldRevisionTableName($field), $expected);
 
     // Long entity type, short field name
@@ -529,9 +529,9 @@ public function testTableNames() {
       'name' => $field_name,
       'type' => 'test_field',
     ));
-    $expected = 'long_entity_type_abcdefghijklmnopq__' . substr(hash('sha256', $field->uuid), 0, 10);
+    $expected = 'long_entity_type_abcdefghijklmnopq__' . substr(hash('sha256', $field->uuid()), 0, 10);
     $this->assertEqual(ContentEntityDatabaseStorage::_fieldTableName($field), $expected);
-    $expected = 'long_entity_type_abcdefghijklmnopq_r__' . substr(hash('sha256', $field->uuid), 0, 10);
+    $expected = 'long_entity_type_abcdefghijklmnopq_r__' . substr(hash('sha256', $field->uuid()), 0, 10);
     $this->assertEqual(ContentEntityDatabaseStorage::_fieldRevisionTableName($field), $expected);
 
     // Long entity type and field name.
@@ -542,9 +542,9 @@ public function testTableNames() {
       'name' => $field_name,
       'type' => 'test_field',
     ));
-    $expected = 'long_entity_type_abcdefghijklmnopq__' . substr(hash('sha256', $field->uuid), 0, 10);
+    $expected = 'long_entity_type_abcdefghijklmnopq__' . substr(hash('sha256', $field->uuid()), 0, 10);
     $this->assertEqual(ContentEntityDatabaseStorage::_fieldTableName($field), $expected);
-    $expected = 'long_entity_type_abcdefghijklmnopq_r__' . substr(hash('sha256', $field->uuid), 0, 10);
+    $expected = 'long_entity_type_abcdefghijklmnopq_r__' . substr(hash('sha256', $field->uuid()), 0, 10);
     $this->assertEqual(ContentEntityDatabaseStorage::_fieldRevisionTableName($field), $expected);
     // Try creating a second field and check there are no clashes.
     $field2 = entity_create('field_config', array(
@@ -562,9 +562,9 @@ public function testTableNames() {
       'type' => 'test_field',
       'deleted' => TRUE,
     ));
-    $expected = 'field_deleted_data_' . substr(hash('sha256', $field->uuid), 0, 10);
+    $expected = 'field_deleted_data_' . substr(hash('sha256', $field->uuid()), 0, 10);
     $this->assertEqual(ContentEntityDatabaseStorage::_fieldTableName($field), $expected);
-    $expected = 'field_deleted_revision_' . substr(hash('sha256', $field->uuid), 0, 10);
+    $expected = 'field_deleted_revision_' . substr(hash('sha256', $field->uuid()), 0, 10);
     $this->assertEqual(ContentEntityDatabaseStorage::_fieldRevisionTableName($field), $expected);
   }
 
diff --git a/core/modules/taxonomy/lib/Drupal/taxonomy/Entity/Vocabulary.php b/core/modules/taxonomy/lib/Drupal/taxonomy/Entity/Vocabulary.php
index f5a7ba7..0120a0f 100644
--- a/core/modules/taxonomy/lib/Drupal/taxonomy/Entity/Vocabulary.php
+++ b/core/modules/taxonomy/lib/Drupal/taxonomy/Entity/Vocabulary.php
@@ -120,7 +120,7 @@ public function postSave(EntityStorageInterface $storage, $update = TRUE) {
       foreach ($fields as $field) {
         $update_field = FALSE;
 
-        foreach ($field->settings['allowed_values'] as &$value) {
+        foreach ($field->getSettings('allowed_values') as &$value) {
           if ($value['vocabulary'] == $this->getOriginalId()) {
             $value['vocabulary'] = $this->id();
             $update_field = TRUE;
@@ -164,14 +164,17 @@ public static function postDelete(EntityStorageInterface $storage, array $entiti
       $modified_field = FALSE;
       // Term reference fields may reference terms from more than one
       // vocabulary.
-      foreach ($taxonomy_field->settings['allowed_values'] as $key => $allowed_value) {
+      $settings = $taxonomy_field->getSettings();
+      foreach ($taxonomy_field->getSetting('allowed_values') as $key => $allowed_value) {
         if (isset($vocabularies[$allowed_value['vocabulary']])) {
-          unset($taxonomy_field->settings['allowed_values'][$key]);
+          unset($setting['allowed_values'][$key]);
           $modified_field = TRUE;
         }
       }
+      $taxonomy_field->setSettings($settings);
       if ($modified_field) {
-        if (empty($taxonomy_field->settings['allowed_values'])) {
+        $allowed_values = $taxonomy_field->getSetting('allowed_values');
+        if (empty($allowed_values)) {
           $taxonomy_field->delete();
         }
         else {
diff --git a/core/modules/taxonomy/lib/Drupal/taxonomy/Plugin/views/argument_default/Tid.php b/core/modules/taxonomy/lib/Drupal/taxonomy/Plugin/views/argument_default/Tid.php
index 2f6e58b..66c4ac8 100644
--- a/core/modules/taxonomy/lib/Drupal/taxonomy/Plugin/views/argument_default/Tid.php
+++ b/core/modules/taxonomy/lib/Drupal/taxonomy/Plugin/views/argument_default/Tid.php
@@ -171,9 +171,10 @@ public function getArgument() {
         $instances = field_info_instances('node', $node->getType());
         foreach ($instances as $instance) {
           $field = $instance->getField();
-          if ($field->type == 'taxonomy_term_reference') {
-            foreach ($node->get($field->name) as $item) {
-              $taxonomy[$item->target_id] = $field->settings['allowed_values'][0]['vocabulary'];
+          if ($field->getType() == 'taxonomy_term_reference') {
+            foreach ($node->get($field->getName()) as $item) {
+              $allowed_values = $field->getSetting('allowed_values');
+              $taxonomy[$item->target_id] = $allowed_values[0]['vocabulary'];
             }
           }
         }
diff --git a/core/modules/taxonomy/lib/Drupal/taxonomy/Tests/TermFieldTest.php b/core/modules/taxonomy/lib/Drupal/taxonomy/Tests/TermFieldTest.php
index 237f9db..3795240 100644
--- a/core/modules/taxonomy/lib/Drupal/taxonomy/Tests/TermFieldTest.php
+++ b/core/modules/taxonomy/lib/Drupal/taxonomy/Tests/TermFieldTest.php
@@ -134,7 +134,7 @@ function testTaxonomyTermFieldWidgets() {
   function testTaxonomyTermFieldChangeMachineName() {
     // Add several entries in the 'allowed_values' setting, to make sure that
     // they all get updated.
-    $this->field->settings['allowed_values'] = array(
+    $this->field->setSetting('allowed_values', array(
       array(
         'vocabulary' => $this->vocabulary->id(),
         'parent' => '0',
@@ -147,7 +147,7 @@ function testTaxonomyTermFieldChangeMachineName() {
         'vocabulary' => 'foo',
         'parent' => '0',
       ),
-    );
+    ));
     $this->field->save();
     // Change the machine name.
     $new_name = drupal_strtolower($this->randomName());
diff --git a/core/modules/taxonomy/taxonomy.module b/core/modules/taxonomy/taxonomy.module
index d5a307e..bf98c6b 100644
--- a/core/modules/taxonomy/taxonomy.module
+++ b/core/modules/taxonomy/taxonomy.module
@@ -837,7 +837,7 @@ function taxonomy_build_node_index($node) {
     foreach (field_info_instances('node', $node->getType()) as $instance) {
       $field = $instance->getField();
       $field_name = $field->getName();
-      if ($field->module == 'taxonomy') {
+      if ($field->getModule() == 'taxonomy') {
         foreach ($node->getTranslationLanguages() as $language) {
           foreach ($node->getTranslation($language->id)->$field_name as $item) {
             if (!$item->isEmpty()) {
diff --git a/core/modules/taxonomy/taxonomy.views.inc b/core/modules/taxonomy/taxonomy.views.inc
index 59b94ff..d35ec81 100644
--- a/core/modules/taxonomy/taxonomy.views.inc
+++ b/core/modules/taxonomy/taxonomy.views.inc
@@ -436,7 +436,7 @@ function taxonomy_field_views_data(FieldConfigInterface $field) {
  */
 function taxonomy_field_views_data_views_data_alter(array &$data, FieldConfigInterface $field) {
   $field_name = $field->getName();
-  $entity_type_id = $field->entity_type;
+  $entity_type_id = $field->getTargetEntityTypeId();
   $entity_type = \Drupal::entityManager()->getDefinition($entity_type_id);
   $pseudo_field_name = 'reverse_' . $field_name . '_' . $entity_type_id;
 
diff --git a/core/modules/text/lib/Drupal/text/Tests/TextFieldTest.php b/core/modules/text/lib/Drupal/text/Tests/TextFieldTest.php
index aecf257..276ca82 100644
--- a/core/modules/text/lib/Drupal/text/Tests/TextFieldTest.php
+++ b/core/modules/text/lib/Drupal/text/Tests/TextFieldTest.php
@@ -58,7 +58,7 @@ function testTextFieldValidation() {
     ));
     $this->field->save();
     entity_create('field_instance_config', array(
-      'field_name' => $this->field->name,
+      'field_name' => $this->field->getName(),
       'entity_type' => 'entity_test',
       'bundle' => 'entity_test',
     ))->save();
@@ -66,8 +66,8 @@ function testTextFieldValidation() {
     // Test validation with valid and invalid values.
     $entity = entity_create('entity_test');
     for ($i = 0; $i <= $max_length + 2; $i++) {
-      $entity->{$this->field->name}->value = str_repeat('x', $i);
-      $violations = $entity->{$this->field->name}->validate();
+      $entity->{$this->field->getName()}->value = str_repeat('x', $i);
+      $violations = $entity->{$this->field->getName()}->validate();
       if ($i <= $max_length) {
         $this->assertEqual(count($violations), 0, "Length $i does not cause validation error when max_length is $max_length");
       }
diff --git a/core/modules/text/lib/Drupal/text/Tests/TextWithSummaryItemTest.php b/core/modules/text/lib/Drupal/text/Tests/TextWithSummaryItemTest.php
index 9b93095..beaad7a 100644
--- a/core/modules/text/lib/Drupal/text/Tests/TextWithSummaryItemTest.php
+++ b/core/modules/text/lib/Drupal/text/Tests/TextWithSummaryItemTest.php
@@ -185,7 +185,7 @@ protected function createField($entity_type) {
     ));
     $this->field->save();
     $this->instance = entity_create('field_instance_config', array(
-      'field_name' => $this->field->name,
+      'field_name' => $this->field->getName(),
       'entity_type' => $entity_type,
       'bundle' => $entity_type,
       'settings' => array(
diff --git a/core/modules/user/lib/Drupal/user/Tests/UserRegistrationTest.php b/core/modules/user/lib/Drupal/user/Tests/UserRegistrationTest.php
index ee84db2..58f4691 100644
--- a/core/modules/user/lib/Drupal/user/Tests/UserRegistrationTest.php
+++ b/core/modules/user/lib/Drupal/user/Tests/UserRegistrationTest.php
@@ -252,7 +252,7 @@ function testRegistrationWithUserFields() {
     $this->assertEqual($new_user->test_user_field->value, $value, 'The field value was correclty saved.');
 
     // Check that the 'add more' button works.
-    $field->cardinality = FieldDefinitionInterface::CARDINALITY_UNLIMITED;
+    $field->setCardinality(FieldDefinitionInterface::CARDINALITY_UNLIMITED);
     $field->save();
     foreach (array('js', 'nojs') as $js) {
       $this->drupalGet('user/register');
diff --git a/core/tests/Drupal/Tests/Core/Entity/FieldableDatabaseEntityStorageTest.php b/core/tests/Drupal/Tests/Core/Entity/FieldableDatabaseEntityStorageTest.php
index 5170bd5..6518a39 100644
--- a/core/tests/Drupal/Tests/Core/Entity/FieldableDatabaseEntityStorageTest.php
+++ b/core/tests/Drupal/Tests/Core/Entity/FieldableDatabaseEntityStorageTest.php
@@ -83,9 +83,9 @@ public function testFieldSqlSchemaForEntityWithStringIdentifier() {
 
     // Define a field definition for a test_field field.
     $field = $this->getMock('\Drupal\field\FieldConfigInterface');
-    $field->deleted = FALSE;
-    $field->entity_type = 'test_entity';
-    $field->name = 'test_field';
+    $field->setDeleted(FALSE);
+    $field->setTargetEntityTypieId('test_entity');
+    $field->setName('test_field');
 
     $field->expects($this->any())
       ->method('getName')
