diff --git a/field_conditional_state.admin.inc b/field_conditional_state.admin.inc
index 317fdd8..5ceedc2 100644
--- a/field_conditional_state.admin.inc
+++ b/field_conditional_state.admin.inc
@@ -116,13 +116,17 @@ function field_conditional_state_settings_form($form, &$form_state, $instance) {
       '#type' => 'hidden',
       '#value' => $bundle,
     );
+    $form['type'] = array(
+      '#type' => 'hidden',
+      '#value' => $entity_type,
+    );
     $form['submit'] = array(
       '#type' => 'submit',
       '#value' => t('Add condition'),
       '#name' => 'add_condition',
     );
 
-    $field_conditional_states = field_conditional_state_get_field_conditions($instance['field_name'], $bundle);
+    $field_conditional_states = field_conditional_state_get_field_conditions($instance['field_name'], $bundle, $entity_type);
     if (isset($field_conditional_states)) {
       foreach ($field_conditional_states as $condition_id => $condition_settings) {
         $trigger_values = array();
@@ -177,13 +181,15 @@ function field_conditional_state_settings_form_validate($form, &$form_state) {
     $control_field = $form_state['values']['add_field_state']['control_field'];
     $state_type = $form_state['values']['add_field_state']['state_type'];
     $bundle = $form_state['values']['bundle'];
+    $type = $form_state['values']['type'];
     $query_args = array(
-      ':field_name' => $target_field,
-      ':control_field' => $control_field,
-      ':state' => $state_type,
-      ':bundle' => $bundle,
+      ':field_name' => $target_field, 
+      ':control_field' => $control_field, 
+      ':state' => $state_type, 
+      ':bundle' => $bundle, 
+      ':type' => $type
     );
-    $result = db_query("SELECT count(*) AS count FROM {field_conditional_state} WHERE field_name = :field_name AND control_field = :control_field AND state = :state AND bundle = :bundle", $query_args)->fetchObject();
+    $result = db_query("SELECT count(*) AS count FROM {field_conditional_state} WHERE field_name = :field_name AND control_field = :control_field AND state = :state AND bundle = :bundle AND type = :type", $query_args)->fetchObject();
     if ($result->count > 0) {
       form_set_error("add_field_state][state_type", t("You already have this state type between these two fields."));
     }
@@ -207,6 +213,7 @@ function field_conditional_state_settings_form_submit($form, &$form_state) {
   else {
     $target_field = $form_state['values']['trigger_field'];
     $bundle = $form_state['values']['bundle'];
+    $type = $form_state['values']['type'];
     $values = $form_state['values']['add_field_state'];
     $state_type = $values['state_type'];
     $control_field = $values['control_field'];
@@ -221,6 +228,7 @@ function field_conditional_state_settings_form_submit($form, &$form_state) {
       'control_field' => $control_field,
       'state' => $state_type,
       'bundle' => $bundle,
+      'type' => $type,
       'trigger_values' => $control_values,
       'condition_type' => $condition_type,
     ))
diff --git a/field_conditional_state.install b/field_conditional_state.install
index a135176..2912419 100644
--- a/field_conditional_state.install
+++ b/field_conditional_state.install
@@ -48,6 +48,12 @@ function field_conditional_state_schema() {
         'not null' => TRUE,
         'description' => 'The bundle type.',
       ),
+      'type' => array(
+        'type' => 'varchar',
+        'length' => '32',
+        'not null' => FALSE,
+        'description' => 'The entity type.',
+      ),
       'trigger_values' => array(
         'type' => 'text',
         'not null' => TRUE,
@@ -77,3 +83,11 @@ function field_conditional_state_update_7100() {
   );
   db_change_field('field_conditional_state', 'trigger_values', 'trigger_values', $spec);
 }
+/**
+* Updated schema to add entity type field to table
+*/
+function field_conditional_state_update_7101(&$sandbox) {
+  $field_exists = db_field_exists('field_conditional_state', 'type');
+  if (!$field_exists)
+    db_add_field('field_conditional_state', 'type', array('type' => 'varchar', 'length' => '32', 'not null' => FALSE, 'description' => 'The entity type.',));
+}
diff --git a/field_conditional_state.module b/field_conditional_state.module
index 6e78f2b..20878a0 100644
--- a/field_conditional_state.module
+++ b/field_conditional_state.module
@@ -1,9 +1,19 @@
 <?php
 
 /**
- * @file
- * Main functions for field_conditional_state
+ * Implements hook_features_api().
  */
+function field_conditional_state_features_api() {
+  return array(
+    'field_conditional_state' => array(
+      'name' => t('Field conditional state'),
+      'default_hook' => 'field_conditional_state_default_fields',
+      'default_file' => FEATURES_DEFAULTS_INCLUDED,
+      'feature_source' => TRUE,
+      'file' => drupal_get_path('module', 'field_conditional_state') . '/includes/field_conditional_state.features.inc',
+    ),
+  );
+}
 
 /**
  * Implements hook_menu().
@@ -78,21 +88,25 @@ function field_conditional_state_theme($existing, $type, $theme, $path) {
  */
 function field_conditional_state_field_delete_instance($instance) {
   $bundle = $instance['bundle'];
+  $type = $instance['entity_type'];
   $instance_name = $instance['field_name'];
   $query_args = array(
     ':bundle' => $bundle,
     ':field_name' => $instance_name,
     ':control_field' => $instance_name,
+    ':type' => $type,
   );
-  $result = db_query("SELECT count(*) AS count FROM {field_conditional_state} WHERE bundle = :bundle AND (field_name = :field_name OR control_field = :control_field)", $query_args)->fetchObject();
+  $result = db_query("SELECT count(*) AS count FROM {field_conditional_state} WHERE type = :type AND bundle = :bundle AND (field_name = :field_name OR control_field = :control_field)", $query_args)->fetchObject();
   // Delete conditions for deleted instance.
   if ($result->count > 0) {
     $delete_trigger_instance = db_delete('field_conditional_state')
       ->condition('field_name', $instance_name)
+      ->condition('type', $type)
       ->condition('bundle', $bundle)
       ->execute();
     $delete_control_instance = db_delete('field_conditional_state')
       ->condition('control_field', $instance_name)
+      ->condition('type', $type)
       ->condition('bundle', $bundle)
       ->execute();
   }
@@ -102,12 +116,13 @@ function field_conditional_state_field_delete_instance($instance) {
  * Implements hook_field_attach_delete_bundle().
  */
 function field_conditional_state_field_attach_delete_bundle($entity_type, $bundle, $instances) {
-  $query_args = array(':bundle' => $bundle);
-  $result = db_query("SELECT count(*) AS count FROM {field_conditional_state} WHERE bundle = :bundle", $query_args)->fetchObject();
+  $query_args = array(':bundle' => $bundle, ':type' => $entity_type);
+  $result = db_query("SELECT count(*) AS count FROM {field_conditional_state} WHERE bundle = :bundle AND type = :type", $query_args)->fetchObject();
   // Delete conditions for deleted bundle.
   if ($result->count > 0) {
     $delete_trigger_field = db_delete('field_conditional_state')
       ->condition('bundle', $bundle, '=')
+      ->condition('type', $entity_type, '=')
       ->execute();
   }
 }
@@ -149,7 +164,7 @@ function field_conditional_state_entity_view($entity, $type, $view_mode, $langco
   if(!empty($entity->content)) {
     foreach ($entity->content as $field_name => $field_content) {
       if (is_array($field_content) && isset($field_content['#bundle'])) {
-        $field_conditions = field_conditional_state_get_field_conditions($field_name, $field_content['#bundle']);
+      $field_conditions = field_conditional_state_get_field_conditions($field_name, $field_content['#bundle'], $field_content['#entity_type']);
         $data = array($type, $view_mode, $langcode);
         drupal_alter('field_conditional_state_entity_view', $field_conditions, $entity, $data);
         if ($field_conditions) {
@@ -176,7 +191,7 @@ function field_conditional_state_entity_view($entity, $type, $view_mode, $langco
  * Field Group module.
  */
 function field_conditional_state_module_implements_alter(&$implementations, $hook) {
-  if ($hook == 'form_alter' && array_key_exists('field_conditional_state', $implementations)) {
+  if (($hook == 'form_alter' || $hook == 'element_info_alter' || $hook = 'features_api') && array_key_exists('field_conditional_state', $implementations)) {
     $group = $implementations['field_conditional_state'];
     unset($implementations['field_conditional_state']);
     $implementations['field_conditional_state'] = $group;
@@ -248,7 +263,7 @@ function field_conditional_state_element_process($element, &$form_state, $form)
    * so if there are multiple instances of one field (field collections) they can be handled separately
    */
   static $processed_fields = array();
-  if (isset($element['#field_name']) && isset($element['#bundle']) && $form['#form_id'] != 'field_ui_field_edit_form') {
+  if (isset($element['#field_name']) && isset($element['#bundle']) && isset($element['#entity_type']) && $form['#form_id'] != 'field_ui_field_edit_form') {
     $indexed_field_name = $element['#field_name'];
 
     if(!isset($processed_fields[$indexed_field_name]) || count($processed_fields[$indexed_field_name]) == 0)
@@ -263,14 +278,14 @@ function field_conditional_state_element_process($element, &$form_state, $form)
     $path = drupal_get_path('module', 'field_conditional_state');
     $element['#attached']['js'][] = "$path/js/conditional_state.js";
     $element['#attached']['js'][] = "$path/js/required_conditional_state.js";
-    $control_field = field_conditional_state_is_control_field($element['#field_name'], $element['#bundle']);
+    $control_field = field_conditional_state_is_control_field($element['#field_name'], $element['#bundle'], $element['#entity_type']);
     // Check if element is control element.
     if ($control_field) {
       $element['#prefix'] = '<div class="conditional_state_control_field_' . $indexed_field_name . '">';
       $element['#suffix'] = '</div>';
     }
     // Get element conditions.
-    $element_conditions = field_conditional_state_get_field_conditions($element['#field_name'], $element['#bundle'], $element_field_name_index);
+    $element_conditions = field_conditional_state_get_field_conditions($element['#field_name'], $element['#bundle'], $element['#entity_type'], $element_field_name_index);
 
     if ($element_conditions) {
       $element_states = field_conditional_state_set_field_state($element_conditions);
@@ -288,6 +303,7 @@ function field_conditional_state_element_process($element, &$form_state, $form)
           $function = $conditional_states[$state]['state_handler'];
           $form_element[$element['#field_name']] = $function($state, $condition, $form_element[$element['#field_name']], $element);
           $form_element[$element['#field_name']]['#bundle'] = $element['#bundle'];
+          $form_element[$element['#field_name']]['#entity_type'] = $element['#entity_type'];
         }
       }
 
@@ -559,9 +575,9 @@ function field_conditional_state_get_bundle_types() {
  * @return bool
  *   Returns true or false if the requested field is a control field.
  */
-function field_conditional_state_is_control_field($field_name, $bundle) {
-  $placeholders = array(':field_name' => $field_name, ':bundle' => $bundle);
-  $sql = db_query("SELECT COUNT(id) as count FROM {field_conditional_state} WHERE control_field = :field_name AND bundle = :bundle", $placeholders)->fetchObject();
+function field_conditional_state_is_control_field($field_name, $bundle, $type) {
+  $placeholders = array(':field_name' => $field_name, ':bundle' => $bundle, ':type' => $type);
+  $sql = db_query("SELECT COUNT(id) as count FROM {field_conditional_state} WHERE control_field = :field_name AND bundle = :bundle AND type = :type", $placeholders)->fetchObject();
   if (isset($sql->count) && $sql->count > 0) {
     return TRUE;
   }
@@ -580,9 +596,9 @@ function field_conditional_state_is_control_field($field_name, $bundle) {
  * @return array
  *   An array of conditions.
  */
-function field_conditional_state_get_field_conditions($field_name, $bundle, $control_field_index = null) {
+function field_conditional_state_get_field_conditions($field_name, $bundle, $type, $control_field_index = null) {
   $conditions = array();
-  $result = db_query("SELECT * FROM {field_conditional_state} WHERE field_name = :field_name AND bundle = :bundle", array(':field_name' => $field_name, ':bundle' => $bundle));
+  $result = db_query("SELECT * FROM {field_conditional_state} WHERE field_name = :field_name AND bundle = :bundle AND type = :type", array(':field_name' => $field_name, ':bundle' => $bundle, ':type' => $type));
   foreach ($result as $res) {
     $conditions["condition_$res->id"] = array(
       'id' => $res->id,
diff --git a/includes/field_conditional_state.features.inc b/includes/field_conditional_state.features.inc
new file mode 100644
index 0000000..ffea2f1
--- /dev/null
+++ b/includes/field_conditional_state.features.inc
@@ -0,0 +1,161 @@
+<?php
+/**
+ * @file
+ * Features integration hooks.
+ */
+
+/**
+ * Implements hook_features_export_options().
+ */
+function field_conditional_state_features_export_options() {
+  $dependencies = field_conditional_state_load_conditions();
+  $entity_info = entity_get_info();
+  $options = array();
+  
+  //get all defaults
+  $defaults = module_invoke_all('field_conditional_state_default_fields');
+
+  foreach ($dependencies as $data) {
+      //render only those that are not included in any feature
+      $is_default = false;
+      
+      foreach ($defaults as $default) {
+        if ($default['field_name'] == $data['field_name'] &&
+          $default['control_field'] == $data['control_field'] &&
+          $default['state'] == $data['state'] &&
+          $default['bundle'] == $data['bundle'] &&
+          $default['type'] == $data['type']) {
+          
+          $is_default = true;
+        }
+          
+      }
+      
+      if ($is_default)
+        continue;
+  
+      $option = $data['field_name'] . ':' . $data['control_field'] . ':' . $data['state'] . ':' . $data['bundle'] . ':' . $data['type'];  //this must be unique ID
+      if (!isset($options[$option])) {
+        $options[$option] = $entity_info[$data['type']]['bundles'][$data['bundle']]['label'] . ' (' . $data['type'] . ') - ' . $data['field_name'] . " by " . $data['control_field'];
+      }
+  }
+
+  return $options;
+}
+
+/**
+ * Retrieve all conditional states
+ */
+function field_conditional_state_load_conditions() {
+  $conditions = array();
+  $result = db_query("SELECT * FROM {field_conditional_state}");
+  foreach ($result as $res) {
+    $conditions["condition_$res->id"] = array(
+      'id' => $res->id,
+      'control_field' => $res->control_field,
+      'field_name' => $res->field_name,
+      'state' => $res->state,
+      'trigger_values' => unserialize($res->trigger_values),
+      'condition_type' => $res->condition_type,
+      'bundle' => $res->bundle,
+      'type' => $res->type,
+    );
+  }
+  return $conditions;
+}
+
+/**
+ * Implements hook_features_export().
+ */
+function field_conditional_state_features_export($data, &$export, $module_name = '') {
+  $export['dependencies']['field_conditional_state'] = 'field_conditional_state';
+
+  foreach ($data as $entity) {
+    $export['features']['field_conditional_state'][$entity] = $entity;
+  }
+}
+
+/**
+ * Implements hook_features_export_render().
+ */
+function field_conditional_state_features_export_render($module_name, $data, $export = NULL) {
+  $dependencies = field_conditional_state_load_conditions();
+  if (empty($dependencies)) {
+    return array();
+  }
+
+  $code = array();
+  foreach ($data as $option) {
+    $tokens = explode(':', $option);
+
+    $field_name = $tokens[0];
+    $control_field = $tokens[1];
+    $state = $tokens[2];
+    $bundle = $tokens[3];
+    $type = $tokens[4];
+    
+    $info = field_conditional_state_get_field_conditions($field_name, $bundle, $type);
+
+    if (!empty($info)) {
+      foreach ($info as $field_conditions) {        
+          $code[] = '';
+          $code[] = '  $items[] = array(';
+          $code[] = "    'type' => '" . $type . "',";
+          $code[] = "    'bundle' => '" . $bundle . "',";
+          $code[] = "    'field_name' => '" . $field_name . "',";
+          $code[] = "    'control_field' => '" . $control_field . "',";
+          $code[] = "    'state' => '" . $state . "',";
+          $code[] = "    'condition_type' => '" . $field_conditions['condition_type'] . "',";
+          $code[] = "    'trigger_values' => " . features_var_export($field_conditions['trigger_values'], '    ') . ",";
+          $code[] = '  );';
+      }
+    }
+  }
+  if (empty($code)) {
+    return array();
+  }
+
+  array_unshift($code, '  $items = array();');
+  $code[] = '';
+  $code[] = '  return $items;';
+  $output = implode("\n", $code);
+  
+  return array('field_conditional_state_default_fields' => $output);
+}
+
+/**
+ * Implements hook_features_rebuild().
+ */
+function field_conditional_state_features_rebuild($module) {
+  $defaults = module_invoke($module, 'field_conditional_state_default_fields');
+
+  if (!empty($defaults)) {
+      
+    foreach ($defaults as $condition) {
+      
+      //insert if not exists
+      $existing_conditions = field_conditional_state_get_field_conditions($condition['field_name'], $condition['bundle'], $condition['type']);
+    
+      if (empty($existing_conditions)) {
+        db_insert('field_conditional_state')->fields(array(
+          'field_name' => $condition['field_name'],
+          'control_field' => $condition['control_field'],
+          'state' => $condition['state'],
+          'bundle' => $condition['bundle'],
+          'type' => $condition['type'],
+          'trigger_values' => serialize($condition['trigger_values']),
+          'condition_type' => $condition['condition_type'],
+        ))
+        ->execute();
+      }
+    }
+  }
+}
+
+
+/**
+ * Implements hook_features_revert().
+ */
+function field_conditional_state_features_revert($module) {
+  return field_conditional_state_features_rebuild($module);
+}
