diff --git a/core/lib/Drupal/Core/Config/Schema/Mapping.php b/core/lib/Drupal/Core/Config/Schema/Mapping.php
index eed1da8..319f30d 100644
--- a/core/lib/Drupal/Core/Config/Schema/Mapping.php
+++ b/core/lib/Drupal/Core/Config/Schema/Mapping.php
@@ -43,8 +43,8 @@ protected function parse() {
    * Since all configuration objects are mappings the function will except a dot
    * delimited key to access nested values, for example, 'page.front'.
    */
-  public function get($property_name) {
-    $parts = explode('.', $property_name);
+  public function get($element_name) {
+    $parts = explode('.', $element_name);
     $root_key = array_shift($parts);
     $elements = $this->getElements();
     if (isset($elements[$root_key])) {
@@ -63,7 +63,7 @@ public function get($property_name) {
       return $element;
     }
     else {
-      throw new \InvalidArgumentException(String::format("The configuration property @key doesn't exist.", array('@key' => $property_name)));
+      throw new \InvalidArgumentException(String::format("The configuration property @key doesn't exist.", array('@key' => $element_name)));
     }
   }
 
diff --git a/core/lib/Drupal/Core/Entity/Plugin/DataType/EntityAdapter.php b/core/lib/Drupal/Core/Entity/Plugin/DataType/EntityAdapter.php
index bbcb0bb..c2d35ea 100644
--- a/core/lib/Drupal/Core/Entity/Plugin/DataType/EntityAdapter.php
+++ b/core/lib/Drupal/Core/Entity/Plugin/DataType/EntityAdapter.php
@@ -79,17 +79,17 @@ public function setValue($entity, $notify = TRUE) {
   /**
    * {@inheritdoc}
    */
-  public function get($property_name) {
+  public function get($element_name) {
     if (!isset($this->entity)) {
-      throw new MissingDataException(String::format('Unable to get property @name as no entity has been provided.', array('@name' => $property_name)));
+      throw new MissingDataException(String::format('Unable to get property @name as no entity has been provided.', array('@name' => $element_name)));
     }
     if (!$this->entity instanceof FieldableEntityInterface) {
       // @todo: Add support for config entities in
       // https://www.drupal.org/node/1818574.
-      throw new \InvalidArgumentException(String::format('Unable to get unknown property @name.', array('@name' => $property_name)));
+      throw new \InvalidArgumentException(String::format('Unable to get unknown property @name.', array('@name' => $element_name)));
     }
     // This will throw an exception for unknown fields.
-    return $this->entity->get($property_name);
+    return $this->entity->get($element_name);
   }
 
   /**
diff --git a/core/lib/Drupal/Core/TypedData/ComplexDataDefinitionBase.php b/core/lib/Drupal/Core/TypedData/ComplexDataDefinitionBase.php
index 1fa5dab..44ab6db 100644
--- a/core/lib/Drupal/Core/TypedData/ComplexDataDefinitionBase.php
+++ b/core/lib/Drupal/Core/TypedData/ComplexDataDefinitionBase.php
@@ -39,6 +39,13 @@ public function getPropertyDefinition($name) {
   /**
    * {@inheritdoc}
    */
+  public function getElementDefinition($name) {
+    return $this->getPropertyDefinition($name);
+  }
+
+  /**
+   * {@inheritdoc}
+   */
   public function getMainPropertyName() {
     return NULL;
   }
diff --git a/core/lib/Drupal/Core/TypedData/ComplexDataDefinitionInterface.php b/core/lib/Drupal/Core/TypedData/ComplexDataDefinitionInterface.php
index 5cc1506..5c6b7f9 100644
--- a/core/lib/Drupal/Core/TypedData/ComplexDataDefinitionInterface.php
+++ b/core/lib/Drupal/Core/TypedData/ComplexDataDefinitionInterface.php
@@ -14,7 +14,7 @@
  *
  * @ingroup typed_data
  */
-interface ComplexDataDefinitionInterface extends DataDefinitionInterface  {
+interface ComplexDataDefinitionInterface extends TraversableTypedDataInterface  {
 
   /**
    * Gets the definition of a contained property.
diff --git a/core/lib/Drupal/Core/TypedData/ComplexDataInterface.php b/core/lib/Drupal/Core/TypedData/ComplexDataInterface.php
index b60f84d..7b5133b 100644
--- a/core/lib/Drupal/Core/TypedData/ComplexDataInterface.php
+++ b/core/lib/Drupal/Core/TypedData/ComplexDataInterface.php
@@ -26,22 +26,6 @@
 interface ComplexDataInterface extends TraversableTypedDataInterface  {
 
   /**
-   * Gets a property object.
-   *
-   * @param $property_name
-   *   The name of the property to get; e.g., 'title' or 'name'.
-   *
-   * @return \Drupal\Core\TypedData\TypedDataInterface
-   *   The property object.
-   *
-   * @throws \InvalidArgumentException
-   *   If an invalid property name is given.
-   * @throws \Drupal\Core\TypedData\Exception\MissingDataException
-   *   If the complex data structure is unset and no property can be created.
-   */
-  public function get($property_name);
-
-  /**
    * Sets a property value.
    *
    * @param $property_name
@@ -91,12 +75,4 @@ public function getProperties($include_computed = FALSE);
    */
   public function toArray();
 
-  /**
-   * Determines whether the data structure is empty.
-   *
-   * @return boolean
-   *   TRUE if the data structure is empty, FALSE otherwise.
-   */
-  public function isEmpty();
-
 }
diff --git a/core/lib/Drupal/Core/TypedData/ListDataDefinition.php b/core/lib/Drupal/Core/TypedData/ListDataDefinition.php
index b710a75..f140e53 100644
--- a/core/lib/Drupal/Core/TypedData/ListDataDefinition.php
+++ b/core/lib/Drupal/Core/TypedData/ListDataDefinition.php
@@ -101,6 +101,13 @@ public function getItemDefinition() {
   }
 
   /**
+   * {@inheritdoc}
+   */
+  public function getElementDefinition($name) {
+    return $this->getItemDefinition();
+  }
+
+  /**
    * Sets the item definition.
    *
    * @param \Drupal\Core\TypedData\DataDefinition $definition
diff --git a/core/lib/Drupal/Core/TypedData/ListDataDefinitionInterface.php b/core/lib/Drupal/Core/TypedData/ListDataDefinitionInterface.php
index c506fe7..6669c67 100644
--- a/core/lib/Drupal/Core/TypedData/ListDataDefinitionInterface.php
+++ b/core/lib/Drupal/Core/TypedData/ListDataDefinitionInterface.php
@@ -18,7 +18,7 @@
  *
  * @ingroup typed_data
  */
-interface ListDataDefinitionInterface extends DataDefinitionInterface {
+interface ListDataDefinitionInterface extends TraversableTypedDataInterface {
 
   /**
    * Creates a new list data definition for items of the given data type.
diff --git a/core/lib/Drupal/Core/TypedData/ListInterface.php b/core/lib/Drupal/Core/TypedData/ListInterface.php
index 09dce07..36ca902 100644
--- a/core/lib/Drupal/Core/TypedData/ListInterface.php
+++ b/core/lib/Drupal/Core/TypedData/ListInterface.php
@@ -23,14 +23,6 @@
 interface ListInterface extends TraversableTypedDataInterface, \ArrayAccess, \Countable {
 
   /**
-   * Determines whether the list contains any non-empty items.
-   *
-   * @return boolean
-   *   TRUE if the list is empty, FALSE otherwise.
-   */
-  public function isEmpty();
-
-  /**
    * Gets the definition of a contained item.
    *
    * @return \Drupal\Core\TypedData\DataDefinitionInterface
@@ -39,21 +31,6 @@ public function isEmpty();
   public function getItemDefinition();
 
   /**
-   * Returns the item at the specified position in this list.
-   *
-   * @param int $index
-   *   Index of the item to return.
-   *
-   * @return \Drupal\Core\TypedData\TypedDataInterface
-   *   The item at the specified position in this list. An empty item is created
-   *   if it does not exist yet.
-   *
-   * @throws \Drupal\Core\TypedData\Exception\MissingDataException
-   *   If the complex data structure is unset and no item can be created.
-   */
-  public function get($index);
-
-  /**
    * Replaces the item at the specified position in this list.
    *
    * @param int $index
diff --git a/core/lib/Drupal/Core/TypedData/Plugin/DataType/ItemList.php b/core/lib/Drupal/Core/TypedData/Plugin/DataType/ItemList.php
index 52fc0b0..9ed4909 100644
--- a/core/lib/Drupal/Core/TypedData/Plugin/DataType/ItemList.php
+++ b/core/lib/Drupal/Core/TypedData/Plugin/DataType/ItemList.php
@@ -7,8 +7,8 @@
 
 namespace Drupal\Core\TypedData\Plugin\DataType;
 
-use Drupal\Core\TypedData\ComplexDataInterface;
 use Drupal\Core\TypedData\ListInterface;
+use Drupal\Core\TypedData\TraversableTypedDataInterface;
 use Drupal\Core\TypedData\TypedData;
 use Drupal\Core\TypedData\TypedDataInterface;
 
@@ -99,6 +99,9 @@ public function getString() {
 
   /**
    * {@inheritdoc}
+   *
+   * @throws \Drupal\Core\TypedData\Exception\MissingDataException
+   *   If the complex data structure is unset and no item can be created.
    */
   public function get($index) {
     if (!is_numeric($index)) {
@@ -199,11 +202,11 @@ public function count() {
   }
 
   /**
-   * Implements \Drupal\Core\TypedData\ListInterface::isEmpty().
+   * {@inheritdoc}
    */
   public function isEmpty() {
     foreach ($this->list as $item) {
-      if ($item instanceof ComplexDataInterface || $item instanceof ListInterface) {
+      if ($item instanceof TraversableTypedDataInterface) {
         if (!$item->isEmpty()) {
           return FALSE;
         }
diff --git a/core/lib/Drupal/Core/TypedData/Plugin/DataType/Map.php b/core/lib/Drupal/Core/TypedData/Plugin/DataType/Map.php
index 7694db5..dd4da52 100644
--- a/core/lib/Drupal/Core/TypedData/Plugin/DataType/Map.php
+++ b/core/lib/Drupal/Core/TypedData/Plugin/DataType/Map.php
@@ -119,18 +119,23 @@ public function getString() {
   }
 
   /**
-   * Implements \Drupal\Core\TypedData\ComplexDataInterface::get().
+   * {@inheritdoc}
+   *
+   * @throws \InvalidArgumentException
+   *   If an invalid property name is given.
+   * @throws \Drupal\Core\TypedData\Exception\MissingDataException
+   *   If the complex data structure is unset and no property can be created.
    */
-  public function get($property_name) {
-    if (!isset($this->properties[$property_name])) {
+  public function get($element_name) {
+    if (!isset($this->properties[$element_name])) {
       $value = NULL;
-      if (isset($this->values[$property_name])) {
-        $value = $this->values[$property_name];
+      if (isset($this->values[$element_name])) {
+        $value = $this->values[$element_name];
       }
       // If the property is unknown, this will throw an exception.
-      $this->properties[$property_name] = \Drupal::typedDataManager()->getPropertyInstance($this, $property_name, $value);
+      $this->properties[$element_name] = \Drupal::typedDataManager()->getPropertyInstance($this, $element_name, $value);
     }
-    return $this->properties[$property_name];
+    return $this->properties[$element_name];
   }
 
   /**
diff --git a/core/lib/Drupal/Core/TypedData/TraversableTypedDataDefinitionInterface.php b/core/lib/Drupal/Core/TypedData/TraversableTypedDataDefinitionInterface.php
new file mode 100644
index 0000000..a07e8fe
--- /dev/null
+++ b/core/lib/Drupal/Core/TypedData/TraversableTypedDataDefinitionInterface.php
@@ -0,0 +1,26 @@
+<?php
+
+/**
+ * @file
+ * Contains \Drupal\Core\TypedData\TraversableTypedDataDefinitionInterface.
+ */
+
+namespace Drupal\Core\TypedData;
+
+/**
+ * Provides an interface for the data definitions of traversable typed data.
+ */
+interface TraversableTypedDataDefinitionInterface extends DataDefinitionInterface {
+
+  /**
+   * Gets the definition of a contained element.
+   *
+   * @param int|string $name
+   *   The name of the property or the index of the item to get.
+   *
+   * @return \Drupal\Core\TypedData\DataDefinitionInterface|null
+   *   The definition of the property or NULL if the property does not exist.
+   */
+  public function getElementDefinition($name);
+
+}
diff --git a/core/lib/Drupal/Core/TypedData/TraversableTypedDataInterface.php b/core/lib/Drupal/Core/TypedData/TraversableTypedDataInterface.php
index 34b1df5..1ac12b6 100644
--- a/core/lib/Drupal/Core/TypedData/TraversableTypedDataInterface.php
+++ b/core/lib/Drupal/Core/TypedData/TraversableTypedDataInterface.php
@@ -13,6 +13,25 @@
 interface TraversableTypedDataInterface extends TypedDataInterface, \Traversable {
 
   /**
+   * Gets a property object.
+   *
+   * @param int|string $element_name
+   *   The name of the property or the index of the item to get.
+   *
+   * @return \Drupal\Core\TypedData\TypedDataInterface
+   *   The property object.
+   */
+  public function get($element_name);
+
+  /**
+   * Determines whether the typed data object is empty.
+   *
+   * @return boolean
+   *   TRUE if the typed data object is empty, FALSE otherwise.
+   */
+  public function isEmpty();
+
+  /**
    * React to changes to a child property or item.
    *
    * Note that this is invoked after any changes have been applied.
diff --git a/core/lib/Drupal/Core/TypedData/TypedDataManager.php b/core/lib/Drupal/Core/TypedData/TypedDataManager.php
index 7fe362e..7f18b5d 100644
--- a/core/lib/Drupal/Core/TypedData/TypedDataManager.php
+++ b/core/lib/Drupal/Core/TypedData/TypedDataManager.php
@@ -86,8 +86,7 @@ public function __construct(\Traversable $namespaces, CacheBackendInterface $cac
    *   - name: (optional) If a property or list item is to be created, the name
    *     of the property or the delta of the list item.
    *   - parent: (optional) If a property or list item is to be created, the
-   *     parent typed data object implementing either the ListInterface or the
-   *     ComplexDataInterface.
+   *     parent typed data object implementing TraversableTypedDataInterface.
    *
    * @return \Drupal\Core\TypedData\TypedDataInterface
    *   The instantiated typed data object.
@@ -122,10 +121,9 @@ public function createInstance($data_type, array $configuration = array()) {
    * @param string $name
    *   (optional) If a property or list item is to be created, the name of the
    *   property or the delta of the list item.
-   * @param mixed $parent
+   * @param \Drupal\Core\TypedData\TraversableTypedDataInterface $parent
    *   (optional) If a property or list item is to be created, the parent typed
-   *   data object implementing either the ListInterface or the
-   *   ComplexDataInterface.
+   *   data object.
    *
    * @return \Drupal\Core\TypedData\TypedDataInterface
    *   The instantiated typed data object.
@@ -141,7 +139,7 @@ public function createInstance($data_type, array $configuration = array()) {
    * @see \Drupal\Core\TypedData\Plugin\DataType\Uri
    * @see \Drupal\Core\TypedData\Plugin\DataType\Binary
    */
-  public function create(DataDefinitionInterface $definition, $value = NULL, $name = NULL, $parent = NULL) {
+  public function create(DataDefinitionInterface $definition, $value = NULL, $name = NULL, TraversableTypedDataInterface $parent = NULL) {
     $typed_data = $this->createInstance($definition->getDataType(), array(
       'data_definition' => $definition,
       'name' => $name,
@@ -208,9 +206,8 @@ public function createListDataDefinition($item_type) {
    *
    * @param array $options
    *   An array of options with the following keys:
-   *   - object: The parent typed data object, implementing the
-   *     TypedDataInterface and either the ListInterface or the
-   *     ComplexDataInterface.
+   *   - object: The parent typed data object, implementing
+   *     TraversableTypedDataInterface
    *   - property: The name of the property to instantiate, or the delta of the
    *     the list item to instantiate.
    *   - value: The value to set. If set, it has to match one of the supported
@@ -240,9 +237,8 @@ public function getInstance(array $options) {
    * property path, i.e. all property instances having the same property path
    * and inheriting from the same data type are prototyped.
    *
-   * @param \Drupal\Core\TypedData\TypedDataInterface $object
-   *   The parent typed data object, implementing the TypedDataInterface and
-   *   either the ListInterface or the ComplexDataInterface.
+   * @param \Drupal\Core\TypedData\TraversableTypedDataInterface $object
+   *   The parent typed data object.
    * @param string $property_name
    *   The name of the property to instantiate, or the delta of an list item.
    * @param mixed $value
@@ -250,15 +246,14 @@ public function getInstance(array $options) {
    *   data type formats as documented by the data type classes.
    *
    * @throws \InvalidArgumentException
-   *   If the given property is not known, or the passed object does not
-   *   implement the ListInterface or the ComplexDataInterface.
+   *   If the given property is not known.
    *
    * @return \Drupal\Core\TypedData\TypedDataInterface
    *   The new property instance.
    *
    * @see \Drupal\Core\TypedData\TypedDataManager::create()
    */
-  public function getPropertyInstance(TypedDataInterface $object, $property_name, $value = NULL) {
+  public function getPropertyInstance(TraversableTypedDataInterface $object, $property_name, $value = NULL) {
     // For performance, try to reuse existing prototypes instead of
     // constructing new objects when possible. A prototype is reused when
     // creating a data object:
@@ -286,16 +281,12 @@ public function getPropertyInstance(TypedDataInterface $object, $property_name,
     // Create the prototype if needed.
     if (!isset($this->prototypes[$key])) {
       // Fetch the data definition for the child object from the parent.
-      if ($object instanceof ComplexDataInterface) {
-        $definition = $object->getDataDefinition()->getPropertyDefinition($property_name);
-      }
-      elseif ($object instanceof ListInterface) {
-        $definition = $object->getItemDefinition();
-      }
-      else {
-        throw new \InvalidArgumentException("The passed object has to either implement the ComplexDataInterface or the ListInterface.");
+      if ($object instanceof TraversableTypedDataInterface) {
+        /** @var \Drupal\Core\TypedData\TraversableTypedDataDefinitionInterface $traversable_definition */
+        $traversable_definition = $object->getDataDefinition();
+        $definition = $traversable_definition->getElementDefinition($property_name);
       }
-      if (!$definition) {
+      if (empty($definition)) {
         throw new \InvalidArgumentException('Property ' . String::checkPlain($property_name) . ' is unknown.');
       }
       // Create the prototype without any value, but with initial parenting
diff --git a/core/lib/Drupal/Core/TypedData/Validation/MetadataFactory.php b/core/lib/Drupal/Core/TypedData/Validation/MetadataFactory.php
index 2858daf..53253ff 100644
--- a/core/lib/Drupal/Core/TypedData/Validation/MetadataFactory.php
+++ b/core/lib/Drupal/Core/TypedData/Validation/MetadataFactory.php
@@ -7,8 +7,7 @@
 
 namespace Drupal\Core\TypedData\Validation;
 
-use Drupal\Core\TypedData\ComplexDataInterface;
-use Drupal\Core\TypedData\ListInterface;
+use Drupal\Core\TypedData\TraversableTypedDataInterface;
 use Drupal\Core\TypedData\TypedDataInterface;
 use Symfony\Component\Validator\MetadataFactoryInterface;
 
@@ -30,7 +29,7 @@ public function getMetadataFor($typed_data, $name = '') {
     if (!$typed_data instanceof TypedDataInterface) {
       throw new \InvalidArgumentException('The passed value must be a typed data object.');
     }
-    $is_container = $typed_data instanceof ComplexDataInterface || $typed_data instanceof ListInterface;
+    $is_container = $typed_data instanceof TraversableTypedDataInterface;
     $class = '\Drupal\Core\TypedData\Validation\\' . ($is_container ? 'PropertyContainerMetadata' : 'Metadata');
     return new $class($typed_data, $name, $this);
   }
diff --git a/core/lib/Drupal/Core/TypedData/Validation/PropertyContainerMetadata.php b/core/lib/Drupal/Core/TypedData/Validation/PropertyContainerMetadata.php
index f5850eb..86c06f8 100644
--- a/core/lib/Drupal/Core/TypedData/Validation/PropertyContainerMetadata.php
+++ b/core/lib/Drupal/Core/TypedData/Validation/PropertyContainerMetadata.php
@@ -7,8 +7,7 @@
 
 namespace Drupal\Core\TypedData\Validation;
 
-use Drupal\Core\TypedData\ComplexDataInterface;
-use Drupal\Core\TypedData\ListInterface;
+use Drupal\Core\TypedData\TraversableTypedDataInterface;
 use Symfony\Component\Validator\PropertyMetadataContainerInterface;
 use Symfony\Component\Validator\ValidationVisitorInterface;
 
@@ -55,10 +54,7 @@ public function hasPropertyMetadata($property_name) {
    * Implements PropertyMetadataContainerInterface::getPropertyMetadata().
    */
   public function getPropertyMetadata($property_name) {
-    if ($this->typedData instanceof ListInterface) {
-      return array(new Metadata($this->typedData[$property_name], $property_name));
-    }
-    elseif ($this->typedData instanceof ComplexDataInterface) {
+    if ($this->typedData instanceof TraversableTypedDataInterface) {
       return array(new Metadata($this->typedData->get($property_name), $property_name));
     }
     else {
diff --git a/core/lib/Drupal/Core/Validation/Plugin/Validation/Constraint/ComplexDataConstraintValidator.php b/core/lib/Drupal/Core/Validation/Plugin/Validation/Constraint/ComplexDataConstraintValidator.php
index 31ffc5b..a004a1d 100644
--- a/core/lib/Drupal/Core/Validation/Plugin/Validation/Constraint/ComplexDataConstraintValidator.php
+++ b/core/lib/Drupal/Core/Validation/Plugin/Validation/Constraint/ComplexDataConstraintValidator.php
@@ -8,6 +8,7 @@
 namespace Drupal\Core\Validation\Plugin\Validation\Constraint;
 
 use Drupal\Core\TypedData\ComplexDataInterface;
+use Drupal\Core\TypedData\TraversableTypedDataInterface;
 use Symfony\Component\Validator\Constraint;
 use Symfony\Component\Validator\ConstraintValidator;
 use Symfony\Component\Validator\Exception\UnexpectedTypeException;
@@ -33,13 +34,15 @@ public function validate($value, Constraint $constraint) {
 
     foreach ($constraint->properties as $name => $constraints) {
       $property = $value->get($name);
-      $is_container = $property instanceof ComplexDataInterface || $property instanceof ListInterface;
-      if (!$is_container) {
-        $property = $property->getValue();
+      $is_container = $property instanceof TraversableTypedDataInterface;
+      if ($property instanceof TraversableTypedDataInterface) {
+        if ($property->isEmpty()) {
+          // @see \Drupal\Core\TypedData\Validation\PropertyContainerMetadata::accept();
+          $property = NULL;
+        }
       }
-      elseif ($property->isEmpty()) {
-        // @see \Drupal\Core\TypedData\Validation\PropertyContainerMetadata::accept();
-        $property = NULL;
+      elseif (!$is_container) {
+        $property = $property->getValue();
       }
       $this->context->validateValue($property, $constraints, $name, $group);
     }
diff --git a/core/modules/system/src/Tests/Entity/EntityFieldTest.php b/core/modules/system/src/Tests/Entity/EntityFieldTest.php
index fdc66e6..0d4d459 100644
--- a/core/modules/system/src/Tests/Entity/EntityFieldTest.php
+++ b/core/modules/system/src/Tests/Entity/EntityFieldTest.php
@@ -14,6 +14,7 @@
 use Drupal\Core\Field\FieldItemInterface;
 use Drupal\Core\TypedData\ComplexDataDefinitionInterface;
 use Drupal\Core\TypedData\DataDefinitionInterface;
+use Drupal\Core\TypedData\TraversableTypedDataInterface;
 use Drupal\Core\TypedData\Type\StringInterface;
 use Drupal\Core\TypedData\TypedDataInterface;
 use Drupal\node\Entity\NodeType;
@@ -564,14 +565,9 @@ public function getContainedStrings(TypedDataInterface $wrapper, $depth, array &
 
     // Recurse until a certain depth is reached if possible.
     if ($depth < 7) {
-      if ($wrapper instanceof \Drupal\Core\TypedData\ListInterface) {
-        foreach ($wrapper as $item) {
-          $this->getContainedStrings($item, $depth + 1, $strings);
-        }
-      }
-      elseif ($wrapper instanceof \Drupal\Core\TypedData\ComplexDataInterface) {
-        foreach ($wrapper as $property) {
-          $this->getContainedStrings($property, $depth + 1, $strings);
+      if ($wrapper instanceof TraversableTypedDataInterface) {
+        foreach ($wrapper as $element) {
+          $this->getContainedStrings($element, $depth + 1, $strings);
         }
       }
     }
