diff --git a/search_api_saved_searches.admin.inc b/search_api_saved_searches.admin.inc
index fbb415f..4dadef7 100644
--- a/search_api_saved_searches.admin.inc
+++ b/search_api_saved_searches.admin.inc
@@ -325,7 +325,7 @@ You can configure your saved searches at the following address:
         t('Available variables are: @vars.',
         array('@vars' => '[site:url], [search-api-saved-search:name], [search-api-saved-search:created], ' .
             '[search-api-saved-search:items], [search-api-saved-search:results-capped], [search-api-saved-search:view-url], ' .
-            '[search-api-saved-search:delete-url]')) . ' ' .
+            '[search-api-saved-search:edit-url], [search-api-saved-search:delete-url]')) . ' ' .
         t('The replacement for @var can be configured below.', array('@var' => '[search-api-saved-search:items]')),
     '#default_value' => $options['mail']['notify']['results'],
     '#rows' => 5,
@@ -337,7 +337,7 @@ You can configure your saved searches at the following address:
     '#description' => t('Enter the text that will replace the [search-api-saved-search:items] variable above. This text will be inserted on a new line once for every new result.') . ' ' .
         t('Available variables are: @vars.',
         array('@vars' => '[site:url], [search-api-saved-search-result:label], [search-api-saved-search-result:url], ' .
-            '[search-api-saved-search:view-url], [search-api-saved-search:delete-url]')),
+            '[search-api-saved-search:view-url], [search-api-saved-search:edit-url], [search-api-saved-search:delete-url]')),
     '#default_value' => $options['mail']['notify']['result'],
     '#rows' => 2,
     '#required' => TRUE,
