Index: bb-includes/functions.bb-formatting.php
===================================================================
--- bb-includes/functions.bb-formatting.php	(revision 2435)
+++ bb-includes/functions.bb-formatting.php	(working copy)
@@ -271,15 +271,24 @@
 	return $text;
 }
 
+function bb_show_topic_context( $term, $text ) {
+	$text = strip_tags( $text );
+	$term = preg_quote( $term );
+	$text = preg_replace( "|.*?(.{0,80})$term(.{0,80}).*|is", "$1<strong>$term</strong>$2", $text, 1 );
+	$text = substr( $text, 0, 210 );
+	return $text;
+}
+
 function bb_post_text_context( $post_text ) {
 	return bb_show_context( $GLOBALS['q'], $post_text );
 }
 
 function bb_show_context( $term, $text ) {
-	$text = strip_tags($text);
-	$term = preg_quote($term);
-	$text = preg_replace("|.*?(.{0,80})$term(.{0,80}).*|is", "... $1<strong>$term</strong>$2 ...", $text, 1);
-	$text = substr($text, 0, 210);
+	$text = strip_shortcodes( $text );
+	$text = strip_tags( $text );
+	$term = preg_quote( $term );
+	$text = preg_replace( "|.*?(.{0,80})$term(.{0,80}).*|is", "... $1<strong>$term</strong>$2 ...", $text, 1 );
+	$text = substr( $text, 0, 210 );
 	return $text;
 }
 
Index: bb-includes/functions.bb-template.php
===================================================================
--- bb-includes/functions.bb-template.php	(revision 2435)
+++ bb-includes/functions.bb-template.php	(working copy)
@@ -497,6 +497,12 @@
 	$title = array();
 	
 	switch ( bb_get_location() ) {
+		case 'search-page':
+			if ( !$q = trim( @$_GET['search'] ) )
+				if ( !$q = trim( @$_GET['q'] ) )
+					break;
+			$title[] = sprintf( __( 'Search for %s' ), esc_html( $q ) );
+			break;
 		case 'front-page':
 			if ( !empty( $args['front'] ) )
 				$title[] = $args['front'];
@@ -515,7 +521,7 @@
 			if ( bb_is_tag() )
 				$title[] = esc_html( bb_get_tag_name() );
 			
-			$title[] = __('Tags');
+			$title[] = __( 'Tags' );
 			break;
 		
 		case 'profile-page':
@@ -1636,6 +1642,11 @@
 	$query_obj->form( $args );
 }
 
