diff --git a/includes/media.pages.inc b/includes/media.pages.inc
index 51c56b9..070e796 100644
--- a/includes/media.pages.inc
+++ b/includes/media.pages.inc
@@ -66,15 +66,15 @@ function media_page_multiedit($files) {
     $i++;
     $forms[] = array("media_edit_$i", $file);
   }
-  
+
   $form = call_user_func_array('multiform_get_form', $forms);
   $form['#attributes']['class'][] = 'media-multiedit-form';
-  
+
   unset($form['buttons']['Delete']);
   // Would be nice to add this to show a message, but not working.
   // Can debug.
   //$form['buttons']['Save']['#submit'][] = 'media_page_multiedit_submit';
-  
+
   drupal_set_title(t('Editing multiple media files'));
   return $form;
 }
@@ -179,7 +179,7 @@ function media_add_upload($form, &$form_state, $types = NULL) {
   if ($types) {
     $validators['media_file_validate_types'] = array($types);
   }
-  
+
   // A blank set of allowed file extensions means no need to validate.
   if (!$validators['file_validate_extensions'][0]) {
     unset($validators['file_validate_extensions']);
@@ -194,7 +194,7 @@ function media_add_upload($form, &$form_state, $types = NULL) {
   }
 
   $form['#validators'] = $validators;
-  
+
   $form['upload'] = array(
     '#type' => 'file',
     '#title' => t('Upload a new file'),
@@ -216,7 +216,7 @@ function media_add_upload($form, &$form_state, $types = NULL) {
 function media_add_upload_validate($form, &$form_state) {
   // Save the file as a temporary file.
   $file = file_save_upload('upload', $form['#validators']);
-  
+
   if ($file === NULL) {
     form_set_error('upload', t("No file appears to have been selected."));
   }
@@ -262,7 +262,7 @@ function media_add_upload_multiple($form, &$form_state, $types) {
   // The validators will be set from plupload anyway.  This isn't pretty, but don't
   // it to show up twice.
   unset($form['upload']['#description']);
-  
+
   $form['upload']['#type'] = 'plupload';
   $form['submit']['#value'] = t('Start upload');
   return $form;
@@ -279,13 +279,13 @@ function media_add_upload_multiple_submit($form, &$form_state) {
       // Rename it to its original name, and put it in its final home.
       // Note - not using file_move here because if we call file_get_mime
       // (in file_uri_to_object) while it has a .tmp extension, it horks.
-      
+
       $destination = file_unmanaged_move($source, $destination, FILE_EXISTS_RENAME);
-      
+
       $file = file_uri_to_object($destination);
       file_save($file);
       _media_save_file_permenently($file);
-      
+
       $saved_files[] = $file;
     }
     else {
@@ -315,11 +315,18 @@ function media_edit($form, $form_state, $file) {
   // Not sure about this class name, seems to indicate the style.
   $form['#attributes']['class'][] = 'media-image-left';
   $form['#attributes']['class'][] = 'media-edit-form';
-  
+
   $form['preview'] = file_view_file($file, 'media_preview');
   $form['preview']['#weight'] = -10;
   $form['preview']['#suffix'] = '<div class="no-overflow">';
 
+  // Add a link to the original media.
+  $form['preview_link'] = array(
+    '#theme' => 'media_original_link',
+    '#file' => $file,
+    '#weight' => -9,
+  );
+
   // Add the buttons.
   $form['actions'] = array('#type' => 'actions');
   $form['actions']['#prefix'] = '</div>';
@@ -329,7 +336,7 @@ function media_edit($form, $form_state, $file) {
     '#weight' => 15,
     '#submit' => array('media_edit_delete_submit'),
   );
-  
+
   $form['actions']['submit'] = array(
     '#type' => 'submit',
     '#value' => t('Save'),
diff --git a/includes/media.theme.inc b/includes/media.theme.inc
index 84855ce..ed5602b 100644
--- a/includes/media.theme.inc
+++ b/includes/media.theme.inc
@@ -323,3 +323,18 @@ function theme_media_formatter_large_icon($variables) {
   $variables['path'] = $icon;
   return theme('image', $variables);
 }
+
+/**
+ * A link to the original URL for the media.
+ * @param $variables
+ *   An associative array containing:
+ *   - file: A file object to which the link will be created.
+ *   - title: An optional string to display for the title, rather than filename.
+ */
+function theme_media_original_link($variables) {
+  // Get the external URL for the media.
+  $instance = file_stream_wrapper_get_instance_by_uri($variables['file']->uri);
+  $title = isset($variables['title']) ? $variables['title'] : $variables['file']->filename;
+
+  return '<span class="media-original-link">' . l($title, $instance->getExternalUrl()) . '</div>';
+}
diff --git a/media.install b/media.install
index 846abb5..8bf0d7f 100644
--- a/media.install
+++ b/media.install
@@ -604,3 +604,10 @@ function media_update_7019() {
     }
   }
 }
+
+/**
+ * Add a theme function for a link to the original media.
+ */
+function media_youtube_update_7020() {
+  return array();
+}
diff --git a/media.module b/media.module
index b6caf7e..1141e6f 100644
--- a/media.module
+++ b/media.module
@@ -350,6 +350,12 @@ function media_theme() {
       'variables' => array('file' => NULL, 'attributes' => array()),
       'file' => 'includes/media.theme.inc',
     ),
+
+    // A link to the original URL for the media.
+    'media_original_link' => array(
+      'variables' => array('file' => NULL, 'title' => NULL),
+      'file' => 'includes/media.theme.inc',
+    ),
   );
 }
 
