diff --git a/Solr_Base_Query.php b/Solr_Base_Query.php
index 31984d9..95ecfd2 100644
--- a/Solr_Base_Query.php
+++ b/Solr_Base_Query.php
@@ -273,6 +273,16 @@ class SolrBaseQuery extends SolrFilterSubQuery implements DrupalSolrQueryInterfa
   protected $available_sorts;
 
   /**
+   *  The default sort order.
+   */
+  protected $default_sort_name = 'score';
+
+  /**
+   *  The default sort direction.
+   */
+  protected $default_sort_direction = 'desc';
+
+  /**
    * The query name is used to construct a searcher string. Mostly the
    * environment id
    */
@@ -560,33 +570,51 @@ class SolrBaseQuery extends SolrFilterSubQuery implements DrupalSolrQueryInterfa
   }
 
   protected function parseSortString() {
+
     // Substitute any field aliases with real field names.
     $sortstring = strtr($this->sortstring, $this->field_map);
-    // Score is a special case - it's the default sort for Solr.
-    if ('' == $sortstring || 'score desc' == $sortstring) {
-      $this->solrsort['#name'] = 'score';
-      $this->solrsort['#direction'] = 'desc';
-      unset($this->params['sort']);
+
+    // If the sort string is empty then set the sort to the default sort order.
+    if ('' == $sortstring || $this->default_sort_name . ' ' . $this->default_sort_direction == $sortstring) {
+      $this->solrsort['#name'] = $this->default_sort_name;
+      $this->solrsort['#direction'] = $this->default_sort_direction;
+      // Score is a special case - it's the default sort for Solr, and so the param doesn't need to be set.
+      if ('' == $sortstring || 'score desc' == $sortstring) {
+        unset($this->params['sort']);
+      }
+      else {
+        $sortstring = $this->default_sort_name . ' ' . $this->default_sort_direction;
+        $this->params['sort'] = array($sortstring);
+      }
     }
     else {
       // Validate and set sort parameter
-      $fields = array_keys($this->available_sorts);
-      // Loop through available sorts and escape them, to allow for function sorts like geodist() in the preg_match() below
-      foreach ($fields as $key => $field) {
-        $fields[$key] = preg_quote($field);
-      }
-      // Implode the escaped available sorts together, then preg_match() against the sort string
-      $fields = implode('|', $fields);
+      $fields = implode('|', array_keys($this->available_sorts));
       if (preg_match('/^(?:(' . $fields . ') (asc|desc),?)+$/', $sortstring, $matches)) {
         // We only use the last match.
         $this->solrsort['#name'] = $matches[1];
         $this->solrsort['#direction'] = $matches[2];
         $this->params['sort'] = array($sortstring);
       }
-      else {
-        return FALSE;
-      }
     }
+
+  }
+
+  /**
+   * Sets the default sort order.
+   * 
+   * @param string $name
+   *   The sort order name.
+   * 
+   * @param string $direction
+   *   The sort direction, this will be either 'asc' or 'desc'.
+   * 
+   */
+  public function setDefaultSort($name, $direction) {
+    $this->default_sort_name = $name;
+    $this->default_sort_direction = $direction;
+    $this->parseSortString();
+    return $this;
   }
 
   public function getAvailableSorts() {
@@ -644,7 +672,7 @@ class SolrBaseQuery extends SolrFilterSubQuery implements DrupalSolrQueryInterfa
   public function getSolrsortUrlQuery() {
     $queryvalues = array();
     $solrsort = $this->solrsort;
-    if ($solrsort && ($solrsort['#name'] != 'score')) {
+    if ($solrsort && ($solrsort['#name'] != $this->default_sort_name || $solrsort['#direction'] != $this->default_sort_direction)) {
       if (isset($this->field_map[$solrsort['#name']])) {
         $solrsort['#name'] = $this->field_map[$solrsort['#name']];
       }
