diff --git a/campcaster/src/products/gLiveSupport/src/SearchWindow.cxx b/campcaster/src/products/gLiveSupport/src/SearchWindow.cxx
index 2a1bb2462..9d890e151 100644
--- a/campcaster/src/products/gLiveSupport/src/SearchWindow.cxx
+++ b/campcaster/src/products/gLiveSupport/src/SearchWindow.cxx
@@ -326,6 +326,11 @@ SearchWindow :: constructSearchResultsView(void)                throw ()
     localSearchResults  = Gtk::ListStore::create(modelColumns);
     remoteSearchResults = Gtk::ListStore::create(modelColumns);
     
+    localSearchResults->set_default_sort_func(sigc::mem_fun(
+                                    *this, &SearchWindow::onSortTreeModel));
+    remoteSearchResults->set_default_sort_func(sigc::mem_fun(
+                                    *this, &SearchWindow::onSortTreeModel));
+    
     searchResultsTreeView = Gtk::manage(wf->createTreeView(localSearchResults));
     searchResultsTreeView->connectModelSignals(remoteSearchResults);
 
@@ -525,6 +530,41 @@ SearchWindow :: displaySearchResults(
         row[modelColumns.lengthColumn] = length ? 
                     *TimeConversion::timeDurationToHhMmSsString(length) : "";
     }
+    
+    treeModel->set_sort_column(Gtk::TreeSortable::DEFAULT_SORT_COLUMN_ID,
+                               Gtk::SORT_ASCENDING);
+}
+
+
+/*------------------------------------------------------------------------------
+ *  Sorting function for the search results.
+ *----------------------------------------------------------------------------*/
+int
+SearchWindow :: onSortTreeModel(const Gtk::TreeModel::iterator &    iter1,
+                                const Gtk::TreeModel::iterator &    iter2)
+                                                                throw ()
+{
+    Gtk::TreeModel::Row     row1 = *iter1;
+    Gtk::TreeModel::Row     row2 = *iter2;
+
+    int     creatorCompare =
+                    Glib::ustring(row1[modelColumns.creatorColumn]).compare(
+                    Glib::ustring(row2[modelColumns.creatorColumn]));
+    if (creatorCompare != 0) {
+        return creatorCompare;
+    }
+    
+    int     sourceCompare =
+                    Glib::ustring(row1[modelColumns.sourceColumn]).compare(
+                    Glib::ustring(row2[modelColumns.sourceColumn]));
+    if (sourceCompare != 0) {
+        return sourceCompare;
+    }
+    
+    int     titleCompare =
+                    Glib::ustring(row1[modelColumns.titleColumn]).compare(
+                    Glib::ustring(row2[modelColumns.titleColumn]));
+    return titleCompare;
 }
 
 
diff --git a/campcaster/src/products/gLiveSupport/src/SearchWindow.h b/campcaster/src/products/gLiveSupport/src/SearchWindow.h
index ec443885d..ffb1cd5e9 100644
--- a/campcaster/src/products/gLiveSupport/src/SearchWindow.h
+++ b/campcaster/src/products/gLiveSupport/src/SearchWindow.h
@@ -260,6 +260,22 @@ class SearchWindow : public GuiWindow
                     Glib::RefPtr<Gtk::ListStore>            treeModel)
                                                                 throw ();
 
+        /**
+         *  Sorting function for the search results.
+         *
+         *  The order of both the local and remote search results is
+         *  determined by this function.
+         *  @param  iter1   iterator for one row to be compared.
+         *  @param  iter2   iterator for the other row to be compared.
+         *  @return -1 if iter1 < iter2, 0 if they are equal, and
+         *           1 if iter1 > iter2.
+         *  @see Gtk::TreeSortable::SlotCompare
+         */
+        int
+        onSortTreeModel(const Gtk::TreeModel::iterator &    iter1,
+                        const Gtk::TreeModel::iterator &    iter2)
+                                                                throw ();
+
         /**
          *  Signal handler for the mouse clicked on one of the entries.
          *