diff --git a/clone.module b/clone.module
index a58923d..18ac26c 100644
--- a/clone.module
+++ b/clone.module
@@ -157,6 +157,16 @@ function clone_node_type_update($info) {
   }
 }
 
+/**
+ * Implements hook_node_insert().
+ */
+function clone_node_presave($node) {
+  if (isset($node->clone_from_original_nid) && variable_get('clone_files', FALSE)) {
+    module_load_include('inc', 'clone', 'clone.pages');
+    _clone_files($node);
+  }
+}
+
 /**
   * Implements hook_views_api.
   */
diff --git a/clone.pages.inc b/clone.pages.inc
index f90ecf1..5dac2fc 100644
--- a/clone.pages.inc
+++ b/clone.pages.inc
@@ -39,6 +39,15 @@ function clone_settings($form, &$form_state) {
     '#default_value' => (int) variable_get('clone_menu_links', 0),
     '#description' => t('Should any menu link for a node also be cloned?'),
   );
+  $form['basic']['clone_files'] = array(
+    '#type' => 'radios',
+    '#title' => t('Clone files'),
+    '#options' => array(0 => t('No'), 1 => t('Yes')),
+    '#default_value' => (int) variable_get('clone_files', 0),
+    '#description' => t('Should files on fields of types %supported on a node also be cloned?', array(
+      '%supported' => 'file, image',
+    )),
+  );
   $form['basic']['clone_use_node_type_name'] = array(
     '#type' => 'checkbox',
     '#title' => t('Use node type name in clone link'),
@@ -256,3 +265,82 @@ function _clone_node_prepare($original_node, $prefix_title = FALSE, $account = N
   return $node;
 }
 
+/**
+ * Clones all files existing on the node.
+ *
+ * @param object $node
+ *   The entity for which to clone the files.
+ */
+function _clone_files($node) {
+  // Duplicate files from file fields.
+  $field_instances = field_info_instances('node', $node->type);
+  foreach ($field_instances as $field_name => $instance) {
+    $field_info = field_info_field($field_name);
+    switch ($field_info['type']) {
+      case 'file':
+      case 'image':
+        $node->{$field_name} = _clone_files_for_field($node, $field_name);
+        break;
+    }
+  }
+}
+
+/**
+ * Clones files existing on the entity for a single field.
+ *
+ * @param object $entity
+ *   The entity for which to clone the files.
+ * @param string $field_name
+ *   The name of the field to copy files for.
+ *
+ * @return array
+ *   The new data for the field.
+ */
+function _clone_files_for_field($entity, $field_name) {
+  if (empty($entity->{$field_name})) {
+    return [];
+  }
+
+  $return = [];
+  foreach ($entity->{$field_name} as $langcode => $field_items) {
+    foreach ($field_items as $index => $field_item) {
+      if (empty($field_item['fid'])) {
+        // No file ID known. Continue to next field item.
+        continue;
+      }
+
+      $file = file_load($field_item['fid']);
+      if ($file) {
+        $cloned_file = _clone_file($file);
+        $return[$langcode][$index] = [
+          'fid' => $cloned_file->fid,
+        ] + $field_item;
+      }
+    }
+  }
+
+  return $return;
+}
+
+/**
+ * Clones a single file entity.
+ *
+ * @param \stdClass $file
+ *   The file entity to clone.
+ *
+ * @return \stdClass
+ *   The copied file entity.
+ */
+function _clone_file(\stdClass $file) {
+  // Clone the file object.
+  $clone = clone $file;
+  $clone->fid = NULL;
+  $clone->uuid = NULL;
+  // Add an extra property as a flag.
+  $clone->clone_from_original_fid = $file->fid;
+
+  // And copy the file itself.
+  $clone = file_copy($clone, $clone->uri);
+
+  return $clone;
+}
