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..2c82063 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_defaults',
+      '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..db2e5c5
--- /dev/null
+++ b/includes/field_conditional_state.features.inc
@@ -0,0 +1,189 @@
+<?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_defaults');
+  foreach ($dependencies as $data) {
+      //render only those that are not included in any feature
+      $is_default = false;
+      $trigger_data = implode('-', $data['trigger_values']);
+      foreach ($defaults as $default) {
+        $trigger_default = implode('-', $default['trigger_values']);
+        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'] &&
+          $trigger_default == $trigger_data) {
+          
+          $is_default = true;
+        }
+          
+      }
+      
+      //@TODO: If we show all conditions every time, even those options are shown that are already included into another feature. But if we dont show those that are already exported in a features, if all are exported, we dont see anything. So at least we need to show the exported components that are contained in the current viewed feature but it seams we dont have a context of this feature.
+      //if ($is_default)
+        //continue;
+
+      //get a unique ID
+      $option = _field_conditional_state_exportables_key($data['type'], $data['bundle'], $data['field_name'], $data['control_field'], $data['state'], $trigger_data);
+      
+      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);
+
+    if (count($tokens) < 5)
+      continue;
+    
+    $bundle = $tokens[0];
+    $field_name = $tokens[1];
+    $type = $tokens[2];
+    $control_field = $tokens[3];
+    $state = $tokens[4];
+    
+    $info = field_conditional_state_get_field_conditions($field_name, $bundle, $type);
+
+    if (!empty($info)) {      
+      foreach ($info as $field_conditions) {   
+          $trigger_values = implode('-', $field_conditions['trigger_values']);
+          
+          $key = _field_conditional_state_exportables_key($type, $bundle, $field_name, $control_field, $state, $trigger_values);
+          
+          $code[] = '';
+          $code[] = '  $items["'.$key.'"] = 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_defaults' => $output);
+}
+
+/**
+* Returns a unique key for feature exportables
+*/
+function _field_conditional_state_exportables_key($type, $bundle, $field_name, $control_field, $state, $trigger_values) {
+  $key = $bundle.":".$field_name.":".$type.":".$control_field.":".$state.":".$trigger_values;
+  return ($key);
+}
+
+/**
+ * Implements hook_features_rebuild().
+ */
+function field_conditional_state_features_rebuild($module) {
+  $defaults = module_invoke($module, 'field_conditional_state_defaults');
+
+  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']);
+      
+      //check if this condition already exists, that means the control field and the state must be equal for the fieldname, bundle and type
+      $exists = false;
+      foreach ($existing_conditions as $existing_condition) {
+        if ($existing_condition['control_field'] == $condition['control_field'] && $existing_condition['state'] == $condition['state']) {
+          $exists = true;
+        }
+      }
+      
+      if (!$exists) {        
+        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);
+}