+function bb_search_pages() {
+	global $page, $search_count;
+	echo apply_filters( 'bb_search_pages', get_page_number_links( array( 'page' => $page, 'total' => $search_count, 'per_page' => 5, 'mod_rewrite' => false ) ) );
+}
+
 /**
  * bb_topic_pagecount() - Print the total page count for a topic
  *
Index: bb-templates/kakumei/search.php
===================================================================
--- bb-templates/kakumei/search.php	(revision 2435)
+++ bb-templates/kakumei/search.php	(working copy)
@@ -4,18 +4,18 @@
 <?php bb_topic_search_form(); ?>
 
 <?php if ( !empty ( $q ) ) : ?>
-<h3 id="search-for"><?php _e('Search for')?> &#8220;<?php echo esc_html($q); ?>&#8221;</h3>
+<h3 id="search-for"><?php printf( __( 'Search for %s' ), '&#8220;' . esc_html( $q ) . '&#8221;' ); ?></h3>
 <?php endif; ?>
 
 <?php if ( $recent ) : ?>
 <div id="results-recent" class="search-results">
-	<h4><?php _e('Recent Posts')?></h4>
+	<h4><?php _e( 'Recent Posts' )?></h4>
 	<ol>
 <?php foreach ( $recent as $bb_post ) : ?>
 		<li<?php alt_class( 'recent' ); ?>>
-			<a href="<?php post_link(); ?>"><?php topic_title($bb_post->topic_id); ?></a>
-			<span class="freshness"><?php printf( __('Posted %s'), bb_datetime_format_i18n( bb_get_post_time( array( 'format' => 'timestamp' ) ) ) ); ?></span>
-			<p><?php echo bb_show_context($q, $bb_post->post_text); ?></p>
+			<a class="result" href="<?php post_link(); ?>"><?php echo bb_show_topic_context( $q, get_topic_title( $bb_post->topic_id ) ); ?></a>
+			<span class="freshness"><?php printf( __( 'Posted by <a href="%1$s">%2$s</a> on %3$s'), get_user_profile_link( $bb_post->poster_id ), get_post_author(), bb_datetime_format_i18n( bb_get_post_time( array( 'format' => 'timestamp' ) ) ) ); ?></span>
+			<p><?php echo bb_show_context( $q, $bb_post->post_text ); ?></p>
 		</li>
 <?php endforeach; ?>
 	</ol>
@@ -24,13 +24,13 @@
 
 <?php if ( $relevant ) : ?>
 <div id="results-relevant" class="search-results">
-	<h4><?php _e('Relevant posts')?></h4>
+	<h4><?php _e( 'Relevant Topics' )?></h4>
 	<ol>
-<?php foreach ( $relevant as $bb_post ) : ?>
+<?php foreach ( $relevant as $topic ) : ?>
 		<li<?php alt_class( 'relevant' ); ?>>
-			<a href="<?php post_link(); ?>"><?php topic_title($bb_post->topic_id); ?></a>
-			<span class="freshness"><?php printf( __('Posted %s'), bb_datetime_format_i18n( bb_get_post_time( array( 'format' => 'timestamp' ) ) ) ); ?></span>
-			<p><?php post_text(); ?></p>
+			<a class="result" href="<?php post_link( $topic->post_id ); ?>"><?php echo bb_show_topic_context( $q, get_topic_title() ); ?></a>
+			<span class="freshness"><?php printf( __( 'Posted by <a href="%1$s">%2$s</a> on %3$s' ), get_user_profile_link( $topic->topic_id ), get_topic_author(), bb_datetime_format_i18n( get_topic_start_time( array( 'format' => 'timestamp' ) ) ) ); ?></span>
+			<p><?php echo bb_show_context( $q, $topic->post_text ); ?></p>
 		</li>
 <?php endforeach; ?>
 	</ol>
@@ -38,8 +38,18 @@
 <?php endif; ?>
 
 <?php if ( $q && !$recent && !$relevant ) : ?>
-<p><?php _e('No results found.') ?></p>
+<p><?php printf( __( 'Your search %s did not return any results. Here are some suggestions:' ), '&#8220;<em>' . esc_html( $q ) . '</em>&#8221;' ); ?></p>
+<ul id="search-suggestions">
+    <li><?php _e( 'Make sure all words are spelled correctly' ); ?></li>
+    <li><?php _e( 'Try different keywords' ); ?></li>
+    <li><?php _e( 'Try more general keywords' ); ?></li>
+</ul>
+<?php else: ?>
+	<?php bb_search_pages(); ?>
+	<br />
 <?php endif; ?>
+
 <br />
-<p><?php printf(__('You may also try your <a href="http://google.com/search?q=site:%1$s %2$s">search at Google</a>'), bb_get_uri(null, null, BB_URI_CONTEXT_TEXT), urlencode($q)) ?></p>
+<p><?php printf( __( 'You may also try your <a href="%s">search at Google</a>.' ), 'http://google.com/search?q=site:' . bb_get_uri( null, null, BB_URI_CONTEXT_TEXT ) . urlencode( ' ' . $q ) ); ?></p>
+
 <?php bb_get_footer(); ?>
Index: bb-templates/kakumei/style.css
===================================================================
--- bb-templates/kakumei/style.css	(revision 2435)
+++ bb-templates/kakumei/style.css	(working copy)
@@ -846,12 +846,22 @@
 
 #search-for { margin: 15px 0 5px; }
 
+ul#search-suggestions { margin-left: 25px; }
+
 .search-results { margin: 0 0 10px; }
 
 .search-results ol { margin: 5px 0 0 28px; }
 
-.search-results ol li { margin: 0 0 3px; }
+.search-results ol li { border-bottom: 1px solid #ccc; padding: 2px 5px 0 5px; min-height: 50px; }
 
+.search-results ol li.alt { background-color: #f8f8f8; }
+
+.search-results ol li:hover { background-color: #e4f3e1; }
+
+.search-results ol li a.result { font-size: 15px; }
+
+.search-results ol li span.freshness { float: right; font-style: italic; }
+
 /* Login, Register, Profile Edit
 =================================== */
 
