diff --git a/includes/uuid_term.features.inc b/includes/uuid_term.features.inc
index 70a29ed..41bbdb2 100644
--- a/includes/uuid_term.features.inc
+++ b/includes/uuid_term.features.inc
@@ -89,19 +89,25 @@ function uuid_term_features_export_render($module = 'foo', $data) {
       continue;
     }
     $export = reset($terms);
-
     // Do not export ids.
     unset($export->vid);
     unset($export->tid);
     // No need to export the rdf mapping.
     unset($export->rdf_mapping);
+    uuid_term_features_file_field_export($export);
     $code[] = '  $terms[] = ' . features_var_export($export, '  ') . ';';
   }
 
   if (!empty($translatables)) {
     $code[] = features_translatables_export($translatables, '  ');
   }
-
+  // Configuration settings need to be exported along with terms to
+  // avoid diffs between the default and normal code returned by
+  // this function.
+  $code[] = '  variable_set(\'uuid_features_file_types\', ' . features_var_export(variable_get('uuid_features_file_types', array())) . ');';
+  $code[] = '  variable_set(\'uuid_features_file_mode\', ' . features_var_export(variable_get('uuid_features_file_mode', 'inline')) . ');';
+  $code[] = '  variable_set(\'uuid_features_file_assets_path\', ' . features_var_export(variable_get('uuid_features_file_assets_path', '')) . ');';
+  $code[] = '  variable_set(\'uuid_features_file_supported_fields\', ' . features_var_export(variable_get('uuid_features_file_supported_fields', 'file, image')) . ');';
   $code[] = '  return $terms;';
   $code = implode("\n", $code);
   return array('uuid_features_default_terms' => $code);
