diff --git a/features.admin.inc b/features.admin.inc
index 4e12576..b894902 100644
--- a/features.admin.inc
+++ b/features.admin.inc
@@ -879,6 +879,25 @@ function features_export_build_form_submit($form, &$form_state) {
 
     $tar = array();
     $filenames = array();
+    // Copy any files if _files key is there.
+    if (!empty($files['_files'])) {
+      foreach ($files['_files'] as $file_name => $file_path) {
+        if ($generate) {
+          // See if files are in a sub directory.
+          if (strpos($file_name, '/')) {
+            $file_directory = $directory . '/' . substr($file_name, 0, strrpos($file_name, '/'));
+            if (!is_dir($file_directory)) {
+              mkdir($file_directory);
+            }
+          }
+          file_unmanaged_copy($file_path, $directory . '/' . $file_name, FILE_EXISTS_REPLACE);
+        }
+        else {
+          print features_tar_create("{$module_name}/{$filename}", file_get_contents($file_path));
+        }
+      }
+      unset($files['_files']);
+    }
     foreach ($files as $extension => $file_contents) {
       if (!in_array($extension, array('module', 'info'))) {
         $extension .= '.inc';
diff --git a/features.api.php b/features.api.php
index 10915e1..1e1bb93 100644
--- a/features.api.php
+++ b/features.api.php
@@ -157,7 +157,9 @@ function hook_features_export_options() {
  *   of the module, e.g. the key for `hook_example` should simply be `example`
  *   The values in the array can also be in the form of an associative array
  *   with the required key of 'code' and optional key of 'args', if 'args' need
- *   to be added to the hook.
+ *   to be added to the hook. Alternate it can be an associative array with
+ *   'file_path' is a file on the system that will be copied; the key
+ *   is the path to the file in the feature being generated.
  */
 function hook_features_export_render($module_name, $data, $export = NULL) {
   $code = array();
diff --git a/features.drush.inc b/features.drush.inc
index 9da547d..fd4e04e 100644
--- a/features.drush.inc
+++ b/features.drush.inc
@@ -583,6 +583,20 @@ function _drush_features_export($info, $module_name = NULL, $directory = NULL) {
       drupal_flush_all_caches();
       $export = _drush_features_generate_export($info, $module_name);
       $files = features_export_render($export, $module_name, TRUE);
+      // Copy any files if _files key is there.
+      if (!empty($files['_files'])) {
+        foreach ($files['_files'] as $file_name => $file_path) {
+          // See if files are in a sub directory.
+          if (strpos($file_name, '/')) {
+            $file_directory = $directory . '/' . substr($file_name, 0, strrpos($file_name, '/'));
+            if (!is_dir($file_directory)) {
+              drush_op('mkdir', $file_directory);
+            }
+          }
+          file_unmanaged_copy($file_path, $directory . '/' . $file_name, FILE_EXISTS_REPLACE);
+        }
+        unset($files['_files']);
+      }
       foreach ($files as $extension => $file_contents) {
         if (!in_array($extension, array('module', 'info'))) {
           $extension .= '.inc';
diff --git a/features.export.inc b/features.export.inc
index 2f32c95..bcf53da 100644
--- a/features.export.inc
+++ b/features.export.inc
@@ -295,6 +295,11 @@ function features_export_render($export, $module_name, $reset = FALSE) {
     }
 
     foreach ($hooks as $hook_name => $hook_info) {
+      // These are purely files that will be copied over.
+      if (is_array($hook_info) && !empty($hook_info['file_path'])) {
+        $code['_files'][$hook_name] = $hook_info['file_path'];
+        continue;
+      }
       $hook_code = is_array($hook_info) ? $hook_info['code'] : $hook_info;
       $hook_args = is_array($hook_info) && !empty($hook_info['args']) ? $hook_info['args'] : '';
       $hook_file = is_array($hook_info) && !empty($hook_info['file']) ? $hook_info['file'] : $file['name'];
@@ -305,7 +310,9 @@ function features_export_render($export, $module_name, $reset = FALSE) {
   // Finalize strings to be written to files
   $code = array_filter($code);
   foreach ($code as $filename => $contents) {
-    $code[$filename] = "<?php\n/**\n * @file\n * {$module_name}.{$filename}.inc\n */\n\n". implode("\n\n", $contents) ."\n";
+    if ($filename != '_files') {
+      $code[$filename] = "<?php\n/**\n * @file\n * {$module_name}.{$filename}.inc\n */\n\n". implode("\n\n", $contents) ."\n";
+    }
   }
 
   // Generate info file output
