diff --git a/conditional_fields.module b/conditional_fields.module
index 58a8374b860d4b817e932d7b67208d0de6f23371..11678e018f62c122d9e5a5468028b04955b7559f 100644
--- a/conditional_fields.module
+++ b/conditional_fields.module
@@ -245,6 +245,9 @@ function conditional_fields_element_after_build($element, &$form_state) {
     $entity_type = $field['#entity_type'];
     $bundle = $field['#bundle'];
   }
+  elseif (isset($field[0]) && isset($field[0]['#entity_type']) && $bundle = _conditional_fields_find_parent_bundle($field)) {
+    $entity_type = $field[0]['#entity_type'];
+  }
   elseif (isset($form['#entity_type'], $form['#bundle'])) {
     $entity_type = $form['#entity_type'];
     $bundle = $form['#bundle'];
@@ -259,11 +262,13 @@ function conditional_fields_element_after_build($element, &$form_state) {
     return $element;
   }
 
-  // Attach dependent.
+  $field_parents_key = conditional_fields_flatten_array($field['#field_parents']);
+
   if (isset($dependencies['dependents'][$field['#field_name']])) {
+    // Attach dependent.
     foreach ($dependencies['dependents'][$field['#field_name']] as $id => $dependency) {
-      if (!isset($form['#conditional_fields'][$field['#field_name']]['dependees'][$id])) {
-        conditional_fields_attach_dependency($form, array('#field_name' => $dependency['dependee']), $field, $dependency['options'], $id);
+      if (!isset($form['#conditional_fields'][$field_parents_key][$field['#field_name']]['dependees'][$id])) {
+        conditional_fields_attach_dependency($form, array('#field_name' => $dependency['dependee']), $field, $dependency['options'], $field_parents_key, $id);
       }
     }
   }
@@ -274,8 +279,8 @@ function conditional_fields_element_after_build($element, &$form_state) {
   // define per-element sets of dependency values.
   if (isset($dependencies['dependees'][$field['#field_name']])) {
     foreach ($dependencies['dependees'][$field['#field_name']] as $id => $dependency) {
-      if (!isset($form['#conditional_fields'][$field['#field_name']]['dependents'][$id])) {
-        conditional_fields_attach_dependency($form, $field, array('#field_name' => $dependency['dependent']), $dependency['options'], $id);
+      if (!isset($form['#conditional_fields'][$field_parents_key][$field['#field_name']]['dependents'][$id])) {
+        conditional_fields_attach_dependency($form, $field, array('#field_name' => $dependency['dependent']), $dependency['options'], $field_parents_key, $id);
       }
     }
   }
@@ -353,7 +358,7 @@ function conditional_fields_element_after_build($element, &$form_state) {
  *   Note that you don't need to manually set all these options, since default
  *   settings are always provided.
  */
-function conditional_fields_attach_dependency(&$form, $dependee, $dependent, $options, $id = 0) {
+function conditional_fields_attach_dependency(&$form, $dependee, $dependent, $options, $field_parents_key, $id = 0) {
   $options += conditional_fields_dependency_default_options();
 
   // The absence of the $id parameter identifies a custom dependency.
@@ -384,8 +389,8 @@ function conditional_fields_attach_dependency(&$form, $dependee, $dependent, $op
   // Use the #parents property of the dependee instead of #field_parents since
   // we will need access to the full structure of the widget.
   if (isset($dependee['#parents'])) {
-    $form['#conditional_fields'][$dependee['#field_name']]['parents'] = $dependee['#parents'];
-    $form['#conditional_fields'][$dependee['#field_name']]['dependents'][$id] = array(
+    $form['#conditional_fields'][$field_parents_key][$dependee['#field_name']]['parents'] = $dependee['#parents'];
+    $form['#conditional_fields'][$field_parents_key][$dependee['#field_name']]['dependents'][$id] = array(
       'dependent' => $dependent['#field_name'],
       'options'   => $options,
     );
@@ -399,8 +404,8 @@ function conditional_fields_attach_dependency(&$form, $dependee, $dependent, $op
     $dependent_parents = $dependent['#parents'];
   }
   if (isset($dependent_parents)) {
-    $form['#conditional_fields'][$dependent['#field_name']]['field_parents'] = $dependent_parents;
-    $form['#conditional_fields'][$dependent['#field_name']]['dependees'][$id] = array(
+    $form['#conditional_fields'][$field_parents_key][$dependent['#field_name']]['field_parents'] = $dependent_parents;
+    $form['#conditional_fields'][$field_parents_key][$dependent['#field_name']]['dependees'][$id] = array(
       'dependee' => $dependee['#field_name'],
       'options'  => $options,
     );
@@ -428,13 +433,13 @@ function conditional_fields_form_after_build($form, &$form_state) {
   $state_handlers = conditional_fields_states_handlers();
 
   // Cycle all dependents.
-  foreach ($form['#conditional_fields'] as $dependent => $dependent_info) {
+  foreach ($form['#conditional_fields'] as $parent_dependent_key => $parent_dependent_info) {
+    foreach ($parent_dependent_info as $dependent => $dependent_info) {
     $states = array();
 
     if (empty($dependent_info['dependees'])) {
       continue;
     }
-
     $dependent_location = array_merge($dependent_info['field_parents'], array($dependent));
     $dependent_form_field = drupal_array_get_nested_value($form, $dependent_location);
 
@@ -442,11 +447,11 @@ function conditional_fields_form_after_build($form, &$form_state) {
     foreach ($dependent_info['dependees'] as $dependency) {
       $dependee = $dependency['dependee'];
 
-      if (empty($form['#conditional_fields'][$dependee])) {
+      if (empty($form['#conditional_fields'][$parent_dependent_key][$dependee])) {
         continue;
       }
 
-      $dependee_info = $form['#conditional_fields'][$dependee];
+      $dependee_info = $form['#conditional_fields'][$parent_dependent_key][$dependee];
       $dependee_form_field = drupal_array_get_nested_value($form, $dependee_info['parents']);
       $options = $dependency['options'];
 
@@ -535,10 +540,10 @@ function conditional_fields_form_after_build($form, &$form_state) {
             $handler($dependee_form_field, $dependee_form_state, $options, $state);
           }
         }
+        }
 
         // Add validation callback to element.
         _conditional_fields_element_add_property($dependent_form_field, '#element_validate', 'conditional_fields_dependent_validate', 'append');
-      }
 
       // Add the $state into the correct logic group in $states.
       foreach ($state as $key => $constraints) {
@@ -626,6 +631,7 @@ function conditional_fields_form_after_build($form, &$form_state) {
 
     $has_states = TRUE;
   }
+  }
 
   if (empty($has_states)) {
     return $form;
@@ -994,13 +1000,14 @@ function conditional_fields_evaluate_grouping($groups) {
  *   The field form element in the current language.
  */
 function conditional_fields_evaluate_dependencies($dependent, $form, $form_state) {
-  $dependencies = $form['#conditional_fields'][$dependent['#field_name']]['dependees'];
+  $field_parents_key = conditional_fields_flatten_array($dependent['#field_parents']);
+  $dependencies = $form['#conditional_fields'][$field_parents_key][$dependent['#field_name']]['dependees'];
   $evaluated_dependees = array();
 
   foreach ($dependencies as $dependency_id => $dependency) {
     // Extract field values from submitted values.
     $dependee = $dependency['dependee'];
-    $dependee_parents = $form['#conditional_fields'][$dependee]['parents'];
+    $dependee_parents = $form['#conditional_fields'][$field_parents_key][$dependee]['parents'];
 
     // We have the parents of the field, but depending on the entity type and
     // the widget type, they may include additional elements that are actually
@@ -1982,3 +1989,33 @@ function conditional_fields_features_api() {
     ),
   );
 }
+
+/**
+ * Need to return immediate parent as the bundle.
+ */
+function _conditional_fields_find_parent_bundle($field) {
+  $field_parents = array_reverse($field[0]['#field_parents']);
+  foreach ($field_parents as $parent) {
+    if (!is_numeric($parent) && $parent != 'und') {
+      return $parent;
+    }
+  }
+
+  return false;
+}
+
+/**
+ * Flatten a one-dimensional array.
+ */
+function conditional_fields_flatten_array($array, $delta = 0, $separator = ':') {
+  $array_string = 'root'.$separator;
+  $array_count  = count($array);
+  foreach ($array as $array_value) {
+    $array_string .= $array_value;
+      if ($delta != $array_count) {
+        $array_string .= $separator;
+      }
+    $delta++;
+  }
+  return $array_string;
+}
