diff --git a/EntityDependencyIterator.inc b/EntityDependencyIterator.inc
index 9ae6272..04dba96 100644
--- a/EntityDependencyIterator.inc
+++ b/EntityDependencyIterator.inc
@@ -115,7 +115,18 @@ class EntityDependencyIterator implements RecursiveIterator {
       $entities = entity_load($current['type'], array($current['id']));
       $entity = reset($entities);
 
-      $this->dependencies = module_invoke_all('entity_dependencies', $entity, $current['type']);
+      $this->dependencies = array();
+      foreach (module_implements('entity_dependencies') as $module) {
+        $dependencies = module_invoke($module, 'entity_dependencies', $entity, $current['type']);
+        if (isset($dependencies) && is_array($dependencies)) {
+          foreach ($dependencies as &$dep) {
+            if (empty($dep['module'])) {
+              $dep['module'] = $module;
+            }
+          }
+          $this->dependencies = array_merge_recursive($this->dependencies, $dependencies);
+        }
+      }
       //$this->belongings = module_invoke_all('entity_belongings', $entity, $this->entityType);
 
       // Don't add dependencies that already were checked.
@@ -232,4 +243,4 @@ class EntityDependencyIterator implements RecursiveIterator {
     }
     return FALSE;
   }
-}
+}
\ No newline at end of file
diff --git a/entity_dependency.core.inc b/entity_dependency.core.inc
index 6b94bc9..c65f355 100644
--- a/entity_dependency.core.inc
+++ b/entity_dependency.core.inc
@@ -44,8 +44,14 @@ function taxonomy_entity_dependencies($entity, $entity_type) {
   if ($entity_type == 'taxonomy_term') {
     $dependencies = array();
     $terms = taxonomy_get_parents($entity->tid);
+    $delta = 0;
     foreach ($terms as $tid => $term) {
-      $dependencies[] = array('type' => 'taxonomy_term', 'id' => $tid);
+      $dependencies[] = array(
+        'type' => 'taxonomy_term',
+        'id' => $tid,
+        'property' => 'parent',
+        'delta' => $delta++,
+      );
     }
     return $dependencies;
   }
@@ -67,6 +73,17 @@ function field_entity_dependencies($entity, $entity_type) {
       drupal_alter('field_entity_dependencies', $field_dependencies, $entity_type, $entity, $field, $instance, $langcode, $items);
 
       if (!empty($field_dependencies)) {
+        foreach ($field_dependencies as &$field_dependency) {
+          if (empty($field_dependency['module'])) {
+            $field_dependency['module'] = $field['module'];
+          }
+          if (empty($field_dependency['field_name'])) {
+            $field_dependency['field_name'] = $field_name;
+          }
+          if (empty($field_dependency['langcode'])) {
+            $field_dependency['langcode'] = $langcode;
+          }
+        }
         $dependencies = array_merge_recursive($dependencies, $field_dependencies);
       }
     }
diff --git a/entity_dependency.module b/entity_dependency.module
index 982d9ff..0d4ca2b 100644
--- a/entity_dependency.module
+++ b/entity_dependency.module
@@ -36,7 +36,8 @@ function entity_dependency_iterator($entities) {
  *   The type of entity that $properties will add dependency on.
  * @param $properties
  *   An array of properties that adds dependencies to $objects. All properties
- *   must only point to one entity type at the time.
+ *   must only point to one entity type at the time.  A property can be a key
+ *   on the object, or an array of parent keys to identify the property.
  *
  * @see entity_dependency.core.inc
  */
@@ -48,18 +49,29 @@ function entity_dependency_add(&$dependencies, $objects, $entity_type, $properti
     $properties = array($properties);
   }
 
-  foreach ($objects as $object) {
+  foreach ($objects as $delta => $object) {
     foreach ($properties as $property) {
-      $value = NULL;
-      if (is_object($object) && isset($object->{$property})) {
-        $value = $object->{$property};
+      $property_path = $property;
+      if (!is_array($property_path)) {
+        $property_path = array($property_path);
       }
-      elseif (is_array($object) && isset($object[$property])) {
-        $value = $object[$property];
+      $value = $object;
+      foreach ($property_path as $p) {
+        if (is_object($value) && isset($value->{$p})) {
+          $value = $value->{$p};
+        }
+        elseif (is_array($value) && isset($value[$p])) {
+          $value = $value[$p];
+        }
       }
-      if (!empty($value) && !($entity_type == 'user' && ((int)$value == 0 || (int)$value == 1))) {
-        $dependencies[] = array('type' => $entity_type, 'id' => $value);
+      if (!empty($value) && $value != $object && !($entity_type == 'user' && (int)$value == 1)) {
+        $dependencies[] = array(
+          'type' => $entity_type,
+          'id' => $value,
+          'delta' => $delta,
+          'property' => $property,
+        );
       }
     }
   }
-}
+}
\ No newline at end of file
