Index: /branches/release-34/default_templates/entry_summary.mtml
===================================================================
--- /branches/release-34/default_templates/entry_summary.mtml (revision 1851)
+++ /branches/release-34/default_templates/entry_summary.mtml (revision 1855)
@@ -5,9 +5,17 @@
         <div class="asset-meta">
             <span class="byline">
-<MTIfNonEmpty tag="EntryAuthorDisplayName">
+<MTIf name="show_blog">
+    <MTIfNonEmpty tag="EntryAuthorDisplayName">
+                <__trans phrase="From [_1] by [_2] on [_3]" params="<$MTEntryBlogName$>%%<span class="vcard author"><$MTEntryAuthorLink show_hcard="1"$></span>%%<abbr class="published" title="<$MTEntryDate format_name="iso8601"$>"><$MTEntryDate format="%x %X"$></abbr>">
+    <MTElse>
+                <__trans phrase="From [_1] on [_2]" params="<$MTEntryBlogName$>%%<abbr class="published" title="<$MTEntryDate format_name="iso8601"$>"><$MTEntryDate format="%x %X"$></abbr>">
+    </MTIfNonEmpty>
+<MTElse>
+    <MTIfNonEmpty tag="EntryAuthorDisplayName">
                 <__trans phrase="By [_1] on [_2]" params="<span class="vcard author"><$MTEntryAuthorLink show_hcard="1"$></span>%%<abbr class="published" title="<$MTEntryDate format_name="iso8601"$>"><$MTEntryDate format="%x %X"$></abbr>">
-<MTElse>
+    <MTElse>
                 <abbr class="published" title="<$MTEntryDate format_name="iso8601"$>"><$MTEntryDate format="%x %X"$></abbr>
-</MTIfNonEmpty>
+    </MTIfNonEmpty>
+</MTIf>
             </span>
             <span class="separator">|</span> <a class="permalink" rel="bookmark" href="<$MTEntryPermalink$>"><__trans phrase="Permalink"></a>
Index: /branches/release-34/default_templates/search_results.mtml
===================================================================
--- /branches/release-34/default_templates/search_results.mtml (revision 1797)
+++ /branches/release-34/default_templates/search_results.mtml (revision 1855)
@@ -86,4 +86,5 @@
 </head>
 <body class="mt-search-results <$MTVar name="page_layout"$>">
+<$MTBlogID setvar="blog_id">
     <div id="container">
         <div id="container-inner">
@@ -107,19 +108,19 @@
 <MTSetVarTemplate id="search_results" name="search_results">  
 <MTSearchResults>
-    <MTBlogResultHeader>
+    <MTSearchResultsHeader>
                             <div id="search-results">
                                 <span id="current-page" class="hidden"><MTCurrentPage></span>
                                 <h1 id="page-title" class="search-results-header">
         <MTIfStraightSearch>
-                                    <__trans phrase="Results matching &ldquo;[_1]&rdquo; from [_2]" params="<$MTSearchString$>%%<$MTBlogName encode_html="1"$>">
+                                    <__trans phrase="Results matching &ldquo;[_1]&rdquo;" params="<$MTSearchString$>">
         </MTIfStraightSearch>
         <MTIfTagSearch>
-                                    <__trans phrase="Results tagged &ldquo;[_1]&rdquo; from [_2]" params="<$MTSearchString$>%%<$MTBlogName encode_html="1"$>">
+                                    <__trans phrase="Results tagged &ldquo;[_1]&rdquo;" params="<$MTSearchString$>">
         </MTIfTagSearch>
                                 </h1>
                                 <div class="search-results-container autopagerize_page_element">
-    </MTBlogResultHeader>
-                                    <$MTInclude module="<__trans phrase="Entry Summary">" hide_counts="1"$>
-    <MTBlogResultFooter>
+    </MTSearchResultsHeader>
+                                    <$MTInclude module="<__trans phrase="Entry Summary">" show_blog="1" hide_counts="1" blog_id="$blog_id"$>
+    <MTSearchResultsFooter>
                                 </div><div class="autopagerize_insert_before"></div>
 
@@ -129,5 +130,5 @@
                                 </div>
                             </div>
-    </MTBlogResultFooter>
+    </MTSearchResultsFooter>
 </MTSearchResults>
 </MTSetVarTemplate>
Index: /branches/release-34/lib/MT/Template/ContextHandlers.pm
===================================================================
--- /branches/release-34/lib/MT/Template/ContextHandlers.pm (revision 1854)
+++ /branches/release-34/lib/MT/Template/ContextHandlers.pm (revision 1855)
@@ -244,4 +244,6 @@
             NoSearchResults => \&_hdlr_pass_tokens,
             NoSearch => \&_hdlr_pass_tokens,
+            SearchResultsHeader => sub { '' },
+            SearchResultsFooter => sub { '' },
             BlogResultHeader => sub { '' },
             BlogResultFooter => sub { '' },
Index: /branches/release-34/lib/MT/Template/Context/Search.pm
===================================================================
--- /branches/release-34/lib/MT/Template/Context/Search.pm (revision 1708)
+++ /branches/release-34/lib/MT/Template/Context/Search.pm (revision 1855)
@@ -28,4 +28,6 @@
             'NoSearch?' => sub { ( $_[0]->stash('search_string') &&
                                    $_[0]->stash('search_string') =~ /\S/ ) ? 0 : 1 },
