diff --git a/core/lib/Drupal/Core/Config/Entity/ConfigStorageController.php b/core/lib/Drupal/Core/Config/Entity/ConfigStorageController.php
index b472b8f..96bc18b 100644
--- a/core/lib/Drupal/Core/Config/Entity/ConfigStorageController.php
+++ b/core/lib/Drupal/Core/Config/Entity/ConfigStorageController.php
@@ -234,8 +234,14 @@ public function create(array $values) {
     $class = $this->entityInfo['class'];
 
     $entity = new $class($values, $this->entityType);
-    // Mark this entity as new, so isNew() returns TRUE. This does not check
-    // whether a configuration entity with the same ID (if any) already exists.
+    if (!$entity->isNew()) {
+      // Check to see if an entity already exists.
+      $config = config($this->getConfigPrefix() . $entity->id());
+      if (!$config->isNew()) {
+        throw new EntityMalformedException('The entity ID is not unique.');
+      }
+    }
+    // Mark this entity as new, so isNew() returns TRUE.
     $entity->enforceIsNew();
 
     // Assign a new UUID if there is none yet.
diff --git a/core/modules/config/lib/Drupal/config/Tests/ConfigEntityUnitTest.php b/core/modules/config/lib/Drupal/config/Tests/ConfigEntityUnitTest.php
index d64c73a..cf74af5 100644
--- a/core/modules/config/lib/Drupal/config/Tests/ConfigEntityUnitTest.php
+++ b/core/modules/config/lib/Drupal/config/Tests/ConfigEntityUnitTest.php
@@ -8,6 +8,7 @@
 namespace Drupal\config\Tests;
 
 use Drupal\simpletest\DrupalUnitTestBase;
+use Drupal\Core\Entity\EntityMalformedException;
 
 /**
  * Unit tests for configuration controllers and objects.
@@ -40,4 +41,25 @@ public function testStorageControllerMethods() {
     $this->assertIdentical($controller->getConfigPrefix(), $expected);
   }
 
+  /**
+   * Tests the behavior of creating conflicting entities.
+   */
+  public function testCreatingConflictingEntities() {
+    // Create an entity with a label.
+    $entity = entity_create('config_test', array('id' => 'foo', 'label' => 'Foo', 'style' => 'foo'));
+    $entity->save();
+
+    // Create an entity with the same ID, but a different label.
+    try {
+      $entity = entity_create('config_test', array('id' => 'foo', 'label' => 'Bananas'));
+      $entity->save();
+    }
+    catch (EntityMalformedException $e) {
+      $this->pass('A conflicting entity was not saved.');
+    }
+    // Creating an entity with the same machine name should not succeed.
+    $this->assertEqual($entity->label(), 'Foo', 'The entity label was not overwritten.');
+    $this->assertEqual($entity->style, 'foo', 'The entity style was not overwritten.');
+  }
+
 }
diff --git a/core/modules/config/lib/Drupal/config/Tests/ConfigImportTest.php b/core/modules/config/lib/Drupal/config/Tests/ConfigImportTest.php
index 95089f7..66984cd 100644
--- a/core/modules/config/lib/Drupal/config/Tests/ConfigImportTest.php
+++ b/core/modules/config/lib/Drupal/config/Tests/ConfigImportTest.php
@@ -194,4 +194,13 @@ function testUpdated() {
     $this->assertFalse(config_sync_get_changes($staging, $storage));
   }
 
+  /**
+   * Tests enabling a module with a duplicate configuration entity.
+   */
+  function testDuplicate() {
+    $this->assertEqual(config('config_test.dynamic.default')->get('label'), 'Default', "Configuration object label is 'Default'.");
+    module_enable(array('config_test_duplicate'));
+    $this->assertEqual(config('config_test.dynamic.default')->get('label'), 'Default', 'Configuration object is not silently overwritten on import.');
+  }
+
 }
diff --git a/core/modules/config/tests/config_test_duplicate/config/config_test.dynamic.default.yml b/core/modules/config/tests/config_test_duplicate/config/config_test.dynamic.default.yml
new file mode 100644
index 0000000..12efb31
--- /dev/null
+++ b/core/modules/config/tests/config_test_duplicate/config/config_test.dynamic.default.yml
@@ -0,0 +1,2 @@
+id: default
+label: Not default
diff --git a/core/modules/config/tests/config_test_duplicate/config_test_duplicate.info b/core/modules/config/tests/config_test_duplicate/config_test_duplicate.info
new file mode 100644
index 0000000..491708d
--- /dev/null
+++ b/core/modules/config/tests/config_test_duplicate/config_test_duplicate.info
@@ -0,0 +1,5 @@
+name = Duplicate default configuration
+package = Core
+version = VERSION
+core = 8.x
+hidden = TRUE
diff --git a/core/modules/config/tests/config_test_duplicate/config_test_duplicate.module b/core/modules/config/tests/config_test_duplicate/config_test_duplicate.module
new file mode 100644
index 0000000..f6c2685
--- /dev/null
+++ b/core/modules/config/tests/config_test_duplicate/config_test_duplicate.module
@@ -0,0 +1,6 @@
+<?php
+
+/**
+ * @file
+ * Test module with a duplicate of a config_test configuration entity.
+ */
