diff --git a/apachesolr_search.admin.inc b/apachesolr_search.admin.inc
index aacefd7..101b49c 100644
--- a/apachesolr_search.admin.inc
+++ b/apachesolr_search.admin.inc
@@ -345,6 +345,35 @@ function apachesolr_search_page_settings_form($form, &$form_state, $search_page
     '#default_value' => $default_value,
   );
 
+  // Enable/disable spellcheck on pages
+  $default_value = isset($search_page->settings['apachesolr_search_spellcheck_correctly_spelled']) ? $search_page->settings['apachesolr_search_spellcheck_correctly_spelled'] : FALSE;
+  $form['advanced']['apachesolr_search_spellcheck_correctly_spelled'] = array(
+    '#type' => 'checkbox',
+    '#title' => t('Display only for incorrectly spelled words'),
+    '#description' => t('Use this to show only when no items in the index match the word. Can be good to reduce false positives.'),
+    '#default_value' => $default_value,
+    '#states' => array(
+      'visible' => array(
+       'input[name="apachesolr_search_spellcheck"]' => array('checked' => TRUE),
+      ),
+    ),
+  );
+
+  // Minimum orig freq required to trigger "Did you mean … ?"
+  $default_value = isset($search_page->settings['apachesolr_search_spellcheck_min_orig_freq']) ? $search_page->settings['apachesolr_search_spellcheck_min_orig_freq'] : 0;
+  $form['advanced']['apachesolr_search_spellcheck_min_orig_freq'] = array(
+    '#type' => 'textfield',
+    '#size' => 3,
+    '#title' => t('Don\'t display spell check field when found in at least this many documents'),
+    '#description' => t('Uncommon words in you index might still be valid, entering 10 in this field means if a word is in 11 documents in the index, then no spell check will apply. Enter 0 to retain original behaviour.'),
+    '#default_value' => $default_value,
+    '#states' => array(
+      'visible' => array(
+       'input[name="apachesolr_search_spellcheck"]' => array('checked' => TRUE),
+      ),
+    ),
+  );
+
   // Enable/disable search form on search page (replaced by a block perhaps)
   $default_value = isset($search_page->settings['apachesolr_search_search_box']) ? $search_page->settings['apachesolr_search_search_box'] : TRUE;
   $form['advanced']['apachesolr_search_search_box'] = array(
@@ -431,6 +460,12 @@ function apachesolr_search_page_settings_form_validate($form, &$form_state) {
   elseif (count(explode('%', $form_state['values']['search_path'])) > 2) {
     form_set_error('search_path', t('Only one % placeholder is allowed.'));
   }
+  if (!is_numeric($form_state['values']['apachesolr_search_spellcheck_min_orig_freq'])) {
+    form_set_error('apachesolr_search_spellcheck_min_orig_freq', t('Original frequency must be numeric'));
+  }
+  else if ($form_state['values']['apachesolr_search_spellcheck_min_orig_freq'] < 0) {
+    form_set_error('apachesolr_search_spellcheck_min_orig_freq', t('Original frequency must be positive'));
+  }
 }
 
 /**
@@ -453,6 +488,8 @@ function apachesolr_search_page_settings_form_submit($form, &$form_state) {
   $settings['apachesolr_search_per_page'] = $form_state['values']['apachesolr_search_per_page'];
   $settings['apachesolr_search_browse'] = $form_state['values']['apachesolr_search_browse'];
   $settings['apachesolr_search_spellcheck'] = $form_state['values']['apachesolr_search_spellcheck'];
+  $settings['apachesolr_search_spellcheck_correctly_spelled'] = $form_state['values']['apachesolr_search_spellcheck_correctly_spelled'];
+  $settings['apachesolr_search_spellcheck_min_orig_freq'] = $form_state['values']['apachesolr_search_spellcheck_min_orig_freq'];
 
   if (isset($form_state['values']['search_page']->settings)) {
     $settings = array_merge($form_state['values']['search_page']->settings, $settings);
diff --git a/apachesolr_search.module b/apachesolr_search.module
index cee7f3b..19839a8 100644
--- a/apachesolr_search.module
+++ b/apachesolr_search.module
@@ -512,7 +512,7 @@ function apachesolr_search_search_page($results) {
  */
 function apachesolr_search_search_page_custom($results, $search_page, $build = array()) {
   // Retrieve suggestion
-  $suggestions = apachesolr_search_get_search_suggestions($search_page->env_id);
+  $suggestions = apachesolr_search_get_search_suggestions($search_page);
   if ($search_page && !empty($suggestions)) {
     $build['suggestions'] = array(
       '#theme' => 'apachesolr_search_suggestions',
@@ -842,6 +842,8 @@ function apachesolr_search_add_spellcheck_params(DrupalSolrQueryInterface $query
   // Add new parameter to the search request
   $params['spellcheck.q'] = $query->getParam('q');
   $params['spellcheck'] = 'true';
+  // this is added to return freq in the response
+  $params['spellcheck.extendedResults'] = 'true';
   $query->addParams($params);
 }
 
@@ -1048,14 +1050,13 @@ function apachesolr_search_process_response($response, DrupalSolrQueryInterface
  * Retrieve all of the suggestions that were given after a certain search
  * @return array()
  */
-function apachesolr_search_get_search_suggestions($env_id = NULL) {
+function apachesolr_search_get_search_suggestions($search_page = NULL) {
   $suggestions_output = array();
-
-  if (empty($env_id)) {
-    $env_id = apachesolr_default_environment();
+  if (empty($search_page)) {
+    $search_page = apachesolr_search_page_load('core_search');
   }
-  if (apachesolr_has_searched($env_id)) {
-    $query = apachesolr_current_query($env_id);
+  if (apachesolr_has_searched($search_page->env_id)) {
+    $query = apachesolr_current_query($search_page->env_id);
     $keyword = $query->getParam('q');
     $searcher = $query->getSearcher();
     $response = apachesolr_static_response_cache($searcher);
@@ -1064,15 +1065,30 @@ function apachesolr_search_get_search_suggestions($env_id = NULL) {
       $suggestions = get_object_vars($response->spellcheck->suggestions);
       if ($suggestions) {
         $replacements = array();
+        // Pull out spell check option
+        $min_freq = 0;
+        if (!empty($search_page->settings['apachesolr_search_spellcheck_min_orig_freq'])) {
+          $min_freq = $search_page->settings['apachesolr_search_spellcheck_min_orig_freq'];
+        }
         // Get the original query and retrieve all words with suggestions.
+        if ($suggestions['correctlySpelled'] == TRUE && !empty($search_page->settings['apachesolr_search_spellcheck_correctly_spelled'])) {
+          // return nothing
+          return $suggestions_output;
+        }
+        // Loop over all the possible words
+        unset($suggestions['correctlySpelled']);
         foreach ($suggestions as $word => $value) {
-          $replacements[$word] = $value->suggestion[0];
+          if ($min_freq >= $value->suggestion[0]->origFreq) {
+            $replacements[$word] = $value->suggestion[0]->word;
+          }
         }
-        // Replace the keyword with the suggested keyword.
-        $suggested_keyword = strtr($keyword, $replacements);
-        // Show only if suggestion is different than current query.
-        if ($keyword != $suggested_keyword) {
-         $suggestions_output[] = $suggested_keyword;
+        if (count($replacements) > 0) {
+          // Replace the keyword with the suggested keyword.
+          $suggested_keyword = strtr($keyword, $replacements);
+          // Show only if suggestion is different than current query.
+          if ($keyword != $suggested_keyword) {
+           $suggestions_output[] = $suggested_keyword;
+          }
         }
       }
     }
