diff --git a/mappers/file.inc b/mappers/file.inc
index aa967b9..3337519 100644
--- a/mappers/file.inc
+++ b/mappers/file.inc
@@ -16,11 +16,15 @@ function file_feeds_processor_targets_alter(&$targets, $entity_type, $bundle_nam
     $info = field_info_field($name);
 
     if (in_array($info['type'], array('file', 'image'))) {
+      $allow_empty = isset($targets[$name]['allow_empty']) ? $targets[$name]['allow_empty'] : 0;
       $targets[$name . ':uri'] = array(
         'name' => t('@label: URI', array('@label' => $instance['label'])),
         'callback' => 'file_feeds_set_target',
         'description' => t('The URI of the @label field.', array('@label' => $instance['label'])),
         'real_target' => $name,
+        'allow_empty' => $allow_empty,
+        'form_callback' => 'feeds_ui_mapping_settings_allow_empty_form',
+        'summary_callback' => 'feeds_ui_mapping_settings_allow_empty_summary',
       );
 
       if ($info['type'] == 'image') {
@@ -48,8 +52,17 @@ function file_feeds_processor_targets_alter(&$targets, $entity_type, $bundle_nam
  * user has decided to map to and $value contains the value of the feed item
  * element the user has picked as a source.
  */
-function file_feeds_set_target($source, $entity, $target, $value) {
-  if (empty($value)) {
+function file_feeds_set_target($source, $entity, $target, $value, $mapping) {  
+  if (empty($value) && !empty($mapping['allow_empty'])) {
+    //See if we already have a value for this, so we can
+    //allow empty, but keep the original value.
+    $node        = node_load($entity->nid, $entity->vid);
+    $field       = field_get_items('node', $node, preg_replace('/:uri/', '', $target));
+    $field_value = $field[0];
+    if (!empty($field_value)) {
+      $value = $field_value['uri'];
+    }
+  } elseif (empty($value) && empty($mapping['allow_empty'])) {
     return;
   }
 
