diff --git a/core/includes/config.inc b/core/includes/config.inc
index f2fcd39..5a1e661 100644
--- a/core/includes/config.inc
+++ b/core/includes/config.inc
@@ -1,6 +1,7 @@
 <?php
 
 use Drupal\Core\Config\Config;
+use Drupal\Core\Config\ConfigException;
 use Drupal\Core\Config\FileStorage;
 use Drupal\Core\Config\NullStorage;
 use Drupal\Core\Config\StorageInterface;
@@ -113,10 +114,16 @@ function config_sync_get_changes(StorageInterface $source_storage, StorageInterf
  *   The storage to synchronize configuration from.
  * @param Drupal\Core\Config\StorageInterface $target_storage
  *   The storage to synchronize configuration to.
+ *
+ * @throws Drupal\Core\Config\ConfigException
  */
 function config_sync_changes(array $config_changes, StorageInterface $source_storage, StorageInterface $target_storage) {
   foreach (array('delete', 'create', 'change') as $op) {
     foreach ($config_changes[$op] as $name) {
+      // Bail out if the configuration object is not namespaced by extension.
+      if (strpos($name, '.') === FALSE) {
+        throw new ConfigException(sprintf('Missing namespace in Config name %s', $name));
+      }
       if ($op == 'delete') {
         $target_storage->delete($name);
       }
@@ -179,6 +186,8 @@ function config_import() {
  * @param Drupal\Core\Config\StorageInterface $target_storage
  *   The storage to synchronize configuration to.
  *
+ * @throws Drupal\Core\Config\ConfigException
+ *
  * @todo Add support for other extension types; e.g., themes etc.
  */
 function config_import_invoke_owner(array $config_changes, StorageInterface $source_storage, StorageInterface $target_storage) {
@@ -188,6 +197,10 @@ function config_import_invoke_owner(array $config_changes, StorageInterface $sou
   // handle dependencies correctly.
   foreach (array('delete', 'create', 'change') as $op) {
     foreach ($config_changes[$op] as $key => $name) {
+      // Bail out if the configuration object is not namespaced by extension.
+      if (strpos($name, '.') === FALSE) {
+        throw new ConfigException(sprintf('Missing namespace in Config name %s', $name));
+      }
       // Extract owner from configuration object name.
       $module = strtok($name, '.');
       // Check whether the module implements hook_config_import() and ask it to
diff --git a/core/lib/Drupal/Core/Config/Config.php b/core/lib/Drupal/Core/Config/Config.php
index 2f4d14a..dcc1616 100644
--- a/core/lib/Drupal/Core/Config/Config.php
+++ b/core/lib/Drupal/Core/Config/Config.php
@@ -238,8 +238,15 @@ class Config {
 
   /**
    * Saves the configuration object.
+   *
+   * @throws Drupal\Core\Config\ConfigException
    */
   public function save() {
+    // All configuration objects need to be namespaced by extension, as it would
+    // be impossible to maintain them otherwise.
+    if (strpos($this->name, '.') === FALSE) {
+      throw new ConfigException(sprintf('Missing namespace in Config name %s', $this->name));
+    }
     $this->sortByKey($this->data);
     $this->storage->write($this->name, $this->data);
     $this->isNew = FALSE;
diff --git a/core/modules/config/lib/Drupal/config/Tests/ConfigCRUDTest.php b/core/modules/config/lib/Drupal/config/Tests/ConfigCRUDTest.php
index 37aa854..bc3655c 100644
--- a/core/modules/config/lib/Drupal/config/Tests/ConfigCRUDTest.php
+++ b/core/modules/config/lib/Drupal/config/Tests/ConfigCRUDTest.php
@@ -8,6 +8,7 @@
 namespace Drupal\config\Tests;
 
 use Drupal\Core\Config\DatabaseStorage;
+use Drupal\Core\Config\ConfigException;
 use Drupal\simpletest\WebTestBase;
 
 /**
@@ -112,4 +113,28 @@ class ConfigCRUDTest extends WebTestBase {
     // their order must be identical.
     $this->assertIdentical($new_config->get(), $config->get());
   }
+  /**
+   * Tests saving a config object without a namespace.
+   */
+  function testNamespace() {
+    $name = 'nonamespace';
+    try {
+      $config = config($name);
+      $config->save();
+      $this->fail('Expected exception ConfigException was not thrown.');
+    }
+    catch (ConfigException $e) {
+      $this->pass('Expected exception ConfigException was thrown.');
+    }
+
+    $name = 'config.namespace';
+    try {
+      $config = config($name);
+      $config->save();
+      $this->pass('Exception ConfigException was not thrown.');
+    }
+    catch (ConfigException $e) {
+      $this->fail('Exception ConfigException was thrown.');
+    }
+  }
 }
