diff --git forum_access.module forum_access.module
index c5b5e46..83b8f67 100644
--- forum_access.module
+++ forum_access.module
@@ -207,12 +207,25 @@ function forum_access_db_rewrite_sql($query, $primary_table, $primary_field, $ar
         break;
       }
       $roles = _forum_access_get_roles($user);
-      $sql['join'] = "LEFT JOIN {forum_access} fa ON $primary_table.tid = fa.tid
-                      LEFT JOIN {acl} acl_fa ON acl_fa.name = ". ($GLOBALS['db_type'] == 'pgsql' ? 'CAST(' : '')
-                                                            ."$primary_table.tid". ($GLOBALS['db_type'] == 'pgsql' ? ' AS VARCHAR)' : '')
-                                                                              ." AND acl_fa.module = 'forum_access'
-                      LEFT JOIN {acl_user} aclu_fa ON aclu_fa.acl_id = acl_fa.acl_id AND aclu_fa.uid = $user->uid";
-      $sql['where'] = "(fa.grant_view >= 1 AND fa.rid IN ($roles)) OR fa.tid IS NULL OR aclu_fa.uid = $user->uid";
+
+      $sql['join'] = "LEFT JOIN {forum_access} fa ON $primary_table.tid = fa.tid ";
+      if ($GLOBALS['db_type'] == 'pgsql') {
+        $sql['join'] .= "LEFT JOIN {acl} acl ON acl.name = 'CAST($primary_table.tid AS VARCHAR) AND acl.module = 'forum_access' ";
+      }
+      else {
+        $sql['join'] .= "LEFT JOIN {acl} acl ON acl.name = $primary_table.tid AND acl.module = 'forum_access' ";
+      }
+      $sql['join'] .= "LEFT JOIN {acl_user} acl_user ON acl_user.acl_id = acl.acl_id AND acl_user.uid = $user->uid";
+
+      // Restrict to view access for user roles.
+      $sql['where'] = "(fa.grant_view >= 1 AND fa.rid IN ($roles)) ";
+      // Allow access for forum moderators.
+      $sql['where'] .= "OR acl_user.uid = $user->uid ";
+      // Allow access to unrelated/unconfigured terms.
+      // @todo fa.tid should be sufficient, but the module currently stores rows
+      //   for terms in *all* vocabularies.
+      $sql['where'] .= "OR fa.tid IS NULL OR acl.acl_id IS NULL ";
+
       $sql['distinct'] = 1;
       break;
 