@@ -121,6 +127,7 @@ function uuid_term_features_revert($module) {
 function uuid_term_features_rebuild($module) {
   // Import the vocabularies first.
   taxonomy_features_rebuild($module);
+  field_features_rebuild($module);
 
   $terms = module_invoke($module, 'uuid_features_default_terms');
   if (!empty($terms)) {
@@ -145,8 +152,155 @@ function uuid_term_features_rebuild($module) {
       $voc = taxonomy_vocabulary_machine_name_load($term->vocabulary_machine_name);
       if ($voc) {
         $term->vid = $voc->vid;
+        uuid_term_features_file_field_import($term, $voc);
         entity_uuid_save('taxonomy_term', $term);
       }
     }
   }
 }
+
+/**
+ * Handle exporting file fields.
+ */
+function uuid_term_features_file_field_export(&$term) {
+  $vocabularies = array_filter(variable_get('uuid_features_file_types', array()));
+  if (in_array($term->vocabulary_machine_name, $vocabularies)) {
+    $orig_assets_path = $assets_path = variable_get('uuid_features_file_assets_path', '');
+    $export_mode = variable_get('uuid_features_file_mode', 'inline');
+
+    switch ($export_mode) {
+      case 'local':
+        $export_var = 'uuid_features_file_path';
+        break;
+      case 'remote':
+        $export_var = 'uuid_features_file_url';
+        break;
+      default:
+      case 'inline':
+        $export_var = 'uuid_features_file_data';
+        break;
+    }
+    // If files are supposed to be copied to the assets path.
+    if ($export_mode == 'local' && $assets_path) {
+      // Ensure the assets path is created
+      if ((!is_dir($assets_path) && mkdir($assets_path, 0777, TRUE) == FALSE)
+        || !is_writable($assets_path)
+      ) {
+        // Try creating a public path if the local path isn't writeable.
+        // This is a kludgy solution to allow writing file assets to places
+        // such as the profiles/myprofile directory, which isn't supposed to
+        // be writeable 
+        $new_assets_path = 'public://' . $assets_path;
+        if (!is_dir($new_assets_path) && mkdir($new_assets_path, 0777, TRUE) == FALSE) {
+          drupal_set_message(t("Could not create assets path! '!path'", array('!path' => $assets_path)), 'error');
+          // Don't continue if the assets path is not ready
+          return;
+        }
+        $assets_path = $new_assets_path;
+      }
+    }
+
+    // get all fields from this vocabulary
+    $fields = field_info_instances('taxonomy_term', $term->vocabulary_machine_name);
+    foreach ($fields as $field_instance) {
+      // load field infos to check the type
+      $field = &$term->{$field_instance['field_name']};
+      $info = field_info_field($field_instance['field_name']);
+
+      $supported_fields = array_map('trim', explode(',', variable_get('uuid_features_file_supported_fields', 'file, image')));
+
+      // check if this field should implement file import/export system
+      if (in_array($info['type'], $supported_fields)) {
+
+        // we need to loop into each language because i18n translation can build
+        // fields with different language than the node one.
+        foreach($field as $language => $files) {
+          if (is_array($files)) {
+            foreach($files as $i => $file) {
+
+              // convert file to array to stay into the default uuid_features_file format
+              $file = (object) $file;
+
+              // Check the file
+              if (!isset($file->uri) || !is_file($file->uri)) {
+                drupal_set_message(t("File field found on term, but file doesn't exist on disk? '!path'", array('!path' => $file->uri)), 'error');
+                continue;
+              }
+
+              if ($export_mode == 'local') {
+                if ($assets_path) {
+                  // The writeable path may be different from the path that gets saved
+                  // during the feature export to handle the public path/local path
+                  // dilemma mentioned above.
+                  $writeable_export_data = $assets_path . '/' . basename($file->uri);
+                  $export_data = $orig_assets_path . '/' . basename($file->uri);
+                  if (!copy($file->uri, $writeable_export_data)) {
+                    drupal_set_message(t("Export file error, could not copy '%filepath' to '%exportpath'.", array('%filepath' => $file->uri, '%exportpath' => $writeable_export_data)), 'error');
+                    return FALSE;
+                  }
+                }
+                else {
+                  $export_data = $file->uri;
+                }
+              }
+              // Remote export mode
+              elseif ($export_mode == 'remote') {
+                $export_data = url($file->uri, array('absolute' => TRUE));
+              }
+              // Default is 'inline' export mode
+              else {
+                $export_data = base64_encode(file_get_contents($file->uri));
+              }
+
+              // build the field again, and remove fid to be sure that imported node
+              // will rebuild the file again, or keep an existing one with a different fid
+              $field[$language][$i]['fid'] = NULL;
+              $field[$language][$i]['timestamp'] = NULL;
+              $field[$language][$i][$export_var] = $export_data;
+            }
+          }
+        }
+      }
+    }
+  }
+}
+
+/**
+ * Handle importing file fields.
+ */
+function uuid_term_features_file_field_import(&$term, $voc) {
+  // Get all fields from this vocabulary.
+  $fields = field_info_instances('taxonomy_term', $term->vocabulary_machine_name);
+
+  foreach($fields as $field_instance) {
+    // Load field info to check the type.
+    $field = &$term->{$field_instance['field_name']};
+    $info = field_info_field($field_instance['field_name']);
+
+    $supported_fields = array_map('trim', explode(',', variable_get('uuid_features_file_supported_fields', 'file, image')));
+
+    // Check if this field should implement file import/export system.
+    if (in_array($info['type'], $supported_fields)) {
+
+      // We need to loop into each language because i18n translation can build
+      // fields with different language than the term one.
+      foreach($field as $language => $files) {
+        if (is_array($files)) {
+          foreach($files as $i => $file) {
+
+            // Convert file to array to stay into the default uuid_features_file format.
+            $file = (object)$file;
+
+            $result = _uuid_features_file_field_import_file($file);
+            // The file was saved successfully, update the file field (by reference).
+            if ($result == TRUE && isset($file->fid)) {
+              $field[$language][$i] = (array)$file;
+            }
+
+          }
+        }
+      }
+    }
+  }
+}
+//$term
\ No newline at end of file
diff --git a/uuid_features.module b/uuid_features.module
index 34c807c..2277041 100644
--- a/uuid_features.module
+++ b/uuid_features.module
@@ -1,6 +1,20 @@
 <?php
 
 /**
+ * Implements hook_menu().
+ */
+function uuid_features_menu() {
+  $items['admin/config/content/uuid_features'] = array(
+    'access arguments' => array('administer site configuration'),
+    'page callback' => 'drupal_get_form',
+    'page arguments' => array('uuid_features_settings'),
+    'title' => 'UUID Features Integration',
+    'description' => 'Configure the settings for UUID Features Integration.',
+  );
+  return $items;
+}
+
+/**
  * Implements hook_features_api().
  */
 function uuid_features_features_api() {
@@ -53,3 +67,187 @@ function uuid_features_load_module_includes() {
     $loaded = TRUE;
   }
 }
+
+/**
+ * Menu callback to configure module settings.
+ */
+function uuid_features_settings($form, &$form_state) {
+  $vocabularies = array();
+  foreach (taxonomy_vocabulary_get_names() as $machine_name => $properties) {
+    $vocabularies[$machine_name] = $properties->name;
+  }
+  $form['file']['uuid_features_file_types'] = array(
+    '#type' => 'checkboxes',
+    '#title' => t('Files exported for vocabularies'),
+    '#default_value' => variable_get('uuid_features_file_types', array()),
+    '#options' => $vocabularies,
+    '#description' => t('Which vocabularies should export file fields?'),
+  );
+
+  $form['file']['uuid_features_file_mode'] = array(
+    '#type' => 'radios',
+    '#title' => t('File export mode'),
+    '#default_value' => variable_get('uuid_features_file_mode', 'inline'),
+    '#options' => array(
+      'inline' => t('Inline Base64'),
+      'local' => t('Local file export'),
+      'remote' => t('Remote file export, URL')
+     ),
+    '#description' => t('Should file exports be inline inside the export code, a local path to the file, or a URL? Inline Base64 is the easiest option to use but can sometimes exceed PHP post limits, local and remote modes are more useful for power users.  <em>NOTE: Remote mode only works with a public files directory.</em>'),
+  );
+
+  $form['file']['uuid_features_file_assets_path'] = array(
+    '#type' => 'textfield',
+    '#title' => t('Local file field assets path'),
+    '#size' => 60,
+    '#maxlength' => 255,
+    '#default_value' => variable_get('uuid_features_file_assets_path', ''),
+    '#description' => t(
+      'Optionally, copy files to this path when the node is exported.
+      The primary advantage of this is to divert exported files into a
+      safe location so they can be committed to source control (eg: SVN,
+      CVS, Git).  <em>Tip: For install profile developers, setting this
+      path to <code>profiles/my_profile/uuid_features_assets</code> may be
+      useful.</em>'
+    ),
+    '#required' => FALSE,
+    '#states' => array(
+      'visible' => array(
+        ':input[name=uuid_features_file_mode]' => array('value' => 'local'),
+      ),
+    ),
+  );
+
+  $form['file']['uuid_features_file_supported_fields'] = array(
+    '#type' => 'textfield',
+    '#title' => t('Supported file field types'),
+    '#default_value' => variable_get('uuid_features_file_supported_fields', 'file, image'),
+    '#maxlength' => 512,
+    '#description' => t('Comma seperated list of file field types to detect for export/import.'),
+  );
+
+  return system_settings_form($form);
+}
+
+/**
+ * Detects remote and local file exports and imports accordingly.
+ *
+ * @param &$file
+ *   The file, passed by reference.
+ * @return TRUE or FALSE
+ *   Depending on success or failure.  On success the $file object will
+ *   have a valid $file->fid attribute.
+ */
+function _uuid_features_file_field_import_file(&$file) {
+  // This is here for historical reasons to support older exports.  It can be
+  // removed in the next major version.
+  $file->uri = strtr($file->uri, array('#FILES_DIRECTORY_PATH#' => 'public:/'));
+
+  // The file is already in the right location AND either the
+  // uuid_features_file_path is not set or the uuid_features_file_path and filepath
+  // contain the same file
+  if (is_file($file->uri) &&
+    (
+      (!isset($file->uuid_features_file_path) || !is_file($file->uuid_features_file_path)) ||
+      (
+        is_file($file->uuid_features_file_path) &&
+        filesize($file->uri) == filesize($file->uuid_features_file_path) &&
+        strtoupper(dechex(crc32(file_get_contents($file->uri)))) ==
+          strtoupper(dechex(crc32(file_get_contents($file->uuid_features_file_path))))
+      )
+    )
+  ) {
+    // Keep existing file if it exists already at this uri (see also #1023254)
+    // Issue #1058750.
+    $query = db_select('file_managed', 'f')
+        ->fields('f', array('fid'))
+        ->condition('uri', $file->uri)
+        ->execute()
+        ->fetchCol();
+
+    if (!empty($query)) {
+      watchdog('uuid_features', 'kept existing managed file at uri "%uri"', array('%uri' => $file->uri), WATCHDOG_NOTICE);
+      $file = file_load(array_shift($query));
+    }
+
+    $file = file_save($file);
+  }
+  elseif (isset($file->uuid_features_file_data)) {
+    $directory = drupal_dirname($file->uri);
+    if (file_prepare_directory($directory, FILE_CREATE_DIRECTORY)) {
+      if (file_put_contents($file->uri, base64_decode($file->uuid_features_file_data))) {
+        $file = file_save($file);
+      }
+    }
+  }
+  // The file is in a local location, move it to the
+  // destination then finish the save
+  elseif (isset($file->uuid_features_file_path) && is_file($file->uuid_features_file_path)) {
+    $directory = drupal_dirname($file->uri);
+    if (file_prepare_directory($directory, FILE_CREATE_DIRECTORY)) {
+      // The $file->uuid_features_file_path is passed to reference, and modified
+      // by file_unmanaged_copy().  Making a copy to avoid tainting the original.
+      $uuid_features_file_path = $file->uuid_features_file_path;
+      file_unmanaged_copy($uuid_features_file_path, $directory, FILE_EXISTS_REPLACE);
+
+      // At this point the $file->uuid_features_file_path will contain the
+      // destination of the copied file
+      //$file->uri = $uuid_features_file_path;
+      $file = file_save($file);
+    }
+  }
+  // The file is in a remote location, attempt to download it
+  elseif (isset($file->uuid_features_file_url)) {
+    // Need time to do the download
+    ini_set('max_execution_time', 900);
+
+    $temp_path = file_directory_temp() . '/' . md5(mt_rand()) . '.txt';
+    if (($source = fopen($file->uuid_features_file_url, 'r')) == FALSE) {
+      drupal_set_message(t("Could not open '@file' for reading.", array('@file' => $file->uuid_features_file_url)));
+      return FALSE;
+    }
+    elseif (($dest = fopen($temp_path, 'w')) == FALSE) {
+      drupal_set_message(t("Could not open '@file' for writing.", array('@file' => $file->uri)));
+      return FALSE;
+    }
+    else {
+      // PHP5 specific, downloads the file and does buffering
+      // automatically.
+      $bytes_read = @stream_copy_to_stream($source, $dest);
+
+      // Flush all buffers and wipe the file statistics cache
+      @fflush($source);
+      @fflush($dest);
+      clearstatcache();
+
+      if ($bytes_read != filesize($temp_path)) {
+        drupal_set_message(t("Remote export '!url' could not be fully downloaded, '@file' to temporary location '!temp'.", array('!url' => $file->uuid_features_file_url, '@file' => $file->uri, '!temp' => $temp_path)));
+        return FALSE;
+      }
+      // File was downloaded successfully!
+      else {
+        if (!@copy($temp_path, $file->uri)) {
+          unlink($temp_path);
+          drupal_set_message(t("Could not move temporary file '@temp' to '@file'.", array('@temp' => $temp_path, '@file' => $file->uri)));
+          return FALSE;
+        }
+
+        unlink($temp_path);
+        $file->filesize = filesize($file->uri);
+        $file->filemime = file_get_mimetype($file->uri);
+      }
+    }
+
+    fclose($source);
+    fclose($dest);
+
+    $file = file_save($file);
+  }
+  // Unknown error
+  else {
+    drupal_set_message(t("Unknown error occurred attempting to import file: @filepath", array('@filepath' => $file->uri)), 'error');
+    return FALSE;
+  }
+
+  return TRUE;
+}
