diff -upr ../featured_content/featured_content.admin.inc ./featured_content.admin.inc
--- ../featured_content/featured_content.admin.inc	2011-02-24 20:12:52.000000000 -0600
+++ ./featured_content.admin.inc	2011-03-22 00:53:41.000000000 -0500
@@ -443,6 +443,13 @@ function featured_content_configure($del
         '#value' => '</div>',
       );
     }
+    
+    $form['featured-block']['filter']['views']['filter_prepend_view_results'] = array(
+      '#type' => 'checkbox',
+      '#title' => t('Prepend view results?'),
+      '#default_value' => featured_content_get_value($featured_content['filter']['prepend_view_results'], 0),
+      '#description' => t('If the above option is selected, the view results will be used to select the first related content.  Any difference between the number of results set for "Number to Show" and the number of items returned by the view will be made up with the results of the other filter rules.'),
+    );
   }
 
   $form['featured-block']['filter']['paths'] = array(
@@ -799,6 +806,9 @@ function featured_content_save($delta, $
   if (module_exists('views') && function_exists('views_get_all_views')) {
     $views = views_get_all_views();
     if (! empty($views)) {
+    
+      $featured_blocks[$delta]['filter']['prepend_view_results'] = empty($edit['filter_prepend_view_results']) ? 0 : 1;
+          
       foreach ($views as $view_name => $view_data) {
         if (! empty($view_data->display)) {
           foreach ($view_data->display as $display_name => $display_data) {
diff -upr ../featured_content/featured_content.module ./featured_content.module
--- ../featured_content/featured_content.module	2011-02-24 20:12:52.000000000 -0600
+++ ./featured_content.module	2011-03-22 00:57:30.000000000 -0500
@@ -486,8 +486,11 @@ function featured_content_get_filtered_n
   $where_clause = '';
   $where_data = array();
   if ($node->nid) {
-    $where_clause .= ' AND n.nid != %d ';
-    $where_data = array_merge($where_data, array($node->nid));
+  	// Create an independent, escaped query here, since we may
+  	// need this query seperatly if we're appending a view's 
+  	// results to a larger set
+  	$exclude_self_where_clause = ' n.nid != ' . db_escape_string($node->nid) . ' ';
+    $where_clause .= ' AND ' . $exclude_self_where_clause;
   }
 
   // filter based on content type
@@ -583,9 +586,23 @@ function featured_content_get_filtered_n
           }
         }
       }
-      if (! empty($views_nids)) {
-        $where_clause .= ' AND n.nid in (' . db_placeholders($views_nids, 'int') . ') ';
-        $where_data = array_merge($where_data, $views_nids);
+      if ( ! empty($views_nids)) {
+
+      	// If we've set the block to prepend the views results to a greater result
+      	// set, keep seperate track of the views where clause so we can use it
+      	// for ordering and creating a seperate clause 
+      	if ( ! empty($data['prepend_view_results'])) {
+
+      		// For simplicity sake, create this sub portion of the query 
+      		// here, so we don't disrupt the order of the nids in the other
+      		// parts of the query
+	      	$views_prepend_where_clause = ' n.nid in (' . implode(',', array_map('db_escape_string', $views_nids)) . ') ';
+      	}
+      	else {
+
+	        $where_clause .= ' AND n.nid in (' . db_placeholders($views_nids, 'int') . ') ';
+	        $where_data = array_merge($where_data, $views_nids);      	
+      	}      	
       }
     }
   }
@@ -621,7 +638,32 @@ 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);
+	// If we've set the views filter to prepend results to the top of the
+	// returned items, and then fill in the empty spaces with other items,
+	// we need to rewrite the query slightly.  Otherwise, use the default
+	// query structure
+	if (empty($views_prepend_where_clause) OR empty($data['prepend_view_results'])) {
+	
+	  $results = db_query('SELECT n.nid FROM {node} AS n ' . $tid_inner_join . ' ' . $pt_inner_join . ' WHERE n.status <> 0 ' . $where_clause, $where_data);
+	}
+	else {
+
+		$views_prepend_order_clause = ' FIELD(n.nid,' . implode(', ', array_reverse($views_nids)) . ') DESC';
+		$views_prepend_where_clause = empty($exclude_self_where_clause)
+			? $views_prepend_where_clause
+			: $views_prepend_where_clause . ' AND ' . $exclude_self_where_clause;
+
+	  $results = db_query('
+	  	SELECT
+	  		DISTINCT(n.nid)
+  		FROM
+  			{node} AS n
+  		' . $tid_inner_join . ' ' . $pt_inner_join . '
+  		WHERE
+  			(n.status <> 0 ' . $where_clause . ') OR ( ' . $views_prepend_where_clause . ')
+  		' . _featured_content_build_order_by_query($views_nids), $where_data);
+	}
+
   while ($row = db_fetch_object($results)) {
     $add = TRUE;
     if ($filter_path) {
@@ -799,3 +841,22 @@ function featured_content_get_block_titl
   }
   return check_plain($block_title);
 }
+
+/**
+ * Builds a ORDER BY query that will preserve order and will work on both
+ * PostgreSQL and MySQL. 
+ * Cross-DB FIELD implementation take from 
+ *	http://stackoverflow.com/questions/1309624/simulating-mysqls-order-by-field-in-postgresql 
+ */
+function _featured_content_build_order_by_query($items) {
+
+	$order_by = ' ORDER BY CASE ';
+
+	foreach ($items as $index => $nid) {
+		$order_by .= ' WHEN n.nid = ' . db_escape_string($nid) . ' THEN ' . ($index + 1);
+	}
+	
+	$order_by .= ' ELSE ' . (count($items) + 1) . ' END, n.nid ASC';
+	
+	return $order_by;
+}
\ No newline at end of file