+            SearchResultsHeader => \&MT::Template::Context::_hdlr_pass_tokens,
+            SearchResultsFooter => \&MT::Template::Context::_hdlr_pass_tokens,
             BlogResultHeader => \&MT::Template::Context::_hdlr_pass_tokens,
             BlogResultFooter => \&MT::Template::Context::_hdlr_pass_tokens,
@@ -61,4 +63,5 @@
     my $blog_header = 1;
     my $blog_footer = 0;
+    my $footer = 0;
     my $count_per_blog = 0;
     my $max_reached = 0;
@@ -113,8 +116,11 @@
         else {
             $blog_footer = 1;
+            $footer      = 1;
         }
 
         defined(my $out = $build->build($ctx, $tokens,
             { %$cond, 
+                SearchResultsHeader => $i == 0,
+                SearchResultsFooter => $footer,
                 BlogResultHeader => $blog_header,
                 BlogResultFooter => $blog_footer,
Index: /branches/release-34/lib/MT/App/Search.pm
===================================================================
--- /branches/release-34/lib/MT/App/Search.pm (revision 1757)
+++ /branches/release-34/lib/MT/App/Search.pm (revision 1855)
@@ -267,6 +267,6 @@
             if $format !~ /\w+/;
     }
-    my $method = "render$format";
-    $method = 'render' unless $app->can($method);
+    my $method = "render";
+    $method .= $format if $format && $app->can($method . $format);
     $out = $app->$method( $count, $iter );
 
@@ -367,10 +367,24 @@
     push @terms, $parsed->{terms} if exists $parsed->{terms};
 
+    my $desc = 'descend' eq $app->{searchparam}{SearchResultDisplay} ? 'DESC' : 'ASC';
+    my @sort;
     my $sort = $params->{'sort'};
     if ( $sort !~ /\w+\!$/ && $app->{searchparam}{SearchSortBy} ) {
         my $sort_by = $app->{searchparam}{SearchSortBy};
-        $sort_by =~ s/[\w\-\.]+//g;
-        $sort = $sort_by;
-    }
+        $sort_by =~ s/[^\w\-\.\,]+//g;
+        if ( $sort_by ) {
+            my @sort_bys = split ',', $sort_by;
+            foreach my $key ( @sort_bys ) {
+                push @sort, {
+                    desc   => $desc,
+                    column => $key
+                };
+            }
+        }
+    }
+    push @sort, {
+        desc   => $desc,
+        column => $sort
+    };
 
     my %args = (
@@ -378,15 +392,6 @@
       $limit  ? ( 'limit' => $limit ) : (),
       $offset ? ( 'offset' => $offset ) : (),
-      $sort   ? ( 'sort' => [
-            { desc   => 'descend' eq $app->{searchparam}{SearchResultDisplay} ? 'DESC' : 'ASC',
-              column => $sort }
-        ] ) : (),
+      @sort   ? ( 'sort' => \@sort ) : (),
     );
-
-    if ( exists $app->{searchparam}{IncludeBlogs} ) {
-        unshift @{ $args{'sort'} },
-          { desc => 'ASC',
-            column    => 'blog_id' };
-    }
 
     ( \@terms, \%args );
Index: /branches/release-34/lib/MT/App/Search/TagSearch.pm
===================================================================
--- /branches/release-34/lib/MT/App/Search/TagSearch.pm (revision 1516)
+++ /branches/release-34/lib/MT/App/Search/TagSearch.pm (revision 1855)
@@ -35,5 +35,6 @@
 
     my $format = $app->param('format') || q();
-    my $method = "render$format";
+    my $method = "render";
+    $method .= $format if $format && $app->can($method . $format);
     $out = $app->$method( $count, $iter );
 
@@ -195,10 +196,24 @@
     );
 
+    my $desc = 'descend' eq $app->{searchparam}{SearchResultDisplay} ? 'DESC' : 'ASC';
+    my @sort;
     my $sort = $params->{'sort'};
     if ( $sort !~ /\w+\!$/ && $app->{searchparam}{SearchSortBy} ) {
         my $sort_by = $app->{searchparam}{SearchSortBy};
-        $sort_by =~ s/[\w\-\.]+//g;
-        $sort = $sort_by;
-    }
+        $sort_by =~ s/[^\w\-\.\,]+//g;
+        if ( $sort_by ) {
+            my @sort_bys = split ',', $sort_by;
+            foreach my $key ( @sort_bys ) {
+                push @sort, {
+                    desc   => $desc,
+                    column => $key
+                };
+            }
+        }
+    }
+    push @sort, {
+        desc   => $desc,
+        column => $sort
+    };
 
     my %args = (
@@ -206,15 +221,6 @@
       $limit  ? ( 'limit' => $limit ) : (),
       $offset ? ( 'offset' => $offset ) : (),
-      $sort   ? ( 'sort' => [
-            { desc   => 'descend' eq $app->{searchparam}{SearchResultDisplay} ? 'DESC' : 'ASC',
-              column => $sort }
-        ] ) : (),
+      @sort   ? ( 'sort' => \@sort ) : (),
     );
-
-    if ( exists $app->{searchparam}{IncludeBlogs} ) {
-        unshift @{ $args{'sort'} },
-          { desc => 'ASC',
-            column    => 'blog_id' };
-    }
 
     my $blog_class = $app->model('blog');
