diff --git a/Solr_Base_Query.php b/Solr_Base_Query.php
index b2f472f..65cfcb7 100644
--- a/Solr_Base_Query.php
+++ b/Solr_Base_Query.php
@@ -359,6 +359,7 @@ class SolrBaseQuery extends SolrFilterSubQuery implements DrupalSolrQueryInterfa
     'q' => TRUE, // http://wiki.apache.org/solr/SearchHandler#q
     'q.op' => TRUE, // http://wiki.apache.org/solr/SearchHandler#q.op
     'q.alt' => TRUE, // http://wiki.apache.org/solr/SearchHandler#q
+    'user.q' => TRUE, // A param for holding the raw user query.
     'df' => TRUE,
     'qt' => TRUE,
     'defType' => TRUE,
diff --git a/apachesolr_search.module b/apachesolr_search.module
index c4686d5..2baddc8 100644
--- a/apachesolr_search.module
+++ b/apachesolr_search.module
@@ -892,7 +892,10 @@ function apachesolr_search_search_results($keys = NULL, $conditions = NULL, $sea
       }
       // Full text behavior. Triggers with a text search or a facet
       elseif (($keys || isset($conditions['f'])) || ($empty_search_behavior == 'results')) {
-        $params['q'] = $keys;
+        // Embed user-entered keys as a local param value to avoid parsing of
+        // user-entered local params. Need to backslash escape single quotes.
+        $params['q'] = '{!v=$user.q}';
+        $params['user.q'] = $keys;
         // Hardcoded apachesolr name since we rely on this for the facets
         $context['page_id'] = $search_page['page_id'];
         $context['search_type'] = 'apachesolr_search_results';
@@ -1154,7 +1157,11 @@ function apachesolr_search_add_spellcheck_params(DrupalSolrQueryInterface $query
   $params = array();
 
   // Add new parameter to the search request
-  $params['spellcheck.q'] = $query->getParam('q');
+  $keys = $query->getParam('user.q');
+  if (!isset($keys)) {
+    $keys = $query->getParam('q');
+  }
+  $params['spellcheck.q'] = $keys;
   $params['spellcheck'] = 'true';
   $query->addParams($params);
 }
