diff -rupN featured_content_old/featured_content.admin.inc featured_content/featured_content.admin.inc
--- featured_content_old/featured_content.admin.inc	2010-08-11 01:12:51.000000000 -0500
+++ featured_content/featured_content.admin.inc	2011-03-30 01:50:58.000000000 -0500
@@ -569,6 +569,32 @@ function featured_content_configure($del
     }
   }
 
+  if (module_exists('search')) {
+    $form['featured-block']['filter']['keyword'] = array(
+      '#type' => 'fieldset',
+      '#title' => t('Title Keywords'),
+      '#description' => t('Whether to limit the returned results to other nodes that are similar to the title of the currently viewed node.  This filter will return nodes by order of relevance.  You may want to set the <strong>"Sort By"</strong> setting to <strong>"None - Use Order Provided if Available."</strong>'),
+      '#collapsible' => TRUE,
+      '#collapsed' => FALSE,
+    );
+
+    $form['featured-block']['filter']['keyword']['filter_by_keyword'] = array(
+      '#type' => 'checkbox',
+      '#title' => t('Match nodes with similar keywords?'),
+      '#default_value' => featured_content_get_value($featured_content['filter']['keyword']['filter_by_keyword'], 0),
+      '#description' => t('If the above option is selected, only nodes that include similar terms as the title of the current node will be included.'),
+    );
+
+    $form['featured-block']['filter']['keyword']['num_words_in_title_keyword'] = array(
+      '#type' => 'textfield',
+      '#title' => t('Number of words in title to search against'),
+      '#default_value' => featured_content_get_value($featured_content['filter']['keyword']['num_words_in_title_keyword'], 5),
+      '#size' => 3,
+      '#element_validate' => array('featured_content_num_words_in_title_validate'),
+       '#description' => t('Number of words in the current node\'s title to search against.  If filtering by "Title Keywords", this value must be zero or positive.  If zero, no trimming will be done.  Words with "@count" words or less (set in the !search_panel) will be ignored for this purpose.  Making this number low will return more results, while setting it higher (or zero) will return better matches.', array('@count' => variable_get('minimum_word_size', 3), '!search_panel' => l('Search Administration Panel', 'admin/settings/search'))),
+    );
+  }
+
   if (module_exists('primary_term')) {
     $form['featured-block']['filter']['primary_term'] = array(
       '#type' => 'fieldset',
@@ -809,6 +835,12 @@ function featured_content_save($delta, $
       }
     }
   }
+  
+  if (module_exists('search')) {
+    $featured_blocks[$delta]['filter']['keyword'] = array();
+    $featured_blocks[$delta]['filter']['keyword']['filter_by_keyword'] = $edit['filter_by_keyword'];
+    $featured_blocks[$delta]['filter']['keyword']['num_words_in_title_keyword'] = $edit['num_words_in_title_keyword'];
+  }
 
   // visibility settings
   $featured_blocks[$delta]['visibility']['content_types']['selected'] = $edit['visibility_content_types_selected'];
@@ -837,3 +869,21 @@ function featured_content_settings_form(
   );
   return system_settings_form($form);
 }
+
+/**
+ * Validate that we have a valid minimum number of words to search
+ * against in the title.
+ */
+function featured_content_num_words_in_title_validate($element, &$form_state) {
+
+  // If we're not filtering by keyword, we can safely ignore the set minimum number
+  // of words to search against
+  if ($form_state['values']['filter_by_keyword'] === '1') {
+
+    // Make sure that we're checking against at least one word in the title
+    if ( ! is_numeric($element['#value']) OR $element['#value'] < 0) {
+    
+      form_error($element, t('The number of words to search against must be numeric and at least 1.'));
+    }
+  }
+}
\ No newline at end of file
diff -rupN featured_content_old/featured_content.module featured_content/featured_content.module
--- featured_content_old/featured_content.module	2010-11-11 18:08:01.000000000 -0600
+++ featured_content/featured_content.module	2011-03-30 01:59:33.000000000 -0500
@@ -475,13 +475,7 @@ function featured_content_get_filtered_n
 
   // unless configured, exclude current node page
   if (! $data['include_node']) {
-    if (arg(0) == 'node' && is_numeric(arg(1))) {
-      $node = node_load(arg(1));
-    }
-    elseif ($_GET['nid'] && is_numeric($_GET['nid'])) {
-      // for RSS feed
-      $node = node_load($_GET['nid']);
-    }
+    $node = _featured_content_load_node();
   }
 
   $where_clause = '';
@@ -590,6 +584,55 @@ function featured_content_get_filtered_n
       }
     }
   }
+  
+  // Filter by node title keyword search
+  if (module_exists('search')) {
+    // Check to make sure this option has been enabled
+    if ($data['keyword']['filter_by_keyword'] === 1) {      
+      // If we haven't already loaded the node from earlier on,
+      // grab it now.  If we're not able to, don't do any 
+      // keyword searching
+      $node = empty($node) ? _featured_content_load_node() : $node;
+
+      if ($node) {
+      
+        // If title trimming is enabled, pull out the first x 
+        // significantly long words in the title
+        if ((int)$data['keyword']['num_words_in_title_keyword'] > 0) {
+          $search_terms = array();      
+          $found_terms = 0;      
+          $min_length_for_search_term = variable_get('minimum_word_size', 3);
+
+          foreach (explode(' ', $node->title) as $word_position => $word) {
+            if (count($search_terms) < $data['keyword']['num_words_in_title_keyword']) {
+              $processed_word = search_simplify($word);
+              
+              if (mb_strlen($processed_word) > $min_length_for_search_term) {
+                $search_terms[] = $word;
+                ++$found_terms;
+              }              
+            }
+          }
+
+          $keyword_search_string = implode(' ', $search_terms);
+        }
+        else {
+        
+          $keyword_search_string = $node->title;
+        }
+
+        $rs = do_search($keyword_search_string, 'node');
+        
+        $keyword_match_nids = array();
+        foreach ($rs as $match) {
+          $keyword_match_nids[] = $match->sid;
+        }
+        
+        $where_clause .= ' AND n.nid IN (' . db_placeholders($keyword_match_nids, 'int') . ') ';
+        $where_data = array_merge($where_data, $keyword_match_nids);
+      }
+    }
+  }
 
   // filter by primary term
   if ($data['primary_term']['node'] && is_numeric($node->primaryterm) && $node->primaryterm > 0) {
@@ -623,6 +666,7 @@ function featured_content_get_filtered_n
   }
 
   $results = db_query('SELECT n.nid FROM {node} AS n ' . $tid_inner_join . ' ' . $pt_inner_join . ' WHERE n.status <> 0 ' . $where_clause, $where_data);
+
   while ($row = db_fetch_object($results)) {
     $add = TRUE;
     if ($filter_path) {
@@ -800,3 +844,19 @@ function featured_content_get_block_titl
   }
   return check_plain($block_title);
 }
+
+/**
+ * Try and build the node from either the system url or the query string.
+ * Return FALSE if unable to build the node, otherwise return FALSE
+ */
+function _featured_content_load_node() {
+  if (arg(0) == 'node' && is_numeric(arg(1))) {
+    $node = node_load(arg(1));
+  }
+  elseif ($_GET['nid'] && is_numeric($_GET['nid'])) {
+    // for RSS feed
+    $node = node_load($_GET['nid']);
+  }
+  
+  return empty($node) ? FALSE : $node;
+}
\ No newline at end of file
