Index: modules/node/node.admin.inc
===================================================================
RCS file: /cvs/drupal/drupal/modules/node/node.admin.inc,v
retrieving revision 1.64
diff -u -p -r1.64 node.admin.inc
--- modules/node/node.admin.inc	25 Aug 2009 10:27:14 -0000	1.64
+++ modules/node/node.admin.inc	1 Sep 2009 16:56:10 -0000
@@ -73,6 +73,7 @@ function node_filters() {
   $filters['status'] = array(
     'title' => t('status'),
     'options' => array(
+      '[any]' => t('any'),
       'status-1' => t('published'),
       'status-0' => t('not published'),
       'promote-1' => t('promoted'),
@@ -89,16 +90,30 @@ function node_filters() {
     );
   }
 
-  $filters['type'] = array('title' => t('type'), 'options' => node_type_get_names());
+  $filters['type'] = array(
+    'title' => t('type'),
+    'options' => array(
+      '[any]' => t('any'),
+    ) + node_type_get_names()
+  );
 
   // The taxonomy filter
   if ($taxonomy = module_invoke('taxonomy', 'form_all', 1)) {
-    $filters['term'] = array('title' => t('term'), 'options' => $taxonomy);
+    $filters['term'] = array(
+      'title' => t('term'),
+      'options' => array(
+        '[any]' => t('any'),
+      ) + $taxonomy
+    );
   }
   // Language filter if there is a list of languages
   if ($languages = module_invoke('locale', 'language_list')) {
     $languages = array('' => t('Language neutral')) + $languages;
-    $filters['language'] = array('title' => t('language'), 'options' => $languages);
+    $filters['language'] = array(
+      'title' => t('language'),
+      'options' => array(
+        '[any]' => t('any'),
+      ) + $languages);
   }
   return $filters;
 }
@@ -172,14 +187,18 @@ function node_filter_form() {
 
   foreach ($filters as $key => $filter) {
     $names[$key] = $filter['title'];
-    $form['filters']['status'][$key] = array('#type' => 'select', '#options' => $filter['options']);
+    $form['filters']['status'][$key] = array(
+      '#type' => 'select',
+      '#options' => $filter['options'],
+      '#title' => $filter['title'],
+      '#default_value' => '[any]',
+    );
   }
 
-  $form['filters']['filter'] = array('#type' => 'radios', '#options' => $names, '#default_value' => 'status');
-  $form['filters']['buttons']['submit'] = array('#type' => 'submit', '#value' => (count($session) ? t('Refine') : t('Filter')));
+  $form['filters']['buttons']['submit'] = array('#type' => 'submit', '#value' => (count($session) ? t('Refine filter') : t('Filter')));
   if (count($session)) {
-    $form['filters']['buttons']['undo'] = array('#type' => 'submit', '#value' => t('Undo'));
-    $form['filters']['buttons']['reset'] = array('#type' => 'submit', '#value' => t('Reset'));
+    $form['filters']['buttons']['undo'] = array('#type' => 'submit', '#value' => t('Undo filter'));
+    $form['filters']['buttons']['reset'] = array('#type' => 'submit', '#value' => t('Reset filter'));
   }
 
   drupal_add_js('misc/form.js');
@@ -214,14 +233,11 @@ function theme_node_filters($form) {
       $output .= '<li>' . drupal_render($form['current'][$key]) . '</li>';
     }
   }
+  $output .= '</ul>';
 
-  $output .= '<li><dl class="multiselect">' . (!empty($form['current']) ? '<dt><em>' . t('and') . '</em> ' . t('where') . '</dt>' : '') . '<dd class="a">';
-  foreach (element_children($form['filter']) as $key) {
-    $output .= drupal_render($form['filter'][$key]);
-  }
-  $output .= '</dd>';
+  $output .= '<dl class="multiselect">' . (!empty($form['current']) ? '<dt><em>' . t('and') . '</em> ' . t('where') . '</dt>' : '');
 
-  $output .= '<dt>' . t('is') . '</dt><dd class="b">';
+  $output .= '<dd class="b">';
 
   foreach (element_children($form['status']) as $key) {
     $output .= drupal_render($form['status'][$key]);
@@ -230,7 +246,6 @@ function theme_node_filters($form) {
 
   $output .= '</dl>';
   $output .= '<div class="container-inline" id="node-admin-buttons">' . drupal_render($form['buttons']) . '</div>';
-  $output .= '</li></ul>';
 
   return $output;
 }
@@ -242,22 +257,23 @@ function node_filter_form_submit($form, 
   $filters = node_filters();
   switch ($form_state['values']['op']) {
     case t('Filter'):
-    case t('Refine'):
-      if (isset($form_state['values']['filter'])) {
-        $filter = $form_state['values']['filter'];
-
-        // Flatten the options array to accommodate hierarchical/nested options.
-        $flat_options = form_options_flatten($filters[$filter]['options']);
-
-        if (isset($flat_options[$form_state['values'][$filter]])) {
-          $_SESSION['node_overview_filter'][] = array($filter, $form_state['values'][$filter]);
+    case t('Refine filter'):
+      // Apply every filter that has a choice selected other than 'any'.
+      foreach ($filters as $filter => $options) {
+        if (isset($form_state['values'][$filter]) && $form_state['values'][$filter] != '[any]') {
+          // Flatten the options array to accommodate hierarchical/nested options.
+          $flat_options = form_options_flatten($filters[$filter]['options']);
+          // Only accept valid selections offered on the dropdown, block bad input.
+          if (isset($flat_options[$form_state['values'][$filter]])) {
+            $_SESSION['node_overview_filter'][] = array($filter, $form_state['values'][$filter]);
+          }
         }
       }
       break;
-    case t('Undo'):
+    case t('Undo filter'):
       array_pop($_SESSION['node_overview_filter']);
       break;
-    case t('Reset'):
+    case t('Reset filter'):
       $_SESSION['node_overview_filter'] = array();
       break;
   }
Index: modules/node/node.css
===================================================================
RCS file: /cvs/drupal/drupal/modules/node/node.css,v
retrieving revision 1.8
diff -u -p -r1.8 node.css
--- modules/node/node.css	4 Aug 2009 03:27:11 -0000	1.8
+++ modules/node/node.css	1 Sep 2009 16:56:10 -0000
@@ -6,12 +6,15 @@
 .preview .node {
   background-color: #ffffea;
 }
-#node-admin-filter ul {
-  list-style-type: none;
-  list-style-image: none;
-  padding: 0;
-  margin: 0;
-  width: 100%;
+/* Override the default multiselect layout in system.css. */
+#node-admin-content dl.multiselect dd.b, dl.multiselect dd.b .form-item {
+  width: 20em; /* 6em label + 14em select */
+}
+#node-admin-content dl.multiselect dd.b .form-item label {
+  display: block;
+  float: left;
+  width: 6em;
+  font-weight: normal;
 }
 #node-admin-buttons {
   float: left; /* LTR */
Index: modules/node/node.test
===================================================================
RCS file: /cvs/drupal/drupal/modules/node/node.test,v
retrieving revision 1.43
diff -u -p -r1.43 node.test
--- modules/node/node.test	29 Aug 2009 04:16:15 -0000	1.43
+++ modules/node/node.test	1 Sep 2009 16:56:10 -0000
@@ -903,7 +903,6 @@ class NodeAdminTestCase extends DrupalWe
 
     // Filter the node listing by status.
     $edit = array(
-      'filter' => 'status',
       'status' => 'status-1',
     );
     $this->drupalPost('admin/content', $edit, t('Filter'));
@@ -913,10 +912,9 @@ class NodeAdminTestCase extends DrupalWe
 
     // Filter the node listing by content type.
     $edit = array(
-      'filter' => 'type',
       'type' => 'article',
     );
-    $this->drupalPost('admin/content', $edit, t('Refine'));
+    $this->drupalPost('admin/content', $edit, t('Refine filter'));
     $this->assertRaw(t('<strong>%type</strong> is <strong>%value</strong>', array('%type' => t('status'), '%value' => t('published'))), t('The node administration listing is filtered by status.'));
     $this->assertRaw(t('<strong>%type</strong> is <strong>%value</strong>', array('%type' => t('type'), '%value' => 'Article')), t('The node administration listing is filtered by content type.'));
     $this->assertText($node1->title, t('Article node appears on the node administration listing.'));
