--- conditional_fields.module	2010-04-09 20:57:48.000000000 -0500
+++ conditional_fields.module.new	2010-09-07 15:11:35.000000000 -0500
@@ -645,12 +645,24 @@ function conditional_fields_node_after_b
     return $form;
   }
 
-  $type_name = $form['type']['#value'];
-
+  $cp_type_names = $form["#content_profile_registration_use_types"];
+  if ($cp_type_names)
+    $type_names = array_keys($cp_type_names);
+  else
+    $type_names = array($form['type']['#value']);
+  
+  // Remember each field's content type.
+  $field_parent = array();
+  foreach ($type_names as $type_name)
+    foreach ((array)conditional_fields_load_data($type_name) as $row) {
+	$field_parent[$field['field_name']] = $type_name;
+	$field_parent[$field['control_field_name']] = $type_name;
+	$data[] = $row;
+    }
+  
   // Do nothing if there are no conditional fields
-  if (!$data = conditional_fields_load_data($type_name)) {
+  if (empty($data))
     return $form;
-  }
 
   $controlling_fields = array();
   $missing_controlling_fields = array();
@@ -666,7 +678,7 @@ function conditional_fields_node_after_b
   /* Handle controlling fields */
   foreach ($controlling_fields as $controlling_field_name => $controlling_field_descendants) {
     // Check if the controlling field is in the form, user has access to it, and is editable.
-    $group_of_controlling_field = conditional_fields_get_group($type_name, $controlling_field_name);
+    $group_of_controlling_field = conditional_fields_get_group($field_parent[$controlling_field_name], $controlling_field_name);
     $controlling_field = conditional_fields_item_in_form($form, $controlling_field_name, $group_of_controlling_field);
     if (!$controlling_field || $controlling_field['#access'] === FALSE || $controlling_field['#type'] == 'markup') {
       $missing_controlling_fields[] = $controlling_field_name;
@@ -687,7 +699,7 @@ function conditional_fields_node_after_b
   /* Handle controlled fields */
   foreach ($controlled_fields as $controlled_field_name => $controlled_field_parents) {
     // Check if the controlled field is in the form and user has access to it.
-    $group_of_controlled_field = conditional_fields_get_group($type_name, $controlled_field_name);
+    $group_of_controlled_field = conditional_fields_get_group($field_parent[$controlling_field_name], $controlled_field_name);
     $controlled_field = conditional_fields_item_in_form($form, $controlled_field_name, $group_of_controlled_field);
     if (!$controlled_field || $controlled_field['#access'] === FALSE) {
       continue;
@@ -698,7 +710,7 @@ function conditional_fields_node_after_b
       unset($controlled_field_parents[$missing_controlling_field]);
     }
     if (count($controlled_field_parents) == 0) {
-      $orphaned_settings = variable_get('c_fields_edit_' . $type_name, C_FIELDS_ORPHANED_SHOW_TRIGGERED);
+      $orphaned_settings = variable_get('c_fields_edit_' . $field_parent[$controlling_field_name], C_FIELDS_ORPHANED_SHOW_TRIGGERED);
       switch ($orphaned_settings) {
         case C_FIELDS_ORPHANED_SHOW_TRIGGERED:
           // Show only triggered fields. E.g.: fields whose controlling
@@ -780,14 +792,15 @@ function conditional_fields_node_after_b
   }
 
   // Apply user interface settings
-  $ui_settings = variable_get('c_fields_js_' . $type_name, C_FIELDS_JS_HIDE);
+  $parent_types = array_values($field_parent);
+  $ui_settings = variable_get('c_fields_js_' . $parent_types[0], C_FIELDS_JS_HIDE);
   switch ($ui_settings) {
     case C_FIELDS_JS_DISABLE:
       $js_settings['ui_settings'] = 'disable';
       break;
     case C_FIELDS_JS_HIDE:
-      $js_settings['ui_settings']['animation'] = (int)variable_get('c_fields_animation_' . $type_name, C_FIELDS_ANIMATION_NO);
-      $js_settings['ui_settings']['anim_speed'] = variable_get('c_fields_anim_speed_' . $type_name, "normal");
+      $js_settings['ui_settings']['animation'] = (int)variable_get('c_fields_animation_' . $parent_types[0], C_FIELDS_ANIMATION_NO);
+      $js_settings['ui_settings']['anim_speed'] = variable_get('c_fields_anim_speed_' . $parent_types[0], "normal");
       break;
   }
 
