diff --git a/core/lib/Drupal/Core/TypedData/ItemList.php b/core/lib/Drupal/Core/TypedData/ItemList.php
index dc5a484..9b39e83 100644
--- a/core/lib/Drupal/Core/TypedData/ItemList.php
+++ b/core/lib/Drupal/Core/TypedData/ItemList.php
@@ -133,10 +133,6 @@ public function offsetGet($offset) {
    * @return \Drupal\Core\TypedData\TypedDataInterface
    */
   protected function createItem($offset = 0, $value = NULL) {
-    // If no value is set but it's a list, store an empty array instead NULL.
-    if (!isset($value) && !empty($this->definition['list'])) {
-      $value = array();
-    }
     return \Drupal::typedData()->getPropertyInstance($this, $offset, $value);
   }
 
diff --git a/core/lib/Drupal/Core/TypedData/Plugin/DataType/Map.php b/core/lib/Drupal/Core/TypedData/Plugin/DataType/Map.php
index 74e9371..180003c 100644
--- a/core/lib/Drupal/Core/TypedData/Plugin/DataType/Map.php
+++ b/core/lib/Drupal/Core/TypedData/Plugin/DataType/Map.php
@@ -48,12 +48,10 @@ class Map extends TypedData implements \IteratorAggregate, ComplexDataInterface
    */
   public function getPropertyDefinitions() {
     $definitions = array();
-    if (!empty($this->values)) {
-      foreach ($this->values as $name => $value) {
-        $definitions[$name] = array(
-          'type' => 'any',
-        );
-      }
+    foreach ($this->values as $name => $value) {
+      $definitions[$name] = array(
+        'type' => 'any',
+      );
     }
     return $definitions;
   }
diff --git a/core/lib/Drupal/Core/TypedData/TypedDataManager.php b/core/lib/Drupal/Core/TypedData/TypedDataManager.php
index 8b4c246..bbc0d7f 100644
--- a/core/lib/Drupal/Core/TypedData/TypedDataManager.php
+++ b/core/lib/Drupal/Core/TypedData/TypedDataManager.php
@@ -250,8 +250,9 @@ public function getPropertyInstance(TypedDataInterface $object, $property_name,
     // data value if necessary.
     $property = clone $this->prototypes[$key];
     $property->setContext($property_name, $object);
-    // Set even NULL values to make sure the value is set accordingly.
-    $property->setValue($value, FALSE);
+    if (isset($value)) {
+      $property->setValue($value, FALSE);
+    }
     return $property;
   }
 
diff --git a/core/modules/hal/lib/Drupal/hal/Tests/DenormalizeTest.php b/core/modules/hal/lib/Drupal/hal/Tests/DenormalizeTest.php
index e307df6..910c14f 100644
--- a/core/modules/hal/lib/Drupal/hal/Tests/DenormalizeTest.php
+++ b/core/modules/hal/lib/Drupal/hal/Tests/DenormalizeTest.php
@@ -108,7 +108,7 @@ public function testMarkFieldForDeletion() {
     $empty_field_denormalized = $this->serializer->denormalize($empty_field_data, $this->entityClass, $this->format);
     $empty_field_value = $empty_field_denormalized->field_test_text->getValue();
 
-    $this->assertTrue(!isset($no_field_value) && empty($empty_field_value) && is_array($empty_field_value), 'A field set to an empty array in the data is structured differently than an empty field.');
+    $this->assertTrue(!empty($no_field_value) && empty($empty_field_value), 'A field set to an empty array in the data is structured differently than an empty field.');
   }
 
   /**
diff --git a/core/modules/views_ui/lib/Drupal/views_ui/ViewUI.php b/core/modules/views_ui/lib/Drupal/views_ui/ViewUI.php
index 7d88791..6a19810 100644
--- a/core/modules/views_ui/lib/Drupal/views_ui/ViewUI.php
+++ b/core/modules/views_ui/lib/Drupal/views_ui/ViewUI.php
@@ -154,6 +154,16 @@ public function __construct(ViewStorageInterface $storage, ViewExecutable $execu
   }
 
   /**
+   * Implements \Drupal\Core\Entity\EntityInterface::createInstance().
+   */
+  public static function createInstance(array $values, $entity_type, $bundle = FALSE, $translations = array()) {
+    // This class shouldn't be used like an entity and thus shouldn't be
+    // instantiated using this helper function. Therefore we break with the
+    // interface and just throw an error.
+    throw new \Exception('ViewUI cannot be handled as entity. Use the normal constructor to create an instance instead.');
+  }
+
+  /**
    * Overrides \Drupal\Core\Config\Entity\ConfigEntityBase::get().
    */
   public function get($property_name, $langcode = NULL) {
