diff --git a/includes/modules/entityreference.inc b/includes/modules/entityreference.inc
index 2e6057f..4c7e707 100644
--- a/includes/modules/entityreference.inc
+++ b/includes/modules/entityreference.inc
@@ -1,90 +1,68 @@
-<?php
-
-/**
- * Implements hook_uuid_node_features_export_render_alter().
- *
- * @param $export
- * @param $node
- * @param $module
- */
-function entityreference_uuid_node_features_export_render_alter(&$export, &$node, $module) {
-  $fields = uuid_features_get_field_items_iterator($export, 'node', 'entityreference');
-  _entity_reference_uuid_entity_features_export_set_uuid_references($fields);
-}
-
-/**
- * Implements hook_uuid_user_features_export_render_alter().
- *
- * @param $export
- * @param $node
- * @param $module
- */
-function entityreference_uuid_user_features_export_render_alter(&$export, &$user, $module) {
-  $fields = uuid_features_get_field_items_iterator($export, 'user', 'entityreference');
-  _entity_reference_uuid_entity_features_export_set_uuid_references($fields);
-}
-
-/**
- * Implements hook_uuid_node_features_rebuild_alter().
- *
- * @param $node
- * @param $module
- */
-function entityreference_uuid_node_features_rebuild_alter(&$node, $module) {
-  $fields = uuid_features_get_field_items_iterator($node, 'node', 'entityreference');
-  _entity_reference_uuid_entity_features_rebuild_fetch_uuid_references($fields);
-}
-
-/**
- * Implements hook_uuid_user_features_rebuild_alter().
- *
- * @param $node
- * @param $module
- */
-function entityreference_uuid_user_features_rebuild_alter(&$user, $module) {
-  $fields = uuid_features_get_field_items_iterator($user, 'user', 'entityreference');
-  _entity_reference_uuid_entity_features_rebuild_fetch_uuid_references($fields);
-}
-
-/**
- * Helper function to fetch uuid references in case of different fields types.
- *
- * @param $fields
- */
-function _entity_reference_uuid_entity_features_rebuild_fetch_uuid_references(&$fields) {
-  // Entityreference fields may have different targets (nodes, users, etc.).
-  // So we process them one by one.
-  foreach ($fields as $field_name => $field) {
-    $field_info = field_info_field($field_name);
-    $entity_info = entity_get_info($field_info['settings']['target_type']);
-
-    // uuid_features_fetch_uuid_references accepts only references to array as the first parameter.
-    $tmp_fields = array(
-      $field_name => &$field,
-    );
-
-    uuid_features_fetch_uuid_references($tmp_fields, $field_info['settings']['target_type'], array(
-      $entity_info['entity keys']['id'] => 'target_id',
-    ));
-  }
-}
-
-/**
- * Helper function to set uuid references in case of different fields types.
- *
- * @param $fields
- */
-function _entity_reference_uuid_entity_features_export_set_uuid_references(&$fields) {
-  // Entityreference fields may have different targets (nodes, users, etc.).
-  // So we process them one by one.
-  foreach ($fields as $field_name => &$field) {
-    $field_info = field_info_field($field_name);
-
-    // uuid_features_fetch_uuid_references accepts only references to array as the first parameter.
-    $tmp_fields = array(
-      $field_name => &$field,
-    );
-
-    uuid_features_set_uuid_references($tmp_fields, $field_info['settings']['target_type']);
-  }
-}
+<?php
+/**
+ * @file
+ * uuid features hooks on behalf of the taxonomy module.
+ */
+
+/**
+ * Implements hook_uuid_entity_features_export_render_alter().
+ */
+function entityreference_uuid_entity_features_export_render_alter($entity_type, &$export, &$entity) {
+  $fields = uuid_features_get_field_items_iterator($export, $entity_type, 'entityreference');
+  _entity_reference_uuid_entity_features_export_set_uuid_references($fields);
+}
+
+/**
+ * Implements hook_uuid_entity_features_rebuild_alter().
+ */
+function entityreference_uuid_node_features_rebuild_alter($entity_type, &$entity, $module) {
+  $fields = uuid_features_get_field_items_iterator($entity, $entity_type, 'entityreference');
+  _entity_reference_uuid_entity_features_rebuild_fetch_uuid_references($fields);
+}
+
+/**
+ * Helper function to fetch uuid references in case of different fields types.
+ *
+ * @param array $fields
+ *   A list of entityreference fields to handle.
+ */
+function _entity_reference_uuid_entity_features_rebuild_fetch_uuid_references(&$fields) {
+  // Entityreference fields may have different targets (nodes, users, etc.).
+  // So we process them one by one.
+  foreach ($fields as $field_name => $field) {
+    $field_info = field_info_field($field_name);
+    $entity_info = entity_get_info($field_info['settings']['target_type']);
+
+    // uuid_features_fetch_uuid_references accepts only references to array as
+    // the first parameter.
+    $tmp_fields = array(
+      $field_name => &$field,
+    );
+
+    uuid_features_fetch_uuid_references($tmp_fields, $field_info['settings']['target_type'], array(
+      $entity_info['entity keys']['id'] => 'target_id',
+    ));
+  }
+}
+
+/**
+ * Helper function to set uuid references in case of different fields types.
+ *
+ * @param array $fields
+ *   A list of entityreference fields to handle.
+ */
+function _entity_reference_uuid_entity_features_export_set_uuid_references(&$fields) {
+  // Entityreference fields may have different targets (nodes, users, etc.).
+  // So we process them one by one.
+  foreach ($fields as $field_name => &$field) {
+    $field_info = field_info_field($field_name);
+
+    // uuid_features_fetch_uuid_references accepts only references to array as
+    // the first parameter.
+    $tmp_fields = array(
+      $field_name => &$field,
+    );
+
+    uuid_features_set_uuid_references($tmp_fields, $field_info['settings']['target_type']);
+  }
+}
diff --git a/includes/modules/field_collection.inc b/includes/modules/field_collection.inc
index d38ffdc..e1626c5 100644
--- a/includes/modules/field_collection.inc
+++ b/includes/modules/field_collection.inc
@@ -1,54 +1,24 @@
-<?php
-
-
-/**
- * Implements hook_uuid_node_features_export_render_alter().
- *
- * @param $export
- * @param $node
- * @param $module
- */
-function field_collection_uuid_node_features_export_render_alter(&$export, &$node, $module) {
-  $fields = uuid_features_get_field_items_iterator($export, 'node', 'field_collection');
-  uuid_features_set_uuid_references($fields, 'field_collection_item');
-}
-
-/**
- * Implements hook_uuid_user_features_export_render_alter().
- *
- * @param $export
- * @param $node
- * @param $module
- */
-function field_collection_uuid_user_features_export_render_alter(&$export, &$user, $module) {
-  $fields = uuid_features_get_field_items_iterator($export, 'user', 'field_collection');
-  uuid_features_set_uuid_references($fields, 'field_collection_item');
-}
-
-/**
- * Implements hook_uuid_node_features_rebuild_alter().
- *
- * @param $node
- * @param $module
- */
-function field_collection_uuid_node_features_rebuild_alter(&$node, $module) {
-  $fields = uuid_features_get_field_items_iterator($node, 'node', 'field_collection');
-  uuid_features_fetch_uuid_references($fields, 'field_collection_item', array(
-    'item_id' => 'value',
-    'revision_id' => 'revision_id',
-  ));
-}
-
-/**
- * Implements hook_uuid_user_features_rebuild_alter().
- *
- * @param $node
- * @param $module
- */
-function field_collection_uuid_user_features_rebuild_alter(&$user, $module) {
-  $fields = uuid_features_get_field_items_iterator($user, 'user', 'field_collection');
-  uuid_features_fetch_uuid_references($fields, 'field_collection_item', array(
-    'item_id' => 'value',
-    'revision_id' => 'revision_id',
-  ));
-}
+<?php
+/**
+ * @file
+ * uuid features hooks on behalf of the field collection module.
+ */
+
+/**
+ * Implements hook_uuid_entity_features_export_render_alter().
+ */
+function field_collection_uuid_entity_features_export_render_alter($entity_type, &$export, &$entity) {
+  $fields = uuid_features_get_field_items_iterator($export, $entity_type, 'field_collection');
+  uuid_features_set_uuid_references($fields, 'field_collection_item');
+}
+
+/**
+ * Implements hook_uuid_node_features_rebuild_alter().
+ */
+function field_collection_uuid_entity_features_rebuild_alter($entity_type, &$entity, $module) {
+  $fields = uuid_features_get_field_items_iterator($entity, $entity_type, 'field_collection');
+  uuid_features_fetch_uuid_references($fields, 'field_collection_item', array(
+    'item_id' => 'value',
+    'revision_id' => 'revision_id',
+  ));
+}
diff --git a/includes/modules/taxonomy.inc b/includes/modules/taxonomy.inc
index 2a440f5..82c19e8 100644
--- a/includes/modules/taxonomy.inc
+++ b/includes/modules/taxonomy.inc
@@ -21,48 +21,18 @@ function taxonomy_uuid_node_features_export_alter(&$export, &$pipe, $node) {
 }
 
 /**
- * Implements hook_uuid_node_features_export_render_alter().
- *
- * @param $export
- * @param $node
- * @param $module
+ * Implements hook_uuid_entity_features_export_render_alter().
  */
