diff --git a/core/lib/Drupal/Core/Config/ConfigUUIDException.php b/core/lib/Drupal/Core/Config/ConfigUUIDException.php
new file mode 100644
index 0000000..72087f0
--- /dev/null
+++ b/core/lib/Drupal/Core/Config/ConfigUUIDException.php
@@ -0,0 +1,13 @@
+<?php
+
+/**
+ * @file
+ * Contains \Drupal\Core\Config\ConfigUUIDException.
+ */
+
+namespace Drupal\Core\Config;
+
+/**
+ * Exception thrown when a config object UUID causes a conflict.
+ */
+class ConfigUUIDException extends ConfigException {}
diff --git a/core/modules/field/lib/Drupal/field/Tests/FieldUUIDConflictTest.php b/core/modules/field/lib/Drupal/field/Tests/FieldUUIDConflictTest.php
new file mode 100644
index 0000000..239bbe1
--- /dev/null
+++ b/core/modules/field/lib/Drupal/field/Tests/FieldUUIDConflictTest.php
@@ -0,0 +1,144 @@
+<?php
+
+/**
+ * @file
+ * Contains \Drupal\field\Tests\FieldUUIDConflictTest.
+ */
+
+namespace Drupal\field\Tests;
+
+use Drupal\Core\Config\ConfigUUIDException;
+use Drupal\simpletest\WebTestBase;
+
+use Drupal\Component\Uuid\Uuid;
+
+/**
+ * Tests importing field data when the ID or UUID does not match existing data.
+ */
+class FieldUUIDConflictTest extends FieldUnitTestBase {
+
+  /**
+   * Modules to enable.
+   *
+   * @var array
+   */
+  public static $modules = array('field_test_config', 'field_test');
+
+  public static function getInfo() {
+    return array(
+      'name' => 'UUID conflict',
+      'description' => 'Tests staging and importing fields and instances with IDs and UUIDs that do not match existing config.',
+      'group' => 'Field API',
+    );
+  }
+
+  public function setUp() {
+    parent::setUp();
+
+    // Import the default config.
+    $this->installConfig(array('field_test_config'));
+
+    // These are the types used in field_test_config's default config.
+    $this->entity_type = 'test_entity';
+    $this->bundle = 'test_bundle';
+    $this->field_id = 'field_test_import';
+    $this->instance_id = "{$this->entity_type}.{$this->bundle}.{$this->field_id}";
+    // Load the original field and instance entities.
+    $this->original_field = entity_load('field_entity', $this->field_id);
+    $this->original_instance = entity_load('field_instance', $this->instance_id);
+  }
+
+  /**
+   * Tests importing fields and instances with changed IDs or UUIDs.
+   */
+  function testUUIDConflict() {
+    // Stage and attempt to import a changed field ID.
+    $this->stageIDChange($this->field_id, 'field.field');
+    $this->assertNoImport();
+
+    // Stage and attempt to import a changed instance ID.
+    $this->stageIDChange($this->instance_id, 'field.instance');
+    $this->assertNoImport();
+
+    // Stage and attempt to import both changed field and instance IDs.
+    $this->stageIDChange($this->field_id, 'field.field');
+    $this->stageIDChange($this->instance_id, 'field.instance');
+    $this->assertNoImport();
+
+    // Stage and attempt to import a changed field UUID.
+    $this->stageUUIDChange($this->field_id, 'field.field');
+    $this->assertNoImport();
+
+    // Stage and attempt to import a changed instance UUID.
+    $this->stageUUIDChange($this->instance_id, 'field.instance');
+    $this->assertNoImport();
+
+    // Stage and attempt to import both changed field and instance UUIDs.
+    $this->stageUUIDChange($this->field_id, 'field.field');
+    $this->stageUUIDChange($this->instance_id, 'field.instance');
+    $this->assertNoImport();
+  }
+
+  /**
+   * Creates and stages a copy of a configuration object with a different UUID.
+   */
+  public function stageUUIDChange($id, $prefix) {
+    // Create a copy of the object with the same ID but a different UUID.
+    $active = $this->container->get('config.storage');
+    $config = $active->read("$prefix.$id");
+    $uuid = new Uuid();
+    $new_uuid = $uuid->generate();
+    $config['uuid'] = $new_uuid;
+
+    // Clear any previously staged config and save a file in the staging
+    // directory.
+    $staging = $this->container->get('config.storage.staging');
+    $staging->deleteAll();
+    $staging->write("$prefix.$id", $config);
+  }
+
+  /**
+   * Creates and stages a copy of a configuration object with a different ID.
+   */
+  public function stageIDChange($id, $prefix) {
+    // Create a copy of the object with the same UUID but a different ID.
+    $active = $this->container->get('config.storage');
+    $config = $active->read("$prefix.$id");
+    $new_id = strtolower($this->randomName());
+    $config['id'] = $new_id;
+
+    // Clear any previously staged config and save a file in the staging
+    // directory.
+    $staging = $this->container->get('config.storage.staging');
+    $staging->deleteAll();
+    $staging->write("$prefix.$new_id", $config);
+
+    // Also add the item to the manifest so that it is detected as new.
+    // @todo A manifest change should not be needed for new objects, only
+    // deleted.
+    $manifest = $active->read("manifest.$prefix");
+    $manifest[$new_id] = array('name' => "$prefix.$new_id");
+    $staging->write("manifest.$prefix", $manifest);
+  }
+
+  /**
+   * Asserts that an exception is thrown and the field data is not corrupted.
+   */
+  public function assertNoImport() {
+    // Import the content of the staging directory.
+    try {
+      config_import();
+      $this->fail('Exception thrown when attempting to import a field definition with a UUID that does not match the existing UUID.');
+    }
+    catch (ConfigUUIDException $e) {
+      $this->pass(format_string('Exception thrown when attempting to import a field definition with an ID/UUID combination that does not match existing data: %e.', array('%e' => $e)));
+    }
+
+    // Ensure that the field and instance were not corrupted.
+    $field = entity_load('field_entity', $this->field_id);
+    $instance = entity_load('field_instance', $this->instance_id);
+    $this->assertEqual($field, $this->original_field);
+    $this->assertEqual($instance, $this->original_instance);
+  }
+
+}
