diff --git a/core/lib/Drupal/Core/Field/FieldTypePluginManager.php b/core/lib/Drupal/Core/Field/FieldTypePluginManager.php
index 75ea2fd..ee89616 100644
--- a/core/lib/Drupal/Core/Field/FieldTypePluginManager.php
+++ b/core/lib/Drupal/Core/Field/FieldTypePluginManager.php
@@ -14,8 +14,6 @@
 
 /**
  * Plugin manager for 'field type' plugins.
- *
- * @todo Add FieldTypePluginManagerInterface in https://drupal.org/node/2175415.
  */
 class FieldTypePluginManager extends DefaultPluginManager implements FieldTypePluginManagerInterface {
 
diff --git a/core/modules/field/lib/Drupal/field/Entity/FieldConfig.php b/core/modules/field/lib/Drupal/field/Entity/FieldConfig.php
index cef84e5..3488a69 100644
--- a/core/modules/field/lib/Drupal/field/Entity/FieldConfig.php
+++ b/core/modules/field/lib/Drupal/field/Entity/FieldConfig.php
@@ -306,13 +306,11 @@ protected function preSaveNew(EntityStorageControllerInterface $storage_controll
       ));
     }
 
-    // Disallow reserved field names. This can't prevent all field name
-    // collisions with existing entity properties, but some is better than
-    // none.
-    foreach ($entity_manager->getDefinitions() as $entity_type_id => $entity_type) {
-      if (in_array($this->name, $entity_type->getKeys())) {
-        throw new FieldException(format_string('Attempt to create field %name which is reserved by entity type %type.', array('%name' => $this->name, '%type' => $entity_type_id)));
-      }
+    // Disallow reserved field names.
+    $disallowed_field_names = array_keys($entity_manager->getDefinition($this->entity_type)->getKeys());
+    $disallowed_field_names += array_keys($entity_manager->getFieldDefinitions($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)));
     }
 
     // Check that the field type is known.
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 2b03c6f..c171ddb 100644
--- a/core/modules/field_ui/lib/Drupal/field_ui/FieldOverview.php
+++ b/core/modules/field_ui/lib/Drupal/field_ui/FieldOverview.php
@@ -384,6 +384,7 @@ protected function validateAddExisting(array $form, array &$form_state) {
    * Overrides \Drupal\field_ui\OverviewBase::submitForm().
    */
   public function submitForm(array &$form, array &$form_state) {
+    $error = FALSE;
     $form_values = $form_state['values']['fields'];
     $destinations = array();
 
@@ -437,7 +438,8 @@ public function submitForm(array &$form, array &$form_state) {
         $form_state['fields_added']['_add_new_field'] = $values['field_name'];
       }
       catch (\Exception $e) {
-        drupal_set_message($this->t('There was a problem creating field %label: !message', array('%label' => $instance->getLabel(), '!message' => $e->getMessage())), 'error');
+        $error = TRUE;
+        drupal_set_message($this->t('There was a problem creating field %label: !message', array('%label' => $instance['label'], '!message' => $e->getMessage())), 'error');
       }
     }
 
@@ -486,7 +488,8 @@ public function submitForm(array &$form, array &$form_state) {
           $form_state['fields_added']['_add_existing_field'] = $instance['field_name'];
         }
         catch (\Exception $e) {
-          drupal_set_message($this->t('There was a problem creating field instance %label: @message.', array('%label' => $instance->getLabel(), '@message' => $e->getMessage())), 'error');
+          $error = TRUE;
+          drupal_set_message($this->t('There was a problem creating field instance %label: @message.', array('%label' => $instance['label'], '@message' => $e->getMessage())), 'error');
         }
       }
     }
@@ -496,7 +499,7 @@ public function submitForm(array &$form, array &$form_state) {
       $destinations[] = $destination['destination'];
       $form_state['redirect_route'] = FieldUI::getNextDestination($destinations, $form_state);
     }
-    else {
+    elseif (!$error) {
       drupal_set_message($this->t('Your settings have been saved.'));
     }
   }
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 70017fd..cac1801 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
@@ -383,6 +383,32 @@ function testDeleteField() {
   }
 
   /**
+   * Tests that Field UI respects disallowed field names.
+   */
+  function testDisallowedFieldNames() {
+    // Reset the field prefix so we can test properly.
+    \Drupal::config('field_ui.settings')->set('field_prefix', '')->save();
+
+    $label = 'Disallowed field';
+    $edit = array(
+      'fields[_add_new_field][label]' => $label,
+      'fields[_add_new_field][type]' => 'test_field',
+    );
+
+    // Try with an entity key.
+    $edit['fields[_add_new_field][field_name]'] = 'title';
+    $bundle_path = 'admin/structure/types/manage/' . $this->type;
+    $this->drupalPostForm("$bundle_path/fields",  $edit, t('Save'));
+    $this->assertText(t('There was a problem creating field Disallowed field: Attempt to create field title which is reserved by entity type node.', array('%label' => $label)), 'Field was not saved.');
+
+    // Try with a base field.
+    $edit['fields[_add_new_field][field_name]'] = 'sticky';
+    $bundle_path = 'admin/structure/types/manage/' . $this->type;
+    $this->drupalPostForm("$bundle_path/fields",  $edit, t('Save'));
+    $this->assertText(t('There was a problem creating field Disallowed field: Attempt to create field sticky which is reserved by entity type node.', array('%label' => $label)), 'Field was not saved.');
+  }
+
+  /**
    * Tests that Field UI respects locked fields.
    */
   function testLockedField() {
