diff --git a/includes/uuid_bean.features.inc b/includes/uuid_bean.features.inc
index 0404767..3bee187 100644
--- a/includes/uuid_bean.features.inc
+++ b/includes/uuid_bean.features.inc
@@ -9,11 +9,15 @@
  */
 function uuid_bean_features_export_options() {
   $options = array();
-  if (module_exists("bean_uuid")) {
-    $query = 'SELECT b.bid, b.delta, b.type, b.uuid
-      FROM {bean} b ORDER BY b.type, b.delta ASC';
-    $results = db_query($query);
-    foreach ($results as $bean) {
+  $types = variable_get('uuid_features_entity_bean', FALSE);
+  if (module_exists("bean_uuid") && !empty($types)) {
+    $query = db_select('bean', 'n');
+    $query->fields('n', array('bid', 'delta', 'type', 'uuid'))
+      ->condition('type', $types)
+      ->orderBy('type')
+      ->orderBy('delta', 'ASC');
+    $beans = $query->execute()->fetchAll();
+    foreach ($beans as $bean) {
       $options[$bean->uuid] = t('@type: @delta', array(
         '@type' => $bean->type,
         '@delta' => $bean->delta,
@@ -90,7 +94,8 @@ function uuid_bean_features_export_render($module, $data) {
     if (!count($beans)) {
       continue;
     }
-    $export = reset($beans);
+    $first_bean = reset($beans);
+    $export = clone $first_bean;
 
     // Unset some things that dont need to be exported.
     unset($export->bid);
@@ -98,6 +103,9 @@ function uuid_bean_features_export_render($module, $data) {
     unset($export->changed);
     unset($export->vid);
 
+    // Enable file exports.
+    uuid_features_file_field_export($export, 'bean');
+
     // Allow other modules to alter the export rendering.
     // The hook_alter signature is:
     // hook_uuid_bean_features_export_render_alter(&$export, $bean, $module);
@@ -156,6 +164,8 @@ function uuid_bean_features_rebuild($module) {
           // Create a new bean.
           $bean = entity_create('bean', $data);
         }
+        // Import the file fields on the bean.
+        uuid_features_file_field_import($bean, 'bean');
         if (!$bean->save()) {
           drupal_set_message('Failed to create ' . $data['type'] . ' bean ' . $data['label'], 'error');
         }
diff --git a/includes/uuid_node.features.inc b/includes/uuid_node.features.inc
index 17f931b..54974d2 100755
--- a/includes/uuid_node.features.inc
+++ b/includes/uuid_node.features.inc
@@ -9,19 +9,23 @@
  */
 function uuid_node_features_export_options() {
   $options = array();
-
-  $types = node_type_get_names();
-
-  $query = 'SELECT n.nid, n.title, n.type, n.uuid
-    FROM {node} n ORDER BY n.type, n.title ASC';
-  $results = db_query($query);
-  foreach ($results as $node) {
-    $options[$node->uuid] = t('@type: @title', array(
-      '@type' => $types[$node->type],
-      '@title' => $node->title,
-    ));
+  // Check what content types are enabled for uuid features export.
+  $types = variable_get('uuid_features_entity_node', FALSE);
+  if (!empty($types)) {
+    $query = db_select('node', 'n');
+    $query->fields('n', array('nid', 'title', 'type', 'uuid'))
+      ->condition('type', $types)
+      ->orderBy('type')
+      ->orderBy('title');
+    $nodes = $query->execute()->fetchAll();
+    foreach ($nodes as $node) {
+      $options[$node->uuid] = t('@type: @title', array(
+        '@type' => $types[$node->type],
+        '@title' => $node->title,
+      ));
+    }
   }
-
+  drupal_alter('uuid_node_features_export_options', $options);
   return $options;
 }
 
@@ -80,7 +84,7 @@ function uuid_node_features_export_render($module, $data) {
     if (!empty($node->path)) {
       $node->pathauto_perform_alias = FALSE;
     }
-    $export = $node;
+    $export = clone $node;
 
     // 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');
@@ -92,6 +96,26 @@ function uuid_node_features_export_render($module, $data) {
     unset($export->changed);
     unset($export->last_comment_timestamp);
     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);
     drupal_alter('uuid_node_features_export_render', $export, $node, $module);
@@ -119,6 +143,9 @@ function uuid_node_features_revert($module) {
  * Rebuilds nodes based on UUID from code defaults.
  */
 function uuid_node_features_rebuild($module) {
+  // Import the terms first.
+  uuid_term_features_rebuild($module);
+
   $nodes = module_invoke($module, 'uuid_features_default_content');
   if (!empty($nodes)) {
     module_load_include('inc', 'node', 'node.pages');
@@ -138,6 +165,25 @@ 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']);
+              }
+            }
+          }
+        }
+      }
+
       // The hook_alter signature is:
       // hook_uuid_node_features_rebuild_alter(&node, $module);
       drupal_alter('uuid_node_features_rebuild', $node, $module);
diff --git a/includes/uuid_term.features.inc b/includes/uuid_term.features.inc
index 40acb13..efe0b31 100644
--- a/includes/uuid_term.features.inc
+++ b/includes/uuid_term.features.inc
@@ -9,16 +9,21 @@
  */
 function uuid_term_features_export_options() {
   $options = array();
-
-  $query = 'SELECT t.tid, t.name, v.name AS vname, t.uuid
-    FROM {taxonomy_term_data} t
-    INNER JOIN {taxonomy_vocabulary} v ON t.vid = v.vid
-    ORDER BY v.name ASC, t.name ASC';
-  $results = db_query($query);
-  foreach ($results as $term) {
-    $options[$term->uuid] = $term->vname . ' - ' . $term->name;
+  $vocabs = variable_get('uuid_features_entity_taxonomy_term', FALSE);
+  if (!empty($vocabs)) {
+    $query = db_select('taxonomy_term_data', 't');
+    $query->innerJoin('taxonomy_vocabulary', 'v', 't.vid = v.vid');
+    $query->condition('v.machine_name', $vocabs)
+     ->fields('t', array('tid', 'name', 'uuid'))
+     ->addField('v', 'name', 'vname');
+    $query->orderBy('v.name', 'ASC');
+    $query->orderBy('t.name', 'ASC');
+    $results = $query->execute()->fetchAll();
+    foreach ($results as $term) {
+      $options[$term->uuid] = $term->vname . ' - ' . $term->name;
+    }
   }
-
+  drupal_alter('uuid_term_features_export_options', $options);
   return $options;
 }
 
@@ -89,8 +94,7 @@ function uuid_term_features_export_render($module = 'foo', $data) {
   $code[] = '  $terms = array();';
   $code[] = '';
   foreach ($data as $uuid) {
-    // @todo reset = TRUE as otherwise references (parent, fields) were destroyed.
-    $terms = entity_uuid_load('taxonomy_term', array($uuid), array(), TRUE);
+    $terms = entity_uuid_load('taxonomy_term', array($uuid));
     if (!count($terms)) {
       continue;
     }
@@ -104,7 +108,8 @@ function uuid_term_features_export_render($module = 'foo', $data) {
       }
     }
 
-    $export = reset($terms);
+    $first_term = reset($terms);
+    $export = clone $first_term;
 
     // Do not export ids.
     unset($export->vid);
diff --git a/uuid_features.module b/uuid_features.module
index ca6a94c..95d58f2 100644
--- a/uuid_features.module
+++ b/uuid_features.module
@@ -15,6 +15,18 @@ function uuid_features_menu() {
 }
 
 /**
+ * Implements hook_entity_info_alter().
+ */
+function uuid_features_entity_info_alter(&$entity_info) {
+  // Provide a list of entities that provide bundles
+  // to be exported by uuid_features.
+  $entity_types = array('bean', 'node', 'taxonomy_term');
+  foreach ($entity_types as $type) {
+    $entity_info[$type]['uuid features'] = TRUE;
+  }
+}
+
+/**
  * Implements hook_features_api().
  */
 function uuid_features_features_api() {
@@ -38,7 +50,6 @@ function uuid_features_features_api() {
     );
   }
 
-  // Depends on http://drupal.org/node/808690
   if (function_exists('uuid_file_insert')) {
     $components['uuid_file'] = array(
       'name' => t('File'),
@@ -104,6 +115,7 @@ function uuid_features_features_pipe_taxonomy_alter(&$pipe, $data, $export) {
     }
   }
 }
+
 /**
  * Menu callback to configure module settings.
  */
@@ -117,28 +129,27 @@ 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) {
       $bundles[$type][$bundle] = $bundle_info['label'];
     }
+    if (isset($info['uuid features']) && $info['uuid features'] === TRUE) {
+      $form['entity']['uuid_features_entity_' . $type] = array(
+        '#type' => 'checkboxes',
+        '#title' => t('Exportable ' . $info['label']  . ' bundles'),
+        '#default_value' => variable_get('uuid_features_entity_' . $type, array()),
+        '#options' => $bundles[$type],
+      );
+      $form['file']['uuid_features_file_' . $type] = array(
+        '#type' => 'checkboxes',
+        '#title' => t('Files exported for ' . $info['label'] . ' bundles'),
+        '#default_value' => variable_get('uuid_features_file_' . $type, array()),
+        '#options' => $bundles[$type],
+      );
+    }
   }
 
-  $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_mode'] = array(
     '#type' => 'radios',
     '#title' => t('File export mode'),
@@ -192,6 +203,9 @@ function uuid_features_file_field_export(&$export, $entity_type) {
     case "taxonomy_term":
       $export_bundle = $export->vocabulary_machine_name;
       break;
+    case "bean":
+      $export_bundle = $export->type;
+      break;
     case "node":
       $export_bundle = $export->type;
       break;
@@ -306,7 +320,7 @@ function uuid_features_file_field_export(&$export, $entity_type) {
     }
   }
 }
-//entity_type
+
 /**
  * Handle importing file fields.
  */
