diff --git a/apachesolr.api.php b/apachesolr.api.php
index f804257..349549f 100644
--- a/apachesolr.api.php
+++ b/apachesolr.api.php
@@ -122,3 +122,16 @@ function hook_apachesolr_search_result_alter($doc) {
  */
 function hook_apachesolr_sort_links_alter(&$sort_links) {
 }
+
+/**
+ * Respond to server deletion.
+ *
+ * This hook is invoked from apachesolr_server_delete() after the server is removed
+ * from the database.
+ *
+ * @param $server
+ *   The server object that is being deleted.
+ */
+function hook_apachesolr_server_delete($server) {
+}
+
diff --git a/apachesolr.module b/apachesolr.module
index 9b9426d..7e733ac 100644
--- a/apachesolr.module
+++ b/apachesolr.module
@@ -1213,12 +1213,17 @@ function apachesolr_server_load($server_id) {
 }
 
 function apachesolr_server_delete($server_id) {
+  $server = apachesolr_server_load($server_id);
+
   $result = db_delete('apachesolr_server')
     ->condition('server_id', $server_id)
     ->execute();
   $result = db_delete('apachesolr_server')
     ->condition('server_id', $server_id)
     ->execute();
+
+  module_invoke_all('apachesolr_server_delete', $server);
+
   cache_clear_all('apachesolr:servers', 'cache_apachesolr');
   drupal_static_reset('apachesolr_load_all_servers');
   drupal_static_reset('apachesolr_get_solr');
diff --git a/apachesolr_search.admin.inc b/apachesolr_search.admin.inc
index 0ca8cf1..e8d0b66 100644
--- a/apachesolr_search.admin.inc
+++ b/apachesolr_search.admin.inc
@@ -140,7 +140,7 @@ function apachesolr_search_page_settings_form($form, &$form_state, $search_page
   $id = variable_get('apachesolr_default_server', 'solr');
   $servers = apachesolr_load_all_servers();
 
-  $options = array();
+  $options = array('' => t('<disabled>'));
   foreach ($servers as $id => $server) {
     $options[$id] = $server['name'];
   }
@@ -150,8 +150,7 @@ function apachesolr_search_page_settings_form($form, &$form_state, $search_page
     '#type' => 'select',
     '#options' => $options,
     '#default_value' => !empty($search_page->server_id) ? $search_page->server_id : NULL,
-    '#description' => t('The server that is searched by this search page.'),
-    '#required' => TRUE,
+    '#description' => t('The server that is searched by this search page. If no server is selected, this page will be disabled.'),
     '#weight' => -30,
   );
 
diff --git a/apachesolr_search.module b/apachesolr_search.module
index 6a48f31..c149798 100644
--- a/apachesolr_search.module
+++ b/apachesolr_search.module
@@ -87,6 +87,7 @@ function apachesolr_search_menu() {
     // @todo Honor "enabled" settings?
     $result = db_select('apachesolr_search_page', 's')
       ->fields('s', array('name', 'search_path', 'page_title'))
+      ->condition('server_id', '', '!=')
       ->execute();
   }
   catch (Exception $e) {
@@ -759,6 +760,21 @@ function apachesolr_search_vocabulary_content_types($vid) {
 }
 
 /**
+ * Implements apachesolr_server_delete().
+ */
+function apachesolr_search_apachesolr_server_delete($server) {
+  db_update('apachesolr_search_page')
+    ->fields(array(
+      'server_id' => '',
+    ))
+    ->condition('server_id', $server['server_id'])
+    ->execute();
+
+  menu_rebuild();
+}
+
+
+/**
  * Implements hook_block_info().
  */
 function apachesolr_search_block_info() {