@@ -362,7 +362,7 @@ You can configure your saved searches at the following address:
         t('Available variables are: @vars.',
         array('@vars' => '[site:url], [search-api-saved-search:name], [search-api-saved-search:created], ' .
             '[search-api-saved-search:items], [search-api-saved-search:view-url], ' .
-            '[search-api-saved-search:delete-url]')),
+            '[search-api-saved-search:edit-url], [search-api-saved-search:delete-url]')),
     '#default_value' => $options['mail']['notify']['results_capped'],
     '#rows' => 4,
     '#states' => array(
diff --git a/search_api_saved_searches.module b/search_api_saved_searches.module
index 6feebd2..809b00a 100644
--- a/search_api_saved_searches.module
+++ b/search_api_saved_searches.module
@@ -66,6 +66,15 @@ function search_api_saved_searches_menu() {
     'access arguments' => array(NULL, 2, 4),
     'file' => 'search_api_saved_searches.pages.inc',
   );
+  $items['search-api/saved-search/%search_api_saved_search/edit'] = array(
+    'title' => 'Edit saved search',
+    'description' => 'Edit a saved search.',
+    'page callback' => 'drupal_get_form',
+    'page arguments' => array('search_api_saved_searches_search_edit_form', 2),
+    'access callback' => 'search_api_saved_search_edit_access',
+    'access arguments' => array(NULL, 2, 4),
+    'file' => 'search_api_saved_searches.pages.inc',
+  );
   $items['search-api/saved-search/%search_api_saved_search/delete'] = array(
     'title' => 'Activate saved search',
     'description' => 'Activate a new saved search.',
diff --git a/search_api_saved_searches.pages.inc b/search_api_saved_searches.pages.inc
index 18c2f96..8b4801b 100644
--- a/search_api_saved_searches.pages.inc
+++ b/search_api_saved_searches.pages.inc
@@ -38,7 +38,7 @@ function search_api_saved_searches_user_listing($account) {
       $created,
       $last_execute,
       $interval,
-      l(t('delete'), $path . '/delete'),
+      l(t('edit'), $path . '/edit') . ' | ' . l(t('delete'), $path . '/delete'),
     );
   }
 
@@ -133,6 +133,83 @@ function search_api_saved_searches_activate_page(SearchApiSavedSearch $search, $
 }
 
 /**
+ * Form builder for editing a saved search.
+ *
+ * @param SearchApiSavedSearch $search
+ *   The search to edit.
+ *
+ * @see search_api_saved_searches_search_edit_form_submit()
+ * @ingroup forms
+ */
+function search_api_saved_searches_search_edit_form(array $form, array &$form_state, SearchApiSavedSearch $search) {
+  $form_state['search'] = $search;
+  $settings = $search->settings();
+
+  if ($search->uid) {
+    $form_state['destination']['path'] = 'user/' . $search->uid . '/saved-searches';
+  }
+  elseif (!empty($search->options['page'])) {
+    $form_state['destination'] = array($search->options['page']['path'], $search->options['page']);
+  }
+
+  $form['name'] = array(
+    '#type' => 'textfield',
+    '#title' => t('Name'),
+    '#description' => t('The name that will be displayed for this saved search.'),
+    '#maxlength' => 50,
+    '#required' => TRUE,
+    '#default_value' => $search->name,
+  );
+  if ($settings->options['user_select_interval'] && count($settings->options['interval_options']) > 1) {
+    $form['notify_interval'] = array(
+      '#type' => 'select',
+      '#title' => t('Notification interval'),
+      '#options' => $settings->getTranslatedOption('interval_options'),
+      '#required' => TRUE,
+      '#default_value' => $search->notify_interval,
+    );
+  }
+  $form['actions']['#type'] = 'actions';
+  $form['actions']['submit'] = array(
+    '#type' => 'submit',
+    '#value' => t('Save changes'),
+  );
+  if (!empty($form_state['destination'])) {
+    $form['actions']['cancel'] = array(
+      '#type' => 'link',
+      '#title' => t('Cancel'),
+      '#href' => $form_state['destination']['path'],
+      '#options' => $form_state['destination'],
+    );
+  }
+
+  return $form;
+}
+
+/**
+ * Submission handler for search_api_saved_searches_search_edit_form().
+ *
+ * @see search_api_saved_searches_search_edit_form()
+ */
+function search_api_saved_searches_search_edit_form_submit(array $form, array &$form_state) {
+  $values = $form_state['values'];
+  $search = $form_state['search'];
+  $search->name = $values['name'];
+  if (isset($values['notify_interval'])) {
+    $search->notify_interval = $values['notify_interval'];
+  }
+  if ($search->save()) {
+    drupal_set_message(t('Successfully saved your changes.'));
+    if (!empty($form_state['destination'])) {
+      $form_state['redirect'] = $form_state['destination'];
+    }
+  }
+  else {
+    drupal_set_message(t('An error occurred while trying to save the changes.'), 'error');
+  }
+}
+
+/**
  * Form builder for confirming the deletion of a saved search.
  *
  * @param SearchApiSavedSearch $search
diff --git a/search_api_saved_searches.search_entity.inc b/search_api_saved_searches.search_entity.inc
index a679472..54fb4f8 100644
--- a/search_api_saved_searches.search_entity.inc
+++ b/search_api_saved_searches.search_entity.inc
@@ -147,10 +147,10 @@ class SearchApiSavedSearch extends Entity {
 
   /**
    * @return SearchApiIndex
-   *   The index this saved search uses.
+   *   The settings this saved search uses.
    *
    * @throws SearchApiException
-   *   If the index doesn't exist.
+   *   If the settings don't exist.
    */
   public function settings() {
     if (!isset($this->settings)) {
diff --git a/search_api_saved_searches.tokens.inc b/search_api_saved_searches.tokens.inc
index 3c2b695..1501333 100644
--- a/search_api_saved_searches.tokens.inc
+++ b/search_api_saved_searches.tokens.inc
@@ -19,6 +19,7 @@
  * - [search-api-saved-search:results-capped]
  * - [search-api-saved-search:view-url]
  * - [search-api-saved-search:activate-url]
+ * - [search-api-saved-search:edit-url]
  * - [search-api-saved-search:delete-url]
  * - [search-api-saved-search-result:label]
  * - [search-api-saved-search-result:url]
@@ -101,6 +102,11 @@ function search_api_saved_searches_token_info() {
     'description' => t('The URL for activating the saved search, if necessary.'),
     'type' => 'url',
   );
+  $search['edit-url'] = array(
+    'name' => t('Edit URL'),
+    'description' => t("The URL for editing the saved search's notification interval."),
+    'type' => 'url',
+  );
   $search['delete-url'] = array(
     'name' => t('Delete URL'),
     'description' => t('The URL for deleting the saved search.'),
@@ -242,6 +248,10 @@ function search_api_saved_searches_tokens($type, array $tokens, array $data = ar
               $key = isset($search->options['key']) ? '/' . $search->options['key'] : '';
               $replacements[$original] = url('search-api/saved-search/' . $search->id . '/activate' . $key, $url_options);
               break;
+            case 'edit-url':
+              $key = isset($search->options['key']) ? '/' . $search->options['key'] : '';
+              $replacements[$original] = url('search-api/saved-search/' . $search->id . '/edit' . $key, $url_options);
+              break;
             case 'delete-url':
               $key = isset($search->options['key']) ? '/' . $search->options['key'] : '';
               $replacements[$original] = url('search-api/saved-search/' . $search->id . '/delete' . $key, $url_options);
@@ -262,6 +272,12 @@ function search_api_saved_searches_tokens($type, array $tokens, array $data = ar
             'path' => 'search-api/saved-search/' . $search->id . '/activate' . $key,
           ), $options);
         }
+        if ($edit_url_tokens = token_find_with_prefix($tokens, 'edit-url')) {
+          $key = isset($search->options['key']) ? '/' . $search->options['key'] : '';
+          $replacements += token_generate('url', $edit_url_tokens, array(
+            'path' => 'search-api/saved-search/' . $search->id . '/edit' . $key,
+          ), $options);
+        }
         if ($delete_url_tokens = token_find_with_prefix($tokens, 'delete-url')) {
           $key = isset($search->options['key']) ? '/' . $search->options['key'] : '';
           $replacements += token_generate('url', $delete_url_tokens, array(
