diff --git a/includes/workbench_access_handler_filter_access.inc b/includes/workbench_access_handler_filter_access.inc
index c8880d8..18e6a4e 100644
--- a/includes/workbench_access_handler_filter_access.inc
+++ b/includes/workbench_access_handler_filter_access.inc
@@ -103,8 +103,10 @@ class workbench_access_handler_filter_access extends views_handler_filter_many_t
     }
 
     // No selection? Use the user's tree.
+    $allow_node_types = FALSE;
     if (empty($this->value) || $this->value[0] == -5) {
       workbench_access_build_tree($tree, array_keys($account->workbench_access));
+      $allow_node_types = TRUE;
     }
     // Build the selection tree.
     else {
@@ -120,28 +122,33 @@ class workbench_access_handler_filter_access extends views_handler_filter_many_t
     $subquery->condition($table . '.' . $active['access_scheme']['query_field'], $ids, 'IN');
     $subquery->condition($table . '.access_scheme', $active['access_scheme']['access_scheme']);
 
+    $group = $this->options['group'];
+
     // Filter out node types not governed by this module.
     // See http://drupal.org/node/1082220.
-    if (!isset($node_types)) {
-      $node_types = array();
-      foreach (node_type_get_names() as $type => $name) {
-        $node_types[$type] = variable_get('workbench_access_node_type_' . $type, 1);
+    if ($allow_node_types) {
+      if (!isset($node_types)) {
+        $node_types = array();
+        foreach (node_type_get_names() as $type => $name) {
+          $node_types[$type] = !variable_get('workbench_access_node_type_' . $type, 1);
+        }
+        $node_types = array_filter($node_types);
       }
-      if ($node_types == array_filter($node_types)) {
-        // If there were no node types that are not allowed, set the static
-        // variable to FALSE to indicate no restriction by node type.
-        $node_types = FALSE;
+      // If not all node types use Workbench Access, we must expressly add those
+      // node types back into the query as valid selections. However, we only
+      // show those nodes if no sections are selected.
+      if (!empty($node_types)) {
+        // Ensure that the node table is present.
+        $table = 'node';
+        $this->query->add_table($table);
+        // Set the group condition.
+        // To properly handle nodes by type, we must create our own query group.
+        $group = $this->query->set_where_group('OR', 'wa_group');
+        // Allow the unused node types through.
+        $this->query->add_where('wa_group', $table . '.type', array_keys($node_types), 'IN');
       }
     }
-    // If not all node types are allowed, filter out those not used.
-    // This has to go in the subquery, not the Views query.
-    if ($node_types !== FALSE) {
-      $alias = $subquery->join('node', 'n', "$table.nid = n.nid");
-      $subquery->condition("$alias.type", array_keys($node_types), 'IN');
-    }
-
     // Now alter the query, which must have an nid in the base table.
-    $this->query->add_where($this->options['group'], $this->query->base_table . '.nid', $subquery, 'IN');
-
+    $this->query->add_where($group, $this->query->base_table . '.nid', $subquery, 'IN');
   }
 }
