diff --git a/modules/julio_slideshow/julio_slideshow.module b/modules/julio_slideshow/julio_slideshow.module
index cc4cb24..b0adfdf 100644
--- a/modules/julio_slideshow/julio_slideshow.module
+++ b/modules/julio_slideshow/julio_slideshow.module
@@ -7,6 +7,76 @@
 include_once('julio_slideshow.features.inc');
 
 /**
+* Implementation of hook_menu()
+*
+* We declare the page where drupal will look for its AJAX autocomplete lookup
+*/
+
+function julio_slideshow_menu() {
+  $items['julio_slideshow/autocomplete'] = array(
+    'title' => t('Julio Slideshow Autocomplete'),
+    'page callback' => 'julio_slideshow_autocomplete',
+    'type' => MENU_CALLBACK,
+    'access callback' => TRUE,
+    );
+
+  return $items;
+}
+
+/**
+ * Implementation of hook_form_alter().
+ *
+ * Add after build callback to the home page slideshow form
+ */
+
+function julio_slideshow_form_alter(&$form, &$form_state, $form_id) {
+  $is_screenshow_node = arg(0) == 'node' && arg(1) == variable_get('julio_homepage_slideshow_node_nid', 0) ? TRUE : FALSE;
+  $is_screenshow_media_edit_form = $is_screenshow_node && strpos($form_id, 'media_edit_') === 0 ? TRUE : FALSE;
+  if ($is_screenshow_media_edit_form && isset($form['media_nivo_slider_image_link'])) {
+    $form['media_nivo_slider_image_link']['und'][0]['value']['#autocomplete_path'] = 'julio_slideshow/autocomplete';
+    $form['media_nivo_slider_image_link']['und'][0]['value']['#title'] = t('Slide link');
+    $form['media_nivo_slider_image_link']['und'][0]['value']['#description'] = t("To link the slide to content on this site, either enter a few letters of the title and select the appropriate page in the popup, or enter the internal url, e.g. 'content/example'. For an external link, enter the full URL, e.g. 'http://www.example.com/page'.");
+  }
+}
+
+/**
+ * Helper function for julio_slideshow nivo slider link field autocompletion
+ */
+
+function julio_slideshow_autocomplete($string = ''){
+  // If the request has a '/' in the search text, then the menu system will
+  // have split it into multiple arguments, recover the intended $string.
+  $args = func_get_args();
+  $string = implode('/', $args);
+  $string = trim($string);
+  $matches = array();
+  if ($string) {
+    // Find internal content like the input $string, by title
+    $result = db_query_range("SELECT nid, title, status FROM {node} WHERE (title) LIKE :string AND status = 1", 0, 10, array(':string' => '%' . $string . '%'));
+    foreach ($result as $record) {
+      $path = drupal_get_path_alias('node/' . $record->nid);
+      $matches[$path] = check_plain($record->title . ' (/' . $path . ')');
+    }
+    // If no internal content is found, check if we have a valid internal path, if
+    // not, check for a valid absolute path, suggesting a prefix of http:// where absent
+    if (empty($matches)) {
+      $valid_path = drupal_valid_path($string);
+      $string_http = preg_match("#https?://#", $string) === 0 ? 'http://' . $string : $string;
+      // Diego Perini's URL validation regexp https://gist.github.com/729294
+      if (!$valid_path && preg_match('_^(?:(?:https?|ftp)://)(?:\S+(?::\S*)?@)?(?:(?!10(?:\.\d{1,3}){3})(?!127(?:\.\d{1,3}){3})(?!169\.254(?:\.\d{1,3}){2})(?!192\.168(?:\.\d{1,3}){2})(?!172\.(?:1[6-9]|2\d|3[0-1])(?:\.\d{1,3}){2})(?:[1-9]\d?|1\d\d|2[01]\d|22[0-3])(?:\.(?:1?\d{1,2}|2[0-4]\d|25[0-5])){2}(?:\.(?:[1-9]\d?|1\d\d|2[0-4]\d|25[0-4]))|(?:(?:[a-z\x{00a1}-\x{ffff}0-9]+-?)*[a-z\x{00a1}-\x{ffff}0-9]+)(?:\.(?:[a-z\x{00a1}-\x{ffff}0-9]+-?)*[a-z\x{00a1}-\x{ffff}0-9]+)*(?:\.(?:[a-z\x{00a1}-\x{ffff}]{2,})))(?::\d{2,5})?(?:/[^\s]*)?$_iuS', $string_http)) {
+        $matches[$string_http] = check_plain($string_http);
+      }
+      // Since valid_url() is more tolerant with domain name formation than above regexp it can be
+      // used as an unintrusive inline helper to point out more obvious user input error and bad paths
+      else if (!valid_url($string_http, TRUE) && !$valid_path) {
+        $matches[$string] = t('Title not found or link appears invalid.');
+      }
+    }
+  }
+  print drupal_json_output($matches);
+}
+
+/**
  * Implementation of hook_block_view_alter()
  */
 function julio_slideshow_block_view_alter(&$data, $block) {