Index: search.php
===================================================================
--- search.php	(revision 2435)
+++ search.php	(working copy)
@@ -1,5 +1,5 @@
 <?php
-require_once('./bb-load.php');
+require_once( './bb-load.php' );
 
 if ( !$q = trim( @$_GET['search'] ) )
 	$q = trim( @$_GET['q'] );
@@ -7,16 +7,36 @@
 $bb_query_form = new BB_Query_Form;
 
 if ( $q = stripslashes( $q ) ) {
+	/* Paging hack */
+	global $page;
+	if ( !$page ) $page = 1;
+	$search_start = 5 * ( $page - 1);
+	$search_stop = 5;
+	
+	/* Recent */
 	add_filter( 'bb_recent_search_fields',   create_function( '$f', 'return $f . ", MAX(post_time) AS post_time";' ) );
 	add_filter( 'bb_recent_search_group_by', create_function( '', 'return "t.topic_id";' ) );
-	$bb_query_form->BB_Query_Form( 'post', array(), array( 'order_by' => 'p.post_time', 'per_page' => 5, 'post_status' => 0, 'topic_status' => 0, 'post_text' => $q, 'forum_id', 'tag', 'topic_author', 'post_author' ), 'bb_recent_search' );
+	$bb_query_form->BB_Query_Form( 'post', array(), array( 'order_by' => 'p.post_time', 'page' => 1, 'post_status' => 0, 'topic_status' => 0, 'post_text' => $q, 'forum_id', 'tag', 'topic_author', 'post_author' ), 'bb_recent_search' );
 	$recent = $bb_query_form->results;
-
-	$bb_query_form->BB_Query_Form( 'post', array( 'search' => $q ), array( 'post_status' => 0, 'topic_status' => 0, 'search', 'forum_id', 'tag', 'topic_author', 'post_author' ), 'bb_relevant_search' );
+	if ( $recent ) {
+		$recent_count = isset( $bb_query_form->count ) ? $bb_query_form->count : count( $recent );
+		$recent = array_slice( $recent, $search_start, $search_stop );
+	} else {
+		$recent_count = 0;
+	}
+	
+	/* Relevant */
+	$bb_query_form->BB_Query_Form( 'topic', array( 'search' => $q ), array( 'page' => 1, 'post_status' => 0, 'topic_status' => 0, 'search', 'forum_id', 'tag', 'topic_author', 'post_author' ), 'bb_relevant_search' );
 	$relevant = $bb_query_form->results;
+	if ( $recent ) {
+		$relevant_count = isset( $bb_query_form->count ) ? $bb_query_form->count : count( $relevant );
+		$relevant = array_slice( $relevant, $search_start, $search_stop );
+	} else {
+		$relevant_count = 0;
+	}
 	
-	$bb_query_form->type = 'topic';
-
+	$search_count = max( $recent_count, $relevant_count );
+	
 	$q = $bb_query_form->get( 'search' );
 }
 
@@ -34,6 +54,6 @@
 		$topics = bb_append_meta( $topics, 'topic' );
 endif;
 
-bb_load_template( 'search.php', array('q', 'recent', 'relevant'), $q );
+bb_load_template( 'search.php', array( 'q', 'recent', 'relevant', 'page', 'search_count' ), $q );
 
 ?>
