diff --git a/README.txt b/README.txt
index 8c1443a..fc0281f 100644
--- a/README.txt
+++ b/README.txt
@@ -130,6 +130,19 @@ Hidden variables
   The maximum number of bytes that can be handled as an HTTP GET query when
   HTTP method is AUTO. Typically Solr can handle up to 65355 bytes, but Tomcat
   and Jetty will error at slightly less than 4096 bytes.
+- search_api_solr_cron_action (default: "spellcheck")
+  The Search API Solr Search module can automatically execute some upkeep
+  operations daily during cron runs. This variable determines what particular
+  operation is carried out.
+  - spellcheck: The "default" spellcheck dictionary used by Solr will be rebuilt
+  so that spellchecking reflects the latest index state.
+  - optimize: An "optimize" operation [8] is executed on the Solr server. As a
+  result of this, all spellcheck dictionaries (that have "buildOnOptimize" set
+  to "true") will be rebuilt, too.
+  - none: No action is executed.
+  If an unknown setting is encountered, it is interpreted as "none".
+
+[8] http://wiki.apache.org/solr/UpdateXmlMessages#A.22commit.22_and_.22optimize.22
 
 Customizing your Solr server
 ----------------------------
@@ -138,11 +151,11 @@ The schema.xml and solrconfig.xml files contain extensive comments on how to
 add additional features or modify behaviour, e.g., for adding a language-
 specific stemmer or a stopword list.
 If you are interested in further customizing your Solr server to your needs,
-see the Solr wiki at [8] for documentation. When editing the schema.xml and
+see the Solr wiki at [9] for documentation. When editing the schema.xml and
 solrconfig.xml files, please only edit the copies in the Solr configuration
 directory, not directly the ones provided with this module.
 
-[8] http://wiki.apache.org/solr/
+[9] http://wiki.apache.org/solr/
 
 You'll have to restart your Solr server after making such changes, for them to
 take effect.
diff --git a/search_api_solr.install b/search_api_solr.install
index d67bb4d..44b1191 100644
--- a/search_api_solr.install
+++ b/search_api_solr.install
@@ -63,6 +63,7 @@ function search_api_solr_uninstall() {
   variable_del('search_api_solr_autocomplete_max_occurrences');
   variable_del('search_api_solr_index_prefix');
   variable_del('search_api_solr_http_get_max_length');
+  variable_del('search_api_solr_cron_action');
 }
 
 /**
diff --git a/search_api_solr.module b/search_api_solr.module
index f4f319f..8c56017 100644
--- a/search_api_solr.module
+++ b/search_api_solr.module
@@ -82,17 +82,46 @@ function search_api_solr_help($path, array $arg = array()) {
  * day.
  */
 function search_api_solr_cron() {
-  if (REQUEST_TIME - variable_get('search_api_solr_last_optimize', 0) > 86400) {
+  $action = variable_get('search_api_solr_cron_action', 'spellcheck');
+  // We treat all unknown action settings as "none". However, we turn a blind
+  // eye for Britons and other people who can spell.
+  if (!in_array($action, array('spellcheck', 'optimize', 'optimise'))) {
+    return;
+  }
+  // 86400 seconds is one day. We use slightly less here to allow for some
+  // variation in the request time of the cron run, so that the time of day will
+  // (more or less) stay the same.
+  if (REQUEST_TIME - variable_get('search_api_solr_last_optimize', 0) > 86340) {
     variable_set('search_api_solr_last_optimize', REQUEST_TIME);
     $conditions = array('class' => 'search_api_solr_service', 'enabled' => TRUE);
+    $count = 0;
     foreach (search_api_server_load_multiple(FALSE, $conditions) as $server) {
       try {
-        $server->getSolrConnection()->optimize(FALSE);
+        $solr = $server->getSolrConnection();
+        if ($action != 'spellcheck') {
+          $solr->optimize(FALSE);
+        }
+        else {
+          $params['rows'] = 0;
+          $params['spellcheck'] = 'true';
+          $params['spellcheck.build'] = 'true';
+          $solr->search(NULL, $params);
+        }
+        ++$count;
       }
       catch(Exception $e) {
         watchdog_exception('search_api_solr', $e, '%type while optimizing Solr server @server: !message in %function (line %line of %file).', array('@server' => $server->name));
       }
     }
+    if ($count) {
+      $vars['@count'] = $count;
+      if ($action != 'spellcheck') {
+        watchdog('search_api_solr', 'Optimized @count Solr server(s).', $vars, WATCHDOG_INFO);
+      }
+      else {
+        watchdog('search_api_solr', 'Rebuilt spellcheck dictionary on @count Solr server(s).', $vars, WATCHDOG_INFO);
+      }
+    }
   }
 }
 
