diff --git a/link.module b/link.module
index b5a42ab..bdfa689 100644
--- a/link.module
+++ b/link.module
@@ -431,6 +431,9 @@ function _link_sanitize(&$item, $delta, &$field, $instance, &$entity) {
     return;
   }
 
+  // Work on a copy of the URL so the original user data is not modified.
+  $url = $item['url'];
+
   // Replace URL tokens.
   $entity_type = $instance['entity_type'];
   $entity_info = entity_get_info($entity_type);
@@ -448,16 +451,16 @@ function _link_sanitize(&$item, $delta, &$field, $instance, &$entity) {
     else {
       $entity_loaded = $entity;
     }
-    $item['url'] = token_replace($item['url'], array($entity_token_type => $entity_loaded));
+    $url = token_replace($url, array($entity_token_type => $entity_loaded));
   }
 
-  $type = link_validate_url($item['url']);
+  $type = link_validate_url($url);
   // If we can't determine the type of url, and we've been told not to validate it,
   // then we assume it's a LINK_EXTERNAL type for later processing. #357604
   if ($type == FALSE && $instance['settings']['validate_url'] === 0) {
     $type = LINK_EXTERNAL;
   }
-  $url = link_cleanup_url($item['url']);
+  $url = link_cleanup_url($url);
   $url_parts = _link_parse_url($url);
 
   // Get rid of '<front>' for proper paths.
@@ -465,15 +468,6 @@ function _link_sanitize(&$item, $delta, &$field, $instance, &$entity) {
     $url_parts['url'] = '';
   }
 
-  $item['url'] = url(check_plain($url_parts['url']),
-    array(
-      'query' => isset($url_parts['query']) ? $url_parts['query'] : NULL,
-      'fragment' => isset($url_parts['fragment']) ? $url_parts['fragment'] : NULL,
-      'absolute' => TRUE,
-      'html' => TRUE,
-    )
-  );
-
   // Create a shortened URL for display.
   if ($type == LINK_EMAIL) {
     $display_url = str_replace('mailto:', '', $url);
