diff --git service.inc service.inc
index 62bddec..287824b 100644
--- service.inc
+++ service.inc
@@ -369,6 +369,8 @@ class SearchApiSolrService extends SearchApiAbstractService {
 
   public function search(SearchApiQueryInterface $query) {
     $time_method_called = microtime(TRUE);
+    // Reset request handler
+    $this->request_handler = NULL;
     // Get field information
     $index = $query->getIndex();
     $fields = $this->getFieldNames($index);
@@ -422,17 +424,20 @@ class SearchApiSolrService extends SearchApiAbstractService {
     if (!empty($facet_params['facet.field'])) {
       $params += $facet_params;
     }
+    $call_args = array(
+      'query'  => &$keys,
+      'offset' => &$offset,
+      'limit'  => &$limit,
+      'params' => &$params,
+    );
+    if ($this->request_handler) {
+      $this->setRequestHandler($this->request_handler, $call_args);
+    }
 
     try {
       // Send search request
       $time_processing_done = microtime(TRUE);
       $this->connect();
-      $call_args = array(
-        'query'  => &$keys,
-        'offset' => &$offset,
-        'limit'  => &$limit,
-        'params' => &$params,
-      );
       drupal_alter('search_api_solr_query', $call_args, $query);
       $this->preQuery($call_args, $query);
       $response = $this->solr->search($keys, $offset, $limit, $params);
@@ -558,12 +563,17 @@ class SearchApiSolrService extends SearchApiAbstractService {
       return '';
     }
     if ($keys['#conjunction'] == 'OR') {
+      // We need to switch to the "standard" request handler, as "dismax"
+      // doesn't understand AND/OR expressions.
+      if (empty($this->request_handler)) {
+        $this->request_handler = 'standard';
+      }
       $k = '((' . implode(') OR (', $k) . '))';
       return empty($keys['#negation']) ? $k : '-' . $k;
     }
 
     $k = implode(' ', $k);
-    return empty($keys['#negation']) ? $k : '-(' . $k . ')';
+    return empty($keys['#negation']) ? $k : '-' . $k;
   }
 
   /**
@@ -679,6 +689,39 @@ class SearchApiSolrService extends SearchApiAbstractService {
   }
 
   /**
+   * Helper method for setting the request handler, and making necessary
+   * adjustments to the request parameters.
+   *
+   * @param $handler
+   *   Name of the handler to set.
+   * @param array $call_args
+   *   An associative array containing all four arguments to the
+   *   Apache_Solr_Service::search() call ("query", "offset", "limit" and
+   *   "params") as references.
+   *
+   * @return boolean
+   *   TRUE iff this method invocation handled the given handler. This allows
+   *   subclasses to recognize whether the request handler was already set by
+   *   this method.
+   */
+  protected function setRequestHandler($handler, array &$call_args) {
+    if ($handler == 'dismax') {
+      return TRUE;
+    }
+    if ($handler == 'standard') {
+      $keys = &$call_args['query'];
+      $params = &$call_args['params'];
+      $params['qt'] = $handler;
+      $k = $keys;
+      $fields = $params['qf'];
+      unset($params['qf']);
+      $keys = implode(":($k) OR ", array_map(array('SearchApiSolrConnection', 'escapeFieldName'), $fields)) . ":($k)";
+      return TRUE;
+    }
+    return FALSE;
+  }
+
+  /**
    * Empty method to allow subclassed to apply custom changes before the query
    * is sent to Solr. Works exactly like hook_search_api_solr_query_alter().
    *
@@ -689,7 +732,7 @@ class SearchApiSolrService extends SearchApiAbstractService {
    * @param SearchApiQueryInterface $query
    *   The SearchApiQueryInterface object representing the executed search query.
    */
-  function preQuery(array &$call_args, SearchApiQueryInterface $query) {
+  protected function preQuery(array &$call_args, SearchApiQueryInterface $query) {
   }
 
   /**
@@ -704,7 +747,7 @@ class SearchApiSolrService extends SearchApiAbstractService {
    * @param Apache_Solr_Response $response
    *   The response object returned by Solr.
    */
-  function postQuery(array &$results, SearchApiQueryInterface $query, Apache_Solr_Response $response) {
+  protected function postQuery(array &$results, SearchApiQueryInterface $query, Apache_Solr_Response $response) {
   }
 
   //
diff --git solrconfig.xml solrconfig.xml
index 8945379..8eab421 100644
--- solrconfig.xml
+++ solrconfig.xml
@@ -489,14 +489,12 @@
   -->
   <requestHandler name="standard" class="solr.SearchHandler">
     <!-- default values for query parameters -->
-     <lst name="defaults">
-       <str name="echoParams">explicit</str>
-       <!--
-       <int name="rows">10</int>
-       <str name="fl">*</str>
-       <str name="version">2.1</str>
-        -->
-     </lst>
+    <lst name="defaults">
+      <str name="echoParams">explicit</str>
+      <str name="fl">item_id,score</str>
+      <str name="q.op">AND</str>
+      <str name="q.alt">*:*</str>
+    </lst>
   </requestHandler>
 
 <!-- Please refer to http://wiki.apache.org/solr/SolrReplication for details on configuring replication -->