-function taxonomy_uuid_node_features_export_render_alter(&$export, &$node, $module) {
-  $fields = uuid_features_get_field_items_iterator($export, 'node', 'taxonomy_term_reference');
+function taxonomy_uuid_entity_features_export_render_alter($entity_type, &$export, &$entity) {
+  $fields = uuid_features_get_field_items_iterator($export, $entity_type, 'taxonomy_term_reference');
   uuid_features_set_uuid_references($fields, 'taxonomy_term');
 }
 
 /**
- * Implements hook_uuid_user_features_export_render_alter().
- *
- * @param $export
- * @param $node
- * @param $module
+ * Implements hook_uuid_entity_features_rebuild_alter().
  */
-function taxonomy_uuid_user_features_export_render_alter(&$export, &$user, $module) {
-  $fields = uuid_features_get_field_items_iterator($export, 'user', 'taxonomy_term_reference');
-  uuid_features_set_uuid_references($fields, 'taxonomy_term');
-}
-
-
-/**
- * Implements hook_uuid_node_features_rebuild_alter().
- */
-function taxonomy_uuid_node_features_rebuild_alter(&$node, $module) {
-  $fields = uuid_features_get_field_items_iterator($node, 'node', 'taxonomy_term_reference');
-  uuid_features_fetch_uuid_references($fields, 'taxonomy_term', array(
-    'tid' => 'tid',
-  ));
-}
-
-/**
- * Implements hook_uuid_user_features_rebuild_alter().
- *
- * @param $node
- * @param $module
- */
-function taxonomy_uuid_user_features_rebuild_alter(&$user, $module) {
-  $fields = uuid_features_get_field_items_iterator($user, 'user', 'taxonomy_term_reference');
+function taxonomy_uuid_entity_features_rebuild_alter($entity_type, &$entity, $module) {
+  $fields = uuid_features_get_field_items_iterator($entity, $entity_type, 'taxonomy_term_reference');
   uuid_features_fetch_uuid_references($fields, 'taxonomy_term', array(
     'tid' => 'tid',
   ));
diff --git a/includes/modules/user.inc b/includes/modules/user.inc
index be24943..116198e 100644
--- a/includes/modules/user.inc
+++ b/includes/modules/user.inc
@@ -1,38 +1,35 @@
-<?php
-
-/**
- * Implements hook_uuid_node_features_export_render_alter().
- *
- * @param $export
- * @param $node
- * @param $module
- */
-function user_uuid_node_features_export_render_alter(&$export, &$node, $module) {
-  $uuids = entity_get_uuid_by_id('user', array($node->uid));
-  $uuid = reset($uuids);
-  if ($uuid) {
-    $export->user_uuid = $uuid;
-  }
-}
-
-/**
- * Implements hook_uuid_node_features_rebuild_alter().
- *
- * @param $node
- * @param $module
- */
-function user_uuid_node_features_rebuild_alter(&$node, $module) {
-  if (isset($node->user_uuid) && uuid_is_valid($node->user_uuid)) {
-    $uids = entity_get_id_by_uuid('user', array($node->user_uuid));
-    $uid = reset($uids);
-    if ($uid) {
-      $node->uid = $uid;
-    }
-    else {
-      $node->uid = 1;
-    }
-  }
-  else {
-    $node->uid = 1;
-  }
-}
+<?php
+/**
+ * @file
+ * uuid features hooks on behalf of the user collection module.
+ */
+
+/**
+ * Implements hook_uuid_node_features_export_render_alter().
+ */
+function user_uuid_node_features_export_render_alter(&$export, &$node, $module) {
+  $uuids = entity_get_uuid_by_id('user', array($node->uid));
+  $uuid = reset($uuids);
+  if ($uuid) {
+    $export->user_uuid = $uuid;
+  }
+}
+
+/**
+ * Implements hook_uuid_node_features_rebuild_alter().
+ */
+function user_uuid_node_features_rebuild_alter(&$node, $module) {
+  if (isset($node->user_uuid) && uuid_is_valid($node->user_uuid)) {
+    $uids = entity_get_id_by_uuid('user', array($node->user_uuid));
+    $uid = reset($uids);
+    if ($uid) {
+      $node->uid = $uid;
+    }
+    else {
+      $node->uid = 1;
+    }
+  }
+  else {
+    $node->uid = 1;
+  }
+}
diff --git a/includes/uuid_current_search_configuration.features.inc b/includes/uuid_current_search_configuration.features.inc
index 2bf8e9b..6ea3a60 100644
--- a/includes/uuid_current_search_configuration.features.inc
+++ b/includes/uuid_current_search_configuration.features.inc
@@ -1,90 +1,90 @@
-<?php
-/**
- * @file
- * Features hooks for the uuid_current_search features component.
- */
-
-/**
- * Implements hook_features_export_options().
- */
-function uuid_current_search_configuration_features_export_options() {
-  $options = array();
-
-  $current_search_items = db_select('block_current_search', 'b')
-    ->fields('b', array('delta', 'searcher'))
-    ->execute()
-    ->fetchAllAssoc('delta');
-
-  foreach ($current_search_items as $config) {
-    $options[$config->delta] = $config->delta;
-  }
-
-  drupal_alter('uuid_current_search_configuration_features_export_options', $options);
-
-  return $options;
-}
-
-/**
- * Implements hook_features_export().
- */
-function uuid_current_search_configuration_features_export($data, &$export, $module_name = '') {
-  $export['dependencies']['current_search'] = 'current_search';
-
-  foreach ($data as $uuid) {
-    $export['features']['uuid_current_search_configuration'][$uuid] = $uuid;
-  }
-  return array();
-}
-
-/**
- * Implements hook_features_export_render().
- */
-function uuid_current_search_configuration_features_export_render($module = 'foo', $data) {
-  $translatables = $code = array();
-
-  $code[] = '  $current_search_configurations = array();';
-  $code[] = '';
-  foreach ($data as $uuid) {
-    $block_config = db_select('block_current_search', 'b')
-      ->fields('b', array('delta', 'searcher'))
-      ->condition('b.delta', $uuid)
-      ->execute()
-      ->fetchAssoc();
-
-    if ($block_config) {
-      $code[] = '  $current_search_configurations[] = ' . features_var_export($block_config, '  ') . ';';
-    }
-  }
-
-  if (!empty($translatables)) {
-    $code[] = features_translatables_export($translatables, '  ');
-  }
-  $code[] = '  return $current_search_configurations;';
-  $code = implode("\n", $code);
-  return array('uuid_features_default_current_search_configurations' => $code);
-}
-
-/**
- * Implements hook_features_revert().
- */
-function uuid_current_search_configuration_features_revert($module) {
-  uuid_current_search_configuration_features_rebuild($module);
-}
-
-/**
- * Implements hook_features_rebuild().
- */
-function uuid_current_search_configuration_features_rebuild($module) {
-  $block_current_search_configurations = module_invoke($module, 'uuid_features_default_current_search_configurations');
-  if (!empty($block_current_search_configurations)) {
-    foreach ($block_current_search_configurations as $block_current_search_configuration) {
-      db_delete('block_current_search')
-        ->condition('delta', $block_current_search_configuration['delta'])
-        ->execute();
-      $record = new stdClass;
-      $record->delta = $block_current_search_configuration['delta'];
-      $record->searcher = $block_current_search_configuration['searcher'];
-      drupal_write_record('block_current_search', $record);
-    }
-  }
-}
+<?php
+/**
+ * @file
+ * Features hooks for the uuid_current_search features component.
+ */
+
+/**
+ * Implements hook_features_export_options().
+ */
+function uuid_current_search_configuration_features_export_options() {
+  $options = array();
+
+  $current_search_items = db_select('block_current_search', 'b')
+    ->fields('b', array('delta', 'searcher'))
+    ->execute()
+    ->fetchAllAssoc('delta');
+
+  foreach ($current_search_items as $config) {
+    $options[$config->delta] = $config->delta;
+  }
+
+  drupal_alter('uuid_current_search_configuration_features_export_options', $options);
+
+  return $options;
+}
+
+/**
+ * Implements hook_features_export().
+ */
+function uuid_current_search_configuration_features_export($data, &$export, $module_name = '') {
+  $export['dependencies']['current_search'] = 'current_search';
+
+  foreach ($data as $uuid) {
+    $export['features']['uuid_current_search_configuration'][$uuid] = $uuid;
+  }
+  return array();
+}
+
+/**
+ * Implements hook_features_export_render().
+ */
+function uuid_current_search_configuration_features_export_render($module, $data) {
+  $translatables = $code = array();
+
+  $code[] = '  $current_search_configurations = array();';
+  $code[] = '';
+  foreach ($data as $uuid) {
+    $block_config = db_select('block_current_search', 'b')
+      ->fields('b', array('delta', 'searcher'))
+      ->condition('b.delta', $uuid)
+      ->execute()
+      ->fetchAssoc();
+
+    if ($block_config) {
+      $code[] = '  $current_search_configurations[] = ' . features_var_export($block_config, '  ') . ';';
+    }
+  }
+
+  if (!empty($translatables)) {
+    $code[] = features_translatables_export($translatables, '  ');
+  }
+  $code[] = '  return $current_search_configurations;';
+  $code = implode("\n", $code);
+  return array('uuid_features_default_current_search_configurations' => $code);
+}
+
+/**
+ * Implements hook_features_revert().
+ */
+function uuid_current_search_configuration_features_revert($module) {
+  uuid_current_search_configuration_features_rebuild($module);
+}
+
+/**
+ * Implements hook_features_rebuild().
+ */
+function uuid_current_search_configuration_features_rebuild($module) {
+  $block_current_search_configurations = module_invoke($module, 'uuid_features_default_current_search_configurations');
+  if (!empty($block_current_search_configurations)) {
+    foreach ($block_current_search_configurations as $block_current_search_configuration) {
+      db_delete('block_current_search')
+        ->condition('delta', $block_current_search_configuration['delta'])
+        ->execute();
+      $record = new stdClass();
+      $record->delta = $block_current_search_configuration['delta'];
+      $record->searcher = $block_current_search_configuration['searcher'];
+      drupal_write_record('block_current_search', $record);
+    }
+  }
+}
diff --git a/includes/uuid_field_collection.features.inc b/includes/uuid_field_collection.features.inc
index c934513..dc3033a 100644
--- a/includes/uuid_field_collection.features.inc
+++ b/includes/uuid_field_collection.features.inc
@@ -1,151 +1,155 @@
-<?php
-/**
- * @file
- * Features hooks for the uuid_field_collection features component.
- */
-
-/**
- * Implements hook_features_export_options().
- */
-function uuid_field_collection_features_export_options() {
-  $options = array();
-
-  $all_ids = array();
-
-  $efq_field_collection_items = new EntityFieldQuery();
-  $efq_field_collection_items->entityCondition('entity_type', 'field_collection_item');
-  $result = $efq_field_collection_items->execute();
-
-  if (!empty($result['field_collection_item'])) {
-    $all_ids = array_keys($result['field_collection_item']);
-  }
-
-  $items = entity_load('field_collection_item', $all_ids);
-
-  foreach ($items as $item) {
-    $info = $item->instanceInfo();
-
-    $options[$item->uuid] = t('@type: @title', array(
-      '@type' => $info['label'],
-      '@title' => $item->defaultLabel(),
-    ));
-  }
-
-  drupal_alter('uuid_field_collection_features_export_options', $options);
-
-  return $options;
-}
-
-/**
- * Implements hook_features_export().
- */
-function uuid_field_collection_features_export($data, &$export, $module_name = '') {
-  $export['dependencies']['field_collection'] = 'field_collection';
-  $export['dependencies']['uuid'] = 'uuid';
-  $export['dependencies']['uuid_features'] = 'uuid_features';
-
-  foreach ($data as $uuid) {
-    $export['features']['uuid_field_collection'][$uuid] = $uuid;
-  }
-  return array();
-}
-
-/**
- * Implements hook_features_export_render().
- */
-function uuid_field_collection_features_export_render($module = 'foo', $data) {
-  $translatables = $code = array();
-
-  $code[] = '  $field_collections = array();';
-  $code[] = '';
-  foreach ($data as $uuid) {
-    $field_collections = entity_uuid_load('field_collection_item', array($uuid), array(), TRUE);
-    if (!count($field_collections)) {
-      continue;
-    }
-
-    $export = reset($field_collections);
-
-    // Do not export ids.
-    unset($export->item_id);
-    unset($export->revision_id);
-
-    uuid_features_file_field_export($export, 'field_collection_item');
-
-    $export_output = features_var_export($export, '  ');
-    $export_output = str_replace("entity_import('field_collection_item', '", "", $export_output);
-    $export_output = str_replace("}')", "}", $export_output);
-    $export_output = json_decode($export_output, TRUE);
-
-    $code[] = '  $field_collections[] = ' . features_var_export($export_output, '  ') . ';';
-  }
-
-  if (!empty($translatables)) {
-    $code[] = features_translatables_export($translatables, '  ');
-  }
-  $code[] = '  return $field_collections;';
-  $code = implode("\n", $code);
-
-  return array('uuid_features_default_field_collections' => $code);
-}
-
-/**
- * Implements hook_features_revert().
- */
-function uuid_field_collection_features_revert($module) {
-  uuid_field_collection_features_rebuild($module);
-}
-
-/**
- * Implements hook_features_rebuild().
- */
-function uuid_field_collection_features_rebuild($module) {
-  // Make sure all referenced entities exist.
-  taxonomy_features_rebuild($module);
-  field_features_rebuild($module);
-  uuid_node_features_rebuild($module);
-  cache_clear_all();
-
-  $field_collections = module_invoke($module, 'uuid_features_default_field_collections');
-  if (!empty($field_collections)) {
-    foreach ($field_collections as $field_collection_item) {
-      try {
-        $fields = field_info_instances('field_collection_item', $field_collection_item['field_name']);
-        foreach ($fields as $field_name => $field_instance_config) {
-          $field_config = field_info_field($field_name);
-          if (isset($field_collection_item[$field_name])) {
-            foreach ($field_collection_item[$field_name] as $lang => $field_data) {
-              foreach ($field_data as $delta => $value) {
-                if ($field_config['type'] == 'entityreference' || $field_config['type'] == 'taxonomy_term_reference') {
-                  $columns = array_keys($field_config['columns']);
-                  $first_column = reset($columns);
-                  if (isset($field_config['settings']['target_type'])) {
-                    $target_entity = $field_config['settings']['target_type'];
-                  } elseif ($field_config['type'] == 'taxonomy_term_reference') {
-                    $target_entity = 'taxonomy_term';
-                  } else {
-                    throw new Exception('Unknown target.');
-                  }
-                  $ids = entity_get_id_by_uuid($target_entity, array($value[$first_column]));
-                  $field_collection_item[$field_name][$lang][$delta][$first_column] = $ids ? reset($ids) : UUID_FEATURES_DEFAULT_FALLBACK_ID;
-                }
-              }
-            }
-          }
-        }
-
-        $field_collection_item['original'] = TRUE;
-        $entity = entity_import('field_collection_item', json_encode($field_collection_item));
-        /* @var FieldCollectionItemEntity $entity */
-        $entity->is_new = FALSE; // Hack to ignore missing host entities.
-
-        uuid_features_file_field_import($entity, 'field_collection_item');
-
-        $entity->save(TRUE);
-      } catch (Exception $e) {
-
-      }
-    }
-  }
-  uuid_node_features_rebuild($module);
-}
+<?php
+/**
+ * @file
+ * Features hooks for the uuid_field_collection features component.
+ */
+
+/**
+ * Implements hook_features_export_options().
+ */
+function uuid_field_collection_features_export_options() {
+  $options = array();
+
+  $all_ids = array();
+
+  $efq_field_collection_items = new EntityFieldQuery();
+  $efq_field_collection_items->entityCondition('entity_type', 'field_collection_item');
+  $result = $efq_field_collection_items->execute();
+
+  if (!empty($result['field_collection_item'])) {
+    $all_ids = array_keys($result['field_collection_item']);
+  }
+
+  $items = entity_load('field_collection_item', $all_ids);
+
+  foreach ($items as $item) {
+    $info = $item->instanceInfo();
+
+    $options[$item->uuid] = t('@type: @title', array(
+      '@type' => $info['label'],
+      '@title' => $item->defaultLabel(),
+    ));
+  }
+
+  drupal_alter('uuid_field_collection_features_export_options', $options);
+
+  return $options;
+}
+
+/**
+ * Implements hook_features_export().
+ */
+function uuid_field_collection_features_export($data, &$export, $module_name = '') {
+  $export['dependencies']['field_collection'] = 'field_collection';
+  $export['dependencies']['uuid'] = 'uuid';
+  $export['dependencies']['uuid_features'] = 'uuid_features';
+
+  foreach ($data as $uuid) {
+    $export['features']['uuid_field_collection'][$uuid] = $uuid;
+  }
+  return array();
+}
+
+/**
+ * Implements hook_features_export_render().
+ */
+function uuid_field_collection_features_export_render($module, $data) {
+  $translatables = $code = array();
+
+  $code[] = '  $field_collections = array();';
+  $code[] = '';
+  foreach ($data as $uuid) {
+    $field_collections = entity_uuid_load('field_collection_item', array($uuid), array(), TRUE);
+    if (!count($field_collections)) {
+      continue;
+    }
+
+    $export = reset($field_collections);
+
+    // Do not export ids.
+    unset($export->item_id);
+    unset($export->revision_id);
+
+    uuid_features_file_field_export($export, 'field_collection_item');
+
+    $export_output = features_var_export($export, '  ');
+    $export_output = str_replace("entity_import('field_collection_item', '", "", $export_output);
+    $export_output = str_replace("}')", "}", $export_output);
+    $export_output = json_decode($export_output, TRUE);
+
+    $code[] = '  $field_collections[] = ' . features_var_export($export_output, '  ') . ';';
+  }
+
+  if (!empty($translatables)) {
+    $code[] = features_translatables_export($translatables, '  ');
+  }
+  $code[] = '  return $field_collections;';
+  $code = implode("\n", $code);
+
+  return array('uuid_features_default_field_collections' => $code);
+}
+
+/**
+ * Implements hook_features_revert().
+ */
+function uuid_field_collection_features_revert($module) {
+  uuid_field_collection_features_rebuild($module);
+}
+
+/**
+ * Implements hook_features_rebuild().
+ */
+function uuid_field_collection_features_rebuild($module) {
+  // Make sure all referenced entities exist.
+  taxonomy_features_rebuild($module);
+  field_features_rebuild($module);
+  uuid_node_features_rebuild($module);
+  cache_clear_all();
+
+  $field_collections = module_invoke($module, 'uuid_features_default_field_collections');
+  if (!empty($field_collections)) {
+    foreach ($field_collections as $field_collection_item) {
+      try {
+        $fields = field_info_instances('field_collection_item', $field_collection_item['field_name']);
+        foreach ($fields as $field_name => $field_instance_config) {
+          $field_config = field_info_field($field_name);
+          if (isset($field_collection_item[$field_name])) {
+            foreach ($field_collection_item[$field_name] as $lang => $field_data) {
+              foreach ($field_data as $delta => $value) {
+                if ($field_config['type'] == 'entityreference' || $field_config['type'] == 'taxonomy_term_reference') {
+                  $columns = array_keys($field_config['columns']);
+                  $first_column = reset($columns);
+                  if (isset($field_config['settings']['target_type'])) {
+                    $target_entity = $field_config['settings']['target_type'];
+                  }
+                  elseif ($field_config['type'] == 'taxonomy_term_reference') {
+                    $target_entity = 'taxonomy_term';
+                  }
+                  else {
+                    throw new Exception('Unknown target.');
+                  }
+                  $ids = entity_get_id_by_uuid($target_entity, array($value[$first_column]));
+                  $field_collection_item[$field_name][$lang][$delta][$first_column] = $ids ? reset($ids) : UUID_FEATURES_DEFAULT_FALLBACK_ID;
+                }
+              }
+            }
+          }
+        }
+
+        $field_collection_item['original'] = TRUE;
+        $entity = entity_import('field_collection_item', json_encode($field_collection_item));
+        // Hack to ignore missing host entities.
+        /* @var FieldCollectionItemEntity $entity */
+        $entity->is_new = FALSE;
+
+        uuid_features_file_field_import($entity, 'field_collection_item');
+
+        $entity->save(TRUE);
+      }
+      catch (Exception $e) {
+
+      }
+    }
+  }
+  uuid_node_features_rebuild($module);
+}
diff --git a/includes/uuid_node.features.inc b/includes/uuid_node.features.inc
index 3ad5f70..74c94a5 100755
--- a/includes/uuid_node.features.inc
+++ b/includes/uuid_node.features.inc
@@ -51,6 +51,8 @@ function uuid_node_features_export($data, &$export, $module_name = '') {
     // hook_uuid_node_features_export_alter(&$export, &$pipe, $node)
     $data = &$export;
     $data['__drupal_alter_by_ref'] = array(&$pipe);
+    $entity_type = 'node';
+    drupal_alter('uuid_entity_features_export', $entity_type, $data, $node);
     drupal_alter('uuid_node_features_export', $data, $node);
   }
 
@@ -89,28 +91,8 @@ function uuid_node_features_export_render($module, $data) {
     // Don't cause conflicts with nid/vid/revision_timestamp/changed fields.
     uuid_features_file_field_export($export, 'node');
 
-    // Export taxonomy_term_reference with its UUID.
-    $fields_info = field_info_instances('node', $node->type);
-    foreach ($fields_info as $field_name => $value) {
-      $field_info = field_info_field($field_name);
-      $type = $field_info['type'];
-      if ($type == 'taxonomy_term_reference') {
-        if (!empty($node->$field_name)) {
-          foreach ($node->{$field_name} as $lang => $terms) {
-            foreach ($terms as $k => $v) {
-              $tid = $node->{$field_name}[$lang][$k]['tid'];
-              $term_uuids = entity_get_uuid_by_id('taxonomy_term', array($tid));
-              $export->{$field_name}[$lang][$k]['uuid'] = $term_uuids[$tid];
-              unset($node->{$field_name}[$lang][$k]['tid']);
-            }
-          }
-        }
-      }
-    }
-
-    // The hook_alter signature is:
-    // hook_uuid_node_features_export_render_alter(&$export, $node, $module);
-
+    $entity_type = 'node';
+    drupal_alter('uuid_entity_features_export_render', $entity_type, $export, $node);
     drupal_alter('uuid_node_features_export_render', $export, $node, $module);
 
     unset($export->revision_uid);
@@ -155,7 +137,6 @@ function uuid_node_features_rebuild($module) {
   if (!empty($nodes)) {
     module_load_include('inc', 'node', 'node.pages');
 
-    $rebuild = FALSE;
     $tmp = array();
     foreach ($nodes as $key => $data) {
       if (isset($data['og_group_ref'])) {
@@ -164,25 +145,6 @@ function uuid_node_features_rebuild($module) {
       }
     }
 
-      // Rebuild taxonomy_term_reference with its UUID.
-      $fields_info = field_info_instances('node', $node->type);
-      foreach ($fields_info as $field_name => $value) {
-        $field_info = field_info_field($field_name);
-        $type = $field_info['type'];
-        if ($type == 'taxonomy_term_reference') {
-          if (!empty($node->$field_name)) {
-            foreach ($node->{$field_name} as $lang => $terms) {
-              foreach ($terms as $k => $v) {
-                $term_uuid = $node->{$field_name}[$lang][$k]['uuid'];
-                $tids = entity_get_id_by_uuid('taxonomy_term', array($term_uuid));
-                $node->{$field_name}[$lang][$k]['tid'] = $tids[$term_uuid];
-                unset($node->{$field_name}[$lang][$k]['uuid']);
-              }
-            }
-          }
-        }
-      }
-
     $nodes = array_merge($nodes, $tmp);
 
     $second_run_nodes = array();
@@ -195,22 +157,23 @@ function uuid_node_features_rebuild($module) {
         // Find the matching UUID, with a fresh cache.
         $nids = entity_get_id_by_uuid('node', array($node->uuid));
         if (isset($nids[$node->uuid])) {
-            $nid = array_key_exists($node->uuid, $nids) ? $nids[$node->uuid] : FALSE;
-            $existing = node_load($nid, NULL, TRUE);
-            if (!empty($existing)) {
-              $node->nid = $existing->nid;
-              $node->vid = $existing->vid;
-            }
+          $nid = array_key_exists($node->uuid, $nids) ? $nids[$node->uuid] : FALSE;
+          $existing = node_load($nid, NULL, TRUE);
+          if (!empty($existing)) {
+            $node->nid = $existing->nid;
+            $node->vid = $existing->vid;
+          }
         }
 
-        // The hook_alter signature is:
-        // hook_uuid_node_features_rebuild_alter(&node, $module);
+        $entity_type = 'node';
+        drupal_alter('uuid_entity_features_rebuild', $entity_type, $node, $module);
         drupal_alter('uuid_node_features_rebuild', $node, $module);
 
         $node = node_submit($node);
         uuid_features_file_field_import($node, 'node');
         node_save($node);
-      } catch (Exception $e) {
+      }
+      catch (Exception $e) {
         $second_run_nodes[] = $data;
       }
     }
diff --git a/includes/uuid_nodequeue_item.features.inc b/includes/uuid_nodequeue_item.features.inc
index f01c7a7..49ed2be 100644
--- a/includes/uuid_nodequeue_item.features.inc
+++ b/includes/uuid_nodequeue_item.features.inc
@@ -1,123 +1,124 @@
-<?php
-/**
- * @file
- * Features hooks for the uuid_nodequeue_item features component.
- */
-
-/**
- * Implements hook_features_export_options().
- */
-function uuid_nodequeue_item_features_export_options() {
-  $options = array();
-  $result = db_select('nodequeue_nodes', 'qn')
-    ->fields('qn', array('qid', 'sqid', 'nid', 'position', ))
-    ->orderBy('position', 'ASC')
-    ->execute();
-  while ($row = $result->fetchAssoc()) {
-    $queue = nodequeue_load($row['qid']);
-    $uuids = entity_get_uuid_by_id('node', array($row['nid'], ));
-    $uuid = reset($uuids);
-    if ($uuid) {
-      $item_name = $queue->name . ' - ' . $uuid;
-      $options[$item_name] = $item_name;
-    }
-  }
-  return $options;
-}
-
-/**
- * Implements hook_features_export().
- */
-function uuid_nodequeue_item_features_export($data, &$export, $module_name = '') {
-  $export['dependencies']['nodequeue'] = 'nodequeue';
-  $export['dependencies']['uuid'] = 'uuid';
-  $export['dependencies']['uuid_features'] = 'uuid_features';
-
-  foreach ($data as $item_id) {
-    $export['features']['uuid_nodequeue_item'][$item_id] = $item_id;
-  }
-  return array();
-}
-
-/**
- * Implements hook_features_export_render().
- */
-function uuid_nodequeue_item_features_export_render($module = 'foo', $data) {
-  $translatables = $code = array();
-  $code[] = '  $nodequeue_items = array();';
-  $code[] = '';
-
-  if (!empty($data)) {
-    foreach ($data as $item_id) {
-      list($queue_name, $uuid) = explode(' - ', $item_id);
-      $nodequeue = nodequeue_load_queue_by_name($queue_name);
-      if ($nodequeue) {
-
-        $nids = entity_get_id_by_uuid('node', array($uuid));
-        $nid = reset($nids);
-        if ($nid) {
-          // We need to check if record exists to perform overriden state check.
-          $result = db_select('nodequeue_nodes', 'qn')
-            ->fields('qn', array('qid', 'sqid', 'nid'))
-            ->condition('qn.nid', $nid)
-            ->condition('qn.qid', $nodequeue->qid)
-            ->range(0, 1)
-            ->execute()
-            ->rowCount();
-
-          if (!$result) {
-            continue;
-          }
-        } else {
-          continue;
-        }
-
-        $uuids = entity_get_uuid_by_id('node', array($nid));
-        $uuid = reset($uuids);
-        if ($uuid) {
-          $export = array(
-            'queue_name' => $queue_name,
-            'node_uuid' => $uuid,
-          );
-          $code[] = '  $nodequeue_items[] = ' . features_var_export($export, '  ') . ';';
-        }
-      }
-    }
-  }
-  if (!empty($translatables)) {
-    $code[] = features_translatables_export($translatables, '  ');
-  }
-  $code[] = '  return $nodequeue_items;';
-  $code = implode("\n", $code);
-
-  return array('uuid_features_default_nodequeue_items' => $code);
-
-}
-
-/**
- * Implements hook_features_revert().
- */
-function uuid_nodequeue_item_features_revert($module) {
-  uuid_nodequeue_item_features_rebuild($module);
-}
-
-/**
- * Implements hook_features_rebuild().
- */
-function uuid_nodequeue_item_features_rebuild($module) {
-  $nodequeue_items = module_invoke($module, 'uuid_features_default_nodequeue_items');
-  if (!empty($nodequeue_items)) {
-    foreach ($nodequeue_items as $nodequeue_item) {
-      $queue = nodequeue_load_queue_by_name($nodequeue_item['queue_name']);
-      $subqueue = reset(nodequeue_load_subqueues_by_queue($queue->qid));
-      $nid = reset(entity_get_id_by_uuid('node', array($nodequeue_item['node_uuid'])));
-      if ($nid && !empty($queue->qid) && !empty($subqueue->sqid)) {
-        db_delete('nodequeue_nodes')
-          ->condition('qid', $queue->qid)
-          ->condition('sqid', $queue->sqid)
-          ->condition('nid', $nid);
-        nodequeue_subqueue_add($queue, $subqueue, $nid);
-      }
-    }
-  }
-}
+<?php
+/**
+ * @file
+ * Features hooks for the uuid_nodequeue_item features component.
+ */
+
+/**
+ * Implements hook_features_export_options().
+ */
+function uuid_nodequeue_item_features_export_options() {
+  $options = array();
+  $result = db_select('nodequeue_nodes', 'qn')
+    ->fields('qn', array('qid', 'sqid', 'nid', 'position'))
+    ->orderBy('position', 'ASC')
+    ->execute();
+  while ($row = $result->fetchAssoc()) {
+    $queue = nodequeue_load($row['qid']);
+    $uuids = entity_get_uuid_by_id('node', array($row['nid']));
+    $uuid = reset($uuids);
+    if ($uuid) {
+      $item_name = $queue->name . ' - ' . $uuid;
+      $options[$item_name] = $item_name;
+    }
+  }
+  return $options;
+}
+
+/**
+ * Implements hook_features_export().
+ */
+function uuid_nodequeue_item_features_export($data, &$export, $module_name = '') {
+  $export['dependencies']['nodequeue'] = 'nodequeue';
+  $export['dependencies']['uuid'] = 'uuid';
+  $export['dependencies']['uuid_features'] = 'uuid_features';
+
+  foreach ($data as $item_id) {
+    $export['features']['uuid_nodequeue_item'][$item_id] = $item_id;
+  }
+  return array();
+}
+
+/**
+ * Implements hook_features_export_render().
+ */
+function uuid_nodequeue_item_features_export_render($module, $data) {
+  $translatables = $code = array();
+  $code[] = '  $nodequeue_items = array();';
+  $code[] = '';
+
+  if (!empty($data)) {
+    foreach ($data as $item_id) {
+      list($queue_name, $uuid) = explode(' - ', $item_id);
+      $nodequeue = nodequeue_load_queue_by_name($queue_name);
+      if ($nodequeue) {
+
+        $nids = entity_get_id_by_uuid('node', array($uuid));
+        $nid = reset($nids);
+        if ($nid) {
+          // We need to check if record exists to perform overriden state check.
+          $result = db_select('nodequeue_nodes', 'qn')
+            ->fields('qn', array('qid', 'sqid', 'nid'))
+            ->condition('qn.nid', $nid)
+            ->condition('qn.qid', $nodequeue->qid)
+            ->range(0, 1)
+            ->execute()
+            ->rowCount();
+
+          if (!$result) {
+            continue;
+          }
+        }
+        else {
+          continue;
+        }
+
+        $uuids = entity_get_uuid_by_id('node', array($nid));
+        $uuid = reset($uuids);
+        if ($uuid) {
+          $export = array(
+            'queue_name' => $queue_name,
+            'node_uuid' => $uuid,
+          );
+          $code[] = '  $nodequeue_items[] = ' . features_var_export($export, '  ') . ';';
+        }
+      }
+    }
+  }
+  if (!empty($translatables)) {
+    $code[] = features_translatables_export($translatables, '  ');
+  }
+  $code[] = '  return $nodequeue_items;';
+  $code = implode("\n", $code);
+
+  return array('uuid_features_default_nodequeue_items' => $code);
+
+}
+
+/**
+ * Implements hook_features_revert().
+ */
+function uuid_nodequeue_item_features_revert($module) {
+  uuid_nodequeue_item_features_rebuild($module);
+}
+
+/**
+ * Implements hook_features_rebuild().
+ */
+function uuid_nodequeue_item_features_rebuild($module) {
+  $nodequeue_items = module_invoke($module, 'uuid_features_default_nodequeue_items');
+  if (!empty($nodequeue_items)) {
+    foreach ($nodequeue_items as $nodequeue_item) {
+      $queue = nodequeue_load_queue_by_name($nodequeue_item['queue_name']);
+      $subqueue = reset(nodequeue_load_subqueues_by_queue($queue->qid));
+      $nid = reset(entity_get_id_by_uuid('node', array($nodequeue_item['node_uuid'])));
+      if ($nid && !empty($queue->qid) && !empty($subqueue->sqid)) {
+        db_delete('nodequeue_nodes')
+          ->condition('qid', $queue->qid)
+          ->condition('sqid', $queue->sqid)
+          ->condition('nid', $nid);
+        nodequeue_subqueue_add($queue, $subqueue, $nid);
+      }
+    }
+  }
+}
diff --git a/includes/uuid_term.features.inc b/includes/uuid_term.features.inc
index 8e6b3f0..3898a06 100644
--- a/includes/uuid_term.features.inc
+++ b/includes/uuid_term.features.inc
@@ -9,8 +9,10 @@
  */
 function uuid_term_features_export_options() {
   $options = array();
-  $vocabs = variable_get('uuid_features_entity_taxonomy_term_vocabularies', array_fill_keys(array_keys(taxonomy_vocabulary_get_names()),0)); // Could just leave this empty.
-  $vocabs = array_filter($vocabs); // Only include vocabs that user has selected (ie. set a non zero value).
+  // Could just leave this empty.
+  $vocabs = variable_get('uuid_features_entity_taxonomy_term_vocabularies', array_fill_keys(array_keys(taxonomy_vocabulary_get_names()), 0));
+  // Only include vocabs that user has selected (ie. set a non zero value).
+  $vocabs = array_filter($vocabs);
   if (empty($vocabs)) {
     return $options;
   }
@@ -42,6 +44,11 @@ function uuid_term_features_export($data, &$export, $module_name = '') {
 
   foreach ($data as $uuid) {
     uuid_term_features_get_dependencies($export, $uuid);
+
+    $entity_type = 'taxonomy_term';
+    $term = entity_uuid_load($entity_type, $data);
+    $term = reset($term);
+    drupal_alter('uuid_entity_features_export', $entity_type, $export, $term);
   }
   return array();
 }
@@ -122,6 +129,10 @@ function uuid_term_features_export_render($module = 'foo', $data) {
     // No need to export the rdf mapping.
     unset($export->rdf_mapping);
     uuid_features_file_field_export($export, 'taxonomy_term');
+
+    $entity_type = 'taxonomy_term';
+    drupal_alter('uuid_entity_features_export_render', $entity_type, $export, $node);
+
     $code[] = '  $terms[] = ' . features_var_export($export, '  ') . ';';
   }
 
@@ -142,6 +153,7 @@ function uuid_term_features_revert($module) {
 
 /**
  * Implements hook_features_rebuild().
+ *
  * Rebuilds terms based on UUID from code defaults.
  */
 function uuid_term_features_rebuild($module) {
@@ -156,12 +168,16 @@ function uuid_term_features_rebuild($module) {
       $existing = entity_get_id_by_uuid('taxonomy_term', array($data['uuid']));
       if (!count($existing)) {
         $voc = taxonomy_vocabulary_machine_name_load($data['vocabulary_machine_name']);
-        // Only save the term, if the corresponding vocabulary already exisits.
+        // Only save the term, if the corresponding vocabulary already exists.
         if ($voc) {
-          $term = new stdClass;
+          $term = new stdClass();
           $term->uuid = $data['uuid'];
           $term->vid = $voc->vid;
           $term->name = $data['name'];
+
+          $entity_type = 'taxonomy_term';
+          drupal_alter('uuid_entity_features_rebuild', $entity_type, $node, $module);
+
           taxonomy_term_save($term);
         }
       }
diff --git a/includes/uuid_user.features.inc b/includes/uuid_user.features.inc
index 622c06c..7bded9d 100644
--- a/includes/uuid_user.features.inc
+++ b/includes/uuid_user.features.inc
@@ -1,159 +1,168 @@
-<?php
-
-/**
- * Implements hook_features_export_options().
- */
-function uuid_user_features_export_options() {
-  $options = array();
-
-  $query = 'SELECT u.uid, u.name, u.mail, u.uuid
-    FROM {users} u WHERE uid > 0 ORDER BY u.name ASC';
-  $results = db_query($query);
-  foreach ($results as $user) {
-    $options[$user->uuid] = t('@name: @mail', array(
-      '@name' => $user->name,
-      '@mail' => $user->mail,
-    ));
-  }
-
-  return $options;
-}
-
-/**
- * Implements hook_features_export().
- */
-function uuid_user_features_export($data, &$export, $module_name = '') {
-  $pipe = array();
-
-  $export['dependencies']['uuid_features'] = 'uuid_features';
-
-  uuid_features_load_module_includes();
-
-  $uids = entity_get_id_by_uuid('user', $data);
-  foreach ($uids as $uuid => $uid) {
-    // Load the existing user.
-    $user = user_load($uid, TRUE);
-
-    $export['features']['uuid_user'][$uuid] = $uuid;
-
-    $data = &$export;
-    drupal_alter('uuid_user_features_export', $data, $user);
-  }
-
-  return $pipe;
-}
-
-/**
- * Implements hook_features_export_render().
- */
-function uuid_user_features_export_render($module, $data) {
-  $translatables = $code = array();
-
-  uuid_features_load_module_includes();
-
-  $code[] = '  $users = array();';
-  $code[] = '';
-  $uids = entity_get_id_by_uuid('user', $data);
-  foreach ($uids as $uuid => $uid) {
-    // Only export the user if it exists.
-    if ($uid === FALSE) {
-      continue;
-    }
-    // Attempt to load the user, using a fresh cache.
-    $account = user_load($uid, TRUE);
-    if (empty($account)) {
-      continue;
-    }
-    $export = $account;
-
-    // Use date instead of created, in the same format used by node_object_prepare.
-    $export->date = format_date($export->created, 'custom', 'Y-m-d H:i:s O');
-    unset($export->uid);
-    $export->pass = user_password(10);
-
-    // The hook_alter signature is:
-    // hook_uuid_node_features_export_render_alter(&$export, $user, $module);
-    drupal_alter('uuid_user_features_export_render', $export, $user, $module);
-
-    $code[] = '  $users[] = ' . features_var_export($export) . ';';
-  }
-
-  if (!empty($translatables)) {
-    $code[] = features_translatables_export($translatables, '  ');
-  }
-
-  $code[] = '  return $users;';
-  $code = implode("\n", $code);
-  return array('uuid_features_default_users' => $code);
-}
-
-/**
- * Implements hook_features_revert().
- */
-function uuid_user_features_revert($module) {
-  uuid_user_features_rebuild($module);
-}
-
-/**
- * Implements hook_features_rebuild().
- * Rebuilds users based on UUID from code defaults.
- */
-function uuid_user_features_rebuild($module) {
-  $users = module_invoke($module, 'uuid_features_default_users');
-  uuid_node_features_rebuild($module);
-  cache_clear_all();
-
-  if (!empty($users)) {
-    module_load_include('inc', 'user', 'user.pages');
-
-    foreach ($users as $data) {
-      $account = (object) $data;
-      $existing = new stdClass();
-
-      // Find the matching uid
-      $efq = new EntityFieldQuery();
-      $efq->entityCondition('entity_type', 'user');
-      $efq->propertyCondition('name', $account->name);
-      $result = $efq->execute();
-
-      if (isset($result['user'])) {
-        $uid = reset(array_keys($result['user']));
-      }
-
-      if (!empty($uid)) {
-        if ($uid == 1) {
-          global $user;
-          if (!empty($user->uid) && $user->uid == 1) {
-            $existing = $user;
-          } else {
-            $existing = user_load(1);
-          }
-        } else {
-          // Find the matching user by name with a fresh cache
-          $existing = user_load($uid, TRUE);
-          $existing->uid = $uid;
-        }
-        $account->uid = $uid;
-      }
-      else {
-        $existing->uid = NULL;
-      }
-
-      // The hook_alter signature is:
-      // hook_uuid_user_features_rebuild_alter(&user, $module);
-      drupal_alter('uuid_user_features_rebuild', $account, $module);
-
-      if($existing->uid === NULL) {
-        $account = user_save(NULL, (array) $account);
-      }
-      else {
-        // Dont' reset password.
-        unset($account->pass);
-        $account = user_save($existing, (array) $account);
-      }
-      // Clear out previously loaded user account if one was found
-      unset($existing);
-    }
-  }
-  uuid_node_features_rebuild($module);
-}
+<?php
+/**
+ * @file
+ * Features hooks for the user features component.
+ */
+
+/**
+ * Implements hook_features_export_options().
+ */
+function uuid_user_features_export_options() {
+  $options = array();
+
+  $query = 'SELECT u.uid, u.name, u.mail, u.uuid
+    FROM {users} u WHERE uid > 0 ORDER BY u.name ASC';
+  $results = db_query($query);
+  foreach ($results as $user) {
+    $options[$user->uuid] = t('@name: @mail', array(
+      '@name' => $user->name,
+      '@mail' => $user->mail,
+    ));
+  }
+
+  return $options;
+}
+
+/**
+ * Implements hook_features_export().
+ */
+function uuid_user_features_export($data, &$export, $module_name = '') {
+  $pipe = array();
+
+  $export['dependencies']['uuid_features'] = 'uuid_features';
+
+  uuid_features_load_module_includes();
+
+  $uids = entity_get_id_by_uuid('user', $data);
+  foreach ($uids as $uuid => $uid) {
+    // Load the existing user.
+    $user = user_load($uid, TRUE);
+
+    $export['features']['uuid_user'][$uuid] = $uuid;
+
+    $data = &$export;
+    $entity_type = 'user';
+    drupal_alter('uuid_entity_features_export', $entity_type, $data, $user);
+    drupal_alter('uuid_user_features_export', $data, $user);
+  }
+
+  return $pipe;
+}
+
+/**
+ * Implements hook_features_export_render().
+ */
+function uuid_user_features_export_render($module, $data) {
+  $translatables = $code = array();
+
+  uuid_features_load_module_includes();
+
+  $code[] = '  $users = array();';
+  $code[] = '';
+  $uids = entity_get_id_by_uuid('user', $data);
+  foreach ($uids as $uuid => $uid) {
+    // Only export the user if it exists.
+    if ($uid === FALSE) {
+      continue;
+    }
+    // Attempt to load the user, using a fresh cache.
+    $account = user_load($uid, TRUE);
+    if (empty($account)) {
+      continue;
+    }
+    $export = $account;
+
+    // Use date instead of created - same format used by node_object_prepare.
+    $export->date = format_date($export->created, 'custom', 'Y-m-d H:i:s O');
+    unset($export->uid);
+    $export->pass = user_password(10);
+
+    $entity_type = 'user';
+    drupal_alter('uuid_entity_features_export_render', $entity_type, $export, $user);
+    drupal_alter('uuid_user_features_export_render', $export, $user, $module);
+
+    $code[] = '  $users[] = ' . features_var_export($export) . ';';
+  }
+
+  if (!empty($translatables)) {
+    $code[] = features_translatables_export($translatables, '  ');
+  }
+
+  $code[] = '  return $users;';
+  $code = implode("\n", $code);
+  return array('uuid_features_default_users' => $code);
+}
+
+/**
+ * Implements hook_features_revert().
+ */
+function uuid_user_features_revert($module) {
+  uuid_user_features_rebuild($module);
+}
+
+/**
+ * Implements hook_features_rebuild().
+ *
+ * Rebuilds users based on UUID from code defaults.
+ */
+function uuid_user_features_rebuild($module) {
+  $users = module_invoke($module, 'uuid_features_default_users');
+  uuid_node_features_rebuild($module);
+  cache_clear_all();
+
+  if (!empty($users)) {
+    module_load_include('inc', 'user', 'user.pages');
+
+    foreach ($users as $data) {
+      $account = (object) $data;
+      $existing = new stdClass();
+
+      // Find the matching uid.
+      $efq = new EntityFieldQuery();
+      $efq->entityCondition('entity_type', 'user');
+      $efq->propertyCondition('name', $account->name);
+      $result = $efq->execute();
+
+      if (isset($result['user'])) {
+        $uid = reset(array_keys($result['user']));
+      }
+
+      if (!empty($uid)) {
+        if ($uid == 1) {
+          global $user;
+          if (!empty($user->uid) && $user->uid == 1) {
+            $existing = $user;
+          }
+          else {
+            $existing = user_load(1);
+          }
+        }
+        else {
+          // Find the matching user by name with a fresh cache.
+          $existing = user_load($uid, TRUE);
+          $existing->uid = $uid;
+        }
+        $account->uid = $uid;
+      }
+      else {
+        $existing->uid = NULL;
+      }
+
+      $entity_type = 'user';
+      drupal_alter('uuid_entity_features_rebuild', $entity_type, $account, $module);
+      drupal_alter('uuid_user_features_rebuild', $account, $module);
+
+      if ($existing->uid === NULL) {
+        $account = user_save(NULL, (array) $account);
+      }
+      else {
+        // Dont' reset password.
+        unset($account->pass);
+        $account = user_save($existing, (array) $account);
+      }
+      // Clear out previously loaded user account if one was found.
+      unset($existing);
+    }
+  }
+  uuid_node_features_rebuild($module);
+}
diff --git a/uuid_features.api.php b/uuid_features.api.php
new file mode 100644
index 0000000..16e72b6
--- /dev/null
+++ b/uuid_features.api.php
@@ -0,0 +1,189 @@
+<?php
+/**
+ * @file
+ * Hooks provided by the UUID Features module.
+ */
+
+/**
+ * Allows to modify features metadata for an entity.
+ *
+ * @param string $entity_type
+ *   The entity type to export.
+ * @param array $data
+ *   The array of the features export data
+ * @param object $entity
+ *   The entity to export.
+ */
+function hook_uuid_entity_features_export_alter($entity_type, $data, $entity) {
+
+}
+
+/**
+ * Allows to modify the export object of an entity.
+ *
+ * @param string $entity_type
+ *   The entity type to export.
+ * @param object $export
+ *   The for the export modified entity.
+ * @param object $entity
+ *   The original entity.
+ */
+function hook_uuid_entity_features_export_render_alter($entity_type, $export, $entity) {
+
+}
+
+/**
+ * Allows to handle specific import tasks for an entity.
+ *
+ * @param string $entity_type
+ *   The entity type to export.
+ * @param object $entity
+ *   The entity to import.
+ * @param string $module
+ *   The module to import for.
+ */
+function hook_uuid_entity_features_rebuild_alter($entity_type, $entity, $module) {
+
+}
+
+/**
+ * Allows to modify features metadata for a node.
+ *
+ * @param array $data
+ *   The array of the features export data
+ * @param object $node
+ *   The node to export.
+ */
+function hook_uuid_node_features_export_alter(&$data, $node) {
+
+}
+
+/**
+ * Allows to adjust the features export options for nodes.
+ *
+ * @param array $options
+ *   The features export options.
+ */
+function hook_uuid_node_features_export_options_alter(&$options) {
+
+}
+
+/**
+ * Allows to modify the export object of a node.
+ *
+ * @param object $export
+ *   The for the export modified node.
+ * @param object $node
+ *   The original node.
+ * @param string $module
+ *   The module this is exported for.
+ */
+function hook_uuid_node_features_export_render_alter(&$export, $node, $module) {
+
+}
+
+/**
+ * Allows to handle specific import tasks for a node.
+ *
+ * @param object $node
+ *   The node to import.
+ * @param string $module
+ *   The module to import for.
+ */
+function hook_uuid_node_features_rebuild_alter(&$node, $module) {
+
+}
+
+/**
+ * Allows to modify features metadata for an user.
+ *
+ * @param array $data
+ *   The array of the features export data
+ * @param object $user
+ *   The user to export.
+ */
+function hook_uuid_user_features_export_alter(&$data, $user) {
+
+}
+
+/**
+ * Allows to modify the export object of an user.
+ *
+ * @param object $export
+ *   The for the export modified user.
+ * @param object $user
+ *   The original user.
+ * @param string $module
+ *   The module this is exported for.
+ */
+function hook_uuid_user_features_export_render_alter(&$export, $user, $module) {
+
+}
+
+/**
+ * Allows to handle specific import tasks for an user.
+ *
+ * @param object $user
+ *   The user to import.
+ * @param string $module
+ *   The module to import for.
+ */
+function hook_uuid_user_features_rebuild_alter(&$user, $module) {
+
+}
+
+/**
+ * Allows to adjust the features export options for terms.
+ *
+ * @param array $options
+ *   The features export options.
+ */
+function hook_uuid_term_features_export_options_alter(&$options) {
+
+}
+
+/**
+ * Allows to adjust the features export options for field collections.
+ *
+ * @param array $options
+ *   The features export options.
+ */
+function hook_uuid_field_collection_features_export_options_alter(&$options) {
+
+}
+
+/**
+ * Allows to adjust the features export options for the current search configuration.
+ *
+ * @param array $options
+ *   The features export options.
+ */
+function hook_uuid_current_search_configuration_features_export_options_alter(&$options) {
+
+}
+
+/**
+ * Allows to modify features metadata for a bean.
+ *
+ * @param array $data
+ *   The array of the features export data
+ * @param object $bean
+ *   The bean to export.
+ */
+function hook_uuid_bean_features_export_alter(&$data, $bean) {
+
+}
+
+/**
+ * Allows to modify the export object of a bean.
+ *
+ * @param object $export
+ *   The for the export modified bean.
+ * @param object $bean
+ *   The original bean.
+ * @param string $module
+ *   The module this is exported for.
+ */
+function hook_uuid_bean_features_export_render_alter(&$export, $bean, $module) {
+
+}
diff --git a/uuid_features.module b/uuid_features.module
index 659ba2a..a6f861b 100644
--- a/uuid_features.module
+++ b/uuid_features.module
@@ -174,7 +174,7 @@ function uuid_features_settings($form, &$form_state) {
   $entity_info = entity_get_info();
 
   foreach ($entity_info as $type => $info) {
-    foreach($info['bundles'] as $bundle => $bundle_info) {
+    foreach ($info['bundles'] as $bundle => $bundle_info) {
       $bundles[$type][$bundle] = $bundle_info['label'];
     }
     if (isset($info['uuid features']) && $info['uuid features'] === TRUE) {
@@ -193,46 +193,6 @@ function uuid_features_settings($form, &$form_state) {
     }
   }
 
-  $form['entity']['uuid_features_entity_node_types'] = array(
-    '#type' => 'checkboxes',
-    '#title' => t('Exportable node types'),
-    '#description' => t('Which content types should be exportable?'),
-    '#default_value' => variable_get('uuid_features_entity_node_types', array()),
-    '#options' => $bundles['node'],
-  );
-
-  $form['entity']['uuid_features_entity_taxonomy_term_vocabularies'] = array(
-    '#type' => 'checkboxes',
-    '#title' => t('Exportable term vocabularies'),
-    '#description' => t("Which taxonomy vocabulary's terms should be exportable?"),
-    '#default_value' => variable_get('uuid_features_entity_taxonomy_term_vocabularies', array()),
-    '#options' => $bundles['taxonomy_term'],
-  );
-
-  $form['file']['uuid_features_file_node_types'] = array(
-    '#type' => 'checkboxes',
-    '#title' => t('Files exported for nodes'),
-    '#description' => t('Which content types should export file fields?'),
-    '#default_value' => variable_get('uuid_features_file_node_types', array()),
-    '#options' => $bundles['node'],
-  );
-
-  $form['file']['uuid_features_file_taxonomy_term_types'] = array(
-    '#type' => 'checkboxes',
-    '#title' => t('Files exported for taxonomy terms'),
-    '#description' => t('Which vocabularies should export file fields?'),
-    '#default_value' => variable_get('uuid_features_file_taxonomy_term_types', array()),
-    '#options' => $bundles['taxonomy_term'],
-  );
-
-  $form['file']['uuid_features_file_field_collection_item_types'] = array(
-    '#type' => 'checkboxes',
-    '#title' => t('Files exported for field collections item'),
-    '#description' => t('Which content types should export file fields?'),
-    '#default_value' => variable_get('uuid_features_file_field_collection_item_types', array()),
-    '#options' => $bundles['field_collection_item'],
-  );
-
   $form['file']['uuid_features_file_mode'] = array(
     '#type' => 'radios',
     '#title' => t('File export mode'),
@@ -304,7 +264,7 @@ function uuid_features_file_field_export(&$export, $entity_type) {
   }
   $fields = field_info_instances($entity_type, $export_bundle);
   $supported_fields = array_map('trim', explode(',', variable_get('uuid_features_file_supported_fields', 'file, image')));
-  $bundles = variable_get('uuid_features_file_' . $entity_type . '_types');
+  $bundles = variable_get('uuid_features_file_' . $entity_type);
   if ($bundles == '') {
     $bundles = array();
   }
