diff --git a/public_html/sites/all/modules/contrib/modr8/modr8-admin.css b/public_html/sites/all/modules/contrib/modr8/modr8-admin.css
new file mode 100644
index 0000000..b515662
--- /dev/null
+++ b/public_html/sites/all/modules/contrib/modr8/modr8-admin.css
@@ -0,0 +1,20 @@
+@CHARSET "UTF-8";
+
+div.modr8-admin-filter {
+  margin-top: 1.5em;
+}
+
+div.modr8-admin-filter ul {
+  clear: both;
+  overflow: hidden;
+}
+
+div.modr8-admin-filter ul li {
+  float: left;
+  margin-right: 1em;
+}
+
+div.modr8-admin-filter .form-submit {
+  margin-top: 2.5em;
+  
+}
\ No newline at end of file
diff --git a/public_html/sites/all/modules/contrib/modr8/modr8.module b/public_html/sites/all/modules/contrib/modr8/modr8.module
index 296f8d5..e440a11 100644
--- a/public_html/sites/all/modules/contrib/modr8/modr8.module
+++ b/public_html/sites/all/modules/contrib/modr8/modr8.module
@@ -203,6 +203,11 @@ function modr8_form_alter(&$form, $form_state, $form_id) {
   elseif ($form_id == 'node_type_form') {
     $form['workflow']['node_options']['#options']['moderate'] = t('In moderation queue');
   }
+  elseif ($form_id == 'modr8_page_filter_form') {
+    // Unset the internal form token and id fields for this admin filter form,
+    // since it is posted as a GET and doesn't need the drupal form system.
+    unset($form['form_build_id'], $form['form_id'], $form['#token'], $form['#build_id']);
+  }
 }
 
 /**
@@ -299,7 +304,7 @@ function modr8_theme() {
     'modr8_form' => array('arguments' => array('form')),
     'moderation_event' => array('arguments' => array('event')),
     'modr8_note' => array('arguments' => array('note')),
-
+    'modr8_page_filter_form' => array('arguments' => array('form')),
   );
 }
 /**
diff --git a/public_html/sites/all/modules/contrib/modr8/modr8_admin.inc b/public_html/sites/all/modules/contrib/modr8/modr8_admin.inc
index 30dc4e7..1c2ed19 100644
--- a/public_html/sites/all/modules/contrib/modr8/modr8_admin.inc
+++ b/public_html/sites/all/modules/contrib/modr8/modr8_admin.inc
@@ -189,16 +189,47 @@ function modr8_response_form_submit($form, &$form_state) {
  */
 function modr8_page() {
 
+  $filter_form = drupal_get_form('modr8_page_filter_form');
+  
   $is_published = '';
   if (!user_access('administer nodes')) {
     // Users who don't have the 'administer nodes' permission can only see published nodes.
     $is_published = 'n.status = 1 AND ';
   }
-  $count_sql = db_rewrite_sql('SELECT COUNT(*) FROM {node} n WHERE '. $is_published .' n.moderate = 1');
-  $page_sql = db_rewrite_sql('SELECT n.nid, n.changed FROM {node} n WHERE '. $is_published .' n.moderate = 1 ORDER BY n.changed DESC');
+  
+  $content_type = '';
+  if (isset($_GET['type']) && strcasecmp($_GET['type'], 'All') !== 0) {
+    $node_types = node_get_types();
+    if (isset($node_types[$_GET['type']]) && isset($node_types[$_GET['type']]->type)) {
+      $content_type = "n.type = '{$node_types[$_GET['type']]->type}' AND ";
+    }
+  }
+  
+  $author_role_table = '';
+  $author_role_where = '';
+  if (isset($_GET['role']) && is_numeric($_GET['role'])) {
+    $rid = $_GET['role'];
+    
+    // Handling Anonymous and Authenticated User roles in this fashion as they
+    // are dynamically assigned and not stored in user_roles.
+    if ($rid == 1) {
+      $author_role_where = 'n.uid = 0 AND ';
+    }
+    else if ($rid == 2) {
+      $author_role_where = 'n.uid != 0 AND ';
+    }
+    else {
+      $author_role_table = 'JOIN {users_roles} ur ON n.uid = ur.uid ';
+      $author_role_where = 'ur.rid = '. $rid .' AND '; 
+    }
+  }
+  
+  $count_sql = db_rewrite_sql('SELECT COUNT(*) FROM {node} n '. $author_role_table.'WHERE '. $is_published . $content_type . $author_role_where .'n.moderate = 1');
+  $page_sql = db_rewrite_sql('SELECT n.nid, n.changed FROM {node} n '. $author_role_table .'WHERE '. $is_published . $content_type . $author_role_where .'n.moderate = 1 ORDER BY n.changed DESC');
   $result = pager_query($page_sql, variable_get('modr8_nodes_per_page', 10), 0, $count_sql);
   $output = '<p>'. l(t('Show log of all actions on moderated content.'), 'admin/reports/modr8') .'</p>';
-
+  $output .= $filter_form;
+  
   $nid_list = array();
   while ($r = db_fetch_object($result)) {
     $nid_list[] = $r->nid;
@@ -214,6 +245,69 @@ function modr8_page() {
   return $output;
 }
 
+function modr8_page_filter_form() {
+  $form = array();
+  
+  $form['#method'] = 'GET';
+  
+  // Build a list of all node types, placing those with a pending count of
+  // nodes to moderate at the top.
+  $options = array('All' => t('<Any>'));
+  $node_types = node_get_types();
+  $counts_by_type_query = db_query("SELECT type,count(*) AS to_moderate_count FROM {node} n WHERE moderate=1 GROUP BY type ORDER BY 2 DESC, 1");
+  while ($row = db_fetch_array($counts_by_type_query)) {
+    $options[$row['type']] = t($node_types[$row['type']]->name) .' ('. $row['to_moderate_count'] .')';
+    unset($node_types[$row['type']]);
+  }
+  foreach ($node_types as $type => $data) {
+    $options[$type] = t($data->name) .' (0)';
+  }
+  
+  $form['type'] = array(
+    '#type' => 'select',
+    '#title' => t('Content type'),
+    '#options' => $options,
+    '#default_value' => isset($_GET['type']) ? $_GET['type'] : 'All',
+  );
+  
+  $options = array('All' => t('<Any>'));
+  $roles = user_roles();
+  $options += $roles;
+  
+  $form['role'] = array(
+    '#type' => 'select',
+    '#title' => t('Author role'),
+    '#options' => $options,
+    '#default_value' => isset($_GET['role']) ? $_GET['role'] : 'All,'
+  );
+  
+  $form['submit'] = array(
+    '#type' => 'submit',
+    '#value' => t('Apply'),
+  );
+  
+  $form['#token'] = FALSE;
+  
+  
+  return $form;
+}
+
+function theme_modr8_page_filter_form($form) {
+  drupal_add_css(drupal_get_path('module', 'modr8') .'/modr8-admin.css');
+  
+  $output = '<div class="modr8-admin-filter">';
+  $output .= '<p><strong>'. t('Filter by:'). '</strong></p>';
+  $output .= '<ul class="inline-list">';
+  
+  foreach(element_children($form) as $key) {
+    $output .= '<li>'. drupal_render($form[$key]) .'</li>';
+  }
+  
+  $output .= '</ul>';
+  
+  return $output;
+}
+
 function modr8_form($form_state, $nid_list = array()) {
   $form = array(
     '#theme' => 'modr8_form',
@@ -298,6 +392,7 @@ function modr8_form($form_state, $nid_list = array()) {
  * Themes the content moderation form.
  */
 function theme_modr8_form($form) {
+  dpm($form);
   $headers = array(
     t('Operations'),
     t('Content')
@@ -314,9 +409,16 @@ function theme_modr8_form($form) {
         'data' => drupal_render($form[$key]['ops']) . $note_field,
         'style' => 'vertical-align:top;'
       );
+      
+      $type = $form[$key]['type']['#value'];
+      $author_user = user_load($form[$key]['author_uid']['#value']);
+      $author = l($author_user->name, 'user/'.$form[$key]['author_uid']['#value']);
+      $roles = implode(', ', $author_user->roles);
+      $preview = '<p>'. t('!type by !author (!roles)', array('!type' => $type, '!author' => $author, '!roles' => $roles)) .':</p>';
+      
       // Apply extra filtering to insure we don't have nested form elements,
       // unexpected script, etc.
-      $preview = filter_xss_admin($form[$key]['preview']['#value']);
+      $preview .= filter_xss_admin($form[$key]['preview']['#value']);
 
       if (!empty($form[$key]['log_link']['#value'])) {
         $preview .= '<div><em>'. drupal_render($form[$key]['log_link']) .'</em></div>';
