diff --git a/core/lib/Drupal/Core/Config/Entity/ConfigEntityStorage.php b/core/lib/Drupal/Core/Config/Entity/ConfigEntityStorage.php
index 75506d9..139d384 100644
--- a/core/lib/Drupal/Core/Config/Entity/ConfigEntityStorage.php
+++ b/core/lib/Drupal/Core/Config/Entity/ConfigEntityStorage.php
@@ -300,7 +300,16 @@ public function getQueryServicename() {
    * {@inheritdoc}
    */
   public function importCreate($name, Config $new_config, Config $old_config) {
-    $entity = $this->create($new_config->get());
+    // No preCreate is run? Ho hum.
+    // No UUID is created. Ho hum.
+    $data = $this->mapFromStorageRecords(array($new_config->get()));
+    $entity = current($data);
+    $entity->enforceIsNew();
+    $entity->postCreate($this);
+
+    // Modules might need to add or change the data initially held by the new
+    // entity object, for instance to fill-in default values.
+    $this->invokeHook('create', $entity);
     $entity->setSyncing(TRUE);
     $entity->save();
     return TRUE;
@@ -318,11 +327,16 @@ public function importUpdate($name, Config $new_config, Config $old_config) {
     $entity->setSyncing(TRUE);
     $entity->original = clone $entity;
 
-    foreach ($old_config->get() as $property => $value) {
-      $entity->original->set($property, $value);
-    }
+    // I don't know why we are doing this.
+    //    foreach ($old_config->get() as $property => $value) {
+    //      $entity->original->set($property, $value);
+    //    }
+
+    $data = $this->mapFromStorageRecords(array($new_config->get()));
+    $updated_entity = current($data);
 
-    foreach ($new_config->get() as $property => $value) {
+    foreach (array_keys($new_config->get()) as $property) {
+      $value = $updated_entity->get($property);
       $entity->set($property, $value);
     }
 
